[CORD-1333] Removing ngXosLib

Change-Id: I5ff3cdd090c63472da6146649129b426d4b3608d
diff --git a/containers/xos/Dockerfile.base b/containers/xos/Dockerfile.base
index 4f92d63..4e12718 100644
--- a/containers/xos/Dockerfile.base
+++ b/containers/xos/Dockerfile.base
@@ -67,33 +67,6 @@
 # Copy over ansible hosts
 COPY ansible-hosts /etc/ansible/hosts
 
-# Install jQuery
-ENV JQUERY_DL_URL http://code.jquery.com/jquery-1.12.4.min.js
-ENV JQUERY_SHA256 668b046d12db350ccba6728890476b3efee53b2f42dbb84743e5e9f1ae0cc404
-
-RUN curl -fLsS $JQUERY_DL_URL -o jquery.min.js && \
-    echo "$JQUERY_SHA256  jquery.min.js" | sha256sum -c - && \
-    mv jquery.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/
-
-# Install jQueryUI
-ENV JQUERYUI_DL_URL https://jqueryui.com/resources/download/jquery-ui-1.11.4.zip
-ENV JQUERYUI_SHA256 503e4c0f109bf627aff87a424edc760608ec15e4a6e37f217a083ca682543e32
-
-RUN curl -fLsS $JQUERYUI_DL_URL -o jquery-ui.zip && \
-    echo "$JQUERYUI_SHA256  jquery-ui.zip" | sha256sum -c - && \
-    unzip jquery-ui.zip && \
-    mv jquery-ui-*/jquery-ui.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/ && \
-    rm -rf jquery-ui.zip jquery-ui-*
-
-ENV JQUERYUI_THEMES_DL_URL http://jqueryui.com/resources/download/jquery-ui-themes-1.11.4.zip
-ENV JQUERYUI_THEMES_SHA256 df2b9cb084095ea24129a6a54587a1d9d7ae4bcd68bf5ea2957eb3d4d18fe884
-
-RUN curl -fLsS $JQUERYUI_THEMES_DL_URL -o jquery-ui-themes.zip && \
-    echo "$JQUERYUI_THEMES_SHA256  jquery-ui-themes.zip" | sha256sum -c - && \
-    unzip jquery-ui-themes.zip && \
-    mv jquery-ui-themes-*/themes/smoothness/jquery-ui.min.css /usr/local/lib/python2.7/dist-packages/suit/static/suit/css/ && \
-    rm -rf jquery-ui-themes.zip jquery-ui-themes-*
-
 # Label image
 ARG org_label_schema_schema_version=1.0
 ARG org_label_schema_name=xos-base
diff --git a/containers/xos/pip_requirements.txt b/containers/xos/pip_requirements.txt
index 9a5956b..16c9fb7 100644
--- a/containers/xos/pip_requirements.txt
+++ b/containers/xos/pip_requirements.txt
@@ -31,14 +31,10 @@
 debtcollector==1.8.0
 decorator==4.1.2
 django-bitfield==1.8.0
-django-cors-headers==1.2.0
-django-crispy-forms==1.6.0
 django-encrypted-fields==1.1.2
 django-extensions==1.7.3
 django-filter==0.14.0
 django-ipware==1.1.5
-django-rest-swagger==2.0.5
-django-suit==0.3a3
 django-timezones==0.2
 djangorestframework==3.3.3
 dnslib==0.9.6
diff --git a/lib/xos-genx/xosgenx/targets/init.xtarget b/lib/xos-genx/xosgenx/targets/init.xtarget
index 235a657..960fa52 100644
--- a/lib/xos-genx/xosgenx/targets/init.xtarget
+++ b/lib/xos-genx/xosgenx/targets/init.xtarget
@@ -4,9 +4,7 @@
 from .xosbase import XOSBase,XOSBaseManager,XOSBaseDeletionManager,PlModelMixIn,ModelLink
 from .contenttype import ContentType
 from .site import Site
-from .dashboardview import DashboardView
 from .user import User
-from .user import UserDashboardView
 
 {% for m in proto.messages -%}
 {% if not m.options.skip_init -%}
diff --git a/views/.yo-rc.json b/views/.yo-rc.json
deleted file mode 100644
index 33606db..0000000
--- a/views/.yo-rc.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "generator-xos": {
-    "name": "sampleView",
-    "folder": "ngXosViews"
-  }
-}
\ No newline at end of file
diff --git a/views/README.md b/views/README.md
deleted file mode 100644
index 34915a3..0000000
--- a/views/README.md
+++ /dev/null
@@ -1,141 +0,0 @@
-# ngXosLib
-
-This is a collection of helpers to develop views as Angular SPA.
-
-## Tools
-
-These tools are designed to help develop a graphical view. They assume XOS is running on your system and responding at: `localhost:9999`. The `xos/configurations/frontend` is normally sufficient for GUI development.
-
-### Vendors
-
-XOS comes with a set of common libraries, as listed in `bower.json`:
-- angular
-- angular-route
-- angular-resource
-- angular-cookie
-- ng-lodash
-
-These libraries are served through Django, so they are not included in your minified vendor file. To add a library and generate a new file (that will override the old one):
-- enter `ngXosLib` folder
-- run `bower install [myPackage] --save`
-- rebuild the file with `gulp vendor`
-
->_NOTE before adding libraries please discuss it on the devel list to avoid this file becoming too big_
-
-### Helpers
-
-XOS comes with a helper library that is automatically loaded in the Django template.
-
-To use it, add `xos.helpers` to your required modules:
-
-```
-angular.module('xos.myView', [
-  'xos.helpers'
-])
-```
-
-It will automatically add a `token` to all your requests. Eventually you can take advantage of some other services:
-
-- **NoHyperlinks Interceptor**: will add a `?no_hyperlinks=1` to your request, to tell Django to return ids instead of links.
-- **XosApi** wrapper for `/xos` endpoints.
-- **XoslibApi** wrapper for `/xoslib` endpoints.
-- **HpcApi** wrapper for `/hpcapi` endpoints.
-
->_NOTE: for the API related service, check the documentation in Section [Apigen](#apigen)._
-
-# ngXosViews
-
-In addition to auto-generated Django Admin Views and developer-defined Service Views, a set of custom views can be generate in XOS.
-
-These views are based on AngularJs and they communicate with XOS through the REST APIs, providing a powerful and flexible way to present and manage data.
-
-## How to Create a View
-
-### Environment setup
-
-Before getting started with new views you should create a configuration file to define the backend environment to be used. This file have to be in `views/env/default.js` and it content have to be:
-
-```
-module.exports = {
-  host: 'XOS Url',
-  xoscsrftoken: 'CSRF Token',
-  xossessionid: 'Sessio ID'
-};
-```
-
-You can define multiple environment creating other configurations (eg: `views/env/production.js`) with the same structure.
-
-### Getting Started
-
-We have created a [yeoman](http://yeoman.io/) generator to help scaffold views.
-
->As it is in an early stage of development, you should manually link it to your system. To do this enter `/views/ngXosLib/generator-xos` and run `npm link`.
-
-#### To Generate a New View
-
-From `/views` run `yo xos`. This command will create a new folder with the provided name in `/views/ngXosViews` that contains your application.
-
->If you left View name empty it should be `/views/ngXosViews/sampleView`
-
-#### Run a Development Server
-
-In your `view` folder run `npm start`.
-
-This will install the required dependencies and start a local server with [BrowserSync](http://www.browsersync.io/).
-
->If you want to use a different backend environment you can call the command with an environment variable: `NODE_ENV=production.js npm start`
-
-#### Publish Your View
-
-Once your view is done, from your view root folder, run: `npm run build`.
-
-This will build your application and copy files in the appropriate directories for use by Django.
-
-At this point you can enter: `http://localhost:9999/admin/core/dashboardview/add/` and add your custom view.
-
->_NOTE: url field should be `template:xosSampleView`_
-
-##### Add This View to a Configuration Setup
-
-You can easily set this as a default view in a configuration by editing the `{config}.yml` file for that configuration. Add these lines:
-
-```
-{TabName}:                                    
-  type: tosca.nodes.DashboardView              
-  properties:                                  
-      url: template:{viewName}     
-```
-
-Then edit the _User_ section (normally it starts with `padmin@vicci.org`) as follows:
-
-```
-padmin@vicci.org:                                          
-  type: tosca.nodes.User                                   
-  properties:                                              
-      firstname: XOS                                       
-      lastname: admin                                      
-      is_admin: true                                       
-  requirements:                                            
-      - tenant_dashboard:                                  
-          node: Tenant                                     
-          relationship: tosca.relationships.UsesDashboard  
-      - {custom_dashboard}:                              
-          node: {TabName}                                 
-          relationship: tosca.relationships.UsesDashboard  
-```
-
-#### Install Dependencies in Your App
-
-To install a local dependency use bower with `--save`. Common modules are saved in `devDependencies` as they already loaded in the Django template.
-
-The `npm start` command watches your dependencies and will automatically inject it in your `index.html`.
-
-#### Linting
-
-A styleguide is enforced through [EsLint](http://eslint.org/) and is checked during the build process. We **highly** recommend installing the linter in your editor to have realtime hints.
-
-#### Test
-
-The generator sets up a test environment with a default test.
-To run it, execute: `npm test`
-
diff --git a/views/env/.gitignore b/views/env/.gitignore
deleted file mode 100644
index 5edb50a..0000000
--- a/views/env/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*
-!.gitignore
-!sample-config.js
\ No newline at end of file
diff --git a/views/env/sample-config.js b/views/env/sample-config.js
deleted file mode 100644
index 7eb6206..0000000
--- a/views/env/sample-config.js
+++ /dev/null
@@ -1,30 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// This is a default configuration for your development environment.
-// You can duplicate this configuration for any of your Backend Environments.
-// Different configurations are loaded setting a NODE_ENV variable that contain the config file name.
-// `NODE_ENV=local npm start`
-
-// You can retrieve token and sessionId from your browser cookies.
-
-module.exports = {
-  host: 'http://localhost:9999/', // XOS Url
-  xoscsrftoken: 'ogrMpnJgOGq43OxGd8jIKIx2aY1vl1Ci', // XOS token
-  xossessionid: 'l49h474keq0vsk6car6l1quz0oeyvohh' // XOS session id
-};
diff --git a/views/ngXosLib/.bowerrc b/views/ngXosLib/.bowerrc
deleted file mode 100644
index 637d54e..0000000
--- a/views/ngXosLib/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "./bower_components"
-}
\ No newline at end of file
diff --git a/views/ngXosLib/.eslintrc b/views/ngXosLib/.eslintrc
deleted file mode 100644
index 277255d..0000000
--- a/views/ngXosLib/.eslintrc
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [0, {"properties": "always"}],
-        "no-underscore-dangle": 0,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-        "no-multiple-empty-lines": 2,
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosLib/.gitignore b/views/ngXosLib/.gitignore
deleted file mode 100644
index 24b9855..0000000
--- a/views/ngXosLib/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-node_modules
-bower_components
-docs
-xosHelpers/.tmp
-xos
-coverage
-test-result
\ No newline at end of file
diff --git a/views/ngXosLib/README.md b/views/ngXosLib/README.md
deleted file mode 100644
index dcde9e6..0000000
--- a/views/ngXosLib/README.md
+++ /dev/null
@@ -1,96 +0,0 @@
-# ngXosLib
-
-This is a collection of helpers to develop views as Angular SPA.
-
-## Tools
-
-This tools are designed to help you developing UI for XOS. As they born for this purpose if often necessary that a XOS instance is running on your sistem and responding at: `localhost:9999`. The `xos/configurations/frontend` is normally enough.
-
-### Vendors
-
-Xos comes with a preset of common libraries, as listed in `bower.json`:
-- angular
-- angular-route
-- angular-resource
-- angular-cookie
-- angular-animate
-- ng-lodash
-
-This libraries are served through Django, so they will not be included in your minified vendor file. To add a library and generate a new file (that will override the old one), you should:
-- enter `ngXosLib` folder
-- run `bower install [myPackage] --save`
-- rebuild the file with `gulp vendor`
-
->_NOTE before adding libraries please discuss it to avoid this file to became huge_
-
-### Helpers
-
-XOS comes with an helper library that is automatically loaded in the Django template. It a set of Services and UI Components
-
-To use it, add `xos.helpers` to your required modules:
-
-```
-angular.module('xos.myView', [
-  'xos.helpers'
-])
-```
-
-It will automatically ad a `token` to all your request, eventually you can take advantage of some other services:
-
-To develop components inside this folder there is a particular command: `npm run dev`, this will watch the helpers file and rebuild them with sourcemaps. For this reason remember to build them when done developing.
-
->While developing components in this library you should execute the test. The `npm test` command will run Jasmine test for the whole complete library.
->If you want to specify a single test file to be execute, you can add it to the command like: `npm test smart-pie`, the tool will now read only the test specified in the `smart-pie.test.js` file.
-
-When some changes are applied to this common library it should be rebuilt with: `npm run build`
-
-To generate the relative documentation use: `npm run doc`
-
-### Yo Xos
-
-We have created a [yeoman](http://yeoman.io/) generator to help you scaffolding views.
-
->As it is in an early stage of development you should manually link it to your system, to do this enter `xos/views/ngXosLib/generator-xos` and run `npm install && npm link`.
-
-#### To generate a new view
-
-From `xos/views` run `yo xos`. This command will create a new folder with the provided name in: `xos/views/ngXosViews` that contain your application.
-
->If you left empty the view name it should be `xos/views/ngXosViews/sampleView`
-
-#### Run a development server
-
-In your `view` folder and run `npm start`.
-
-_This will install required dependencies and start a local server with [BrowserSync](http://www.browsersync.io/)_
-
-#### Publish your view
-
-Once your view is done, from your view root folder, run: `npm run build`.
-
-This will build your application and copy files in the appropriate locations to be used by django.
-
-At this point you can enter a running XOS instance, and trough the `customize` page is possible to add your custom view.
-
->_NOTE url field should be `template:xosSampleView`_
-
-A view can also be loaded via `TOSCA` and the related recipe is automatically printed at the end of the `npm run build` command or can be printed with `npm run tosca`.
-
-#### Install dependencies in your app
-
-To install a local dependency use bower with `--save`. Common modules are saved in `devDependencies` as they already loaded in the Django template.
-
-The `npm start` command is watching your dependencies and will automatically inject them in your `index.html`.
-
-#### Linting
-
-A styleguide is enforced trough [EsLint](http://eslint.org/) and is checked during the build process. We **highly** suggest to install the linter in your editor to have realtime hint.
-
-#### Test
-
-The generator set up a test environment with a default test.
-To run it execute: `npm test`
-
-## TODO
-
-- Define styleguide (both visual and js) and if needed define some UI components
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/app/index.js b/views/ngXosLib/generator-xos/app/index.js
deleted file mode 100755
index f17ad3c..0000000
--- a/views/ngXosLib/generator-xos/app/index.js
+++ /dev/null
@@ -1,150 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 generators = require('yeoman-generator');
-var user = require('../node_modules/yeoman-generator/lib/actions/user');
-
-var config = {};
-var userName;
-
-module.exports = generators.Base.extend({
-  _fistCharToUpper: function(string){
-    return string.replace(/^./, string[0].toUpperCase());
-  },
-  prompting: {
-    name: function(){
-      var done = this.async();
-      this.prompt({
-        type: 'input',
-        name: 'name',
-        message: 'Your project name',
-        default: this.config.get('name') // value set in .yo-rc.json
-      }, function (answers) {
-        // TODO check if this view already exist
-        config.name = answers.name;
-        done();
-      }.bind(this));
-    }
-  },
-  writing: {
-    rcFiles: function(){
-      if (!user.git.name()){
-        userName = ['', '']
-      }
-      else {
-        userName = user.git.name().split(' ');
-      }
-      this.fs.copy(this.templatePath('.bowerrc'), this.destinationPath(`${this.config.get('folder')}/${config.name}/.bowerrc`));
-      this.fs.copy(this.templatePath('.gitignore'), this.destinationPath(`${this.config.get('folder')}/${config.name}/.gitignore`));
-    },
-    packageJson: function(){
-      this.fs.copyTpl(
-        this.templatePath('package.json'),
-        this.destinationPath(`${this.config.get('folder')}/${config.name}/package.json`),
-        { name: config.name, author: {name: user.git.name()} }
-      );
-    },
-    bowerJson: function(){
-      this.fs.copyTpl(
-        this.templatePath('bower.json'),
-        this.destinationPath(`${this.config.get('folder')}/${config.name}/bower.json`),
-        { name: config.name, author: {name: user.git.name(), email: user.git.email()} }
-      );
-    },
-    index: function(){
-      this.fs.copyTpl(
-        this.templatePath('src/index.html'),
-        this.destinationPath(`${this.config.get('folder')}/${config.name}/src/index.html`),
-        { name: config.name, fileName: this._fistCharToUpper(config.name), user: {firstname: userName[0]}}
-      );
-    },
-    css: function(){
-      this.fs.copyTpl(
-        this.templatePath('src/css/dev.css'),
-        this.destinationPath(`${this.config.get('folder')}/${config.name}/src/css/dev.css`),
-        {fileName: this._fistCharToUpper(config.name)}
-      );
-    },
-    scss: function(){
-      this.fs.copyTpl(
-        this.templatePath('src/sass/main.scss'),
-        this.destinationPath(`${this.config.get('folder')}/${config.name}/src/sass/main.scss`),
-        {fileName: this._fistCharToUpper(config.name)}
-      );
-    },
-    mainJs: function(){
-      this.fs.copyTpl(
-        this.templatePath('src/js/main.js'),
-        this.destinationPath(`${this.config.get('folder')}/${config.name}/src/js/main.js`),
-        { name: config.name, fileName: this._fistCharToUpper(config.name) }
-      );
-    },
-    image: function(){
-      this.fs.copyTpl(
-        this.templatePath('src/icons/README.md'),
-        this.destinationPath(`${this.config.get('folder')}/${config.name}/src/icons/README.md`));
-    },
-    template: function(){
-      this.fs.copy(this.templatePath('src/templates/users-list.tpl.html'), this.destinationPath(`${this.config.get('folder')}/${config.name}/src/templates/users-list.tpl.html`));
-    },
-    gulp: function(){
-      this.fs.copyTpl(
-        this.templatePath('gulp/*.js'),
-        this.destinationPath(`${this.config.get('folder')}/${config.name}/gulp`),
-        {name: config.name, fileName: this._fistCharToUpper(config.name)}
-      );
-      this.fs.copy(this.templatePath('gulpfile.js'), this.destinationPath(`${this.config.get('folder')}/${config.name}/gulpfile.js`));
-    },
-    karma: function(){
-      this.fs.copy(
-        this.templatePath('karma.conf.js'),
-        this.destinationPath(`${this.config.get('folder')}/${config.name}/karma.conf.js`)
-      );
-    },
-    spec: function(){
-      this.fs.copyTpl(
-        this.templatePath('spec/sample.test.js'),
-        this.destinationPath(`${this.config.get('folder')}/${config.name}/spec/sample.test.js`),
-        { name: config.name, user: {email: user.git.email(), firstname: userName[0], lastname: userName[1] } }
-      );
-    },
-    lint: function(){
-      this.fs.copy(
-        this.templatePath('.eslintrc'),
-        this.destinationPath(`${this.config.get('folder')}/${config.name}/.eslintrc`)
-      );
-    }
-  },
-  install: function(){
-    var done = this.async();
-    this.prompt({
-      type: 'confirm',
-      name: 'deps',
-      message: 'Install dependecies?',
-      default: false // value set in .yo-rc.json
-    }, function (answers) {
-      if(answers.deps){
-        process.chdir(`${this.config.get('folder')}/${config.name}`);
-        this.installDependencies();
-      }
-      done();
-    }.bind(this));
-  }
-});
diff --git a/views/ngXosLib/generator-xos/app/templates/.bowerrc b/views/ngXosLib/generator-xos/app/templates/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosLib/generator-xos/app/templates/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/app/templates/.eslintrc b/views/ngXosLib/generator-xos/app/templates/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosLib/generator-xos/app/templates/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/app/templates/.gitignore b/views/ngXosLib/generator-xos/app/templates/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosLib/generator-xos/app/templates/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/app/templates/bower.json b/views/ngXosLib/generator-xos/app/templates/bower.json
deleted file mode 100644
index 068c224..0000000
--- a/views/ngXosLib/generator-xos/app/templates/bower.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "name": "xos-<%= name %>",
-  "version": "0.0.0",
-  "authors": [
-    "<%= author.name %> <<%= author.email %>>"
-  ],
-  "description": "The <%= name %> view",
-  "license": "Apache-2.0",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.5.8",
-    "angular": "1.5.8",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.5.8",
-    "angular-animate": "1.5.8",
-    "angular-resource": "1.5.8",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#1.1.0"
-  },
-  "resolutions": {
-    "angular": "1.5.8",
-    "angular-cookies": "1.5.8",
-    "angular-animate": "1.5.8",
-    "angular-resource": "1.5.8"
-  }
-}
diff --git a/views/ngXosLib/generator-xos/app/templates/gulp/build.js b/views/ngXosLib/generator-xos/app/templates/gulp/build.js
deleted file mode 100644
index 8560e7c..0000000
--- a/views/ngXosLib/generator-xos/app/templates/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.<%= name %>')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xos<%= fileName %>.html',
-        options.static + 'css/xos<%= fileName %>.css',
-        options.static + 'images/<%= name %>-icon.png',
-        options.static + 'images/<%= name %>-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xos<%= fileName %>.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/<%= name %>-icon.png`, `${options.icon}/<%= name %>-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xos<%= fileName %>.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.<%= name %>',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xos<%= fileName %>Vendor.js',
-            options.static + 'js/xos<%= fileName %>.js',
-            options.static + 'css/xos<%= fileName %>.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xos<%= fileName %>.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xos<%= fileName %>Vendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['<%= fileName %>'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xos<%= fileName %>'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/<%= name %>-icon.png`) &&
-      fs.existsSync(`${options.icon}/<%= name %>-icon-active.png`)
-    ){
-      dashboardJson['<%= fileName %>'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['<%= name %>_dashboard'] = {
-      node: '<%= fileName %>',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/app/templates/gulp/server.js b/views/ngXosLib/generator-xos/app/templates/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosLib/generator-xos/app/templates/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosLib/generator-xos/app/templates/gulpfile.js b/views/ngXosLib/generator-xos/app/templates/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosLib/generator-xos/app/templates/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosLib/generator-xos/app/templates/karma.conf.js b/views/ngXosLib/generator-xos/app/templates/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosLib/generator-xos/app/templates/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosLib/generator-xos/app/templates/package.json b/views/ngXosLib/generator-xos/app/templates/package.json
deleted file mode 100644
index 4ef6a73..0000000
--- a/views/ngXosLib/generator-xos/app/templates/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-<%= name %>",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "<%= author.name %>",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosLib/generator-xos/app/templates/spec/sample.test.js b/views/ngXosLib/generator-xos/app/templates/spec/sample.test.js
deleted file mode 100644
index ee1f55d..0000000
--- a/views/ngXosLib/generator-xos/app/templates/spec/sample.test.js
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The User List', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.<%= name %>'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('/api/core/users/?no_hyperlinks=1').respond([
-      {
-        email: '<%= user.email %>',
-        firstname: '<%= user.firstname %>',
-        lastname: '<%= user.lastname %>' 
-      }
-    ]);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<users-list></users-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  it('should load 1 users', () => {
-    httpBackend.flush();
-    expect(isolatedScope.users.length).toBe(1);
-    expect(isolatedScope.users[0].email).toEqual('<%= user.email %>');
-    expect(isolatedScope.users[0].firstname).toEqual('<%= user.firstname %>');
-    expect(isolatedScope.users[0].lastname).toEqual('<%= user.lastname %>');
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/app/templates/src/css/dev.css b/views/ngXosLib/generator-xos/app/templates/src/css/dev.css
deleted file mode 100644
index 87e0d9f..0000000
--- a/views/ngXosLib/generator-xos/app/templates/src/css/dev.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xos<%=fileName%>{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-}
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/app/templates/src/icons/README.md b/views/ngXosLib/generator-xos/app/templates/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosLib/generator-xos/app/templates/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/app/templates/src/index.html b/views/ngXosLib/generator-xos/app/templates/src/index.html
deleted file mode 100644
index b45e4c4..0000000
--- a/views/ngXosLib/generator-xos/app/templates/src/index.html
+++ /dev/null
@@ -1,109 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<!-- endinject -->
-
-<div ng-app="xos.<%= name %>" id="xos<%= fileName %>" class="container-fluid">
-  <div class="row">
-    <div class="col-xs-12">
-      <h1>Hi <%= user.firstname %>!</h1>
-      <h3>Welcome to you development environment.</h3>
-      <p>
-        We provided this environment to help you creating a custom view.
-      </p>
-      <p>
-        When the environment is running you will have an
-        <code>auto-reload</code>
-        feature enabled, so any time you update one of your files, the browser will be reloaded.
-      </p>
-      <p> <i>Note that is environment is already functional and that it is loading information from the XOS APIs and presenting them using the
-          <code>xos-table</code>
-          component.</i> 
-      </p>
-      <h3>Development notes:</h3>
-      <p>
-        This views are designed using
-        <a href="https://angularjs.org/" target="_blank">Angular Js</a>
-        version 1.4.7 and
-        <a href="http://getbootstrap.com/" target="_blank">Bootstrap</a>
-        3.3.6 is included.
-      </p>
-      <p>
-        We just want to remind you that this development environment provide you three helper command:
-        <ul>
-          <li>
-            <code>npm start</code>
-            - will start your setup (you should already be familiar with it)
-          </li>
-          <li>
-            <code>npm test</code>
-            - will execute your unit tests defined with
-            <a href="https://karma-runner.github.io/0.13/index.html" target="_blank">Karma</a>
-            and
-            <a href="jasmine.github.io" target="_blank">Jasmine</a>
-            . You can check the
-            <code>spec/</code>
-            folder to see an example of your first test.
-          </li>
-          <li>
-            <code>npm run build</code>
-            - will build your dashboard and make it available to XOS
-          </li>
-        </ul>
-      </p>
-      <h3>Helpers:</h3>
-      <p>
-        We provide a set of helpers that you can leverage in your dashboard:
-        <ul>
-          <li>
-            <code>xos.helpers</code>
-            - A set of
-            <a href="https://docs.angularjs.org/guide/services" target="_blank">Angular Services</a>
-          </li>
-          <li>
-            <code>xos.uiComponents</code>
-            - A set of
-            <a href="https://docs.angularjs.org/guide/directive" target="_blank">Angular Directives</a>
-          </li>
-          <li>
-            <code>xos.rest</code>
-            - A set of
-            <a href="https://docs.angularjs.org/api/ngResource/service/$resource" target="_blank">Angular $resources</a>
-          </li>
-        </ul>
-        To know more about this helpers you can naviate to
-        <code>/views/ngXosLib/</code>
-        and generate the documentation with
-        <code>npm run doc</code>
-      </p>
-      <h3>Example:</h3>
-    </div>
-  </div>
-  <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/app/templates/src/js/main.js b/views/ngXosLib/generator-xos/app/templates/src/js/main.js
deleted file mode 100644
index 1909cce..0000000
--- a/views/ngXosLib/generator-xos/app/templates/src/js/main.js
+++ /dev/null
@@ -1,81 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.<%= name %>', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('user-list', {
-    url: '/',
-    template: '<users-list></users-list>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.directive('usersList', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/users-list.tpl.html',
-    controller: function(Users){
-
-      this.tableConfig = {
-        columns: [
-          {
-            label: 'E-Mail',
-            prop: 'email'
-          },
-          {
-            label: 'First Name',
-            prop: 'firstname'
-          },
-          {
-            label: 'Last Name',
-            prop: 'lastname'
-          },
-          {
-            label: 'Created',
-            prop: 'created'
-          },
-          {
-            label: 'Is Admin',
-            prop: 'is_admin'
-          }
-        ]
-      };
-      
-      // retrieving user list
-      Users.query().$promise
-      .then((users) => {
-        this.users = users;
-      })
-      .catch((e) => {
-        throw new Error(e);
-      });
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/app/templates/src/sass/main.scss b/views/ngXosLib/generator-xos/app/templates/src/sass/main.scss
deleted file mode 100644
index 0f77e0a..0000000
--- a/views/ngXosLib/generator-xos/app/templates/src/sass/main.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xos<%=fileName%> {
-  
-}
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/app/templates/src/templates/users-list.tpl.html b/views/ngXosLib/generator-xos/app/templates/src/templates/users-list.tpl.html
deleted file mode 100644
index 6d26747..0000000
--- a/views/ngXosLib/generator-xos/app/templates/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.users"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/package.json b/views/ngXosLib/generator-xos/package.json
deleted file mode 100644
index b86287a..0000000
--- a/views/ngXosLib/generator-xos/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "name": "generator-xos",
-  "version": "1.0.0",
-  "description": "View generator for XOS",
-  "main": "index.js",
-  "scripts": {
-    "test": "mocha test"
-  },
-  "author": "Matteo Scandolo",
-  "license": "ISC",
-  "dependencies": {
-    "bluebird": "^3.4.1",
-    "yeoman-generator": "^0.21.1"
-  },
-  "files": [
-    "app"
-  ],
-  "devDependencies": {
-    "mocha": "^2.4.5",
-    "mockery": "^1.7.0",
-    "rimraf": "^2.5.2",
-    "wiredep": "^4.0.0",
-    "yeoman-assert": "^2.2.1",
-    "yeoman-test": "^1.4.0"
-  }
-}
diff --git a/views/ngXosLib/generator-xos/test/build.spec.js b/views/ngXosLib/generator-xos/test/build.spec.js
deleted file mode 100644
index dd9dc93..0000000
--- a/views/ngXosLib/generator-xos/test/build.spec.js
+++ /dev/null
@@ -1,220 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 path = require('path');
-var helpers = require('yeoman-test');
-var assert = require('yeoman-assert');
-var P = require('bluebird');
-var execAsync = P.promisify(require('child_process').exec);
-var fs = require('fs');
-var writeFileAsync = P.promisify(fs.writeFile);
-const rimraf = require('rimraf');
-
-const getMillisec = min => min * 60 * 1000;
-const deleteFile = file => {
-  if(fs.existsSync(file)){
-    // console.log(`deleting: ${file}`);
-    fs.unlinkSync(file);
-  }
-};
-
-// config files
-const cfg = path.join(__dirname, `../../../env/default.js`);
-
-// source files
-const viewName = 'testDashboard';
-const fileName = viewName.replace(/^./, viewName[0].toUpperCase());
-const sourcePath = path.join(__dirname, `../../../ngXosViews/${viewName}/`);
-
-// dest files
-const basePath = '../../../../xos/core/xoslib';
-const destHtml = path.join(__dirname, basePath + '/dashboards/xosTestDashboard.html');
-const destJs = path.join(__dirname, basePath + '/static/js/xosTestDashboard.js');
-const destVendor = path.join(__dirname, basePath + '/static/vendor/xosTestDashboardVendor.js');
-const destCss = path.join(__dirname, basePath + '/static/css/xosTestDashboard.css');
-
-describe('The XOS Build script', function(){
-  const buildCmd = 'gulp build';
-  
-  this.timeout(getMillisec(5));
-
-  // define timers (give a feedback while commands are running
-  let npmInstall, bowerInstall, appBuild;
-
-  before(done => {
-    // if `default.js` config is not present
-    // create one (we check to avoid screwing up local envs)
-    if(!fs.existsSync(cfg)){
-      fs.writeFileSync(cfg, 'module.exports = {}');
-    }
-    
-    console.log('Running generator');
-    this.generator = helpers
-      .run(require.resolve('../app'))
-      .inDir(sourcePath)
-      .withOptions({ 'skip-install': false })
-      .withPrompts({
-        name: viewName,
-        host: 'test-host',
-        token: 'test-token',
-        session: 'test-session'
-      })
-      .toPromise()
-      .then(() => {
-      //.on('end', () => {
-        process.stdout.write('Installing Node Modules');
-        npmInstall = setInterval(() => {
-          process.stdout.write('.');
-        }, 1000);
-        return execAsync('npm install', {cwd: sourcePath});
-      })
-      .then(() => {
-        clearInterval(npmInstall);
-        process.stdout.write('\nInstalling Bower Components');
-
-        bowerInstall = setInterval(() => {
-          process.stdout.write('.');
-        }, 1000);
-
-        return execAsync('bower install', {cwd: sourcePath});
-      })
-      .then(() => {
-        clearInterval(bowerInstall);
-        done();
-      })
-      .catch(done);
-  });
-
-  describe('when no styles or vendors are added', () => {
-    
-    before((done) => {
-      process.stdout.write('\nBuilding App');
-      appBuild = setInterval(() => {
-        process.stdout.write('.');
-      }, 1000);
-      execAsync(buildCmd, {cwd: sourcePath})
-      .then(() => {
-        clearInterval(appBuild);
-        done();
-      })
-      .catch(done);
-    });
-
-    it('should have build the app', () => {
-      assert.file([destHtml, destJs]);
-    });
-
-    it('should include only minified files in the index', () => {
-      assert.fileContent(destHtml, `<script src="/static/js/xos${fileName}.js"></script>`);
-      assert.noFileContent(destHtml, `<!-- bower:css -->`);
-      assert.noFileContent(destHtml, `<!-- bower:js -->`);
-    });
-  });
-
-  describe('when a third party library is added', () => {
-
-    before((done) => {
-      process.stdout.write('\nInstalling 3rd party library');
-      let bowerInstall = setInterval(() => {
-        process.stdout.write('.');
-      }, 1000);
-
-      execAsync('bower install moment --save', {cwd: sourcePath})
-      .then(() => {
-        clearInterval(bowerInstall);
-        process.stdout.write('\nBuilding App');
-        appBuild = setInterval(() => {
-          process.stdout.write('.');
-        }, 1000);
-
-        return execAsync(buildCmd, {cwd: sourcePath})
-      })
-      .then(() => {
-        clearInterval(appBuild);
-        done();
-      })
-      .catch(done);
-    });
-
-    it('should have build the app with a vendor file', () => {
-      assert.file([destHtml, destJs, destVendor]);
-    });
-
-    it('should include only minified files and minified deps in the index', () => {
-      assert.fileContent(destHtml, `<script src="/static/js/xos${fileName}.js"></script>`);
-      assert.fileContent(destHtml, `<script src="/static/vendor/xos${fileName}Vendor.js"></script>`);
-      assert.noFileContent(destHtml, `<!-- bower:css -->`);
-      assert.noFileContent(destHtml, `<!-- bower:js -->`);
-    });
-  });
-
-  describe('when some styles are added', () => {
-    before((done) => {
-      let styleContent = `
-        @import '../../../../style/sass/lib/_variables.scss';
-
-        #xosTestDashboard {
-          background: $brand-primary;
-        }
-      `;
-      
-      writeFileAsync(`${sourcePath}src/sass/main.scss`, styleContent)
-      .then(() => {
-        process.stdout.write('\nBuilding the Application');
-        appBuild = setInterval(() => {
-          process.stdout.write('.');
-        }, 1000);
-
-        return execAsync('bower uninstall moment --save', {cwd: sourcePath});
-      })
-      .then(() => {
-        return execAsync(buildCmd, {
-          cwd: sourcePath
-        });
-      })
-      .then(() => {
-        clearInterval(appBuild);
-        done();
-      })
-      .catch(done);
-    });
-
-    it('should have build the app with a css file', () => {
-      assert.file([destHtml, destJs, destCss]);
-    });
-
-    it('should include only minified files and minified deps in the index', () => {
-      assert.fileContent(destHtml, `<script src="/static/js/xos${fileName}.js"></script>`);
-      assert.fileContent(destHtml, `<link rel="stylesheet" href="/static/css/xos${fileName}.css">`);
-      assert.noFileContent(destHtml, `<!-- bower:css -->`);
-      assert.noFileContent(destHtml, `<!-- bower:js -->`);
-
-      assert.fileContent(destCss, `background:#337ab7`);
-    });
-  });
-
-  after(done => {
-    // deleting the folder used for test
-    deleteFile(destHtml);
-    deleteFile(destJs);
-    deleteFile(destVendor);
-    deleteFile(destCss);
-    rimraf(sourcePath, {}, done);
-  });
-});
\ No newline at end of file
diff --git a/views/ngXosLib/generator-xos/test/generator.spec.js b/views/ngXosLib/generator-xos/test/generator.spec.js
deleted file mode 100644
index 54c28b5..0000000
--- a/views/ngXosLib/generator-xos/test/generator.spec.js
+++ /dev/null
@@ -1,134 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-const path = require('path');
-const helpers = require('yeoman-test');
-const assert = require('yeoman-assert');
-const rimraf = require('rimraf');
-const mockery = require('mockery');
-
-const firstCharTouppercase = string => string.replace(/^./, string[0].toUpperCase())
-
-const ngVersion = '1.5.8';
-const ngXosLibVersion = `1.1.0`;
-
-const bowerDeps = [
-  `"angular": "${ngVersion}"`,
-  'angular-ui-router',
-  `"angular-resource": "${ngVersion}"`,
-  `"angular-cookies": "${ngVersion}"`,
-  `"angular-animate": "${ngVersion}"`,
-  'lodash',
-  'angular-chart.js',
-  'd3',
-  'angular-recursion', // NOTE check if it is still needed
-  `"ng-xos-lib": "opencord/ng-xos-lib#${ngXosLibVersion}"`
-];
-
-// test values
-const viewName = 'testDashboard';
-const fileName = firstCharTouppercase(viewName);
-const testPath = path.join(__dirname, `../../../ngXosViews/${viewName}/`);
-
-const getDefaultFiles = () => {
-  return [
-    '.bowerrc',
-    '.eslintrc',
-    '.gitignore',
-    'bower.json',
-    'gulpfile.js',
-    'karma.conf.js',
-    'package.json',
-    'src/index.html',
-  ].map(i => `${testPath}${i}`);
-};
-
-const yeomanUserMock = {
-  git: {
-    name: () => 'Test User',
-    email: () => 'test@mail.org'
-  }
-};
-
-mockery.enable({
-  warnOnReplace: false,
-  warnOnUnregistered: false,
-  useCleanCache: true,
-});
-mockery.resetCache();
-mockery.registerMock('../node_modules/yeoman-generator/lib/actions/user', yeomanUserMock);
-
-describe('Yeoman XOS generator', function () {
-
-  beforeEach(() => {
-  });
-
-  before(done => {
-    this.generator = helpers
-      .run(require.resolve('../app'))
-      .inDir(testPath)
-      .withOptions({ 'skip-install': true })
-      .withPrompts({
-        name: viewName
-      })
-      .on('end', done);
-  });
-
-
-  it('should generate base files in the correct directory', () => {
-    assert.file(getDefaultFiles());
-  });
-
-  it('should write username in package & bower json', () => {
-    assert.fileContent(`${testPath}package.json`, '"author": "Test User"');
-    assert.fileContent(`${testPath}bower.json`, '"Test User <test@mail.org>"')
-  });
-
-  it('should add all xosLib dependencies in the dev section of bower.json', () => {
-    bowerDeps.forEach(d => {
-      assert.fileContent(`${testPath}bower.json`, d);
-    });
-  });
-
-  it('should set the right module name in all the files', () => {
-    assert.fileContent(`${testPath}src/index.html`, `ng-app="xos.${viewName}"`)
-    assert.fileContent(`${testPath}src/index.html`, `id="xos${fileName}"`)
-    assert.fileContent(`${testPath}src/js/main.js`, `angular.module('xos.${viewName}', [`)
-    assert.fileContent(`${testPath}src/sass/main.scss`, `#xos${fileName}`)
-  });
-
-  it('should set correct paths in build file', () => {
-    assert.fileContent(`${testPath}gulp/build.js`, `angular.module('xos.${viewName}')`)
-    assert.fileContent(`${testPath}gulp/build.js`, `options.dashboards + 'xos${fileName}.html'`)
-    assert.fileContent(`${testPath}gulp/build.js`, `options.static + 'css/xos${fileName}.css'`)
-    assert.fileContent(`${testPath}gulp/build.js`, `.pipe(concat('xos${fileName}.css'))`)
-    assert.fileContent(`${testPath}gulp/build.js`, `.pipe(concat('xos${fileName}.js'))`)
-    assert.fileContent(`${testPath}gulp/build.js`, `module: 'xos.${viewName}'`)
-    assert.fileContent(`${testPath}gulp/build.js`, `options.static + 'vendor/xos${fileName}Vendor.js'`)
-    assert.fileContent(`${testPath}gulp/build.js`, `options.static + 'js/xos${fileName}.js'`)
-    assert.fileContent(`${testPath}gulp/build.js`, `options.static + 'css/xos${fileName}.css'`)
-    assert.fileContent(`${testPath}gulp/build.js`, `.pipe(concat('xos${fileName}Vendor.js'))`)
-  });
-
-  after(done => {
-    // deleting the folder used for test
-    rimraf(testPath, {}, done)
-  });
-});
\ No newline at end of file
diff --git a/views/ngXosLib/gulp/ngXosHelpers.js b/views/ngXosLib/gulp/ngXosHelpers.js
deleted file mode 100644
index 03c2e40..0000000
--- a/views/ngXosLib/gulp/ngXosHelpers.js
+++ /dev/null
@@ -1,154 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var uglify = require('gulp-uglify');
-var concat = require('gulp-concat');
-var ngAnnotate = require('gulp-ng-annotate');
-var angularFilesort = require('gulp-angular-filesort');
-var gulpDocs = require('gulp-ngdocs');
-var del = require('del');
-var babel = require('gulp-babel');
-const sourcemaps = require('gulp-sourcemaps');
-var browserSync = require('browser-sync').create();
-var rename = require('gulp-rename');
-var sass = require('gulp-sass');
-
-module.exports = function(options){
-
-  gulp.task('style', function(){
-    return gulp.src(`${options.xosHelperSource}styles/main.scss`)
-      .pipe(sourcemaps.init())
-      .pipe(sass().on('error', sass.logError))
-      .pipe(rename('xosNgLib.css'))
-      .pipe(sourcemaps.write())
-      .pipe(gulp.dest(options.ngXosStyles));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.xosHelperSource + '**/*.js')
-      .pipe(babel({
-        presets: ['es2015']
-      }))
-      .pipe(gulp.dest(options.xosHelperTmp));
-  });
-
-  gulp.task('babelDev', function(){
-    return gulp.src(options.xosHelperSource + '**/*.js')
-      .pipe(sourcemaps.init())
-      .pipe(babel({
-        presets: ['es2015']
-      }))
-      .pipe(sourcemaps.write('./maps'))
-      .pipe(gulp.dest(options.xosHelperTmp));
-  });
-
-  // build
-  gulp.task('helpers', ['babel', 'style'], function(){
-    return gulp.src([options.xosHelperTmp + '**/*.js'])
-      .pipe(angularFilesort())
-      .pipe(concat('ngXosHelpers.js'))
-      .pipe(ngAnnotate())
-      .pipe(uglify())
-      .pipe(gulp.dest(options.ngXosVendor));
-  });
-
-  // build Dev (no minify, sourcemaps)
-  gulp.task('helpersDev', ['babelDev'], function(){
-    return gulp.src([options.xosHelperTmp + '**/*.js'])
-      .pipe(angularFilesort())
-      .pipe(concat('ngXosHelpers.js'))
-      .pipe(ngAnnotate())
-      .pipe(gulp.dest(options.ngXosVendor));
-  });
-
-  gulp.task('cleanDocs', function(){
-    return del([options.docs + '**/*']);
-  });
-
-  gulp.task('makeDocs', ['cleanDocs'], function(){
-
-    var ngOptions = {
-      scripts: [].concat([
-        `./${options.ngXosVendor}ngXosVendor.js`,
-        `./${options.ngXosVendor}ngXosHelpers.js`,
-          'https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular-mocks.js',
-      ]),
-      styles: [
-        `./${options.ngXosStyles}xosNgLib.css`,
-        'https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.css',
-      ],
-      html5Mode: false,
-      title: 'XOS Helpers documentation',
-      startPage: '/ngXosLib',
-    }
-
-    return gulpDocs.sections({
-      ngXosLib: {
-        glob: [
-          options.xosHelperSource + '*.js',
-          options.xosHelperSource + 'services/helpers/**/*.js',
-          options.xosHelperSource + 'services/*.js',
-          options.xosHelperSource + 'ui_components/**/*.js'
-        ],
-        title: 'Module Documentation',
-      },
-      'rest-api': {
-        glob: [
-          options.xosHelperSource + 'services/rest/*.js'
-        ],
-        api: true,
-        title: 'API Documentation',
-      }
-    }).pipe(gulpDocs.process(ngOptions)).pipe(gulp.dest('./docs'));
-  });
-
-  gulp.task('serveDocs', function(){
-    browserSync.init({
-      server: {
-        baseDir: './docs',
-        routes: {
-          '/xos/core/xoslib/static/js/vendor': options.ngXosVendor,
-          '/xos/core/static': options.ngXosStyles,
-        }
-      }
-    });
-  });
-
-  gulp.task('docs', ['makeDocs', 'serveDocs'], function(){
-    
-    var files = [
-      options.xosHelperSource + '**/*.js',
-    ];
-
-    gulp.watch(files, ['makeDocs']);
-
-    // uncomment to enable autoreload, now it is broken (reload a wrong page)
-    // https://github.com/nikhilmodak/gulp-ngdocs/issues/81
-
-    // gulp.watch(files, function(){
-    //   browserSync.reload();
-    // });
-  })
-
-  gulp.task('dev', function(){
-    gulp.watch(`${options.xosHelperSource}**/*.scss`, ['style']);
-    gulp.watch(options.xosHelperSource + '**/*.js', ['helpersDev']);
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosLib/package.json b/views/ngXosLib/package.json
deleted file mode 100644
index ba25551..0000000
--- a/views/ngXosLib/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "name": "ng-xos-lib",
-  "version": "1.0.0",
-  "description": "Angular Version of XosLib, containing Helpers and ngResources",
-  "main": "index.js",
-  "scripts": {
-    "test": "karma start karma.conf.js",
-    "test:ci": "karma start karma.conf.ci.js",
-    "test:views": "karma start karma.conf.views.js",
-    "apigen": "node apigen/blueprintToNgResource.js",
-    "swagger": "node xos-swagger-def.js",
-    "doc": "gulp docs; cd ./docs",
-    "doc:ci": "gulp makeDocs;",
-    "build": "gulp vendor && gulp helpers",
-    "dev": "gulp dev",
-    "lint": "eslint xosHelpers/"
-  },
-  "author": "Matteo Scandolo",
-  "license": "ISC",
-  "dependencies": {
-    "bluebird": "^3.0.5",
-    "chalk": "^1.1.1",
-    "concat": "^2.0.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "fetch-swagger-schema": "^0.1.2",
-    "jsdoc": "^3.3.3",
-    "swagger-js-codegen": "^1.1.5"
-  },
-  "devDependencies": {
-    "babel-polyfill": "^6.7.4",
-    "babel-preset-es2015": "^6.6.0",
-    "browser-sync": "^2.12.3",
-    "concat": "^2.0.0",
-    "del": "^2.2.0",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-babel": "^6.1.2",
-    "gulp-concat": "^2.6.0",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-ngdocs": "^0.2.13",
-    "gulp-rename": "^1.2.2",
-    "gulp-sass": "^2.3.1",
-    "gulp-sourcemaps": "^1.6.0",
-    "gulp-uglify": "^1.4.2",
-    "jasmine-core": "^2.4.1",
-    "karma": "^0.13.22",
-    "karma-babel-preprocessor": "^6.0.1",
-    "karma-chrome-launcher": "^0.2.3",
-    "karma-coverage": "^0.5.5",
-    "karma-jasmine": "^0.3.6",
-    "karma-junit-reporter": "^0.4.2",
-    "karma-mocha-reporter": "^1.1.3",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "^0.2.1",
-    "phantomjs": "^2.1.3",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/.gitignore b/views/ngXosViews/.gitignore
deleted file mode 100644
index e69de29..0000000
--- a/views/ngXosViews/.gitignore
+++ /dev/null
diff --git a/views/ngXosViews/UITutorial/.bowerrc b/views/ngXosViews/UITutorial/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/UITutorial/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/.eslintrc b/views/ngXosViews/UITutorial/.eslintrc
deleted file mode 100644
index a5bbd02..0000000
--- a/views/ngXosViews/UITutorial/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2, { "SwitchCase": 1 }],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [1, 5],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/.gitignore b/views/ngXosViews/UITutorial/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/UITutorial/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/bower.json b/views/ngXosViews/UITutorial/bower.json
deleted file mode 100644
index 0778e98..0000000
--- a/views/ngXosViews/UITutorial/bower.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "name": "xos-UITutorial",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The UITutorial view",
-  "license": "Apache-2.0",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "josh.js": "teone/josh.js#~0.2.10",
-    "angular-ui-ace": "bower"
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/UITutorial/gulp/build.js b/views/ngXosViews/UITutorial/gulp/build.js
deleted file mode 100644
index a708d97..0000000
--- a/views/ngXosViews/UITutorial/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.UITutorial')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosUITutorial.html',
-        options.static + 'css/xosUITutorial.css',
-        options.static + 'images/UITutorial-icon.png',
-        options.static + 'images/UITutorial-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosUITutorial.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/UITutorial-icon.png`, `${options.icon}/UITutorial-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosUITutorial.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.UITutorial',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosUITutorialVendor.js',
-            options.static + 'js/xosUITutorial.js',
-            options.static + 'css/xosUITutorial.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosUITutorial.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosUITutorialVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['UITutorial'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosUITutorial'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/UITutorial-icon.png`) &&
-      fs.existsSync(`${options.icon}/UITutorial-icon-active.png`)
-    ){
-      dashboardJson['UITutorial'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['UITutorial_dashboard'] = {
-      node: 'UITutorial',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/gulp/server.js b/views/ngXosViews/UITutorial/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosViews/UITutorial/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/UITutorial/gulpfile.js b/views/ngXosViews/UITutorial/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/UITutorial/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/UITutorial/karma.conf.js b/views/ngXosViews/UITutorial/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/UITutorial/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/UITutorial/package.json b/views/ngXosViews/UITutorial/package.json
deleted file mode 100644
index a416d30..0000000
--- a/views/ngXosViews/UITutorial/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-UITutorial",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/UITutorial/spec/errorHandler.test.js b/views/ngXosViews/UITutorial/spec/errorHandler.test.js
deleted file mode 100644
index b2bcfce..0000000
--- a/views/ngXosViews/UITutorial/spec/errorHandler.test.js
+++ /dev/null
@@ -1,40 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The ErrorHandler service', () => {
-  
-  var ErrorHandler, done;
-
-  beforeEach(module('xos.UITutorial'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function (_ErrorHandler_) {
-    // The injector unwraps the underscores (_) from around the parameter names when matching
-    ErrorHandler = _ErrorHandler_;
-    done = jasmine.createSpy('done');
-  }));
-
-  describe('the print method', () => {
-    it('should return an html template', () => {
-      ErrorHandler.print('myError', done);
-      expect(done).toHaveBeenCalledWith(`<span class="error">[ERROR] myError</span>`)
-    });
-  });
-});
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/spec/exploreCmd.test.js b/views/ngXosViews/UITutorial/spec/exploreCmd.test.js
deleted file mode 100644
index 749250e..0000000
--- a/views/ngXosViews/UITutorial/spec/exploreCmd.test.js
+++ /dev/null
@@ -1,215 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The ExploreCmd service', () => {
-  
-  var ExploreCmd, ErrorHandler, ResponseHandler, done, shell, ResourceMock, rootScope;
-
-  beforeEach(module('xos.UITutorial'));
-  beforeEach(module('templates'));
-
-  beforeEach(() => {
-    module(function ($provide) {
-      $provide.value('Resource', ResourceMock);
-    })
-  });
-
-  beforeEach(inject(function (_ExploreCmd_, _ErrorHandler_, _ResponseHandler_, $rootScope) {
-    // The injector unwraps the underscores (_) from around the parameter names when matching
-    ExploreCmd = _ExploreCmd_;
-    ErrorHandler = _ErrorHandler_;
-    ResponseHandler = _ResponseHandler_;
-    rootScope = $rootScope;
-    done = jasmine.createSpy('done');
-    shell = {
-      setCommandHandler: jasmine.createSpy('setCommandHandler'),
-      bestMatch: jasmine.createSpy('bestMatch')
-    };
-    // binding the mock shell to the service (for easy testing)
-    ExploreCmd.shell = shell;
-    spyOn(console, 'error');
-
-    ResourceMock = {
-      query: jasmine.createSpy('query').and.callFake(() => {
-        var deferred = $q.defer();
-        deferred.resolve('Remote call result');
-        return {$promise: deferred.promise};
-      })
-    };
-  }));
-
-  it('should set the resouce command handler', () => {
-    ExploreCmd.setup(shell);
-    expect(shell.setCommandHandler).toHaveBeenCalledWith('resource', { exec: ExploreCmd.resourceExec, completion: ExploreCmd.resourceCompletion })
-  });
-
-  describe('the resourceCompletion function', () => {
-
-    beforeEach(() => {
-      spyOn(ExploreCmd, 'getAvailableResources').and.returnValue(['Sites', 'Slices']);
-    });
-
-    it('should suggest a resource list', () => {
-      ExploreCmd.resourceCompletion('resource', '', {text: 'resource'}, done)
-      expect(shell.bestMatch).toHaveBeenCalledWith('', [ 'list', 'Sites', 'Slices' ]);
-
-      ExploreCmd.resourceCompletion('resource', 'S', {text: 'resource S'}, done)
-      expect(shell.bestMatch).toHaveBeenCalledWith('S', [ 'list', 'Sites', 'Slices' ]);
-    });
-
-    it('should suggest a method list', () => {
-      ExploreCmd.resourceCompletion('resource', '', {text: 'resource Sites '}, done)
-      expect(shell.bestMatch).toHaveBeenCalledWith('', [ 'query', 'get', 'save', '$save', 'delete' ]);
-
-      ExploreCmd.resourceCompletion('resource', 'q', {text: 'resource Sites q'}, done)
-      expect(shell.bestMatch).toHaveBeenCalledWith('q', [ 'query', 'get', 'save', '$save', 'delete' ]);
-    });
-  });
-
-  describe('the resourceExec function', () => {
-
-    beforeEach(() => {
-      spyOn(ExploreCmd, 'listAvailableResources');
-      spyOn(ExploreCmd, 'consumeResource');
-    });
-
-    it('should list available resources', () => {
-      ExploreCmd.resourceExec('explore', ['list'], done);
-      expect(ExploreCmd.listAvailableResources).toHaveBeenCalledWith(done);
-    });
-
-    it('should use a resource', () => {
-      ExploreCmd.resourceExec('explore', ['Resource', 'query'], done);
-      expect(ExploreCmd.consumeResource).toHaveBeenCalledWith('Resource', 'query', [], done);
-    });
-  });
-
-  describe('the getAvailableResources function', () => {
-
-    beforeEach(() => {
-      spyOn(angular, 'module').and.returnValue({
-        _invokeQueue: [
-          ['$provide', 'service', ['Sites', ['$resource']]],
-          ['$provide', 'service', ['Slices', ['$q', '$resource']]],
-          ['$provide', 'factory', ['_', []]],
-          ['$provide', 'service', ['helper', ['Slices']]]
-        ]
-      });
-    });
-
-    it('should return a list of resources in the angular app', () => {
-      const resources = ExploreCmd.getAvailableResources();
-      expect(resources).toEqual(['Sites', 'Slices']);
-    });
-  });
-
-  describe('the listAvailableResources function', () => {
-    beforeEach(() => {
-      spyOn(ExploreCmd, 'getAvailableResources').and.returnValue(['Sites', 'Slices']);
-    });
-
-    it('should format resource in an html template', () => {
-      ExploreCmd.listAvailableResources(done);
-      expect(ExploreCmd.getAvailableResources).toHaveBeenCalled();
-      expect(done).toHaveBeenCalledWith(`Sites<br/>Slices<br/>`);
-    });
-  });
-
-  describe('the consumeResource function', () => {
-    beforeEach(() => {
-      spyOn(ExploreCmd, 'getAvailableResources').and.returnValue(['Resource', 'Fake']);
-      spyOn(ErrorHandler, 'print');
-    });
-
-    it('should notify that a resource does not exists', () => {
-      ExploreCmd.consumeResource('Test', null, null, done);
-      expect(ErrorHandler.print).toHaveBeenCalledWith(`Resource "Test" does not exists`, done)
-    });
-
-    it('should notify that a method does not exists', () => {
-      ExploreCmd.consumeResource('Resource', 'test', null, done);
-      expect(ErrorHandler.print).toHaveBeenCalledWith(`Method "test" not allowed`, done)
-    });
-
-    const methodsWithParams = ['get', '$save', 'delete'];
-    methodsWithParams.forEach(method => {
-      it(`should notify that the ${method} method require parameters`, () => {
-        ExploreCmd.consumeResource('Resource', method, [], done);
-        expect(ErrorHandler.print).toHaveBeenCalledWith(`Method "${method}" require parameters`, done)
-      });
-    });
-
-    it('should not accept id as parameter for the query method', () => {
-      ExploreCmd.consumeResource('Resource', 'query', ['{id:1}'], done);
-      expect(ErrorHandler.print).toHaveBeenCalledWith(`Is not possible to use "id" as filter in method "query", use "get" instead!`, done)
-    });
-
-    it('should notify the user in case of malformed parameters', () => {
-      ExploreCmd.consumeResource('Resource', 'query', ['{child: 3}'], done);
-      expect(ErrorHandler.print).toHaveBeenCalledWith(`Parameter is not valid, it shoudl be in the form of: <code>{id:1}</code>, with no spaces`, done)
-      pending();
-    });
-
-    describe('when called with the correct parameters', () => {
-
-      let deferred;
-      beforeEach(inject(($q) => {
-        spyOn(ResponseHandler, 'parse');
-
-        deferred = $q.defer();
-        ResourceMock = {
-          query: jasmine.createSpy('query').and.callFake(function(){
-            return {$promise: deferred.promise};
-          })
-        };
-      }));
-
-      it('should notify the user if an error occurred while loading the resource', () => {
-        ExploreCmd.consumeResource('Fake', 'query', [], done);
-        expect(console.error).toHaveBeenCalled();
-        expect(ErrorHandler.print).toHaveBeenCalledWith('Failed to inject resource "Fake"', done);
-      });
-
-      it('should call a resource and return the results', () => {
-        ExploreCmd.consumeResource('Resource', 'query', [], done);
-        deferred.resolve([]);
-        rootScope.$apply();
-        expect(ErrorHandler.print).not.toHaveBeenCalled()
-        expect(ResponseHandler.parse).toHaveBeenCalledWith([], 'Resource.query()', done);
-      });
-
-      it('should call a resource with parameters and return the results', () => {
-        ExploreCmd.consumeResource('Resource', 'query', ['{child:3}'], done);
-        deferred.resolve([]);
-        rootScope.$apply();
-        expect(ErrorHandler.print).not.toHaveBeenCalled()
-        expect(ResponseHandler.parse).toHaveBeenCalledWith([], 'Resource.query({"child":3})', done);
-      });
-
-      it('should call a resource and display a not found message', () => {
-        ExploreCmd.consumeResource('Resource', 'query', [], done);
-        deferred.reject({status: 404, data: {detail: 'Not Found.'}});
-        rootScope.$apply();
-        expect(ErrorHandler.print).toHaveBeenCalledWith('Resource with method "query" and parameters {} Not Found.', done)
-        expect(ResponseHandler.parse).not.toHaveBeenCalled();
-      });
-    });
-  });
-});
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/spec/responseHandler.test.js b/views/ngXosViews/UITutorial/spec/responseHandler.test.js
deleted file mode 100644
index 929840d..0000000
--- a/views/ngXosViews/UITutorial/spec/responseHandler.test.js
+++ /dev/null
@@ -1,64 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The ResponseHandler service', () => {
-  
-  var ResponseHandler, done;
-
-  beforeEach(module('xos.UITutorial'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function (_ResponseHandler_) {
-    // The injector unwraps the underscores (_) from around the parameter names when matching
-    ResponseHandler = _ResponseHandler_;
-    done = jasmine.createSpy('done');
-  }));
-
-  describe('the parse method', () => {
-    it('should return an html template for a collection', () => {
-      const collection = [
-        {id: 1, deleted: true, name: 'one'},
-        {id: 2, deleted: true, name: 'two'}
-      ];
-
-      const collectionHtml = `
-      <div>
-        <p>Corresponding js code: <code>jsCode</code></p>
-        <div class="json"><div class="jsonCollection">[<div class="jsonObject">{"id":1,"name":"one"},</code></div><div class="jsonObject">{"id":2,"name":"two"}</code></div>]</div></div>
-      </div>
-    `;
-      ResponseHandler.parse(collection, 'jsCode', done);
-      expect(done).toHaveBeenCalledWith(collectionHtml)
-    });
-
-    it('should return an html template for an object', () => {
-      const object = {id: 1, deleted: true, name: 'one'};
-
-      const objectHtml = `
-      <div>
-        <p>Corresponding js code: <code></code></p>
-        <div class="json"><div class="jsonObject">{"id":1,"name":"one"}</code></div></div>
-      </div>
-    `;
-      ResponseHandler.parse(object, '', done);
-      expect(done).toHaveBeenCalledWith(objectHtml)
-    });
-  });
-});
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/spec/shell.test.js b/views/ngXosViews/UITutorial/spec/shell.test.js
deleted file mode 100644
index b857b37..0000000
--- a/views/ngXosViews/UITutorial/spec/shell.test.js
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The Js Shell directive', () => {
-  
-  var scope, element, isolatedScope, shellSpy;
-
-  beforeEach(module('xos.UITutorial'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($compile, $rootScope){
-    scope = $rootScope.$new();
-    element = angular.element('<js-shell></js-shell>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-    spyOn(isolatedScope.shell, 'setCommandHandler');
-    spyOn(isolatedScope.shell, 'activate');
-  }));
-
-  // NOTE see http://stackoverflow.com/questions/38906605/angular-jasmine-testing-immediatly-invoked-functions-inside-a-directive-contr
-
-  xit('should register the explore command', () => {
-    expect(isolatedScope.shell.setCommandHandler).toHaveBeenCalled();
-  });
-
-  xit('should activate the shell', () => {
-    expect(isolatedScope.shell.activate).toHaveBeenCalled();
-  });
-});
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/spec/templateHandler.test.js b/views/ngXosViews/UITutorial/spec/templateHandler.test.js
deleted file mode 100644
index ec0ce19..0000000
--- a/views/ngXosViews/UITutorial/spec/templateHandler.test.js
+++ /dev/null
@@ -1,40 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The TemplateHandler service', () => {
-  
-  var TemplateHandler;
-
-  beforeEach(module('xos.UITutorial'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function (_TemplateHandler_) {
-    TemplateHandler = _TemplateHandler_;
-  }));
-
-  const templates = ['error', 'instructions', 'resourcesResponse'];
-
-  templates.forEach(t => {
-    it(`should have a ${t} template`, () => {
-      expect(TemplateHandler[t]).toBeDefined();
-      expect(angular.isFunction(TemplateHandler[t])).toBeTruthy();
-    });
-  });
-});
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/css/dev.css b/views/ngXosViews/UITutorial/src/css/dev.css
deleted file mode 100644
index bbf081a..0000000
--- a/views/ngXosViews/UITutorial/src/css/dev.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosUITutorial{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/css/main.css b/views/ngXosViews/UITutorial/src/css/main.css
deleted file mode 100644
index 9b3f039..0000000
--- a/views/ngXosViews/UITutorial/src/css/main.css
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosUITutorial {
-  width: 100%; }
-  #xosUITutorial .ace_editor {
-    height: 200px; }
-  #xosUITutorial js-shell {
-    display: block; }
-    #xosUITutorial js-shell #shell-panel {
-      width: 100%;
-      height: 400px;
-      background: #002b36;
-      padding: 10px;
-      overflow: scroll;
-      color: #93a1a1; }
-      #xosUITutorial js-shell #shell-panel .prompt {
-        color: #d33682; }
-      #xosUITutorial js-shell #shell-panel .input {
-        color: #268bd2; }
-      #xosUITutorial js-shell #shell-panel .cursor {
-        color: #2aa198; }
-      #xosUITutorial js-shell #shell-panel .error {
-        color: #dc322f; }
-      #xosUITutorial js-shell #shell-panel #shell-view > div > div {
-        color: #268bd2; }
-      #xosUITutorial js-shell #shell-panel #shell-view .jsonObject {
-        white-space: nowrap; }
-      #xosUITutorial js-shell #shell-panel #shell-view .jsonCollection > .jsonObject {
-        margin-left: 10px; }
diff --git a/views/ngXosViews/UITutorial/src/icons/README.md b/views/ngXosViews/UITutorial/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/UITutorial/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/index.html b/views/ngXosViews/UITutorial/src/index.html
deleted file mode 100644
index 9a80338..0000000
--- a/views/ngXosViews/UITutorial/src/index.html
+++ /dev/null
@@ -1,70 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.UITutorial" id="xosUITutorial" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/josh.js/js/readline.js"></script>
-<script src="vendor/josh.js/js/history.js"></script>
-<script src="vendor/josh.js/js/killring.js"></script>
-<script src="vendor/josh.js/js/input.js"></script>
-<script src="vendor/josh.js/js/pathhandler.js"></script>
-<script src="vendor/josh.js/js/shell.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-ui-ace/ui-ace.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<script src="vendor/ace-builds/src-min-noconflict/ace.js"></script>
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/templateHandler.js"></script>
-<script src="/.tmp/responseHandler.js"></script>
-<script src="/.tmp/playCmd.js"></script>
-<script src="/.tmp/lessonsInfo.js"></script>
-<script src="/.tmp/learnCmd.js"></script>
-<script src="/.tmp/exploreCmd.js"></script>
-<script src="/.tmp/errorHandler.js"></script>
-<script src="/.tmp/codeToString.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/codeToString.js b/views/ngXosViews/UITutorial/src/js/codeToString.js
deleted file mode 100644
index 5f11262..0000000
--- a/views/ngXosViews/UITutorial/src/js/codeToString.js
+++ /dev/null
@@ -1,83 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  angular.module('xos.UITutorial')
-  .service('codeToString', function(){
-    this.toString = code => {
-      if(angular.isArray(code)){
-        return code.map(item => this.toString(item));
-      }
-      else if(angular.isObject(code)){
-        let tmp = {};
-        Object.keys(code).forEach(key => {
-          tmp[key] = this.toString(code[key])
-        });
-        return tmp;
-      }
-      else{
-        return code.toString().split('\n').join('').replace(/ +(?= )/gmi, '');
-      }
-    };
-
-    this.toCode = string => {
-      let code;
-
-      try {
-        code = JSON.parse(string);
-      }
-      catch(e){
-        code = string;
-      }
-      
-      if(angular.isArray(code)){
-        return code.map(item => this.toCode(item));
-      }
-      else if(angular.isObject(code)){
-        let tmp = {};
-        Object.keys(code).forEach(key => {
-          tmp[key] = this.toCode(code[key])
-        });
-        return tmp;
-      }
-      else{
-        if(!angular.isNumber(code) && code.indexOf('function') !== -1){
-          try {
-            return function(){
-              // create a closure to host our arguments
-              var func = new Function(`return ${code}`);
-              
-              // invoke the original function passing arguments
-              func()(...arguments);
-            }
-          }
-          catch(e){
-            // in this case it is a string
-            return code;
-          }
-        }
-        else if(Number.isNaN(code)){
-          return parseFloat(code);
-        }
-        return code;
-      }
-
-      return code;
-    };
-  });
-})();
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/errorHandler.js b/views/ngXosViews/UITutorial/src/js/errorHandler.js
deleted file mode 100644
index 61fec84..0000000
--- a/views/ngXosViews/UITutorial/src/js/errorHandler.js
+++ /dev/null
@@ -1,27 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-  angular.module('xos.UITutorial')
-  .service('ErrorHandler', function(TemplateHandler){
-    this.print = (msg, done) => {
-      done(TemplateHandler.error({msg: msg}));
-    };
-  });
-})();
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/exploreCmd.js b/views/ngXosViews/UITutorial/src/js/exploreCmd.js
deleted file mode 100644
index ed37af9..0000000
--- a/views/ngXosViews/UITutorial/src/js/exploreCmd.js
+++ /dev/null
@@ -1,131 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-  angular.module('xos.UITutorial')
-  .service('ExploreCmd', function($injector, ResponseHandler, ErrorHandler){
-
-    this.resourceExec = (cmd, args, done) => {
-      switch(args[0]){
-        case 'list':
-          return this.listAvailableResources(done);
-          break;
-        default:
-          // use the resource
-          const resourceName = args.shift();
-          const method = args.shift();
-          return this.consumeResource(resourceName, method, args, done);
-      }
-    };
-
-    this.resourceCompletion = (cmd, arg, line, done) => {
-      const args = ['list'].concat(this.getAvailableResources());
-      if(line.text.match(/resource\s[A-Z][a-z]+\s/)){
-        // if arg is a resource, then return available methods
-        if(args.indexOf(arg) !== -1){
-          arg = '';
-        }
-        const methods = ['query', 'get', 'save', '$save', 'delete'];
-        return done(this.shell.bestMatch(arg, methods));
-      }
-      return done(this.shell.bestMatch(arg, args));
-    };
-
-    this.setup = (shell) => {
-      this.shell = shell;
-      shell.setCommandHandler('resource', {
-        exec: this.resourceExec,
-        completion: this.resourceCompletion
-      });
-    };
-
-    this.getAvailableResources = () => {
-      return angular.module('xos.helpers')._invokeQueue
-          .filter((d) => {
-            if(d[1] !== 'service'){
-              return false;
-            }
-            const serviceDeps = d[2][1];
-            return serviceDeps.indexOf('$resource') !== -1;
-          })
-          .reduce((list, i) => list.concat([i[2][0]]), []);
-    }
-
-    this.listAvailableResources = (done) => {
-      // TODO use a template
-      const resources = this.getAvailableResources()
-          .reduce((html, i) => `${html}${i}<br/>`, '');
-      done(resources);
-    }
-
-    this.consumeResource = (resourceName, method, args, done) => {
-
-      // TODO if not resourceName/method print cmd instructions
-
-      if(this.getAvailableResources().indexOf(resourceName) === -1){
-        return ErrorHandler.print(`Resource "${resourceName}" does not exists`, done);
-      }
-
-      if(['query', 'get', 'save', '$save', 'delete'].indexOf(method) === -1){
-        return ErrorHandler.print(`Method "${method}" not allowed`, done);
-      }
-
-      // TODO @Teo if get/delete check for arguments
-      let params = {};
-
-      // if the method require arguments checks for them
-      if(['get', '$save', 'delete'].indexOf(method) !== -1){
-        if(args.length === 0){
-          return ErrorHandler.print(`Method "${method}" require parameters`, done);
-        }
-      }
-
-      // if there are arguments parse them
-      // TODO wrap in a try catch, we have no guarantee that a user insert the correct params
-      if(args.length > 0){
-        params = eval(`(${args[0]})`);
-      }
-
-      // if it is a query is not possible to use id as parameter
-      if(method === 'query' && angular.isDefined(params.id)){
-        return ErrorHandler.print(`Is not possible to use "id" as filter in method "${method}", use "get" instead!`, done);
-      }
-
-      let Resource;
-      try{
-        Resource = $injector.get(resourceName);
-        Resource[method](params).$promise
-        .then(res => {
-          const jsCode = `${resourceName}.${method}(${Object.keys(params).length > 0 ? JSON.stringify(params): ''})`;
-          return ResponseHandler.parse(res, jsCode, done);
-        })
-        .catch(e => {
-          if(e.status === 404){
-            return ErrorHandler.print(`${resourceName} with method "${method}" and parameters ${JSON.stringify(params)} ${e.data.detail}`, done);
-          }
-        });
-      }
-      catch(e){
-        console.error(e);
-        return ErrorHandler.print(`Failed to inject resource "${resourceName}"`, done);
-      }
-    };
-
-  });
-})();
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/learnCmd.js b/views/ngXosViews/UITutorial/src/js/learnCmd.js
deleted file mode 100644
index d76b45f..0000000
--- a/views/ngXosViews/UITutorial/src/js/learnCmd.js
+++ /dev/null
@@ -1,94 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-  angular.module('xos.UITutorial')
-  .service('LearnCmd', function(LessonInfo, $cookies, ErrorHandler){
-
-
-    this.getCurrentLesson = (id,done)=>{
-      var details = LessonInfo.lessonCatalogue(id);
-      $cookies.put('lessonId', id);
-      done(details.text);
-    };
-
-    this.nextLesson = (shell) => {
-      this.shell = shell;
-      shell.setCommandHandler('next', {
-        exec: this.getNextLesson,
-      });
-    }
-
-    this.printLesson = (shell) => {
-      this.shell = shell;
-      shell.setCommandHandler('print', {
-        exec: this.printCurrentLesson,
-      });
-    };
-
-    this.prevLesson = (shell) => {
-      this.shell = shell;
-      shell.setCommandHandler('prev', {
-        exec: this.getPreviousLesson,
-      });
-    }
-
-    this.getLessonIdFromCookie = ()=>{
-      return $cookies.get('lessonId') ? parseInt($cookies.get('lessonId')) : -1;
-    };
-
-    this.getNextLesson = (cmd,arg,done)=>{
-      let lessonId = this.getLessonIdFromCookie();
-      return this.getCurrentLesson(lessonId+1,done)  ;
-    };
-
-    this.getPreviousLesson = (cmd,arg,done)=>{
-      let lessonId = this.getLessonIdFromCookie();
-      if(lessonId>0)  {
-        this.getCurrentLesson(lessonId-1,done)
-      }
-      else {
-        ErrorHandler.print(`This is the first Lesson`, done);
-      }
-    };
-
-    this.printCurrentLesson = (cmd,args,done)=>{
-      if (args[0]){
-        this.getCurrentLesson(args[0], done);
-      }
-      else {
-        let lessonId = this.getLessonIdFromCookie();
-        if (lessonId > -1) {
-          this.getCurrentLesson(lessonId, done)
-        }
-        else {
-          ErrorHandler.print(`This is the first Lesson`, done);
-        }
-      }
-    };
-
-    this.setup = (shell) => {
-      this.shell = shell;
-      this.nextLesson(shell);
-      this.prevLesson(shell);
-      this.printLesson(shell);
-    };
-
-  });
-})();
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/lessonsInfo.js b/views/ngXosViews/UITutorial/src/js/lessonsInfo.js
deleted file mode 100644
index c6e6e25..0000000
--- a/views/ngXosViews/UITutorial/src/js/lessonsInfo.js
+++ /dev/null
@@ -1,61 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {

-  'use strict';

-  angular.module('xos.UITutorial')

-  .service('LessonInfo', function(){

-

-    this.lessonCatalogue = (id) => {

-      let lessonData = [

-        {

-          id: 0,

-          text: 'lesson 0 info',

-          solution: 'Hello World'

-        },

-        {

-          id: 1,

-          text: 'lesson 1 info',

-          solution: 'Hello World'

-        },

-        {

-          id: 2,

-          text: 'lesson 2 info',

-          solution: 'Hello World'

-        },

-        {

-          id: 3,

-          text: 'lesson 3 info',

-          solution: 'Hello World'

-        },

-        {

-          id: 4,

-          text: 'lesson 4 info',

-          solution: 'Hello World  '

-        },

-        {

-          id: 5,

-          text: 'lesson 5 info',

-          solution: 'Hello World'

-        }

-      ];

-      return lessonData[id];

-    }

-

-  });

-} )();
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/main.js b/views/ngXosViews/UITutorial/src/js/main.js
deleted file mode 100644
index b47713d..0000000
--- a/views/ngXosViews/UITutorial/src/js/main.js
+++ /dev/null
@@ -1,119 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.UITutorial', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers',
-  'ui.ace'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('shell', {
-    url: '/',
-    template: '<js-shell></js-shell>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.directive('jsShell', function($rootScope, TemplateHandler, codeToString){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/js-shell.tpl.html',
-    controller: function(ExploreCmd, PlayCmd, LearnCmd){
-      var history = new Josh.History({ key: 'jsshell.history'});
-      this.shell = Josh.Shell({history: history});
-
-      this.shell.onNewPrompt(done => {
-        done('[ngXosLib] $ ');
-      });
-
-      this.shell.setCommandHandler('explore', {
-        exec: (cmd, args, done) => {
-          ExploreCmd.setup(this.shell);
-          done(TemplateHandler.instructions({
-            title: `You can now explore the API use angular $resouces!`,
-            messages: [
-              `Use <code>resource list</code> to list all the available resources and <code>resource {resoureName} {method} {?paramters}</code> to call the API.`,
-              `An example command is <code>resource Slices query</code>`,
-              `You can also provide paramters with <code>resource Slices query {max_instances: 10}</code>`
-            ]
-          }));
-        }
-      });
-
-      this.shell.setCommandHandler('learn', {
-        exec: (cmd, args, done) => {
-          LearnCmd.setup(this.shell);
-          done(TemplateHandler.instructions({
-            title: `You can now learn the API`,
-            messages: [
-              `Use <code>next</code> to move to the next lesson <code>resource {resoureName} {method} {?paramters}</code> to call the API.`,
-              `An example command is <code>resource Slices query</code>`,
-              `You can also provide paramters with <code>next</code>`
-            ]
-          }));
-        }
-      });
-      
-      this.shell.setCommandHandler('play', {
-        exec: (cmd, args, done) => {
-          PlayCmd.setup(this.shell);
-          done(TemplateHandler.instructions({
-            title: `You can now play with UI components!`,
-            messages: [
-              `Use <code>component list</code> to list all the available component and <code>component {componentName}</code> to startusing it.`,
-              `An example command is <code>component xosTable</code>`
-            ]
-          }));
-        }
-      });
-
-      this.shell.activate();
-
-      this.componentScope = null;
-
-      $rootScope.$on('uiTutorial.attachScope', (e, scope) => {
-        this.componentScope = {
-          config: JSON.stringify(codeToString.toString(scope.config), null, 2),
-          data: JSON.stringify(codeToString.toString(scope.data), null, 2)
-        };
-      });
-
-      this.applyScope = (scope) => {
-        
-        // let a = codeToString.toCode(scope.config);
-        // console.log(a);
-        const newScope = {
-          config: codeToString.toCode(scope.config),
-          data: eval(`(${scope.data})`)
-        };
-
-        $rootScope.$emit('uiTutorial.applyScope', newScope);
-      }
-
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/playCmd.js b/views/ngXosViews/UITutorial/src/js/playCmd.js
deleted file mode 100644
index f9b143f..0000000
--- a/views/ngXosViews/UITutorial/src/js/playCmd.js
+++ /dev/null
@@ -1,127 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-  angular.module('xos.UITutorial')
-  .service('PlayCmd', function($compile, $rootScope, _, ErrorHandler){
-
-    // TODO investigate if we can load directives from an app
-    const components = [
-      {
-        name: 'xosTable',
-        template: '<xos-table config="config" data="data"></xos-table>',
-        scope: {
-          config: {
-            columns: [
-              {label: 'Name', prop: 'name'},
-              {label: 'Age', prop: 'age'}
-            ]
-          },
-          data: [
-            {name: 'Jhon', age: 23},
-            {name: 'Mike', age: 24}
-          ]
-        }
-      },
-      {
-        name: 'xosForm',
-        template: '<xos-form config="config" ng-model="data"></xos-form>',
-        scope: {
-          config: {
-            fields: {
-              name: {
-                type: 'text'
-              },
-              age: {
-                type: 'number'
-              }
-            },
-            actions: [
-              {
-                label: 'Print',
-                cb: (model) => {
-                  console.log(model);
-                }
-              }
-            ]
-          },
-          data: {name: 'Jhon', age: 23}
-        }
-      }
-    ];
-
-    this.componentCompletion = (cmd, arg, line, done) => {
-      const componentsName = components.map(c => c.name);
-      return done(this.shell.bestMatch(arg, componentsName));
-    };
-
-    this.componentExec = (cmd, args, done) => {
-      const targetComponent = args[0];
-
-      if(!targetComponent){
-        return ErrorHandler.print(`Component "${targetComponent}" does not exists`, done);
-      }
-
-      this.attachComponent(targetComponent, done);
-    };
-
-    this.getComponentsDetails = (componentName, components) => {
-      return _.find(components, {name: componentName});
-    };
-
-    this.attachComponent = (targetComponent, done) => {
-      this.scope = $rootScope.$new();
-      targetComponent = this.getComponentsDetails(targetComponent, components);
-
-      angular.extend(this.scope, targetComponent.scope);
-
-      $rootScope.$emit('uiTutorial.attachScope', this.scope);
-
-      const directive = $compile(targetComponent.template)(this.scope);
-      const container = $('#directive-container');
-      container.html('');
-      container.append( directive );
-      done('Component added');
-    };
-
-    $rootScope.$on('uiTutorial.applyScope', (e, scope) => {
-      this.scope.config = scope.config;
-      this.scope.data = scope.data;
-    });
-
-    this.setup = (shell) => {
-      this.shell = shell;
-      shell.setCommandHandler('component', {
-        exec: this.componentExec,
-        completion: this.componentCompletion
-      });
-
-      // activate listener to enable/disable shell
-      $('.component-container').click((e) => {
-        this.shell.deactivate();
-      });
-
-      $('#shell-panel').click((e) => {
-        this.shell.activate();
-      });
-    };
-
-    
-  });
-})();
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/responseHandler.js b/views/ngXosViews/UITutorial/src/js/responseHandler.js
deleted file mode 100644
index 2b4ca50..0000000
--- a/views/ngXosViews/UITutorial/src/js/responseHandler.js
+++ /dev/null
@@ -1,65 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-  angular.module('xos.UITutorial')
-  .service('ResponseHandler', function(TemplateHandler){
-
-    const exclude = [
-      'deleted',
-      'enabled',
-      'enacted',
-      'exposed_ports',
-      'lazy_blocked',
-      'created',
-      'validators',
-      'controllers',
-      'backend_status',
-      'backend_register',
-      'policed',
-      'no_policy',
-      'write_protect',
-      'no_sync',
-      'updated'
-    ];
-
-    this.parseObject = (obj, comma = '') => {
-      obj = _.omit(obj, exclude);
-      return TemplateHandler.jsonObject({'obj': obj, comma: comma});
-    };
-
-    this.parseCollection = (array) => {
-      array = array.map((o, i) => `${this.parseObject(o, i === (array.length - 1) ? '':',')}`);
-      return TemplateHandler.jsonCollection({'collection': array});
-    };
-
-    this.parse = (res, jsCode, done) => {
-      if(_.isArray(res)) {
-        res = this.parseCollection(res);
-      }
-      else{
-        res = this.parseObject(res);
-      }
-      done(TemplateHandler.resourcesResponse({
-        jsCode: jsCode,
-        res: res
-      }));
-    };
-  });
-})();
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/templateHandler.js b/views/ngXosViews/UITutorial/src/js/templateHandler.js
deleted file mode 100644
index 049e766..0000000
--- a/views/ngXosViews/UITutorial/src/js/templateHandler.js
+++ /dev/null
@@ -1,44 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-  angular.module('xos.UITutorial')
-  .service('TemplateHandler', function(_){
-    
-    this.error = _.template(`<span class="error">[ERROR] <%= msg %></span>`);
-
-    this.instructions = _.template(`
-      <div>
-        <strong><%= title %></strong>
-        <% _.forEach(messages, function(m) { %><p><%= m %></p><% }); %>
-      </div>
-    `);
-
-    this.resourcesResponse = _.template(`
-      <div>
-        <p>Corresponding js code: <code><%= jsCode %></code></p>
-        <div class="json"><%= res %></div>
-      </div>
-    `);
-
-    this.jsonObject = _.template(`<div class="jsonObject"><%= JSON.stringify(obj) %><%=comma%></code></div>`);
-
-    this.jsonCollection = _.template(`<div class="jsonCollection">[<% _.forEach(collection, function(item) { %><%= item %><%}); %>]</div>`);
-  });
-})();
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/sass/main.scss b/views/ngXosViews/UITutorial/src/sass/main.scss
deleted file mode 100644
index 47d5d39..0000000
--- a/views/ngXosViews/UITutorial/src/sass/main.scss
+++ /dev/null
@@ -1,88 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-// The solarized palette
-
-$background:  #002b36;
-$hl:          #073642;
-$comment:     #586e75;
-$foreground:  #839496;
-$emph:        #93a1a1;
-
-$yellow:  #b58900;
-$orange:  #cb4b16;
-$red:     #dc322f;
-$magenta: #d33682;
-$violet:  #6c71c4;
-$blue:    #268bd2;
-$cyan:    #2aa198;
-$green:   #859900;
-
-#xosUITutorial {
-  width: 100%;
-
-  .ace_editor { height: 200px; }
-
-  js-shell {
-    display: block;
-
-    #shell-panel {
-      width: 100%;
-      height: 400px;
-      background: $background;
-      padding: 10px;
-      overflow: scroll;
-      color: $emph;
-
-      .prompt {
-        color: $magenta;
-      }
-
-      .input {
-        color: $blue;
-      }
-
-      .cursor {
-        color: $cyan;
-      }
-
-      .error {
-        color: $red;
-      }
-
-      #shell-view {
-
-        >div>div{
-          color: $blue;
-        }
-
-        .jsonObject {
-          white-space: nowrap;
-        }
-
-        .jsonCollection {
-          >.jsonObject{
-            margin-left: 10px;
-          }
-        }
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/templates/js-shell.tpl.html b/views/ngXosViews/UITutorial/src/templates/js-shell.tpl.html
deleted file mode 100644
index 2e8fee6..0000000
--- a/views/ngXosViews/UITutorial/src/templates/js-shell.tpl.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="shell-panel">
-  <div>
-    Type <code>help</code> or hit <code>TAB</code> for a list of commands.
-  </div>
-  <div id="shell-view"></div>
-</div>
-
-<section class="component-container" ng-show="vm.componentScope">
-  <div class="row">
-    <div class="col-xs-6">
-      <label>Config:</label>
-    </div>
-    <div class="col-xs-6">
-      <label>data:</label>
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-xs-6">
-      <div ng-model="vm.componentScope.config" ui-ace></div>
-    </div>
-    <div class="col-xs-6">
-      <div ng-model="vm.componentScope.data" ui-ace></div>
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-xs-12 text-right">
-      <a href="" ng-click="vm.applyScope(vm.componentScope)" class="btn btn-success">Apply Changes</a>
-    </div>
-  </div>
-  <div id="directive-container"></div>
-</section>
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/.bowerrc b/views/ngXosViews/ceilometerDashboard/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/ceilometerDashboard/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/.eslintrc b/views/ngXosViews/ceilometerDashboard/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/ceilometerDashboard/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/.gitignore b/views/ngXosViews/ceilometerDashboard/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/ceilometerDashboard/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/bower.json b/views/ngXosViews/ceilometerDashboard/bower.json
deleted file mode 100644
index 41c67d3..0000000
--- a/views/ngXosViews/ceilometerDashboard/bower.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "name": "xos-ceilometerDashboard",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <teo@onlab.us>"
-  ],
-  "description": "The ceilometerDashboard view",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "ui.bootstrap": "0.14.3"
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  },
-  "overrides": {
-    "ui.bootstrap": {
-      "main": ["src/accordion/accordion.js", "src/collapse/collapse.js"]
-    }
-  },
-  "resolutions": {
-    "Chart.js": "~1.1.1"
-  }
-}
diff --git a/views/ngXosViews/ceilometerDashboard/gulp/build.js b/views/ngXosViews/ceilometerDashboard/gulp/build.js
deleted file mode 100644
index 6d7d064..0000000
--- a/views/ngXosViews/ceilometerDashboard/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.ceilometerDashboard')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosCeilometerDashboard.html',
-        options.static + 'css/xosCeilometerDashboard.css',
-        options.static + 'images/ceilometerDashboard-icon.png',
-        options.static + 'images/ceilometerDashboard-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosCeilometerDashboard.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/ceilometerDashboard-icon.png`, `${options.icon}/ceilometerDashboard-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosCeilometerDashboard.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.ceilometerDashboard',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosCeilometerDashboardVendor.js',
-            options.static + 'js/xosCeilometerDashboard.js',
-            options.static + 'css/xosCeilometerDashboard.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosCeilometerDashboard.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosCeilometerDashboardVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['CeilometerDashboard'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosCeilometerDashboard'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/ceilometerDashboard-icon.png`) &&
-      fs.existsSync(`${options.icon}/ceilometerDashboard-icon-active.png`)
-    ){
-      dashboardJson['CeilometerDashboard'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['ceilometerDashboard_dashboard'] = {
-      node: 'CeilometerDashboard',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/gulp/server.js b/views/ngXosViews/ceilometerDashboard/gulp/server.js
deleted file mode 100644
index ede7ccd..0000000
--- a/views/ngXosViews/ceilometerDashboard/gulp/server.js
+++ /dev/null
@@ -1,188 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('?no_hyperlinks=1') !== -1 ||
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/ceilometerDashboard/gulpfile.js b/views/ngXosViews/ceilometerDashboard/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/ceilometerDashboard/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/ceilometerDashboard/karma.conf.js b/views/ngXosViews/ceilometerDashboard/karma.conf.js
deleted file mode 100644
index e0c8c89..0000000
--- a/views/ngXosViews/ceilometerDashboard/karma.conf.js
+++ /dev/null
@@ -1,109 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: ['./src/vendor/ng-xos-lib/dist/ngXosVendor.min.js']
-    .concat(bowerComponents).concat([
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/ceilometerDashboard/mock/config.json b/views/ngXosViews/ceilometerDashboard/mock/config.json
deleted file mode 100644
index 3d64838..0000000
--- a/views/ngXosViews/ceilometerDashboard/mock/config.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-  "endpoints": [
-    {
-      "url": "xos-slice-service-mapping",
-      "base": "api/tenant/monitoring/dashboard/",
-      "methods": ["GET"]
-    },
-    {
-      "url": "meters",
-      "base": "api/tenant/monitoring/dashboard/",
-      "methods": ["GET"]
-    },
-    {
-      "url": "metersamples",
-      "base": "api/tenant/monitoring/dashboard/",
-      "methods": ["GET"]
-    }
-  ]
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/mock/data/meters.json b/views/ngXosViews/ceilometerDashboard/mock/data/meters.json
deleted file mode 100644
index 9a6451b..0000000
--- a/views/ngXosViews/ceilometerDashboard/mock/data/meters.json
+++ /dev/null
@@ -1,26 +0,0 @@
-[
-  {
-    "service":"service-a",
-    "slice":"slice-a-1",
-    "name":"broadview.bst.egress-uc-queue",
-    "resource_name":"resource-1",
-    "resource_id":"resource-1",
-    "tenant": "id-a-1"
-  },
-  {
-    "service":"service-a",
-    "slice":"slice-a-1",
-    "name":"broadview.pt.packet-trace-lag-resolution",
-    "resource_name":"resource-1",
-    "resource_id":"resource-1",
-    "tenant": "id-a-1"
-  },
-  {
-    "service":"service-a",
-    "slice":"slice-a-1",
-    "name":"broadview.pt.packet-trace-ecmp-resolution",
-    "resource_name":"resource-1",
-    "resource_id":"resource-1",
-    "tenant": "id-a-1"
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/mock/data/metersamples.json b/views/ngXosViews/ceilometerDashboard/mock/data/metersamples.json
deleted file mode 100644
index 4cb99eb..0000000
--- a/views/ngXosViews/ceilometerDashboard/mock/data/metersamples.json
+++ /dev/null
@@ -1,120 +0,0 @@
-[
-   {
-       "slice": "slice-a-1",
-       "user_id": null,
-       "resource_id": "resource-1",
-       "timestamp": "2016-09-19T14:53:55",
-       "meter": "broadview.bst.egress-uc-queue",
-       "volume": 1111.0,
-       "source": "openstack",
-       "resource_name": "resource-1",
-       "recorded_at": "2016-09-19T21:53:56.879000",
-       "project_id": "default_admin_tenant",
-       "type": "gauge",
-       "id": "8fe9a026-7eb3-11e6-9a9b-3417ebe580ce",
-       "unit": "bv-agent",
-       "limit": 10
-   },
-   {
-       "slice": "slice-a-1",
-       "user_id": null,
-       "resource_id": "resource-1",
-       "timestamp": "2016-09-19T14:54:55",
-       "meter": "broadview.bst.egress-uc-queue",
-       "volume": 1345.0,
-       "source": "openstack",
-       "resource_name": "resource-1",
-       "recorded_at": "2016-09-19T21:53:56.879000",
-       "project_id": "default_admin_tenant",
-       "type": "gauge",
-       "id": "8fe9a026-7eb3-11e6-9a9b-3417ebe580ce",
-       "unit": "bv-agent",
-       "limit": 10
-   },
-   {
-       "slice": "slice-a-1",
-       "user_id": null,
-       "resource_id": "resource-1",
-       "timestamp": "2016-09-19T14:55:55",
-       "meter": "broadview.bst.egress-uc-queue",
-       "volume": 945.0,
-       "source": "openstack",
-       "resource_name": "resource-1",
-       "recorded_at": "2016-09-19T21:53:56.879000",
-       "project_id": "default_admin_tenant",
-       "type": "gauge",
-       "id": "8fe9a026-7eb3-11e6-9a9b-3417ebe580ce",
-       "unit": "bv-agent",
-       "limit": 10
-    },
-
-
-
-
-
-    {
-      "slice": "slice-a-1",
-      "resource_id": "resource-1",
-      "resource_name": "resource-1",
-      "timestamp": "2016-09-19T14:54:05",
-      "meter": "broadview.pt.packet-trace-lag-resolution",
-      "limit": 30,
-      "metadata": {
-          "event_type": "broadview.pt.packet-trace-lag-resolution",
-          "lag-members": "['0/1', '0/2', '0/3', '0/4']",
-          "dst-lag-member": "0/1"
-      }
-    },
-    {
-      "slice": "slice-a-1",
-      "resource_id": "resource-1",
-      "resource_name": "resource-1",
-      "timestamp": "2016-09-19T14:54:05",
-      "meter": "broadview.pt.packet-trace-lag-resolution",
-      "limit": 30,
-      "metadata": {
-          "event_type": "broadview.pt.packet-trace-lag-resolution",
-          "lag-members": "['0/1', '0/2', '0/3', '0/4']",
-          "dst-lag-member": "0/1"
-      }
-    },
-    {
-      "slice": "slice-a-1",
-      "resource_id": "resource-1",
-      "resource_name": "resource-1",
-      "timestamp": "2016-09-19T14:54:05",
-      "meter": "broadview.pt.packet-trace-lag-resolution",
-      "limit": 30,
-      "metadata": {
-          "event_type": "broadview.pt.packet-trace-lag-resolution",
-          "lag-members": "['0/1', '0/2', '0/3', '0/4']",
-          "dst-lag-member": "0/2"
-      }
-    },
-    {
-      "slice": "slice-a-1",
-      "resource_id": "resource-1",
-      "resource_name": "resource-1",
-      "timestamp": "2016-09-19T14:54:05",
-      "meter": "broadview.pt.packet-trace-lag-resolution",
-      "limit": 30,
-      "metadata": {
-          "event_type": "broadview.pt.packet-trace-lag-resolution",
-          "lag-members": "['0/1', '0/2', '0/3', '0/4']",
-          "dst-lag-member": "0/3"
-      }
-    },
-    {
-      "slice": "slice-a-1",
-      "resource_id": "resource-1",
-      "resource_name": "resource-1",
-      "timestamp": "2016-09-19T14:54:05",
-      "meter": "broadview.pt.packet-trace-lag-resolution",
-      "limit": 30,
-      "metadata": {
-          "event_type": "broadview.pt.packet-trace-lag-resolution",
-          "lag-members": "['0/1', '0/2', '0/3', '0/4']",
-          "dst-lag-member": "0/4"
-      }
-    }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/mock/data/xos-slice-service-mapping.json b/views/ngXosViews/ceilometerDashboard/mock/data/xos-slice-service-mapping.json
deleted file mode 100644
index 5e6ae23..0000000
--- a/views/ngXosViews/ceilometerDashboard/mock/data/xos-slice-service-mapping.json
+++ /dev/null
@@ -1,11 +0,0 @@
-[
-   {
-      "service":"service-a",
-      "slices":[
-         {
-            "project_id":"id-a-1",
-            "slice":"slice-a-1"
-         }
-      ]
-   }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/package.json b/views/ngXosViews/ceilometerDashboard/package.json
deleted file mode 100644
index a2fc0da..0000000
--- a/views/ngXosViews/ceilometerDashboard/package.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "name": "xos-ceilometerDashboard",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/",
-    "mock": "easy-mocker -d mock/data -c mock/config.json"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.3.1",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/ceilometerDashboard/spec/.eslintrc b/views/ngXosViews/ceilometerDashboard/spec/.eslintrc
deleted file mode 100644
index e456ddf..0000000
--- a/views/ngXosViews/ceilometerDashboard/spec/.eslintrc
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-    "globals" :{
-        "describe": true,
-        "xdescribe": true,
-        "beforeEach": true,
-        "it": true,
-        "inject": true,
-        "expect": true
-    },
-    "rules": {
-      "max-nested-callbacks": [0, 4]
-    }
-}
diff --git a/views/ngXosViews/ceilometerDashboard/spec/backend.mock.js b/views/ngXosViews/ceilometerDashboard/spec/backend.mock.js
deleted file mode 100644
index d86edb5..0000000
--- a/views/ngXosViews/ceilometerDashboard/spec/backend.mock.js
+++ /dev/null
@@ -1,123 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  const meters = [
-    {
-      service: 'service-a',
-      slice: 'slice-a-1',
-      name: 'network.outgoing.packets.rate',
-      resource_name: 'resource-1'
-    },
-    {
-      service: 'service-a',
-      slice: 'slice-a-1',
-      name: 'network.incoming.packets.rate',
-      resource_name: 'resource-1'
-    },
-    {
-      service: 'service-a',
-      slice: 'slice-a-1',
-      name: 'network.incoming.packets.rate',
-      resource_name: 'resource-2'
-    }
-  ];
-
-  const samples = [
-    {
-      meter: 'cpu',
-      resource_name: 'fakeName',
-      resource_id: 'fakeTenant',
-      timestamp: '2015-12-15T00:34:08',
-      volume: 110
-    },
-    {
-      meter: 'cpu',
-      resource_name: 'fakeName',
-      resource_id: 'fakeTenant',
-      timestamp: '2015-12-15T00:44:08',
-      volume: 120
-    },
-    {
-      meter: 'cpu',
-      resource_name: 'anotherName',
-      resource_id: 'anotherTenant',
-      timestamp: '2015-12-15T00:24:08',
-      volume: 210
-    },
-    {
-      meter: 'cpu',
-      resource_name: 'anotherName',
-      resource_id: 'anotherTenant',
-      timestamp: '2015-12-15T00:34:08',
-      volume: 220
-    },
-    {
-      meter: 'cpu',
-      resource_name: 'anotherName',
-      resource_id: 'anotherTenant',
-      timestamp: '2015-12-15T00:44:08',
-      volume: 230
-    },
-    {
-      meter: 'cpu',
-      resource_name: 'thirdName',
-      resource_id: 'thirdTenant',
-      timestamp: '2015-12-15T00:44:08',
-      volume: 310
-    }
-  ];
-
-  const mapping = [
-    {
-      service: 'service-a',
-      slices: [
-        {
-          project_id: 'id-a-1',
-          slice: 'slice-a-1'
-        },
-        {
-          project_id: 'id-a-2',
-          slice: 'slice-a-2'
-        }
-      ]
-    },
-    {
-      service: 'service-b',
-      slices: [
-        {
-          project_id: 'id-b-1',
-          slice: 'slice-b-1'
-        },
-        {
-          project_id: 'id-b-2',
-          slice: 'slice-b-2'
-        }
-      ]
-    }
-  ]
-
-  angular.module('xos.ceilometerDashboard')
-  .run(($httpBackend) => {
-    $httpBackend.whenGET(/metersamples/).respond(samples);
-    $httpBackend.whenGET(/xos-slice-service-mapping/).respond(mapping);
-    $httpBackend.whenGET(/meters/).respond(meters);
-  });
-})();
diff --git a/views/ngXosViews/ceilometerDashboard/spec/ceilometer.test.js b/views/ngXosViews/ceilometerDashboard/spec/ceilometer.test.js
deleted file mode 100644
index 053481e..0000000
--- a/views/ngXosViews/ceilometerDashboard/spec/ceilometer.test.js
+++ /dev/null
@@ -1,142 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('In Ceilometer View', () => {
-
-  var scope, element, vm, httpBackend;
-
-  beforeEach(module('xos.ceilometerDashboard'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(($httpBackend, $rootScope) => {
-    httpBackend = $httpBackend;
-    scope = $rootScope.$new();
-  }))
-
-  describe('The dashboard', () => {
-    beforeEach(inject(function($httpBackend, $compile){
-      element = angular.element('<ceilometer-dashboard></ceilometer-dashboard>');
-      $compile(element)(scope);
-      scope.$digest();
-      vm = element.isolateScope().vm;
-      httpBackend.flush();
-    }));
-
-    xdescribe('when loading service list', () => {
-      it('should append the list to the scope', () => {
-        expect(vm.services.length).toBe(2);
-        expect(vm.services[0].slices.length).toBe(2);
-        expect(vm.services[1].slices.length).toBe(2);
-      });
-    });
-
-    xdescribe('when a slice is selected', () => {
-      it('should load corresponding meters', () => {
-        vm.loadSliceMeter(vm.services[0].slices[0]);
-
-        httpBackend.flush();
-
-        expect(vm.selectedSlice).toEqual('slice-a-1');
-        expect(vm.selectedTenant).toEqual('id-a-1');
-
-        expect(Object.keys(vm.selectedResources).length).toBe(2);
-        expect(vm.selectedResources['resource-1'].length).toBe(2);
-        expect(vm.selectedResources['resource-2'].length).toBe(1);
-      });
-    });
-  });
-
-  describe('the sample view', () => {
-    beforeEach(inject(function($httpBackend, $compile, $stateParams){
-
-      $stateParams.name = 'fakeName';
-      $stateParams.tenant = 'fakeTenant';
-
-      element = angular.element('<ceilometer-samples></ceilometer-samples>');
-      $compile(element)(scope);
-      scope.$digest();
-      vm = element.isolateScope().vm;
-      httpBackend.flush();
-    }));
-
-    it('should group samples by resource_id', () => {
-      expect(Object.keys(vm.samplesList.fakeTenant).length).toBe(2)
-      expect(Object.keys(vm.samplesList.anotherTenant).length).toBe(3)
-      expect(Object.keys(vm.samplesList.thirdTenant).length).toBe(1)
-    });
-
-    xit('should add the comparable samples to the dropdown list', () => {
-      console.log(vm.sampleLabels);
-      expect(vm.sampleLabels[0].id).toEqual('anotherTenant')
-      expect(vm.sampleLabels[1].id).toEqual('thirdTenant')
-    });
-
-    it('should add the selected meter to the chart', () => {
-      expect(vm.chart.labels.length).toBe(2);
-      expect(vm.chart.series[0]).toBe('fakeTenant');
-      expect(vm.chart.data[0].length).toBe(2);
-      expect(vm.chart.data[0][0]).toBe(110);
-      expect(vm.chart.data[0][1]).toBe(120);
-      expect(vm.chartMeters[0].resource_id).toBe('fakeTenant')
-      expect(vm.chartMeters[0].resource_name).toBe('fakeName')
-    });
-
-    it('should add a sample to the chart', () => {
-      vm.addMeterToChart('anotherTenant');
-      expect(vm.chart.labels.length).toBe(3);
-      expect(vm.chart.data[1].length).toBe(3);
-      expect(vm.chart.data[1][0]).toBe(210);
-      expect(vm.chart.data[1][1]).toBe(220);
-      expect(vm.chart.data[1][2]).toBe(230);
-      expect(vm.chartMeters[1].resource_id).toBe('anotherTenant')
-      expect(vm.chartMeters[1].resource_name).toBe('anotherName')
-    });
-
-    it('should remove a sample from the chart', () => {
-      // for simplyvity add a tenant (it's tested)
-      vm.addMeterToChart('anotherTenant');
-      vm.removeFromChart(vm.chartMeters[0]);
-      expect(vm.chart.data[0].length).toBe(3);
-      expect(vm.chart.data[0][0]).toBe(210);
-      expect(vm.chart.data[0][1]).toBe(220);
-      expect(vm.chart.data[0][2]).toBe(230);
-      expect(vm.chartMeters[0].resource_id).toBe('anotherTenant')
-      expect(vm.chartMeters[0].resource_name).toBe('anotherName')
-    });
-
-    describe('The format sample labels method', () => {
-      xit('should create an array of unique labels', () => {
-        // unique because every resource has multiple samples (time-series)
-        const samples = [
-          {resource_id: 1, resource_name: 'fakeName'},
-          {resource_id: 1, resource_name: 'fakeName'},
-          {resource_id: 2, resource_name: 'anotherName'},
-          {resource_id: 2, resource_name: 'anotherName'}
-        ];
-
-        const result = vm.formatSamplesLabels(samples);
-
-        expect(result.length).toBe(2);
-        expect(result[0]).toEqual({id: 1, name: 'fakeName'});
-        expect(result[1]).toEqual({id: 2, name: 'anotherName'});
-      });
-    });
-  });
-});
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/src/css/ceilometerDashboard.css b/views/ngXosViews/ceilometerDashboard/src/css/ceilometerDashboard.css
deleted file mode 100644
index 4d263d5..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/css/ceilometerDashboard.css
+++ /dev/null
@@ -1,283 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosCeilometerDashboard{
-  position: relative;
-}
-
-/* Panel Layout */
-.panel {
-  margin-top: 10px;
-}
-
-.panel-body:not(:first-child) {
-  border-top: 1px solid #e3e3e3;
-}
-
-.panel-body .row {
-  margin-top: 10px;
-}
-
-/* Chart details */
-.chart {
-  width: 100%;
-  height: 300px;
-}
-
-.btn-chart, .btn-chart:hover {
-  color: #fff;
-}
-
-.side-container {
-  position: relative;
-}
-
-.service-list {
-  margin-top: -10px;
-}
-
-.service-list h3 {
-  margin-top: 0px;
-  margin-bottom: 0px;
-}
-
-.service-list a {
-  text-decoration: none;
-  color: #333;
-}
-
-.meters, .stats {
-  margin-top: 25px;
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  margin-bottom: 50px;
-}
-
-/* LOADER */
-.loader {
-  font-size: 10px;
-  margin: 150px auto;
-  text-indent: -9999em;
-  width: 11em;
-  height: 11em;
-  border-radius: 50%;
-  background: #ffffff;
-  background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  position: relative;
-  -webkit-animation: load3 1.4s infinite linear;
-  animation: load3 1.4s infinite linear;
-  -webkit-transform: translateZ(0);
-  -ms-transform: translateZ(0);
-  transform: translateZ(0);
-}
-.loader:before {
-  width: 50%;
-  height: 50%;
-  background: #105E9E;
-  border-radius: 100% 0 0 0;
-  position: absolute;
-  top: 0;
-  left: 0;
-  content: '';
-}
-.loader:after {
-  background: #fff;
-  width: 75%;
-  height: 75%;
-  border-radius: 50%;
-  content: '';
-  margin: auto;
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-}
-@-webkit-keyframes load3 {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@keyframes load3 {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-
-/* VIEW ANIMATION */
-
-[ui-view] {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  margin-bottom: 100px;
-}
-
-/* FROM DASHBOARD TO DETAIL */
-
-/* dash out */
-[ui-view].ceilometerDashboard.ng-leave {
-  animation:1s bounceOutLeft ease; 
-}
-/* samples in */
-[ui-view].samples.ng-enter {
-  animation:1s bounceInRight ease;
-}
-
-/* FROM DETAIL TO DASHBOARD */
-
-/* samples out */
-[ui-view].samples.ng-leave {
-  animation:1s bounceOutRight ease; 
-}
-/* dash in */
-[ui-view].ceilometerDashboard.ng-enter {
-  animation:1s bounceInLeft ease;
-}
-
-/* COLUMS ANIMATION */
-/* when showing the thing */
-.animate .animate-slide-left.ng-hide-remove { 
-  animation:0.5s bounceInRight ease; 
-}
-
-/* when hiding the picture */
-.animate .animate-slide-left.ng-hide-add {
-  animation:0.5s bounceOutRight ease;
-}
-
-/* ANIMATIONS */
-
-@keyframes bounceInRight {
-  from, 60%, 75%, 90%, to {
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  from {
-    opacity: 0;
-    transform: translate3d(3000px, 0, 0);
-  }
-
-  60% {
-    opacity: 1;
-    transform: translate3d(-25px, 0, 0);
-  }
-
-  75% {
-    transform: translate3d(10px, 0, 0);
-  }
-
-  90% {
-    transform: translate3d(-5px, 0, 0);
-  }
-
-  to {
-    transform: none;
-  }
-}
-
-@keyframes bounceInLeft {
-  from, 60%, 75%, 90%, to {
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  0% {
-    opacity: 0;
-    transform: translate3d(-3000px, 0, 0);
-  }
-
-  60% {
-    opacity: 1;
-    transform: translate3d(25px, 0, 0);
-  }
-
-  75% {
-    transform: translate3d(-10px, 0, 0);
-  }
-
-  90% {
-    transform: translate3d(5px, 0, 0);
-  }
-
-  to {
-    transform: none;
-  }
-}
-
-@keyframes slideInUp {
-  from {
-    transform: translate3d(0, 100%, 0);
-    visibility: visible;
-  }
-
-  to {
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-@keyframes bounceOutRight {
-  20% {
-    opacity: 1;
-    transform: translate3d(-20px, 0, 0);
-  }
-
-  to {
-    opacity: 0;
-    transform: translate3d(2000px, 0, 0);
-  }
-}
-
-@keyframes bounceOutLeft {
-  20% {
-    opacity: 1;
-    transform: translate3d(20px, 0, 0);
-  }
-
-  to {
-    opacity: 0;
-    transform: translate3d(-2000px, 0, 0);
-  }
-}
-
-@keyframes slideOutDown {
-  from {
-    transform: translate3d(0, 0, 0);
-  }
-
-  to {
-    visibility: hidden;
-    transform: translate3d(0, 100%, 0);
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/src/css/dev.css b/views/ngXosViews/ceilometerDashboard/src/css/dev.css
deleted file mode 100644
index 7f612a0..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/css/dev.css
+++ /dev/null
@@ -1,32 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-@media (min-width: 768px) {
-  #xosCeilometerDashboard {
-    position: absolute;
-    top: 100px;
-    left: 20%;
-    width: 80%;
-  }
-}
-
-@media (min-width: 768px) {
-  #xosCeilometerDashboard {
-    margin: 10px
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/src/css/main.css b/views/ngXosViews/ceilometerDashboard/src/css/main.css
deleted file mode 100644
index e41be01..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/css/main.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
diff --git a/views/ngXosViews/ceilometerDashboard/src/icons/README.md b/views/ngXosViews/ceilometerDashboard/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/src/index.html b/views/ngXosViews/ceilometerDashboard/src/index.html
deleted file mode 100644
index 35d50f5..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/index.html
+++ /dev/null
@@ -1,61 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta name="viewport" content="width=device-width, initial-scale=1, max-scale=1">
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower --><!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/ceilometerDashboard.css">
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-<div ng-app="xos.ceilometerDashboard" id="xosCeilometerDashboard">
-  <div ui-view ng-class="stateName"></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/ui.bootstrap/src/accordion/accordion.js"></script>
-<script src="vendor/ui.bootstrap/src/collapse/collapse.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower --><!-- endjs -->
-
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/stats.directive.js"></script>
-<script src="/.tmp/samples.directive.js"></script>
-<script src="/.tmp/rest.js"></script>
-<script src="/.tmp/dashboard.directive.js"></script>
-<!-- endinject -->
diff --git a/views/ngXosViews/ceilometerDashboard/src/js/dashboard.directive.js b/views/ngXosViews/ceilometerDashboard/src/js/dashboard.directive.js
deleted file mode 100644
index dbf24bc..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/js/dashboard.directive.js
+++ /dev/null
@@ -1,180 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 3/21/16.
- */
-
-(function () {
-  'use strict';
-
-  angular.module('xos.ceilometerDashboard')
-    .directive('ceilometerDashboard', function(_){
-      return {
-        restrict: 'E',
-        scope: {},
-        bindToController: true,
-        controllerAs: 'vm',
-        templateUrl: 'templates/ceilometer-dashboard.tpl.html',
-        controller: function(Ceilometer){
-
-          this.showStats = false;
-
-          // this open the accordion
-          this.accordion = {
-            open: {}
-          };
-
-          /**
-           * Open the active panel base on the service stored values
-           */
-          this.openPanels = () => {
-            if(Ceilometer.selectedService){
-              this.accordion.open[Ceilometer.selectedService] = true;
-              if(Ceilometer.selectedSlice){
-                this.loadSliceMeter(Ceilometer.selectedSlice, Ceilometer.selectedService);
-                this.selectedSlice = Ceilometer.selectedSlice;
-                if(Ceilometer.selectedResource){
-                  this.selectedResource = Ceilometer.selectedResource;
-                }
-              }
-            }
-          };
-
-          /**
-           * Load the list of service and slices
-           */
-          this.loadMappings = () => {
-            this.loader = true;
-            Ceilometer.getMappings()
-              .then((services) => {
-
-                // rename thing in UI
-                services.map((service) => {
-                  if(service.service === 'service_ONOS_vBNG'){
-                    service.service = 'ONOS_FABRIC';
-                  }
-                  if(service.service === 'service_ONOS_vOLT'){
-                    service.service = 'ONOS_CORD';
-                  }
-
-                  service.slices.map(s => {
-                    if(s.slice === 'mysite_onos_volt'){
-                      s.slice = 'ONOS_CORD';
-                    }
-                    if(s.slice === 'mysite_onos_vbng'){
-                      s.slice = 'ONOS_FABRIC';
-                    }
-                    if(s.slice === 'mysite_vbng'){
-                      s.slice = 'mysite_vRouter';
-                    }
-                  });
-
-                  return service;
-                });
-                // end rename thing in UI
-
-                this.services = services;
-                this.openPanels();
-              })
-              .catch(err => {
-                this.error = (err.data && err.data.detail) ? err.data.detail : 'An Error occurred. Please try again later.';
-              })
-              .finally(() => {
-                this.loader = false;
-              });
-          };
-
-          this.loadMappings();
-
-          /**
-           * Load the list of a single slice
-           */
-          this.loadSliceMeter = (slice, service_name) => {
-
-            Ceilometer.selectedSlice = null;
-            Ceilometer.selectedService = null;
-            Ceilometer.selectedResources = null;
-
-            // visualization info
-            this.loader = true;
-            this.error = null;
-            this.ceilometerError = null;
-
-            Ceilometer.getMeters({tenant: slice.project_id})
-              .then((sliceMeters) => {
-                this.selectedSlice = slice.slice;
-                this.selectedTenant = slice.project_id;
-
-                // store the status
-                Ceilometer.selectedSlice = slice;
-                Ceilometer.selectedService = service_name;
-
-                // rename things in UI
-                sliceMeters.map(m => {
-                  m.resource_name = m.resource_name.replace('mysite_onos_vbng', 'ONOS_FABRIC');
-                  m.resource_name = m.resource_name.replace('mysite_onos_volt', 'ONOS_CORD');
-                  m.resource_name = m.resource_name.replace('mysite_vbng', 'mysite_vRouter');
-                  return m;
-                });
-                // end rename things in UI
-
-                this.selectedResources = _.groupBy(sliceMeters, 'resource_name');
-
-                // hacky
-                if(Ceilometer.selectedResource){
-                  this.selectedMeters = this.selectedResources[Ceilometer.selectedResource];
-                }
-              })
-              .catch(err => {
-
-                // this means that ceilometer is not yet ready
-                if(err.status === 503){
-                  return this.ceilometerError = err.data.detail.specific_error;
-                }
-
-                this.ceilometerError = (err.data && err.data.detail && err.data.detail.specific_error) ? err.data.detail.specific_error : 'An Error occurred. Please try again later.';
-              })
-              .finally(() => {
-                this.loader = false;
-              });
-          };
-
-          /**
-           * Select Meters for a resource
-           *
-           * @param Array meters The list of selected resources
-           * @returns void
-           */
-          this.selectedMeters = null;
-          this.selectMeters = (meters, resource) => {
-            this.selectedMeters = meters;
-
-            Ceilometer.selectedResource = resource;
-            this.selectedResource = resource;
-          }
-
-        }
-      };
-    })
-})();
-
diff --git a/views/ngXosViews/ceilometerDashboard/src/js/main.js b/views/ngXosViews/ceilometerDashboard/src/js/main.js
deleted file mode 100644
index a15a1ed..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/js/main.js
+++ /dev/null
@@ -1,50 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.ceilometerDashboard', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers',
-  'ngAnimate',
-  'chart.js',
-  'ui.bootstrap.accordion'
-])
-.config(($stateProvider, $urlRouterProvider) => {
-  $stateProvider
-  .state('ceilometerDashboard', {
-    url: '/',
-    template: '<ceilometer-dashboard></ceilometer-dashboard>'
-  })
-  .state('samples', {
-    url: '/:name/:tenant/samples',
-    template: '<ceilometer-samples></ceilometer-samples>'
-  });
-  $urlRouterProvider.otherwise('/');
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.run(function($rootScope){
-  $rootScope.stateName = 'ceilometerDashboard';
-  $rootScope.$on('$stateChangeStart', (event, toState) => {
-    $rootScope.stateName = toState.name;
-  })
-});
diff --git a/views/ngXosViews/ceilometerDashboard/src/js/rest.js b/views/ngXosViews/ceilometerDashboard/src/js/rest.js
deleted file mode 100644
index b9ccd2e..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/js/rest.js
+++ /dev/null
@@ -1,97 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 3/21/16.
- */
-
-(function () {
-  'use strict';
-
-  angular.module('xos.ceilometerDashboard')
-    .service('Ceilometer', function($http, $q){
-
-      this.getMappings = () => {
-        let deferred = $q.defer();
-
-        $http.get('/api/tenant/monitoring/dashboard/xos-slice-service-mapping/')
-          .then((res) => {
-            deferred.resolve(res.data)
-          })
-          .catch((e) => {
-            deferred.reject(e);
-          });
-
-        return deferred.promise;
-      };
-
-      this.getMeters = (params) => {
-        let deferred = $q.defer();
-
-        $http.get('/api/tenant/monitoring/dashboard/meters/', {cache: true, params: params})
-          // $http.get('../meters_mock.json', {cache: true})
-          .then((res) => {
-            deferred.resolve(res.data)
-          })
-          .catch((e) => {
-            deferred.reject(e);
-          });
-
-        return deferred.promise;
-      };
-
-      this.getSamples = (name, limit = 10) => {
-        let deferred = $q.defer();
-
-        $http.get(`/api/tenant/monitoring/dashboard/metersamples/`, {params: {meter: name, limit: limit}})
-          .then((res) => {
-            deferred.resolve(res.data)
-          })
-          .catch((e) => {
-            deferred.reject(e);
-          });
-
-        return deferred.promise;
-      };
-
-      this.getStats = (options) => {
-        let deferred = $q.defer();
-
-        $http.get('/api/tenant/monitoring/dashboard/meterstatistics/', {cache: true, params: options})
-          // $http.get('../stats_mock.son', {cache: true})
-          .then((res) => {
-            deferred.resolve(res.data);
-          })
-          .catch((e) => {
-            deferred.reject(e);
-          });
-
-        return deferred.promise;
-      };
-
-      // hold dashboard status (opened service, slice, resource)
-      this.selectedService = null;
-      this.selectedSlice = null;
-      this.selectedResource = null;
-    });
-})();
-
diff --git a/views/ngXosViews/ceilometerDashboard/src/js/samples.directive.js b/views/ngXosViews/ceilometerDashboard/src/js/samples.directive.js
deleted file mode 100644
index 470667d..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/js/samples.directive.js
+++ /dev/null
@@ -1,259 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 3/21/16.
- */
-
-(function () {
-  'use strict';
-
-  angular.module('xos.ceilometerDashboard')
-  .directive('ceilometerSamples', function(_, $stateParams, $interval){
-    return {
-      restrict: 'E',
-      scope: {},
-      bindToController: true,
-      controllerAs: 'vm',
-      templateUrl: 'templates/ceilometer-samples.tpl.html',
-      controller: function(Ceilometer) {
-
-        this.chartColors = [
-          '#286090',
-          '#F7464A',
-          '#46BFBD',
-          '#FDB45C',
-          '#97BBCD',
-          '#4D5360',
-          '#8c4f9f'
-        ];
-
-        this.chart = {
-          series: [],
-          labels: [],
-          data: []
-        }
-
-        Chart.defaults.global.colours = this.chartColors;
-
-        this.chartType = 'line';
-
-        // TODO
-        // check for name, if
-        // - broadview.pt.packet-trace-lag-resolution
-        // - broadview.pt.packet-trace-ecmp-resolution
-        // draw a pie
-        
-        const pieStats = [
-          'broadview.pt.packet-trace-lag-resolution',
-          'broadview.pt.packet-trace-ecmp-resolution'
-        ];
-        let isApie = false;
-
-        let refreshInterval = 60 * 1000;
-
-        if($stateParams.name && $stateParams.tenant){
-          this.name = $stateParams.name;
-          // TODO rename tenant in resource_id
-          this.tenant = $stateParams.tenant;
-
-          if(pieStats.indexOf(this.name) > -1){
-            isApie = true;
-            this.chartType = 'pie';
-            refreshInterval = 10 * 1000;
-          }
-        }
-        else{
-          throw new Error('Missing Name and Tenant Params!');
-        }
-
-        /**
-         * Goes trough the array and format date to be used as labels
-         *
-         * @param Array data
-         * @returns Array a list of labels
-         */
-
-        this.getLabels = (data) => {
-          return data.reduce((list, item) => {
-            let date = new Date(item.timestamp);
-            list.push(`${date.getHours()}:${(date.getMinutes()<10?'0':'') + date.getMinutes()}:${date.getSeconds()}`);
-            return list;
-          }, []);
-        };
-
-        /**
-         * Goes trough the array and return a flat array of values
-         *
-         * @param Array data
-         * @returns Array a list of values
-         */
-
-        this.getData = (data) => {
-          return data.reduce((list, item) => {
-            list.push(item.volume);
-            return list;
-          }, []);
-        }
-
-        /**
-         * Add a samples to the chart
-         *
-         * @param string resource_id
-         */
-        this.chartMeters = [];
-        this.addMeterToChart = (resource_id) => {
-          const resourcePos = _.findIndex(this.chartMeters, m => m.resource_id === resource_id);
-          // if this meter is not yet rendered
-          if (resourcePos < 0) {
-            this.chart['data'].push(this.getData(_.sortBy(this.samplesList[resource_id], 'timestamp')));
-            this.chart['labels'] = this.getLabels(_.sortBy(this.samplesList[resource_id], 'timestamp'));
-            this.chart['series'].push(resource_id);
-            this.chartMeters.push(this.samplesList[resource_id][0]); //use the 0 as are all samples for the same resource and I need the name
-            _.remove(this.sampleLabels, {id: resource_id});
-          }
-          else {
-            this.chart['data'][resourcePos] = this.getData(_.sortBy(this.samplesList[resource_id], 'timestamp'));
-            this.chart['labels'] = this.getLabels(_.sortBy(this.samplesList[resource_id], 'timestamp'));
-            this.chart['series'][resourcePos] = resource_id;
-          }
-        }
-
-        this.removeFromChart = (meter) => {
-          this.chart.data.splice(this.chart.series.indexOf(meter.resource_id), 1);
-          this.chart.series.splice(this.chart.series.indexOf(meter.resource_id), 1);
-          this.chartMeters.splice(_.findIndex(this.chartMeters, {resource_id: meter.resource_id}), 1);
-          this.sampleLabels.push({
-            id: meter.resource_id,
-            name: meter.resource_name || meter.resource_id
-          })
-        };
-
-        /**
-         * Format samples to create a list of labels and ids
-         */
-
-        this.formatSamplesLabels = (samples) => {
-
-          return _.uniq(samples, 'resource_id')
-            .reduce((labels, item) => {
-              labels.push({
-                id: item.resource_id,
-                name: item.resource_name || item.resource_id
-              });
-
-              return labels;
-            }, []);
-        }
-
-        /**
-        * Format data series in pie chart val
-        */
-       
-        this.formatPieChartData = (samples) => {
-
-          this.chart['labels'] = samples[0].metadata['lag-members'].replace(/\[|\]|'| /g, '').split(',');
-          this.chart.options = {
-            legend: {
-              display: true
-            }
-          };
-          samples = _.groupBy(samples, i => i.metadata['dst-lag-member']);
-          
-          // TODO show percentage in pie
-          Chart.defaults.global.tooltipTemplate = '<%if (label){%><%=label%>: <%}%><%= value %>%';
-
-          let data = _.reduce(this.chart.labels, (data, item) => {
-            let length = samples[item] ? samples[item].length : 0;
-            data.push(length);
-            return data;
-          }, []);
-
-          let total = _.reduce(data, (d, t) => d + t);
-
-          let percent = _.map(data, d => Math.round((d / total) * 100));
-
-          console.log(total);
-
-          this.chart['data'] = percent;
-        };
-
-
-        /**
-         * Load the samples and format data
-         */
-
-        this.loader = true;
-        this.showSamples = () => {
-          // Ceilometer.getSamples(this.name, this.tenant) //fetch one
-          let p;
-          if (isApie){
-            p = Ceilometer.getSamples(this.name, 30) //fetch all
-          }
-          else{
-            p = Ceilometer.getSamples(this.name) //fetch all
-          }
-
-          p.then(res => {
-
-            // rename things in UI
-            res.map(m => {
-              m.resource_name = m.resource_name.replace('mysite_onos_vbng', 'ONOS_FABRIC');
-              m.resource_name = m.resource_name.replace('mysite_onos_volt', 'ONOS_CORD');
-              m.resource_name = m.resource_name.replace('mysite_vbng', 'mysite_vRouter');
-              return m;
-            });
-            // end rename things in UI
-
-            // if I have to draw a pie skip the rest
-            if(isApie){
-
-              // TODO format data as pie
-              this.formatPieChartData(res);
-              return;
-            }
-
-            // setup data for visualization
-            this.samplesList = _.groupBy(res, 'resource_id');
-            this.sampleLabels = this.formatSamplesLabels(res);
-
-            // add current meter to chart
-            this.addMeterToChart(this.tenant);
-
-          })
-          .catch(err => {
-            this.error = err.data.detail;
-          })
-          .finally(() => {
-            this.loader = false;
-          });
-        };
-
-        $interval(() => {
-          this.showSamples();
-        }, refreshInterval)
-        this.showSamples();
-      }
-    }
-  });
-})();
-
diff --git a/views/ngXosViews/ceilometerDashboard/src/js/stats.directive.js b/views/ngXosViews/ceilometerDashboard/src/js/stats.directive.js
deleted file mode 100644
index 593dbf3..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/js/stats.directive.js
+++ /dev/null
@@ -1,72 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 3/21/16.
- */
-
-(function () {
-  'use strict';
-
-  angular.module('xos.ceilometerDashboard')
-    .directive('ceilometerStats', function(){
-      return {
-        restrict: 'E',
-        scope: {
-          name: '=name',
-          tenant: '=tenant'
-        },
-        bindToController: true,
-        controllerAs: 'vm',
-        templateUrl: 'templates/ceilometer-stats.tpl.html',
-        controller: function($scope, Ceilometer) {
-
-          this.getStats = (tenant) => {
-            this.loader = true;
-            Ceilometer.getStats({tenant: tenant})
-              .then(res => {
-                res.map(m => {
-                  m.resource_name = m.resource_name.replace('mysite_onos_vbng', 'ONOS_FABRIC');
-                  m.resource_name = m.resource_name.replace('mysite_onos_volt', 'ONOS_CORD');
-                  m.resource_name = m.resource_name.replace('mysite_vbng', 'mysite_vRouter');
-                  return m;
-                });
-                this.stats = res;
-              })
-              .catch(err => {
-                this.error = err.data;
-              })
-              .finally(() => {
-                this.loader = false;
-              });
-          };
-
-          $scope.$watch(() => this.name, (val) => {
-            if(val){
-              this.getStats(this.tenant);
-            }
-          });
-        }
-      }
-    });
-})();
-
diff --git a/views/ngXosViews/ceilometerDashboard/src/meters_mock.json b/views/ngXosViews/ceilometerDashboard/src/meters_mock.json
deleted file mode 100644
index 7ff0c68..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/meters_mock.json
+++ /dev/null
@@ -1,1266 +0,0 @@
-[
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "instance", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "197bc772-ff13-4b68-96e6-d4a4b1730fe7", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_onos_volt-4", 
-        "meter_id": "MTk3YmM3NzItZmYxMy00YjY4LTk2ZTYtZDRhNGIxNzMwZmU3K2luc3RhbmNl\n", 
-        "project_id": "bfef8341327245d682c7bada50aceecb", 
-        "type": "gauge", 
-        "unit": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "instance", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "bde67a22-7579-4097-9406-c15eb2b9ae27", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_onos_vbng-2", 
-        "meter_id": "YmRlNjdhMjItNzU3OS00MDk3LTk0MDYtYzE1ZWIyYjlhZTI3K2luc3RhbmNl\n", 
-        "project_id": "7c918e6765c24ee281f3ee8692fd102c", 
-        "type": "gauge", 
-        "unit": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "instance", 
-        "service": "Other", 
-        "resource_id": "0a802169-5918-4c28-9014-635ae6602cdb", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_volt-5", 
-        "meter_id": "MGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiK2luc3RhbmNl\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "instance", 
-        "service": "service_vcpe", 
-        "resource_id": "f71e7c55-2435-45a4-aa9a-073f97ceccbc", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_vcpe-7", 
-        "meter_id": "ZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjK2luc3RhbmNl\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "instance", 
-        "service": "Other", 
-        "resource_id": "98535996-e184-4996-a28e-61647e5d31d0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_vbng-6", 
-        "meter_id": "OTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwK2luc3RhbmNl\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_clients", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "instance", 
-        "service": "Other", 
-        "resource_id": "f5c71396-9092-42da-91ec-434259bde2ef", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_clients-3", 
-        "meter_id": "ZjVjNzEzOTYtOTA5Mi00MmRhLTkxZWMtNDM0MjU5YmRlMmVmK2luc3RhbmNl\n", 
-        "project_id": "f884c440474b40808a8adcdece5f45ef", 
-        "type": "gauge", 
-        "unit": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_ceilometer", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "instance", 
-        "service": "service_ceilometer", 
-        "resource_id": "bdb0ff14-e848-446c-acb4-63e232487dc0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_ceilometer-8", 
-        "meter_id": "YmRiMGZmMTQtZTg0OC00NDZjLWFjYjQtNjNlMjMyNDg3ZGMwK2luc3RhbmNl\n", 
-        "project_id": "920d70bc63574552bbb3c3fb262ee1bc", 
-        "type": "gauge", 
-        "unit": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "197bc772-ff13-4b68-96e6-d4a4b1730fe7", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_onos_volt-4", 
-        "meter_id": "MTk3YmM3NzItZmYxMy00YjY4LTk2ZTYtZDRhNGIxNzMwZmU3K21lbW9yeQ==\n", 
-        "project_id": "bfef8341327245d682c7bada50aceecb", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "bde67a22-7579-4097-9406-c15eb2b9ae27", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_onos_vbng-2", 
-        "meter_id": "YmRlNjdhMjItNzU3OS00MDk3LTk0MDYtYzE1ZWIyYjlhZTI3K21lbW9yeQ==\n", 
-        "project_id": "7c918e6765c24ee281f3ee8692fd102c", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory", 
-        "service": "Other", 
-        "resource_id": "0a802169-5918-4c28-9014-635ae6602cdb", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_volt-5", 
-        "meter_id": "MGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiK21lbW9yeQ==\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory", 
-        "service": "service_vcpe", 
-        "resource_id": "f71e7c55-2435-45a4-aa9a-073f97ceccbc", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_vcpe-7", 
-        "meter_id": "ZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjK21lbW9yeQ==\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory", 
-        "service": "Other", 
-        "resource_id": "98535996-e184-4996-a28e-61647e5d31d0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_vbng-6", 
-        "meter_id": "OTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwK21lbW9yeQ==\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_clients", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory", 
-        "service": "Other", 
-        "resource_id": "f5c71396-9092-42da-91ec-434259bde2ef", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_clients-3", 
-        "meter_id": "ZjVjNzEzOTYtOTA5Mi00MmRhLTkxZWMtNDM0MjU5YmRlMmVmK21lbW9yeQ==\n", 
-        "project_id": "f884c440474b40808a8adcdece5f45ef", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_ceilometer", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory", 
-        "service": "service_ceilometer", 
-        "resource_id": "bdb0ff14-e848-446c-acb4-63e232487dc0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_ceilometer-8", 
-        "meter_id": "YmRiMGZmMTQtZTg0OC00NDZjLWFjYjQtNjNlMjMyNDg3ZGMwK21lbW9yeQ==\n", 
-        "project_id": "920d70bc63574552bbb3c3fb262ee1bc", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory.usage", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "197bc772-ff13-4b68-96e6-d4a4b1730fe7", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_onos_volt-4", 
-        "meter_id": "MTk3YmM3NzItZmYxMy00YjY4LTk2ZTYtZDRhNGIxNzMwZmU3K21lbW9yeS51c2FnZQ==\n", 
-        "project_id": "bfef8341327245d682c7bada50aceecb", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory.usage", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "bde67a22-7579-4097-9406-c15eb2b9ae27", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_onos_vbng-2", 
-        "meter_id": "YmRlNjdhMjItNzU3OS00MDk3LTk0MDYtYzE1ZWIyYjlhZTI3K21lbW9yeS51c2FnZQ==\n", 
-        "project_id": "7c918e6765c24ee281f3ee8692fd102c", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory.usage", 
-        "service": "Other", 
-        "resource_id": "0a802169-5918-4c28-9014-635ae6602cdb", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_volt-5", 
-        "meter_id": "MGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiK21lbW9yeS51c2FnZQ==\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory.usage", 
-        "service": "service_vcpe", 
-        "resource_id": "f71e7c55-2435-45a4-aa9a-073f97ceccbc", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_vcpe-7", 
-        "meter_id": "ZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjK21lbW9yeS51c2FnZQ==\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory.usage", 
-        "service": "Other", 
-        "resource_id": "98535996-e184-4996-a28e-61647e5d31d0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_vbng-6", 
-        "meter_id": "OTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwK21lbW9yeS51c2FnZQ==\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_clients", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory.usage", 
-        "service": "Other", 
-        "resource_id": "f5c71396-9092-42da-91ec-434259bde2ef", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_clients-3", 
-        "meter_id": "ZjVjNzEzOTYtOTA5Mi00MmRhLTkxZWMtNDM0MjU5YmRlMmVmK21lbW9yeS51c2FnZQ==\n", 
-        "project_id": "f884c440474b40808a8adcdece5f45ef", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_ceilometer", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "memory.usage", 
-        "service": "service_ceilometer", 
-        "resource_id": "bdb0ff14-e848-446c-acb4-63e232487dc0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_ceilometer-8", 
-        "meter_id": "YmRiMGZmMTQtZTg0OC00NDZjLWFjYjQtNjNlMjMyNDg3ZGMwK21lbW9yeS51c2FnZQ==\n", 
-        "project_id": "920d70bc63574552bbb3c3fb262ee1bc", 
-        "type": "gauge", 
-        "unit": "MB", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "197bc772-ff13-4b68-96e6-d4a4b1730fe7", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_onos_volt-4", 
-        "meter_id": "MTk3YmM3NzItZmYxMy00YjY4LTk2ZTYtZDRhNGIxNzMwZmU3K2NwdQ==\n", 
-        "project_id": "bfef8341327245d682c7bada50aceecb", 
-        "type": "cumulative", 
-        "unit": "ns", 
-        "description": "CPU time used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "bde67a22-7579-4097-9406-c15eb2b9ae27", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_onos_vbng-2", 
-        "meter_id": "YmRlNjdhMjItNzU3OS00MDk3LTk0MDYtYzE1ZWIyYjlhZTI3K2NwdQ==\n", 
-        "project_id": "7c918e6765c24ee281f3ee8692fd102c", 
-        "type": "cumulative", 
-        "unit": "ns", 
-        "description": "CPU time used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu", 
-        "service": "Other", 
-        "resource_id": "0a802169-5918-4c28-9014-635ae6602cdb", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_volt-5", 
-        "meter_id": "MGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiK2NwdQ==\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "cumulative", 
-        "unit": "ns", 
-        "description": "CPU time used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu", 
-        "service": "service_vcpe", 
-        "resource_id": "f71e7c55-2435-45a4-aa9a-073f97ceccbc", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_vcpe-7", 
-        "meter_id": "ZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjK2NwdQ==\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "cumulative", 
-        "unit": "ns", 
-        "description": "CPU time used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu", 
-        "service": "Other", 
-        "resource_id": "98535996-e184-4996-a28e-61647e5d31d0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_vbng-6", 
-        "meter_id": "OTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwK2NwdQ==\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "cumulative", 
-        "unit": "ns", 
-        "description": "CPU time used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_clients", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu", 
-        "service": "Other", 
-        "resource_id": "f5c71396-9092-42da-91ec-434259bde2ef", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_clients-3", 
-        "meter_id": "ZjVjNzEzOTYtOTA5Mi00MmRhLTkxZWMtNDM0MjU5YmRlMmVmK2NwdQ==\n", 
-        "project_id": "f884c440474b40808a8adcdece5f45ef", 
-        "type": "cumulative", 
-        "unit": "ns", 
-        "description": "CPU time used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_ceilometer", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu", 
-        "service": "service_ceilometer", 
-        "resource_id": "bdb0ff14-e848-446c-acb4-63e232487dc0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_ceilometer-8", 
-        "meter_id": "YmRiMGZmMTQtZTg0OC00NDZjLWFjYjQtNjNlMjMyNDg3ZGMwK2NwdQ==\n", 
-        "project_id": "920d70bc63574552bbb3c3fb262ee1bc", 
-        "type": "cumulative", 
-        "unit": "ns", 
-        "description": "CPU time used"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu_util", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "197bc772-ff13-4b68-96e6-d4a4b1730fe7", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_onos_volt-4", 
-        "meter_id": "MTk3YmM3NzItZmYxMy00YjY4LTk2ZTYtZDRhNGIxNzMwZmU3K2NwdV91dGls\n", 
-        "project_id": "bfef8341327245d682c7bada50aceecb", 
-        "type": "gauge", 
-        "unit": "%", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu_util", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "bde67a22-7579-4097-9406-c15eb2b9ae27", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_onos_vbng-2", 
-        "meter_id": "YmRlNjdhMjItNzU3OS00MDk3LTk0MDYtYzE1ZWIyYjlhZTI3K2NwdV91dGls\n", 
-        "project_id": "7c918e6765c24ee281f3ee8692fd102c", 
-        "type": "gauge", 
-        "unit": "%", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu_util", 
-        "service": "Other", 
-        "resource_id": "0a802169-5918-4c28-9014-635ae6602cdb", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_volt-5", 
-        "meter_id": "MGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiK2NwdV91dGls\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "%", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu_util", 
-        "service": "service_vcpe", 
-        "resource_id": "f71e7c55-2435-45a4-aa9a-073f97ceccbc", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_vcpe-7", 
-        "meter_id": "ZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjK2NwdV91dGls\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "%", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu_util", 
-        "service": "Other", 
-        "resource_id": "98535996-e184-4996-a28e-61647e5d31d0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_vbng-6", 
-        "meter_id": "OTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwK2NwdV91dGls\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "%", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_clients", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu_util", 
-        "service": "Other", 
-        "resource_id": "f5c71396-9092-42da-91ec-434259bde2ef", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_clients-3", 
-        "meter_id": "ZjVjNzEzOTYtOTA5Mi00MmRhLTkxZWMtNDM0MjU5YmRlMmVmK2NwdV91dGls\n", 
-        "project_id": "f884c440474b40808a8adcdece5f45ef", 
-        "type": "gauge", 
-        "unit": "%", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_ceilometer", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "cpu_util", 
-        "service": "service_ceilometer", 
-        "resource_id": "bdb0ff14-e848-446c-acb4-63e232487dc0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "mysite_ceilometer-8", 
-        "meter_id": "YmRiMGZmMTQtZTg0OC00NDZjLWFjYjQtNjNlMjMyNDg3ZGMwK2NwdV91dGls\n", 
-        "project_id": "920d70bc63574552bbb3c3fb262ee1bc", 
-        "type": "gauge", 
-        "unit": "%", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "instance-00000002-197bc772-ff13-4b68-96e6-d4a4b1730fe7-tap27815de2-07", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap27815de2-07", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDItMTk3YmM3NzItZmYxMy00YjY4LTk2ZTYtZDRhNGIxNzMwZmU3LXRh\ncDI3ODE1ZGUyLTA3K25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "bfef8341327245d682c7bada50aceecb", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "instance-00000002-197bc772-ff13-4b68-96e6-d4a4b1730fe7-tap8f02bde6-e4", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap8f02bde6-e4", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDItMTk3YmM3NzItZmYxMy00YjY4LTk2ZTYtZDRhNGIxNzMwZmU3LXRh\ncDhmMDJiZGU2LWU0K25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "bfef8341327245d682c7bada50aceecb", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "instance-00000004-bde67a22-7579-4097-9406-c15eb2b9ae27-tap265bab7b-93", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap265bab7b-93", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDQtYmRlNjdhMjItNzU3OS00MDk3LTk0MDYtYzE1ZWIyYjlhZTI3LXRh\ncDI2NWJhYjdiLTkzK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "7c918e6765c24ee281f3ee8692fd102c", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "instance-00000004-bde67a22-7579-4097-9406-c15eb2b9ae27-tap6d838c10-05", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap6d838c10-05", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDQtYmRlNjdhMjItNzU3OS00MDk3LTk0MDYtYzE1ZWIyYjlhZTI3LXRh\ncDZkODM4YzEwLTA1K25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "7c918e6765c24ee281f3ee8692fd102c", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000001-0a802169-5918-4c28-9014-635ae6602cdb-tap5ef062b7-1d", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap5ef062b7-1d", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDEtMGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiLXRh\ncDVlZjA2MmI3LTFkK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000001-0a802169-5918-4c28-9014-635ae6602cdb-tap905990b8-db", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap905990b8-db", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDEtMGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiLXRh\ncDkwNTk5MGI4LWRiK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000001-0a802169-5918-4c28-9014-635ae6602cdb-tapa216d1f0-3e", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapa216d1f0-3e", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDEtMGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiLXRh\ncGEyMTZkMWYwLTNlK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000001-0a802169-5918-4c28-9014-635ae6602cdb-tapd80be99a-b6", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapd80be99a-b6", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDEtMGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiLXRh\ncGQ4MGJlOTlhLWI2K25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-00000006-f71e7c55-2435-45a4-aa9a-073f97ceccbc-tap5afd137f-19", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap5afd137f-19", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDYtZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjLXRh\ncDVhZmQxMzdmLTE5K25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-00000006-f71e7c55-2435-45a4-aa9a-073f97ceccbc-tap9a6306b4-7e", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap9a6306b4-7e", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDYtZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjLXRh\ncDlhNjMwNmI0LTdlK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-00000006-f71e7c55-2435-45a4-aa9a-073f97ceccbc-tapc59abc32-a4", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapc59abc32-a4", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDYtZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjLXRh\ncGM1OWFiYzMyLWE0K25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-00000006-f71e7c55-2435-45a4-aa9a-073f97ceccbc-tapf1e00a14-22", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapf1e00a14-22", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDYtZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjLXRh\ncGYxZTAwYTE0LTIyK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000007-98535996-e184-4996-a28e-61647e5d31d0-tapabf29bde-bc", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapabf29bde-bc", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDctOTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwLXRh\ncGFiZjI5YmRlLWJjK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000007-98535996-e184-4996-a28e-61647e5d31d0-tapbc16b000-82", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapbc16b000-82", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDctOTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwLXRh\ncGJjMTZiMDAwLTgyK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000007-98535996-e184-4996-a28e-61647e5d31d0-tape44bc1cc-46", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tape44bc1cc-46", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDctOTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwLXRh\ncGU0NGJjMWNjLTQ2K25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000007-98535996-e184-4996-a28e-61647e5d31d0-tape4f20024-47", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tape4f20024-47", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDctOTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwLXRh\ncGU0ZjIwMDI0LTQ3K25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_clients", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000003-f5c71396-9092-42da-91ec-434259bde2ef-tap3518d7f8-9f", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap3518d7f8-9f", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDMtZjVjNzEzOTYtOTA5Mi00MmRhLTkxZWMtNDM0MjU5YmRlMmVmLXRh\ncDM1MThkN2Y4LTlmK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f884c440474b40808a8adcdece5f45ef", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_clients", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000003-f5c71396-9092-42da-91ec-434259bde2ef-tap7409a9c5-e0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap7409a9c5-e0", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDMtZjVjNzEzOTYtOTA5Mi00MmRhLTkxZWMtNDM0MjU5YmRlMmVmLXRh\ncDc0MDlhOWM1LWUwK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f884c440474b40808a8adcdece5f45ef", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_clients", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000003-f5c71396-9092-42da-91ec-434259bde2ef-tapde69764f-3d", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapde69764f-3d", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDMtZjVjNzEzOTYtOTA5Mi00MmRhLTkxZWMtNDM0MjU5YmRlMmVmLXRh\ncGRlNjk3NjRmLTNkK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f884c440474b40808a8adcdece5f45ef", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_ceilometer", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-00000005-bdb0ff14-e848-446c-acb4-63e232487dc0-tap8d13e0d5-d2", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap8d13e0d5-d2", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDUtYmRiMGZmMTQtZTg0OC00NDZjLWFjYjQtNjNlMjMyNDg3ZGMwLXRh\ncDhkMTNlMGQ1LWQyK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "920d70bc63574552bbb3c3fb262ee1bc", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_ceilometer", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-00000005-bdb0ff14-e848-446c-acb4-63e232487dc0-tapa5d252a8-ae", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapa5d252a8-ae", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDUtYmRiMGZmMTQtZTg0OC00NDZjLWFjYjQtNjNlMjMyNDg3ZGMwLXRh\ncGE1ZDI1MmE4LWFlK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "920d70bc63574552bbb3c3fb262ee1bc", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_ceilometer", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.incoming.bytes.rate", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-00000005-bdb0ff14-e848-446c-acb4-63e232487dc0-tapb06a526b-03", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapb06a526b-03", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDUtYmRiMGZmMTQtZTg0OC00NDZjLWFjYjQtNjNlMjMyNDg3ZGMwLXRh\ncGIwNmE1MjZiLTAzK25ldHdvcmsuaW5jb21pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "920d70bc63574552bbb3c3fb262ee1bc", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "instance-00000002-197bc772-ff13-4b68-96e6-d4a4b1730fe7-tap27815de2-07", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap27815de2-07", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDItMTk3YmM3NzItZmYxMy00YjY4LTk2ZTYtZDRhNGIxNzMwZmU3LXRh\ncDI3ODE1ZGUyLTA3K25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "bfef8341327245d682c7bada50aceecb", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "instance-00000002-197bc772-ff13-4b68-96e6-d4a4b1730fe7-tap8f02bde6-e4", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap8f02bde6-e4", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDItMTk3YmM3NzItZmYxMy00YjY4LTk2ZTYtZDRhNGIxNzMwZmU3LXRh\ncDhmMDJiZGU2LWU0K25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "bfef8341327245d682c7bada50aceecb", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "instance-00000004-bde67a22-7579-4097-9406-c15eb2b9ae27-tap265bab7b-93", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap265bab7b-93", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDQtYmRlNjdhMjItNzU3OS00MDk3LTk0MDYtYzE1ZWIyYjlhZTI3LXRh\ncDI2NWJhYjdiLTkzK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "7c918e6765c24ee281f3ee8692fd102c", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_onos_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "instance-00000004-bde67a22-7579-4097-9406-c15eb2b9ae27-tap6d838c10-05", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap6d838c10-05", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDQtYmRlNjdhMjItNzU3OS00MDk3LTk0MDYtYzE1ZWIyYjlhZTI3LXRh\ncDZkODM4YzEwLTA1K25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "7c918e6765c24ee281f3ee8692fd102c", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000001-0a802169-5918-4c28-9014-635ae6602cdb-tap5ef062b7-1d", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap5ef062b7-1d", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDEtMGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiLXRh\ncDVlZjA2MmI3LTFkK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000001-0a802169-5918-4c28-9014-635ae6602cdb-tap905990b8-db", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap905990b8-db", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDEtMGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiLXRh\ncDkwNTk5MGI4LWRiK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000001-0a802169-5918-4c28-9014-635ae6602cdb-tapa216d1f0-3e", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapa216d1f0-3e", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDEtMGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiLXRh\ncGEyMTZkMWYwLTNlK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_volt", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000001-0a802169-5918-4c28-9014-635ae6602cdb-tapd80be99a-b6", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapd80be99a-b6", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDEtMGE4MDIxNjktNTkxOC00YzI4LTkwMTQtNjM1YWU2NjAyY2RiLXRh\ncGQ4MGJlOTlhLWI2K25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f506380a49a24389ae0d8469274e3279", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-00000006-f71e7c55-2435-45a4-aa9a-073f97ceccbc-tap5afd137f-19", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap5afd137f-19", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDYtZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjLXRh\ncDVhZmQxMzdmLTE5K25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-00000006-f71e7c55-2435-45a4-aa9a-073f97ceccbc-tap9a6306b4-7e", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap9a6306b4-7e", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDYtZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjLXRh\ncDlhNjMwNmI0LTdlK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-00000006-f71e7c55-2435-45a4-aa9a-073f97ceccbc-tapc59abc32-a4", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapc59abc32-a4", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDYtZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjLXRh\ncGM1OWFiYzMyLWE0K25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vcpe", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-00000006-f71e7c55-2435-45a4-aa9a-073f97ceccbc-tapf1e00a14-22", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapf1e00a14-22", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDYtZjcxZTdjNTUtMjQzNS00NWE0LWFhOWEtMDczZjk3Y2VjY2JjLXRh\ncGYxZTAwYTE0LTIyK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "61a5d4b37b5d43718854916079760c0d", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000007-98535996-e184-4996-a28e-61647e5d31d0-tapabf29bde-bc", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapabf29bde-bc", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDctOTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwLXRh\ncGFiZjI5YmRlLWJjK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000007-98535996-e184-4996-a28e-61647e5d31d0-tapbc16b000-82", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapbc16b000-82", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDctOTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwLXRh\ncGJjMTZiMDAwLTgyK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000007-98535996-e184-4996-a28e-61647e5d31d0-tape44bc1cc-46", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tape44bc1cc-46", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDctOTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwLXRh\ncGU0NGJjMWNjLTQ2K25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_vbng", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000007-98535996-e184-4996-a28e-61647e5d31d0-tape4f20024-47", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tape4f20024-47", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDctOTg1MzU5OTYtZTE4NC00OTk2LWEyOGUtNjE2NDdlNWQzMWQwLXRh\ncGU0ZjIwMDI0LTQ3K25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "c92cf450df4640d6952c0276730e5048", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_clients", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000003-f5c71396-9092-42da-91ec-434259bde2ef-tap3518d7f8-9f", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap3518d7f8-9f", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDMtZjVjNzEzOTYtOTA5Mi00MmRhLTkxZWMtNDM0MjU5YmRlMmVmLXRh\ncDM1MThkN2Y4LTlmK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f884c440474b40808a8adcdece5f45ef", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_clients", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000003-f5c71396-9092-42da-91ec-434259bde2ef-tap7409a9c5-e0", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap7409a9c5-e0", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDMtZjVjNzEzOTYtOTA5Mi00MmRhLTkxZWMtNDM0MjU5YmRlMmVmLXRh\ncDc0MDlhOWM1LWUwK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f884c440474b40808a8adcdece5f45ef", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_clients", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "Other", 
-        "resource_id": "instance-00000003-f5c71396-9092-42da-91ec-434259bde2ef-tapde69764f-3d", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapde69764f-3d", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDMtZjVjNzEzOTYtOTA5Mi00MmRhLTkxZWMtNDM0MjU5YmRlMmVmLXRh\ncGRlNjk3NjRmLTNkK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "f884c440474b40808a8adcdece5f45ef", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_ceilometer", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-00000005-bdb0ff14-e848-446c-acb4-63e232487dc0-tap8d13e0d5-d2", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tap8d13e0d5-d2", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDUtYmRiMGZmMTQtZTg0OC00NDZjLWFjYjQtNjNlMjMyNDg3ZGMwLXRh\ncDhkMTNlMGQ1LWQyK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "920d70bc63574552bbb3c3fb262ee1bc", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_ceilometer", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-00000005-bdb0ff14-e848-446c-acb4-63e232487dc0-tapa5d252a8-ae", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapa5d252a8-ae", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDUtYmRiMGZmMTQtZTg0OC00NDZjLWFjYjQtNjNlMjMyNDg3ZGMwLXRh\ncGE1ZDI1MmE4LWFlK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "920d70bc63574552bbb3c3fb262ee1bc", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "category": "Nova", 
-        "slice": "mysite_ceilometer", 
-        "user_id": "36e376b1072443758a0314f62fa8a414", 
-        "name": "network.outgoing.bytes.rate", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-00000005-bdb0ff14-e848-446c-acb4-63e232487dc0-tapb06a526b-03", 
-        "label": "", 
-        "source": "openstack", 
-        "resource_name": "tapb06a526b-03", 
-        "meter_id": "aW5zdGFuY2UtMDAwMDAwMDUtYmRiMGZmMTQtZTg0OC00NDZjLWFjYjQtNjNlMjMyNDg3ZGMwLXRh\ncGIwNmE1MjZiLTAzK25ldHdvcmsub3V0Z29pbmcuYnl0ZXMucmF0ZQ==\n", 
-        "project_id": "920d70bc63574552bbb3c3fb262ee1bc", 
-        "type": "gauge", 
-        "unit": "B/s", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/src/sass/main.scss b/views/ngXosViews/ceilometerDashboard/src/sass/main.scss
deleted file mode 100644
index 0e07ba3..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/sass/main.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xosCeilometerDashboard {
-  
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/src/stats_mock.json b/views/ngXosViews/ceilometerDashboard/src/stats_mock.json
deleted file mode 100644
index 5dd083a..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/stats_mock.json
+++ /dev/null
@@ -1,950 +0,0 @@
-[
-    {
-        "value": 1.0, 
-        "unit": "instance", 
-        "slice": "mysite_ceilometer", 
-        "name": "none", 
-        "service": "service_ceilometer", 
-        "resource_id": "c7f44959-490b-4d24-8043-66a096c7cae0", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "value": 1.0, 
-        "unit": "instance", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "afac5cb6-72c7-4c25-b281-7a442835b395", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "value": 1.0, 
-        "unit": "instance", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "9ec8c981-feb8-46c1-a1f6-3438702ee170", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "value": 1.0, 
-        "unit": "instance", 
-        "slice": "mysite_onos_volt", 
-        "name": "none", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "274134cc-700a-4392-8226-447a2f35cc1e", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "value": 1.0, 
-        "unit": "instance", 
-        "slice": "mysite_onos_vbng", 
-        "name": "none", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "e66d524e-9ce1-4ec2-81bb-c95043fb8e4f", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "value": 1.0, 
-        "unit": "instance", 
-        "slice": "mysite_clients", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "a8214ed9-e222-484b-93c2-9245e4712a99", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "value": 1.0, 
-        "unit": "instance", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "7d483484-a660-4307-b081-af1e4dd07eae", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "instance", 
-        "description": "Existence of instance"
-    }, 
-    {
-        "value": 2048.0, 
-        "unit": "MB", 
-        "slice": "mysite_ceilometer", 
-        "name": "none", 
-        "service": "service_ceilometer", 
-        "resource_id": "c7f44959-490b-4d24-8043-66a096c7cae0", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "value": 2048.0, 
-        "unit": "MB", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "afac5cb6-72c7-4c25-b281-7a442835b395", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "value": 2048.0, 
-        "unit": "MB", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "9ec8c981-feb8-46c1-a1f6-3438702ee170", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "value": 2048.0, 
-        "unit": "MB", 
-        "slice": "mysite_onos_volt", 
-        "name": "none", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "274134cc-700a-4392-8226-447a2f35cc1e", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "value": 2048.0, 
-        "unit": "MB", 
-        "slice": "mysite_onos_vbng", 
-        "name": "none", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "e66d524e-9ce1-4ec2-81bb-c95043fb8e4f", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "value": 2048.0, 
-        "unit": "MB", 
-        "slice": "mysite_clients", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "a8214ed9-e222-484b-93c2-9245e4712a99", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "value": 2048.0, 
-        "unit": "MB", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "7d483484-a660-4307-b081-af1e4dd07eae", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory", 
-        "description": "Volume of RAM"
-    }, 
-    {
-        "value": 1507.9379310344827, 
-        "unit": "MB", 
-        "slice": "mysite_ceilometer", 
-        "name": "none", 
-        "service": "service_ceilometer", 
-        "resource_id": "c7f44959-490b-4d24-8043-66a096c7cae0", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory.usage", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "value": 374.6965517241379, 
-        "unit": "MB", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "afac5cb6-72c7-4c25-b281-7a442835b395", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory.usage", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "value": 375.1655172413793, 
-        "unit": "MB", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "9ec8c981-feb8-46c1-a1f6-3438702ee170", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory.usage", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "value": 1786.7310344827586, 
-        "unit": "MB", 
-        "slice": "mysite_onos_volt", 
-        "name": "none", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "274134cc-700a-4392-8226-447a2f35cc1e", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory.usage", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "value": 1797.2413793103449, 
-        "unit": "MB", 
-        "slice": "mysite_onos_vbng", 
-        "name": "none", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "e66d524e-9ce1-4ec2-81bb-c95043fb8e4f", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory.usage", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "value": 376.36551724137934, 
-        "unit": "MB", 
-        "slice": "mysite_clients", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "a8214ed9-e222-484b-93c2-9245e4712a99", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory.usage", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "value": 373.5448275862069, 
-        "unit": "MB", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "7d483484-a660-4307-b081-af1e4dd07eae", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "memory.usage", 
-        "description": "Volume of RAM used"
-    }, 
-    {
-        "value": 194620344827.5862, 
-        "unit": "ns", 
-        "slice": "mysite_ceilometer", 
-        "name": "none", 
-        "service": "service_ceilometer", 
-        "resource_id": "c7f44959-490b-4d24-8043-66a096c7cae0", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu", 
-        "description": "CPU time used"
-    }, 
-    {
-        "value": 93601310344.82759, 
-        "unit": "ns", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "afac5cb6-72c7-4c25-b281-7a442835b395", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu", 
-        "description": "CPU time used"
-    }, 
-    {
-        "value": 93402206896.55173, 
-        "unit": "ns", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "9ec8c981-feb8-46c1-a1f6-3438702ee170", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu", 
-        "description": "CPU time used"
-    }, 
-    {
-        "value": 4394690965517.241, 
-        "unit": "ns", 
-        "slice": "mysite_onos_volt", 
-        "name": "none", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "274134cc-700a-4392-8226-447a2f35cc1e", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu", 
-        "description": "CPU time used"
-    }, 
-    {
-        "value": 4025309517241.3794, 
-        "unit": "ns", 
-        "slice": "mysite_onos_vbng", 
-        "name": "none", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "e66d524e-9ce1-4ec2-81bb-c95043fb8e4f", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu", 
-        "description": "CPU time used"
-    }, 
-    {
-        "value": 90704896551.72414, 
-        "unit": "ns", 
-        "slice": "mysite_clients", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "a8214ed9-e222-484b-93c2-9245e4712a99", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu", 
-        "description": "CPU time used"
-    }, 
-    {
-        "value": 93930827586.2069, 
-        "unit": "ns", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "7d483484-a660-4307-b081-af1e4dd07eae", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu", 
-        "description": "CPU time used"
-    }, 
-    {
-        "value": 0.2539938837459742, 
-        "unit": "%", 
-        "slice": "mysite_ceilometer", 
-        "name": "none", 
-        "service": "service_ceilometer", 
-        "resource_id": "c7f44959-490b-4d24-8043-66a096c7cae0", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu_util", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "value": 0.1430115727449207, 
-        "unit": "%", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "afac5cb6-72c7-4c25-b281-7a442835b395", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu_util", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "value": 0.14234621932639643, 
-        "unit": "%", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "9ec8c981-feb8-46c1-a1f6-3438702ee170", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu_util", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "value": 9.501434897077173, 
-        "unit": "%", 
-        "slice": "mysite_onos_volt", 
-        "name": "none", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "274134cc-700a-4392-8226-447a2f35cc1e", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu_util", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "value": 8.59252727701459, 
-        "unit": "%", 
-        "slice": "mysite_onos_vbng", 
-        "name": "none", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "e66d524e-9ce1-4ec2-81bb-c95043fb8e4f", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu_util", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "value": 0.13846207922030151, 
-        "unit": "%", 
-        "slice": "mysite_clients", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "a8214ed9-e222-484b-93c2-9245e4712a99", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu_util", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "value": 0.14287395279840676, 
-        "unit": "%", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "7d483484-a660-4307-b081-af1e4dd07eae", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "cpu_util", 
-        "description": "Average CPU utilization"
-    }, 
-    {
-        "value": 88.53419771575258, 
-        "unit": "B/s", 
-        "slice": "mysite_ceilometer", 
-        "name": "none", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-0000001b-c7f44959-490b-4d24-8043-66a096c7cae0-tapcadfbd73-5b", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.009455996028375395, 
-        "unit": "B/s", 
-        "slice": "mysite_ceilometer", 
-        "name": "none", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-0000001b-c7f44959-490b-4d24-8043-66a096c7cae0-tap972eb016-96", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.009455996028375395, 
-        "unit": "B/s", 
-        "slice": "mysite_ceilometer", 
-        "name": "none", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-0000001b-c7f44959-490b-4d24-8043-66a096c7cae0-tapf56382ad-45", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 124.74842906323501, 
-        "unit": "B/s", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-0000001a-afac5cb6-72c7-4c25-b281-7a442835b395-tap79d13f74-62", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.017425896307365425, 
-        "unit": "B/s", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-0000001a-afac5cb6-72c7-4c25-b281-7a442835b395-tap25ae020a-23", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.0174337765740103, 
-        "unit": "B/s", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-0000001a-afac5cb6-72c7-4c25-b281-7a442835b395-tap8382609c-7c", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.009424851354967827, 
-        "unit": "B/s", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-0000001a-afac5cb6-72c7-4c25-b281-7a442835b395-tap7bbe02e0-09", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 127.2159155680703, 
-        "unit": "B/s", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001c-9ec8c981-feb8-46c1-a1f6-3438702ee170-tap308ba38c-64", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 1.996809016615307, 
-        "unit": "B/s", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001c-9ec8c981-feb8-46c1-a1f6-3438702ee170-tap2aadc958-57", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.00944055944055944, 
-        "unit": "B/s", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001c-9ec8c981-feb8-46c1-a1f6-3438702ee170-tap0b518c8d-01", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.017428347945877158, 
-        "unit": "B/s", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001c-9ec8c981-feb8-46c1-a1f6-3438702ee170-tapaf0c7436-e8", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.009471769187962845, 
-        "unit": "B/s", 
-        "slice": "mysite_onos_volt", 
-        "name": "none", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "instance-00000017-274134cc-700a-4392-8226-447a2f35cc1e-tap4b98f4d2-7e", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 33.618374055863, 
-        "unit": "B/s", 
-        "slice": "mysite_onos_volt", 
-        "name": "none", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "instance-00000017-274134cc-700a-4392-8226-447a2f35cc1e-tap35a9b09a-29", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.009448122592881327, 
-        "unit": "B/s", 
-        "slice": "mysite_onos_vbng", 
-        "name": "none", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "instance-00000019-e66d524e-9ce1-4ec2-81bb-c95043fb8e4f-tap6717e37b-5a", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 33.6291738301644, 
-        "unit": "B/s", 
-        "slice": "mysite_onos_vbng", 
-        "name": "none", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "instance-00000019-e66d524e-9ce1-4ec2-81bb-c95043fb8e4f-tap35b38817-7f", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.009463869463869463, 
-        "unit": "B/s", 
-        "slice": "mysite_clients", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-00000018-a8214ed9-e222-484b-93c2-9245e4712a99-tapaf9418d8-68", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.017437164857185466, 
-        "unit": "B/s", 
-        "slice": "mysite_clients", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-00000018-a8214ed9-e222-484b-93c2-9245e4712a99-tap56d0c6f9-27", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 124.61289583768621, 
-        "unit": "B/s", 
-        "slice": "mysite_clients", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-00000018-a8214ed9-e222-484b-93c2-9245e4712a99-tap31f27f17-47", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 123.65339047759299, 
-        "unit": "B/s", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001d-7d483484-a660-4307-b081-af1e4dd07eae-tap4894ed8a-51", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.009440585664408507, 
-        "unit": "B/s", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001d-7d483484-a660-4307-b081-af1e4dd07eae-tap31c8ec21-34", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.01743467844779237, 
-        "unit": "B/s", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001d-7d483484-a660-4307-b081-af1e4dd07eae-tap2605ab77-0a", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.013442333959863174, 
-        "unit": "B/s", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001d-7d483484-a660-4307-b081-af1e4dd07eae-tapeea51a4b-f3", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.incoming.bytes.rate", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface"
-    }, 
-    {
-        "value": 22.145300578664518, 
-        "unit": "B/s", 
-        "slice": "mysite_ceilometer", 
-        "name": "none", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-0000001b-c7f44959-490b-4d24-8043-66a096c7cae0-tapcadfbd73-5b", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_ceilometer", 
-        "name": "none", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-0000001b-c7f44959-490b-4d24-8043-66a096c7cae0-tap972eb016-96", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_ceilometer", 
-        "name": "none", 
-        "service": "service_ceilometer", 
-        "resource_id": "instance-0000001b-c7f44959-490b-4d24-8043-66a096c7cae0-tapf56382ad-45", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 1.3187296037296037, 
-        "unit": "B/s", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-0000001a-afac5cb6-72c7-4c25-b281-7a442835b395-tap79d13f74-62", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-0000001a-afac5cb6-72c7-4c25-b281-7a442835b395-tap25ae020a-23", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-0000001a-afac5cb6-72c7-4c25-b281-7a442835b395-tap8382609c-7c", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_vcpe", 
-        "name": "none", 
-        "service": "service_vcpe", 
-        "resource_id": "instance-0000001a-afac5cb6-72c7-4c25-b281-7a442835b395-tap7bbe02e0-09", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 3.087960372960373, 
-        "unit": "B/s", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001c-9ec8c981-feb8-46c1-a1f6-3438702ee170-tap308ba38c-64", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001c-9ec8c981-feb8-46c1-a1f6-3438702ee170-tap2aadc958-57", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001c-9ec8c981-feb8-46c1-a1f6-3438702ee170-tap0b518c8d-01", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_vbng", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001c-9ec8c981-feb8-46c1-a1f6-3438702ee170-tapaf0c7436-e8", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_onos_volt", 
-        "name": "none", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "instance-00000017-274134cc-700a-4392-8226-447a2f35cc1e-tap4b98f4d2-7e", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.68399416060279, 
-        "unit": "B/s", 
-        "slice": "mysite_onos_volt", 
-        "name": "none", 
-        "service": "service_ONOS_vOLT", 
-        "resource_id": "instance-00000017-274134cc-700a-4392-8226-447a2f35cc1e-tap35a9b09a-29", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_onos_vbng", 
-        "name": "none", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "instance-00000019-e66d524e-9ce1-4ec2-81bb-c95043fb8e4f-tap6717e37b-5a", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.5502331002331002, 
-        "unit": "B/s", 
-        "slice": "mysite_onos_vbng", 
-        "name": "none", 
-        "service": "service_ONOS_vBNG", 
-        "resource_id": "instance-00000019-e66d524e-9ce1-4ec2-81bb-c95043fb8e4f-tap35b38817-7f", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_clients", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-00000018-a8214ed9-e222-484b-93c2-9245e4712a99-tapaf9418d8-68", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_clients", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-00000018-a8214ed9-e222-484b-93c2-9245e4712a99-tap56d0c6f9-27", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 1.2715034965034964, 
-        "unit": "B/s", 
-        "slice": "mysite_clients", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-00000018-a8214ed9-e222-484b-93c2-9245e4712a99-tap31f27f17-47", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.441946386946387, 
-        "unit": "B/s", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001d-7d483484-a660-4307-b081-af1e4dd07eae-tap4894ed8a-51", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001d-7d483484-a660-4307-b081-af1e4dd07eae-tap31c8ec21-34", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001d-7d483484-a660-4307-b081-af1e4dd07eae-tap2605ab77-0a", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }, 
-    {
-        "value": 0.008951048951048951, 
-        "unit": "B/s", 
-        "slice": "mysite_volt", 
-        "name": "none", 
-        "service": "Other", 
-        "resource_id": "instance-0000001d-7d483484-a660-4307-b081-af1e4dd07eae-tapeea51a4b-f3", 
-        "time": "2015-12-10T00:44:10", 
-        "type": "Nova", 
-        "meter": "network.outgoing.bytes.rate", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface"
-    }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/src/templates/accordion-group.html b/views/ngXosViews/ceilometerDashboard/src/templates/accordion-group.html
deleted file mode 100644
index c17c3f0..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/templates/accordion-group.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="panel {{panelClass || 'panel-default'}}">
-  <div class="panel-heading" ng-keypress="toggleOpen($event)">
-    <h5>
-      <a href tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" uib-accordion-transclude="heading"><span ng-class="{'text-muted': isDisabled}">{{heading}}</span></a>
-    </h5>
-  </div>
-  <div class="panel-collapse collapse" uib-collapse="!isOpen">
-	  <div class="panel-body" ng-transclude></div>
-  </div>
-</div>
diff --git a/views/ngXosViews/ceilometerDashboard/src/templates/accordion.html b/views/ngXosViews/ceilometerDashboard/src/templates/accordion.html
deleted file mode 100644
index 422012c..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/templates/accordion.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="panel-group" ng-transclude></div>
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/src/templates/ceilometer-dashboard.tpl.html b/views/ngXosViews/ceilometerDashboard/src/templates/ceilometer-dashboard.tpl.html
deleted file mode 100644
index 827f3ad..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/templates/ceilometer-dashboard.tpl.html
+++ /dev/null
@@ -1,138 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row">
-  <div class="col-sm-10">
-    <h3>XOS Monitoring Statistics</h3>
-  </div>
-  <div class="col-xs-2 text-right">
-    <a href="" class="btn btn-default" 
-      ng-show="vm.selectedSlice && !vm.showStats"
-      ng-click="vm.showStats = true">
-      <i class="glyphicon glyphicon-transfer"></i>
-    </a>
-    <a href="" class="btn btn-default" 
-      ng-show="vm.selectedSlice && vm.showStats"
-      ng-click="vm.showStats = false">
-      <i class="glyphicon glyphicon-transfer"></i>
-    </a>
-  </div>
-</div>
-
-<div class="row" ng-show="vm.loader">
-  <div class="col-xs-12">
-    <div class="loader">Loading</div>
-  </div>
-</div>
-
-<section ng-hide="vm.loader" ng-class="{animate: !vm.loader}">
-  <div class="row">
-    <div class="col-sm-3 service-list">
-        <h4>XOS Service: </h4>
-        <uib-accordion close-others="true" template-url="templates/accordion.html">
-          <uib-accordion-group
-            ng-repeat="service in vm.services | orderBy:'-service'"
-            template-url="templates/accordion-group.html"
-            is-open="vm.accordion.open[service.service]"
-            heading="{{service.service}}">
-            <h5>Slices:</h5>
-            <a ng-repeat="slice in service.slices" 
-              ng-class="{active: slice.slice === vm.selectedSlice}"
-              ng-click="vm.loadSliceMeter(slice, service.service)"
-              href="#" class="list-group-item" >
-              {{slice.slice}} <i class="glyphicon glyphicon-chevron-right pull-right"></i>
-            </a>
-          </uib-accordion-group>
-        </uib-accordion>
-    </div>
-    <section class="side-container col-sm-9">
-      <div class="row">
-        <!-- STATS -->
-        <article ng-hide="!vm.showStats" class="stats animate-slide-left">
-          <div class="col-xs-12">
-            <div class="list-group">
-              <div class="list-group-item">
-                <h4>Stats</h4>
-              </div>
-              <div class="list-group-item">
-                <ceilometer-stats ng-if="vm.selectedSlice" name="vm.selectedSlice" tenant="vm.selectedTenant"></ceilometer-stats>
-              </div>
-            </div>
-          </div>
-        </article>
-        <!-- METERS -->
-        <article ng-hide="vm.showStats" class="meters animate-slide-left">
-          <div class="alert alert-danger" ng-show="vm.ceilometerError">
-            {{vm.ceilometerError}}
-          </div>
-          <div class="col-sm-4 animate-slide-left" ng-hide="!vm.selectedSlice">
-            <div class="list-group">
-              <div class="list-group-item">
-                <h4>Resources</h4>
-              </div>
-              <a href="#" 
-                ng-click="vm.selectMeters(meters, resource)" 
-                class="list-group-item" 
-                ng-repeat="(resource, meters) in vm.selectedResources" 
-                ng-class="{active: resource === vm.selectedResource}">
-                {{resource}} <i class="glyphicon glyphicon-chevron-right pull-right"></i>
-              </a>
-            </div>
-          </div>
-          <div class="col-sm-8 animate-slide-left" ng-hide="!vm.selectedMeters">
-            <div class="list-group">
-              <div class="list-group-item">
-                <h4>Meters</h4>
-              </div>
-              <div class="list-group-item">
-                <div class="row">
-                  <div class="col-xs-6">
-                    <label>Name:</label>
-                  </div>
-                  <div class="col-xs-3">
-                    <label>Unit:</label>
-                  </div>
-                  <div class="col-xs-3"></div>
-                </div>
-                <div class="row" ng-repeat="meter in vm.selectedMeters" style="margin-bottom: 10px;">
-                  <div class="col-xs-6">
-                    {{meter.name}}
-                  </div>
-                  <div class="col-xs-3">
-                    {{meter.unit}}
-                  </div>
-                  <div class="col-xs-3">
-                    <!-- tenant: meter.resource_id -->
-                    <a ui-sref="samples({name: meter.name, tenant: meter.resource_id})" class="btn btn-primary">
-                      <i class="glyphicon glyphicon-search"></i>
-                    </a>
-                  </div>
-                </div>
-              </div>
-            </div>
-          </div>
-        </article>
-      </div>
-    </section>
-  </div>
-</section>
-<section ng-if="!vm.loader && vm.error">
-  <div class="alert alert-danger">
-    {{vm.error}}
-  </div>
-</section>
diff --git a/views/ngXosViews/ceilometerDashboard/src/templates/ceilometer-samples.tpl.html b/views/ngXosViews/ceilometerDashboard/src/templates/ceilometer-samples.tpl.html
deleted file mode 100644
index 7d8fb5e..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/templates/ceilometer-samples.tpl.html
+++ /dev/null
@@ -1,89 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- <pre>{{ vm | json}}</pre> -->
-
-<div class="row">
-  <div class="col-xs-10">
-    <h1>{{vm.name | uppercase}}</h1>
-  </div>
-  <div class="col-xs-2">
-    <a ui-sref="ceilometerDashboard" class="btn btn-primary pull-right">
-      <i class="glyphicon glyphicon-arrow-left"></i> Back to list
-    </a>
-  </div>
-</div>
-<div class="row" ng-show="vm.loader">
-  <div class="col-xs-12">
-    <div class="loader">Loading</div>
-  </div>
-</div>
-<section ng-if="!vm.loader && !vm.error">
-  <div class="row" ng-if="vm.chartType !== 'pie'">
-    <form class="form-inline col-xs-8" ng-submit="vm.addMeterToChart(vm.addMeterValue)">
-      <select ng-model="vm.addMeterValue" class="form-control" ng-options="resource.id as resource.name for resource in vm.sampleLabels"></select>
-      <button class="btn btn-success"> 
-        <i class="glyphicon glyphicon-plus"></i> Add
-      </button>
-    </form>
-    <div class="col-xs-4 text-right">
-      <a ng-click="vm.chartType = 'line'" class="btn" ng-class="{'btn-default': vm.chartType != 'bar', 'btn-primary': vm.chartType == 'line'}">Lines</a>
-      <a ng-click="vm.chartType = 'bar'" class="btn" ng-class="{'btn-default': vm.chartType != 'line', 'btn-primary': vm.chartType == 'bar'}">Bars</a>
-    </div>
-  </div>
-  <div class="row" ng-if="!vm.loader">
-    <div class="col-xs-12">
-      <canvas ng-if="vm.chartType === 'line'" id="line" class="chart chart-line" chart-data="vm.chart.data" chart-options="{datasetFill: false}"
-        chart-labels="vm.chart.labels" chart-legend="false" chart-series="vm.chart.series">
-      </canvas>
-      <canvas ng-if="vm.chartType === 'bar'" id="bar" class="chart chart-bar" chart-data="vm.chart.data"
-        chart-labels="vm.chart.labels" chart-legend="false" chart-series="vm.chart.series">
-      </canvas>
-    </div>
-    <!-- PIE CHART -->
-    <div class="col-xs-8" ng-if="vm.chartType === 'pie'">
-      <canvas id="pie" class="chart chart-pie"
-        chart-data="vm.chart.data" chart-labels="vm.chart.labels" chart-options="vm.chart.options">
-      </canvas> 
-    </div>
-    <div class="col-xs-4" ng-if="vm.chartType === 'pie'">
-      <div class="row" ng-repeat="item in vm.chart.labels">
-        <div class="col-xs-12">
-          <span 
-            class="btn btn-chart"
-            ng-style="{'background-color': vm.chartColors[$index]}">
-            {{item}}: {{vm.chart.data[$index]}}%
-          </span>
-        </div>
-      </div>
-    </div>
-    <!-- END PIE CHART -->
-  </div>
-  <div class="row" ng-if="!vm.loader">
-    <div class="col-xs-12">
-      <a ng-click="vm.removeFromChart(meter)" class="btn btn-chart" ng-style="{'background-color': vm.chartColors[$index]}" ng-repeat="meter in vm.chartMeters">
-        {{meter.resource_name || meter.resource_id}}
-      </a>
-    </div>
-  </div>
-</section>
-<section ng-if="!vm.loader && vm.error">
-  <div class="alert alert-danger">
-    {{vm.error}}
-  </div>
-</section>
\ No newline at end of file
diff --git a/views/ngXosViews/ceilometerDashboard/src/templates/ceilometer-stats.tpl.html b/views/ngXosViews/ceilometerDashboard/src/templates/ceilometer-stats.tpl.html
deleted file mode 100644
index 8b359d1..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/templates/ceilometer-stats.tpl.html
+++ /dev/null
@@ -1,76 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 ng-show="vm.loader" class="loader">Loading</div>
-
-<section ng-if="!vm.loader && !vm.error">
-
-  <div class="alert alert-danger" ng-if="vm.stats.length == 0">
-    No result
-  </div>  
-
-  <table class="table" ng-if="vm.stats.length > 0">
-    <tr>
-      <th>
-        <a ng-click="(order == 'category') ? order = '-category' : order = 'category'">Type:</a>
-      </th>
-      <th>
-        <a ng-click="(order == 'resource_name') ? order = '-resource_name' : order = 'resource_name'">Resource:</a>
-      </th>
-      <th>
-        <a ng-click="(order == 'meter') ? order = '-meter' : order = 'meter'">Meter:</a>
-      </th>
-      <th>
-        Unit:
-      </th>
-      <th>
-        Value:
-      </th>
-    </tr>
-    <!-- <tr>
-      <td>
-        <input type="text" ng-model="query.category">
-      </td>
-      <td>
-        <input type="text" ng-model="query.resource_name">
-      </td>
-      <td>
-        <input type="text" ng-model="query.meter">
-      </td>
-      <td>
-        <input type="text" ng-model="query.unit">
-      </td>
-      <td>
-        <input type="text" ng-model="query.value">
-      </td>
-    </tr> -->
-    <tr ng-repeat="item in vm.stats | orderBy:order">
-      <td>{{item.category}}</td>
-      <td>{{item.resource_name}}</td>
-      <td>{{item.meter}}</td>
-      <td>{{item.unit}}</td>
-      <td>{{item.value}}</td>
-    </tr>
-  </table>
-</section>
-
-<section ng-if="!vm.loader && vm.error">
-  <div class="alert alert-danger">
-    {{vm.error}}
-  </div>
-</section>
diff --git a/views/ngXosViews/ceilometerDashboard/src/templates/users-list.tpl.html b/views/ngXosViews/ceilometerDashboard/src/templates/users-list.tpl.html
deleted file mode 100644
index 6d26747..0000000
--- a/views/ngXosViews/ceilometerDashboard/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.users"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/.bowerrc b/views/ngXosViews/contentProvider/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/contentProvider/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/.eslintrc b/views/ngXosViews/contentProvider/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/contentProvider/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/.gitignore b/views/ngXosViews/contentProvider/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/contentProvider/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/README.md b/views/ngXosViews/contentProvider/README.md
deleted file mode 100644
index 2a34bd7..0000000
--- a/views/ngXosViews/contentProvider/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Content Provider Dashboard
-
-To enable the needed backend for this dashboard:
-
-- Enter `xos` with `make enter-xos` (from `xos/configuration/frontend` folder)
-- `cd /opt/xos/tosca`
-- `python ./run.py padmin@vicci.org samples/cdn.yaml`
-
-And it will enable the `xoslib/hpcapi` endpoint
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/bower.json b/views/ngXosViews/contentProvider/bower.json
deleted file mode 100644
index f46e604..0000000
--- a/views/ngXosViews/contentProvider/bower.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "xos-contentProvider",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The contentProvider view",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/contentProvider/gulp/build.js b/views/ngXosViews/contentProvider/gulp/build.js
deleted file mode 100644
index ccab952..0000000
--- a/views/ngXosViews/contentProvider/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.contentProvider')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosContentProvider.html',
-        options.static + 'css/xosContentProvider.css',
-        options.static + 'images/contentProvider-icon.png',
-        options.static + 'images/contentProvider-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosContentProvider.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/contentProvider-icon.png`, `${options.icon}/contentProvider-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosContentProvider.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.contentProvider',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosContentProviderVendor.js',
-            options.static + 'js/xosContentProvider.js',
-            options.static + 'css/xosContentProvider.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosContentProvider.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosContentProviderVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['ContentProvider'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosContentProvider'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/contentProvider-icon.png`) &&
-      fs.existsSync(`${options.icon}/contentProvider-icon-active.png`)
-    ){
-      dashboardJson['ContentProvider'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['contentProvider_dashboard'] = {
-      node: 'ContentProvider',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/gulp/server.js b/views/ngXosViews/contentProvider/gulp/server.js
deleted file mode 100644
index 04b8e83..0000000
--- a/views/ngXosViews/contentProvider/gulp/server.js
+++ /dev/null
@@ -1,188 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/hpcapi/') !== -1 || 
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/contentProvider/gulpfile.js b/views/ngXosViews/contentProvider/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/contentProvider/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/contentProvider/karma.conf.js b/views/ngXosViews/contentProvider/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/contentProvider/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/contentProvider/package.json b/views/ngXosViews/contentProvider/package.json
deleted file mode 100644
index ec2e401..0000000
--- a/views/ngXosViews/contentProvider/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-contentProvider",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/contentProvider/spec/contentprovider.test.js b/views/ngXosViews/contentProvider/spec/contentprovider.test.js
deleted file mode 100644
index 3de80d1..0000000
--- a/views/ngXosViews/contentProvider/spec/contentprovider.test.js
+++ /dev/null
@@ -1,265 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The Content Provider SPA', () => {
-
-  var scope, element, isolatedScope, httpBackend, mockLocation, httpProvider;
-
-  var token = 'fakeToken';
-
-  // injecting main module
-  beforeEach(module('xos.contentProvider'));
-
-  beforeEach(module('templates'));
-
-  beforeEach(function(){
-    module(function($provide, $httpProvider){
-
-      httpProvider = $httpProvider;
-
-      // mocking stateParams to pass 1 as id
-      $provide.provider('$stateParams', function(){
-        /* eslint-disable no-invalid-this*/
-        this.$get = function(){
-          return {id: 1};
-        };
-        /* eslint-enable no-invalid-this*/
-      });
-
-      //mock $cookie to return a fake xoscsrftoken
-      $provide.service('$cookies', function(){
-        /* eslint-disable no-invalid-this*/
-        this.get = () => {
-          return token;
-        };
-        /* eslint-enable no-invalid-this*/
-      });
-    });
-  });
-
-  beforeEach(inject(function(_$location_, $httpBackend){
-    spyOn(_$location_, 'url');
-    mockLocation = _$location_;
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.whenGET('/hpcapi/contentproviders/?no_hyperlinks=1').respond(CPmock.CPlist);
-    $httpBackend.whenGET('/hpcapi/serviceproviders/?no_hyperlinks=1').respond(CPmock.SPlist);
-    $httpBackend.whenDELETE('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond();
-  }));
-
-  xit('should set the $http interceptor', () => {
-    expect(httpProvider.interceptors).toContain('SetCSRFToken');
-  });
-
-  xit('should add no_hyperlink param', inject(($http, $httpBackend) => {
-    $http.get('www.example.com');
-    $httpBackend.expectGET('www.example.com?no_hyperlinks=1').respond(200);
-    $httpBackend.flush();
-  }));
-
-  xit('should set token in the headers', inject(($http, $httpBackend) => {
-    $http.post('http://example.com');
-    $httpBackend.expectPOST('http://example.com?no_hyperlinks=1', undefined, function(headers){
-      // if this condition is false the httpBackend expectation fail
-      return headers['X-CSRFToken'] === token;
-    }).respond(200, {name: 'example'});
-    httpBackend.flush();
-  }));
-
-  describe('the action directive', () => {
-    beforeEach(inject(function($compile, $rootScope){
-      scope = $rootScope.$new();
-
-      element = angular.element('<cp-actions id="\'1\'"></cp-actions>');
-      $compile(element)(scope);
-      scope.$digest();
-      isolatedScope = element.isolateScope().vm;
-    }));
-
-    it('should delete an element and redirect to list', () => {
-      isolatedScope.deleteCp(1);
-      httpBackend.flush();
-      expect(mockLocation.url).toHaveBeenCalled();
-    });
-  });
-
-  describe('the contentProvider list', () => {
-    beforeEach(inject(function($compile, $rootScope){
-      scope = $rootScope.$new();
-
-      element = angular.element('<content-provider-list></content-provider-list>');
-      $compile(element)(scope);
-      scope.$digest();
-      httpBackend.flush();
-      isolatedScope = element.isolateScope().vm;
-    }));
-
-
-    it('should load 2 contentProvider', () => {
-      expect(isolatedScope.contentProviderList.length).toBe(2);
-    });
-
-    it('should delete a contentProvider', () => {
-      isolatedScope.deleteCp(1);
-      httpBackend.flush();
-      expect(isolatedScope.contentProviderList.length).toBe(1);
-    });
-  });
-
-  describe('the contentProviderDetail directive', () => {
-
-    beforeEach(inject(function($compile, $rootScope){
-      scope = $rootScope.$new();
-      element = angular.element('<content-provider-detail></content-provider-detail>');
-      $compile(element)(scope);
-      httpBackend.expectGET('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond(CPmock.CPlist[0]);
-      scope.$digest();
-      httpBackend.flush();
-      isolatedScope = element.isolateScope().vm;
-    }));
-
-    describe('when an id is set in the route', () => {
-
-      beforeEach(() => {
-        // spy the instance update method
-        spyOn(isolatedScope.cp, '$update').and.callThrough();
-      });
-
-      it('should request the correct contentProvider', () => {
-        expect(isolatedScope.cp.name).toEqual(CPmock.CPlist[0].name);
-      });
-
-      it('should update a contentProvider', () => {
-        isolatedScope.cp.name = 'new name';
-        isolatedScope.saveContentProvider(isolatedScope.cp);
-        expect(isolatedScope.cp.$update).toHaveBeenCalled();
-      });
-    });
-  });
-
-  describe('the contentProviderCdn directive', () => {
-    beforeEach(inject(($compile, $rootScope) => {
-      scope = $rootScope.$new();
-      element = angular.element('<content-provider-cdn></content-provider-cdn>');
-      $compile(element)(scope);
-      httpBackend.expectGET('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond(CPmock.CPlist[0]);
-      // httpBackend.expectGET('/hpcapi/cdnprefixs/?no_hyperlinks=1&contentProvider=1').respond([CPmock.CDNlist[0]]);
-      httpBackend.expectGET('/hpcapi/cdnprefixs/?no_hyperlinks=1').respond(CPmock.CDNlist);
-      httpBackend.whenPOST('/hpcapi/cdnprefixs/?no_hyperlinks=1').respond(CPmock.CDNlist[0]);
-      httpBackend.whenDELETE('/hpcapi/cdnprefixs/5/?no_hyperlinks=1').respond();
-      scope.$digest();
-      httpBackend.flush();
-      isolatedScope = element.isolateScope().vm;
-    }));
-
-    it('should load associated CDN prefix', () => {
-      expect(isolatedScope.cp_prf.length).toBe(1);
-      expect(isolatedScope.prf.length).toBe(2);
-    });
-
-    it('should add a CDN Prefix', () => {
-      isolatedScope.addPrefix({prefix: 'test.io', defaultOriginServer: '/hpcapi/originservers/2/'});
-      httpBackend.flush();
-      expect(isolatedScope.cp_prf.length).toBe(2);
-    });
-
-    it('should remove a CDN Prefix', () => {
-      isolatedScope.removePrefix(isolatedScope.cp_prf[0]);
-      httpBackend.flush();
-      expect(isolatedScope.cp_prf.length).toBe(0);
-    });
-  });
-
-  describe('the contentProviderServer directive', () => {
-    beforeEach(inject(($compile, $rootScope) => {
-      scope = $rootScope.$new();
-      element = angular.element('<content-provider-server></content-provider-server>');
-      $compile(element)(scope);
-      httpBackend.expectGET('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond(CPmock.CPlist[0]);
-      httpBackend.expectGET('/hpcapi/originservers/?no_hyperlinks=1&contentProvider=1').respond(CPmock.OSlist);
-      httpBackend.whenPOST('/hpcapi/originservers/?no_hyperlinks=1').respond(CPmock.OSlist[0]);
-      httpBackend.whenDELETE('/hpcapi/originservers/8/?no_hyperlinks=1').respond();
-      scope.$digest();
-      httpBackend.flush();
-      isolatedScope = element.isolateScope().vm;
-    }));
-
-    it('should load associated OriginServer', () => {
-      expect(isolatedScope.cp_os.length).toBe(4);
-    });
-
-    it('should add a OriginServer', () => {
-      isolatedScope.addOrigin({protocol: 'http', url: 'test.io'});
-      httpBackend.flush();
-      expect(isolatedScope.cp_os.length).toBe(5);
-    });
-
-    it('should remove a OriginServer', () => {
-      isolatedScope.removeOrigin(isolatedScope.cp_os[0]);
-      httpBackend.flush();
-      expect(isolatedScope.cp_os.length).toBe(3);
-    });
-  });
-
-  describe('the contentProviderUsers directive', () => {
-    beforeEach(inject(($compile, $rootScope) => {
-      scope = $rootScope.$new();
-      element = angular.element('<content-provider-users></content-provider-users>');
-      $compile(element)(scope);
-      httpBackend.expectGET('/xos/users/?no_hyperlinks=1').respond(CPmock.UserList);
-      httpBackend.expectGET('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond(CPmock.CPlist[0]);
-      httpBackend.whenPUT('/hpcapi/contentproviders/1/?no_hyperlinks=1').respond(CPmock.CPlist[0]);
-      scope.$digest();
-      httpBackend.flush();
-      isolatedScope = element.isolateScope().vm;
-    }));
-
-    it('should render one user', () => {
-      expect(isolatedScope.cp.users.length).toBe(1);
-      expect(typeof isolatedScope.cp.users[0]).toEqual('object');
-    });
-
-    it('should add a user', () => {
-      isolatedScope.addUserToCp({name: 'teo'});
-      expect(isolatedScope.cp.users.length).toBe(2);
-    });
-
-    it('should remove a user', () => {
-      isolatedScope.addUserToCp({name: 'teo'});
-      expect(isolatedScope.cp.users.length).toBe(2);
-      isolatedScope.removeUserFromCp({name: 'teo'});
-      expect(isolatedScope.cp.users.length).toBe(1);
-    });
-
-    it('should save and reformat users', () => {
-      // add a user
-      isolatedScope.cp.users.push(1);
-
-      //trigger save
-      isolatedScope.saveContentProvider(isolatedScope.cp);
-
-      httpBackend.flush();
-
-      // I'll get one as the BE is mocked, the important is to check the conversion
-      expect(isolatedScope.cp.users.length).toBe(1);
-      expect(typeof isolatedScope.cp.users[0]).toEqual('object');
-    });
-  });
-});
diff --git a/views/ngXosViews/contentProvider/spec/mocks/contentProvider.mock.js b/views/ngXosViews/contentProvider/spec/mocks/contentProvider.mock.js
deleted file mode 100644
index 563c947..0000000
--- a/views/ngXosViews/contentProvider/spec/mocks/contentProvider.mock.js
+++ /dev/null
@@ -1,928 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/* eslint-disable key-spacing, no-unused-vars */
-
-var CPmock = {
-  CPlist: [
-    {
-      'humanReadableName':'on_lab_content',
-      'validators':{
-        'updated':[
-
-        ],
-        'policed':[
-
-        ],
-        'name':[
-          'notBlank'
-        ],
-        'created':[
-
-        ],
-        'deleted':[
-
-        ],
-        'serviceProvider':[
-          'notBlank'
-        ],
-        'description':[
-
-        ],
-        'enabled':[
-
-        ],
-        'lazy_blocked':[
-
-        ],
-        'backend_register':[
-          'notBlank'
-        ],
-        'write_protect':[
-
-        ],
-        'content_provider_id':[
-
-        ],
-        'backend_status':[
-          'notBlank'
-        ],
-        'id':[
-
-        ],
-        'no_sync':[
-
-        ],
-        'enacted':[
-
-        ]
-      },
-      'id':1,
-      'created':'2015-10-22T19:33:55.078Z',
-      'updated':'2015-10-22T19:33:55.078Z',
-      'enacted':null,
-      'policed':null,
-      'backend_register':'{}',
-      'backend_status':'0 - Provisioning in progress',
-      'deleted':false,
-      'write_protect':false,
-      'lazy_blocked':false,
-      'no_sync':false,
-      'content_provider_id':null,
-      'name':'on_lab_content',
-      'enabled':true,
-      'description':null,
-      users: [2],
-      'serviceProvider':'http://0.0.0.0:9000/hpcapi/serviceproviders/1/'
-    },
-    {
-      'humanReadableName':'test',
-      'validators':{
-        'updated':[
-
-        ],
-        'policed':[
-
-        ],
-        'name':[
-          'notBlank'
-        ],
-        'created':[
-
-        ],
-        'deleted':[
-
-        ],
-        'serviceProvider':[
-          'notBlank'
-        ],
-        'description':[
-
-        ],
-        'enabled':[
-
-        ],
-        'lazy_blocked':[
-
-        ],
-        'backend_register':[
-          'notBlank'
-        ],
-        'write_protect':[
-
-        ],
-        'content_provider_id':[
-
-        ],
-        'backend_status':[
-          'notBlank'
-        ],
-        'id':[
-
-        ],
-        'no_sync':[
-
-        ],
-        'enacted':[
-
-        ]
-      },
-      'id':2,
-      'created':'2015-10-23T10:50:37.482Z',
-      'updated':'2015-10-23T10:52:56.232Z',
-      'enacted':null,
-      'policed':null,
-      'backend_register':'{}',
-      'backend_status':'0 - Provisioning in progress',
-      'deleted':false,
-      'write_protect':false,
-      'lazy_blocked':false,
-      'no_sync':false,
-      'content_provider_id':null,
-      'name':'test',
-      'enabled':true,
-      'description':'',
-      'serviceProvider':'http://0.0.0.0:9000/hpcapi/serviceproviders/1/'
-    }
-  ],
-  SPlist: [
-    {
-      'humanReadableName':'main_service_provider',
-      'validators':{
-        'updated':[
-
-        ],
-        'policed':[
-
-        ],
-        'name':[
-          'notBlank'
-        ],
-        'created':[
-
-        ],
-        'deleted':[
-
-        ],
-        'hpcService':[
-          'notBlank'
-        ],
-        'description':[
-
-        ],
-        'enabled':[
-
-        ],
-        'service_provider_id':[
-
-        ],
-        'lazy_blocked':[
-
-        ],
-        'backend_register':[
-          'notBlank'
-        ],
-        'write_protect':[
-
-        ],
-        'backend_status':[
-          'notBlank'
-        ],
-        'id':[
-
-        ],
-        'no_sync':[
-
-        ],
-        'enacted':[
-
-        ]
-      },
-      'id':1,
-      'created':'2015-10-22T19:33:55.048Z',
-      'updated':'2015-10-22T19:33:55.048Z',
-      'enacted':null,
-      'policed':null,
-      'backend_register':'{}',
-      'backend_status':'0 - Provisioning in progress',
-      'deleted':false,
-      'write_protect':false,
-      'lazy_blocked':false,
-      'no_sync':false,
-      'hpcService':'http://0.0.0.0:9000/hpcapi/hpcservices/1/',
-      'service_provider_id':null,
-      'name':'main_service_provider',
-      'description':null,
-      'enabled':true
-    }
-  ],
-  CDNlist: [
-    {
-      'humanReadableName':'onlab.vicci.org',
-      'validators':{
-        'updated':[
-
-        ],
-        'contentProvider':[
-          'notBlank'
-        ],
-        'policed':[
-
-        ],
-        'created':[
-
-        ],
-        'deleted':[
-
-        ],
-        'description':[
-
-        ],
-        'enabled':[
-
-        ],
-        'cdn_prefix_id':[
-
-        ],
-        'lazy_blocked':[
-
-        ],
-        'backend_register':[
-          'notBlank'
-        ],
-        'write_protect':[
-
-        ],
-        'prefix':[
-          'notBlank'
-        ],
-        'defaultOriginServer':[
-
-        ],
-        'backend_status':[
-          'notBlank'
-        ],
-        'id':[
-
-        ],
-        'no_sync':[
-
-        ],
-        'enacted':[
-
-        ]
-      },
-      'id':5,
-      'created':'2015-10-26T13:09:44.343Z',
-      'updated':'2015-10-26T13:09:44.343Z',
-      'enacted':null,
-      'policed':null,
-      'backend_register':'{}',
-      'backend_status':'0 - Provisioning in progress',
-      'deleted':false,
-      'write_protect':false,
-      'lazy_blocked':false,
-      'no_sync':false,
-      'cdn_prefix_id':null,
-      'prefix':'onlab.vicci.org',
-      'contentProvider':1,
-      'description':null,
-      'defaultOriginServer':'http://0.0.0.0:9000/hpcapi/originservers/2/',
-      'enabled':true
-    },
-    {
-      'humanReadableName':'downloads.onosproject.org',
-      'validators':{
-        'updated':[
-
-        ],
-        'contentProvider':[
-          'notBlank'
-        ],
-        'policed':[
-
-        ],
-        'created':[
-
-        ],
-        'deleted':[
-
-        ],
-        'description':[
-
-        ],
-        'enabled':[
-
-        ],
-        'cdn_prefix_id':[
-
-        ],
-        'lazy_blocked':[
-
-        ],
-        'backend_register':[
-          'notBlank'
-        ],
-        'write_protect':[
-
-        ],
-        'prefix':[
-          'notBlank'
-        ],
-        'defaultOriginServer':[
-
-        ],
-        'backend_status':[
-          'notBlank'
-        ],
-        'id':[
-
-        ],
-        'no_sync':[
-
-        ],
-        'enacted':[
-
-        ]
-      },
-      'id':1,
-      'created':'2015-10-26T13:09:44.196Z',
-      'updated':'2015-10-26T13:09:44.196Z',
-      'enacted':null,
-      'policed':null,
-      'backend_register':'{}',
-      'backend_status':'0 - Provisioning in progress',
-      'deleted':false,
-      'write_protect':false,
-      'lazy_blocked':false,
-      'no_sync':false,
-      'cdn_prefix_id':null,
-      'prefix':'downloads.onosproject.org',
-      'contentProvider':2,
-      'description':null,
-      'defaultOriginServer':'http://0.0.0.0:9000/hpcapi/originservers/1/',
-      'enabled':true
-    }
-  ],
-  OSlist: [
-    {
-      'humanReadableName':'another.it',
-      'validators':{
-        'updated':[
-
-        ],
-        'contentProvider':[
-          'notBlank'
-        ],
-        'origin_server_id':[
-
-        ],
-        'policed':[
-
-        ],
-        'created':[
-
-        ],
-        'deleted':[
-
-        ],
-        'description':[
-
-        ],
-        'enabled':[
-
-        ],
-        'redirects':[
-
-        ],
-        'protocol':[
-          'notBlank'
-        ],
-        'lazy_blocked':[
-
-        ],
-        'backend_register':[
-          'notBlank'
-        ],
-        'write_protect':[
-
-        ],
-        'url':[
-          'notBlank'
-        ],
-        'authenticated':[
-
-        ],
-        'backend_status':[
-          'notBlank'
-        ],
-        'id':[
-
-        ],
-        'no_sync':[
-
-        ],
-        'enacted':[
-
-        ]
-      },
-      'id':8,
-      'created':'2015-10-26T13:40:36.878Z',
-      'updated':'2015-10-26T13:40:36.878Z',
-      'enacted':null,
-      'policed':null,
-      'backend_register':'{}',
-      'backend_status':'0 - Provisioning in progress',
-      'deleted':false,
-      'write_protect':false,
-      'lazy_blocked':false,
-      'no_sync':false,
-      'origin_server_id':null,
-      'url':'another.it',
-      'contentProvider':'http://0.0.0.0:9000/hpcapi/contentproviders/1/',
-      'authenticated':false,
-      'enabled':true,
-      'protocol':'http',
-      'redirects':true,
-      'description':null
-    },
-    {
-      'humanReadableName':'test.it',
-      'validators':{
-        'updated':[
-
-        ],
-        'contentProvider':[
-          'notBlank'
-        ],
-        'origin_server_id':[
-
-        ],
-        'policed':[
-
-        ],
-        'created':[
-
-        ],
-        'deleted':[
-
-        ],
-        'description':[
-
-        ],
-        'enabled':[
-
-        ],
-        'redirects':[
-
-        ],
-        'protocol':[
-          'notBlank'
-        ],
-        'lazy_blocked':[
-
-        ],
-        'backend_register':[
-          'notBlank'
-        ],
-        'write_protect':[
-
-        ],
-        'url':[
-          'notBlank'
-        ],
-        'authenticated':[
-
-        ],
-        'backend_status':[
-          'notBlank'
-        ],
-        'id':[
-
-        ],
-        'no_sync':[
-
-        ],
-        'enacted':[
-
-        ]
-      },
-      'id':7,
-      'created':'2015-10-26T13:36:42.567Z',
-      'updated':'2015-10-26T13:36:42.567Z',
-      'enacted':null,
-      'policed':null,
-      'backend_register':'{}',
-      'backend_status':'0 - Provisioning in progress',
-      'deleted':false,
-      'write_protect':false,
-      'lazy_blocked':false,
-      'no_sync':false,
-      'origin_server_id':null,
-      'url':'test.it',
-      'contentProvider':'http://0.0.0.0:9000/hpcapi/contentproviders/1/',
-      'authenticated':false,
-      'enabled':true,
-      'protocol':'http',
-      'redirects':true,
-      'description':null
-    },
-    {
-      'humanReadableName':'onlab.vicci.org',
-      'validators':{
-        'updated':[
-
-        ],
-        'contentProvider':[
-          'notBlank'
-        ],
-        'origin_server_id':[
-
-        ],
-        'policed':[
-
-        ],
-        'created':[
-
-        ],
-        'deleted':[
-
-        ],
-        'description':[
-
-        ],
-        'enabled':[
-
-        ],
-        'redirects':[
-
-        ],
-        'protocol':[
-          'notBlank'
-        ],
-        'lazy_blocked':[
-
-        ],
-        'backend_register':[
-          'notBlank'
-        ],
-        'write_protect':[
-
-        ],
-        'url':[
-          'notBlank'
-        ],
-        'authenticated':[
-
-        ],
-        'backend_status':[
-          'notBlank'
-        ],
-        'id':[
-
-        ],
-        'no_sync':[
-
-        ],
-        'enacted':[
-
-        ]
-      },
-      'id':2,
-      'created':'2015-10-26T13:09:44.286Z',
-      'updated':'2015-10-26T13:09:44.286Z',
-      'enacted':null,
-      'policed':null,
-      'backend_register':'{}',
-      'backend_status':'0 - Provisioning in progress',
-      'deleted':false,
-      'write_protect':false,
-      'lazy_blocked':false,
-      'no_sync':false,
-      'origin_server_id':null,
-      'url':'onlab.vicci.org',
-      'contentProvider':'http://0.0.0.0:9000/hpcapi/contentproviders/1/',
-      'authenticated':false,
-      'enabled':true,
-      'protocol':'HTTP',
-      'redirects':true,
-      'description':null
-    },
-    {
-      'humanReadableName':'downloads.onosproject.org',
-      'validators':{
-        'updated':[
-
-        ],
-        'contentProvider':[
-          'notBlank'
-        ],
-        'origin_server_id':[
-
-        ],
-        'policed':[
-
-        ],
-        'created':[
-
-        ],
-        'deleted':[
-
-        ],
-        'description':[
-
-        ],
-        'enabled':[
-
-        ],
-        'redirects':[
-
-        ],
-        'protocol':[
-          'notBlank'
-        ],
-        'lazy_blocked':[
-
-        ],
-        'backend_register':[
-          'notBlank'
-        ],
-        'write_protect':[
-
-        ],
-        'url':[
-          'notBlank'
-        ],
-        'authenticated':[
-
-        ],
-        'backend_status':[
-          'notBlank'
-        ],
-        'id':[
-
-        ],
-        'no_sync':[
-
-        ],
-        'enacted':[
-
-        ]
-      },
-      'id':1,
-      'created':'2015-10-26T13:09:44.182Z',
-      'updated':'2015-10-26T13:09:44.182Z',
-      'enacted':null,
-      'policed':null,
-      'backend_register':'{}',
-      'backend_status':'0 - Provisioning in progress',
-      'deleted':false,
-      'write_protect':false,
-      'lazy_blocked':false,
-      'no_sync':false,
-      'origin_server_id':null,
-      'url':'downloads.onosproject.org',
-      'contentProvider':'http://0.0.0.0:9000/hpcapi/contentproviders/1/',
-      'authenticated':false,
-      'enabled':true,
-      'protocol':'HTTP',
-      'redirects':true,
-      'description':null
-    }
-  ],
-  UserList: [
-    {
-      'humanReadableName':'teo@onlab.us',
-      'validators':{
-        'policed':[
-          'notBlank'
-        ],
-        'site':[
-          'notBlank'
-        ],
-        'is_appuser':[
-
-        ],
-        'is_staff':[
-
-        ],
-        'timezone':[
-          'notBlank'
-        ],
-        'backend_status':[
-          'notBlank'
-        ],
-        'id':[
-
-        ],
-        'is_registering':[
-
-        ],
-        'last_login':[
-          'notBlank'
-        ],
-        'email':[
-          'notBlank'
-        ],
-        'username':[
-          'notBlank'
-        ],
-        'updated':[
-
-        ],
-        'login_page':[
-
-        ],
-        'firstname':[
-          'notBlank'
-        ],
-        'user_url':[
-          'url'
-        ],
-        'deleted':[
-
-        ],
-        'lastname':[
-          'notBlank'
-        ],
-        'is_active':[
-
-        ],
-        'phone':[
-
-        ],
-        'is_admin':[
-
-        ],
-        'password':[
-          'notBlank'
-        ],
-        'enacted':[
-          'notBlank'
-        ],
-        'public_key':[
-
-        ],
-        'is_readonly':[
-
-        ],
-        'created':[
-
-        ],
-        'write_protect':[
-
-        ]
-      },
-      'id':2,
-      'password':'pbkdf2_sha256$12000$2Uzp1YCyjEBO$uU2irK//ZpEZYOIgLzanuApFoPnwfG1jNol2jD273wQ=',
-      'last_login':'2015-10-26T14:11:27.625Z',
-      'email':'teo@onlab.us',
-      'username':'teo@onlab.us',
-      'firstname':'Matteo',
-      'lastname':'Scandolo',
-      'phone':'',
-      'user_url':null,
-      'site':1,
-      'public_key':'',
-      'is_active':true,
-      'is_admin':false,
-      'is_staff':true,
-      'is_readonly':false,
-      'is_registering':false,
-      'is_appuser':false,
-      'login_page':null,
-      'created':'2015-10-26T14:11:27.699Z',
-      'updated':'2015-10-26T14:11:27.699Z',
-      'enacted':null,
-      'policed':null,
-      'backend_status':'Provisioning in progress',
-      'deleted':false,
-      'write_protect':false,
-      'timezone':'America/New_York'
-    },
-    {
-      'humanReadableName':'padmin@vicci.org',
-      'validators':{
-        'policed':[
-          'notBlank'
-        ],
-        'site':[
-          'notBlank'
-        ],
-        'is_appuser':[
-
-        ],
-        'is_staff':[
-
-        ],
-        'timezone':[
-          'notBlank'
-        ],
-        'backend_status':[
-          'notBlank'
-        ],
-        'id':[
-
-        ],
-        'is_registering':[
-
-        ],
-        'last_login':[
-          'notBlank'
-        ],
-        'email':[
-          'notBlank'
-        ],
-        'username':[
-          'notBlank'
-        ],
-        'updated':[
-
-        ],
-        'login_page':[
-
-        ],
-        'firstname':[
-          'notBlank'
-        ],
-        'user_url':[
-          'url'
-        ],
-        'deleted':[
-
-        ],
-        'lastname':[
-          'notBlank'
-        ],
-        'is_active':[
-
-        ],
-        'phone':[
-
-        ],
-        'is_admin':[
-
-        ],
-        'password':[
-          'notBlank'
-        ],
-        'enacted':[
-          'notBlank'
-        ],
-        'public_key':[
-
-        ],
-        'is_readonly':[
-
-        ],
-        'created':[
-
-        ],
-        'write_protect':[
-
-        ]
-      },
-      'id':1,
-      'password':'pbkdf2_sha256$12000$Qufx9iqtaYma$xs0YurPOcj9qYQna/Qrb3K+im9Yr2XEVr0J4Kqek7AE=',
-      'last_login':'2015-10-27T10:07:09.065Z',
-      'email':'padmin@vicci.org',
-      'username':'padmin@vicci.org',
-      'firstname':'XOS',
-      'lastname':'admin',
-      'phone':null,
-      'user_url':null,
-      'site':1,
-      'public_key':null,
-      'is_active':true,
-      'is_admin':true,
-      'is_staff':true,
-      'is_readonly':false,
-      'is_registering':false,
-      'is_appuser':false,
-      'login_page':null,
-      'created':'2015-02-17T22:06:38.059Z',
-      'updated':'2015-10-27T09:00:44.672Z',
-      'enacted':null,
-      'policed':null,
-      'backend_status':'Provisioning in progress',
-      'deleted':false,
-      'write_protect':false,
-      'timezone':'America/New_York'
-    }
-  ]
-};
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/css/dev.css b/views/ngXosViews/contentProvider/src/css/dev.css
deleted file mode 100644
index aae7265..0000000
--- a/views/ngXosViews/contentProvider/src/css/dev.css
+++ /dev/null
@@ -1,24 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosContentProvider{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-  width: 80%;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/css/main.css b/views/ngXosViews/contentProvider/src/css/main.css
deleted file mode 100644
index e41be01..0000000
--- a/views/ngXosViews/contentProvider/src/css/main.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
diff --git a/views/ngXosViews/contentProvider/src/icons/README.md b/views/ngXosViews/contentProvider/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/contentProvider/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/index.html b/views/ngXosViews/contentProvider/src/index.html
deleted file mode 100644
index ea255c4..0000000
--- a/views/ngXosViews/contentProvider/src/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower --><!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.contentProvider" id="xosContentProvider">
-    <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower --><!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<!-- endinject -->
diff --git a/views/ngXosViews/contentProvider/src/js/main.js b/views/ngXosViews/contentProvider/src/js/main.js
deleted file mode 100644
index 2d88298..0000000
--- a/views/ngXosViews/contentProvider/src/js/main.js
+++ /dev/null
@@ -1,406 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.contentProvider', [
-  'ngResource',
-  'ngCookies',
-  'xos.helpers',
-  'ui.router'
-])
-.config(($stateProvider) => {
-
-  $stateProvider
-  .state('list', {
-    url: '/',
-    template: '<content-provider-list></content-provider-list>',
-  })
-  .state('details', {
-    url: '/contentProvider/:id',
-    template: '<content-provider-detail></content-provider-detail>'
-  })
-  .state('cdn', {
-    url: '/contentProvider/:id/cdn_prefix',
-    template: '<content-provider-cdn></content-provider-cdn>'
-  })
-  .state('server', {
-    url: '/contentProvider/:id/origin_server',
-    template: '<content-provider-server></content-provider-server>'
-  })
-  .state('users', {
-    url: '/contentProvider/:id/users',
-    template: '<content-provider-users></content-provider-users>'
-  });
-})
-.config(function($httpProvider){
-  // add X-CSRFToken header for update, create, delete (!GET)
-  $httpProvider.interceptors.push('SetCSRFToken');
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.service('ContentProvider', function($resource){
-  return $resource('/hpcapi/contentproviders/:id/', {id: '@id'}, {
-    'update': {method: 'PUT'}
-  });
-})
-.service('ServiceProvider', function($resource){
-  return $resource('/hpcapi/serviceproviders/:id/', {id: '@id'});
-})
-.service('CdnPrefix', function($resource){
-  return $resource('/hpcapi/cdnprefixs/:id/', {id: '@id'});
-})
-.service('OriginServer', function($resource){
-  return $resource('/hpcapi/originservers/:id/', {id: '@id'});
-})
-.service('User', function($resource){
-  return $resource('/xos/users/:id/', {id: '@id'});
-})
-.directive('cpActions', function(ContentProvider, $location){
-  return {
-    restrict: 'E',
-    scope: {
-      id: '=id',
-    },
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/cp_actions.html',
-    controller: function(){
-      this.deleteCp = function(id){
-        ContentProvider.delete({id: id}).$promise
-        .then(function(){
-          $location.url('/');
-        });
-      };
-    }
-  };
-})
-.directive('contentProviderList', function(ContentProvider, _){
-  return {
-    restrict: 'E',
-    controllerAs: 'vm',
-    scope: {},
-    templateUrl: 'templates/cp_list.html',
-    controller: function(){
-      ['Name', 'Description', 'Status', 'Actions']
-      this.tableConfig = {
-        columns: [
-          {
-            label: 'Name',
-            field: 'humanReadableName'
-          },
-          {
-            label: 'Description',
-            field: 'description'
-          },
-          {
-            label: 'Status',
-            field: 'enabled'
-          }
-        ],
-        enableActions: true
-      };
-
-      var self = this;
-
-      ContentProvider.query().$promise
-      .then(function(cp){
-        self.contentProviderList = cp;
-      })
-      .catch(function(e){
-        throw new Error(e);
-      });
-
-      this.deleteCp = function(id){
-        ContentProvider.delete({id: id}).$promise
-        .then(function(){
-          _.remove(self.contentProviderList, {id: id});
-        });
-      };
-    }
-  };
-})
-.directive('contentProviderDetail', function(ContentProvider, ServiceProvider, $stateParams, $location){
-  return {
-    restrict: 'E',
-    controllerAs: 'vm',
-    scope: {},
-    templateUrl: 'templates/cp_detail.html',
-    controller: function(){
-      this.pageName = 'detail';
-      var self = this;
-
-      if($stateParams.id){
-        ContentProvider.get({id: $stateParams.id}).$promise
-        .then(function(cp){
-          self.cp = cp;
-        }).catch(function(e){
-          self.result = {
-            status: 0,
-            msg: e.data.detail
-          };
-        });
-      }
-      else{
-        self.cp = new ContentProvider();
-      }
-
-      ServiceProvider.query().$promise
-      .then(function(sp){
-        self.sp = sp;
-      });
-
-      this.saveContentProvider = function(cp){
-        var p, isNew = false;
-
-        if(cp.id){
-          p = cp.$update();
-        }
-        else{
-          isNew = true;
-          cp.name = cp.humanReadableName;
-          p = cp.$save();
-        }
-
-        p.then(function(res){
-          self.result = {
-            status: 1,
-            msg: 'Content Provider Saved'
-          };
-          if(isNew){
-            $location.url('contentProvider/' + res.id + '/');
-          }
-        })
-        .catch(function(e){
-          self.result = {
-            status: 0,
-            msg: e.data.detail
-          };
-        });
-      };
-    }
-  };
-})
-.directive('contentProviderCdn', function($stateParams, CdnPrefix, ContentProvider){
-  return{
-    restrict: 'E',
-    controllerAs: 'vm',
-    scope: {},
-    templateUrl: 'templates/cp_cdn_prefix.html',
-    controller: function(_){
-      var self = this;
-
-      this.pageName = 'cdn';
-
-      if($stateParams.id){
-        ContentProvider.get({id: $stateParams.id}).$promise
-        .then(function(cp){
-          self.cp = cp;
-        }).catch(function(e){
-          self.result = {
-            status: 0,
-            msg: e.data ? e.data.detail : ''
-          };
-        });
-      }
-
-      CdnPrefix.query().$promise
-      .then(function(prf){
-        self.prf = prf;
-        // console.log(prf, $stateParams.id);
-        // set the active CdnPrefix for this contentProvider
-        self.cp_prf = [];
-        self.cp_prf.push(_.find(prf, {contentProvider: parseInt($stateParams.id)}));
-      }).catch(function(e){
-        self.result = {
-          status: 0,
-          msg: e.data.detail
-        };
-      });
-
-      this.addPrefix = function(prf){
-        prf.contentProvider = $stateParams.id;
-
-        var item = new CdnPrefix(prf);
-
-        item.$save()
-        .then(function(res){
-          self.cp_prf.push(res);
-        })
-        .catch(function(e){
-          self.result = {
-            status: 0,
-            msg: e.data.detail
-          };
-        });
-      };
-
-      this.removePrefix = function(item){
-        item.$delete()
-        .then(function(){
-          _.remove(self.cp_prf, item);
-        })
-        .catch(function(e){
-          self.result = {
-            status: 0,
-            msg: e.data.detail
-          };
-        });
-      };
-    }
-  };
-})
-.directive('contentProviderServer', function($stateParams, OriginServer, ContentProvider){
-  return{
-    restrict: 'E',
-    controllerAs: 'vm',
-    scope: {},
-    templateUrl: 'templates/cp_origin_server.html',
-    controller: function(_){
-      this.pageName = 'server';
-      this.protocols = {'http': 'HTTP', 'rtmp': 'RTMP', 'rtp': 'RTP', 'shout': 'SHOUTcast'};
-
-      var self = this;
-
-      if($stateParams.id){
-        ContentProvider.get({id: $stateParams.id}).$promise
-        .then(function(cp){
-          self.cp = cp;
-        }).catch(function(e){
-          self.result = {
-            status: 0,
-            msg: e.data.detail
-          };
-        });
-      }
-
-      OriginServer.query({contentProvider: $stateParams.id}).$promise
-      .then(function(cp_os){
-        self.cp_os = cp_os;
-      }).catch(function(e){
-        self.result = {
-          status: 0,
-          msg: e.data.detail
-        };
-      });
-
-      this.addOrigin = function(os){
-        os.contentProvider = $stateParams.id;
-
-        var item = new OriginServer(os);
-
-        item.$save()
-        .then(function(res){
-          self.cp_os.push(res);
-        })
-        .catch(function(e){
-          self.result = {
-            status: 0,
-            msg: e.data.detail
-          };
-        });
-      };
-
-      this.removeOrigin = function(item){
-        item.$delete()
-        .then(function(){
-          _.remove(self.cp_os, item);
-        })
-        .catch(function(e){
-          self.result = {
-            status: 0,
-            msg: e.data.detail
-          };
-        });
-      };
-    }
-  };
-})
-.directive('contentProviderUsers', function($stateParams, ContentProvider, User){
-  return{
-    restrict: 'E',
-    controllerAs: 'vm',
-    scope: {},
-    templateUrl: 'templates/cp_user.html',
-    controller: function(_){
-      var self = this;
-
-      this.pageName = 'user';
-
-      this.cp_users = [];
-
-      if($stateParams.id){
-        User.query().$promise
-        .then(function(users){
-          self.users = users;
-          return ContentProvider.get({id: $stateParams.id}).$promise;
-        })
-        .then(function(res){
-          res.users = self.populateUser(res.users, self.users);
-          return res;
-        })
-        .then(function(cp){
-          self.cp = cp;
-        }).catch(function(e){
-          self.result = {
-            status: 0,
-            msg: e.data.detail
-          };
-        });
-      }
-
-      this.populateUser = function(ids, list){
-        for(var i = 0; i < ids.length; i++){
-          ids[i] = _.find(list, {id: ids[i]});
-        }
-        return ids;
-      };
-
-      this.addUserToCp = function(user){
-        self.cp.users.push(user);
-      };
-
-      this.removeUserFromCp = function(user){
-        _.remove(self.cp.users, user);
-      };
-
-      this.saveContentProvider = function(cp){
-
-        // flatten the user to id of array
-        cp.users = _.map(cp.users, 'id');
-
-        cp.$update()
-        .then(function(res){
-
-          self.cp.users = self.populateUser(res.users, self.users);
-
-          self.result = {
-            status: 1,
-            msg: 'Content Provider Saved'
-          };
-
-        })
-        .catch(function(e){
-          self.result = {
-            status: 0,
-            msg: e.data.detail
-          };
-        });
-      };
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/sass/main.scss b/views/ngXosViews/contentProvider/src/sass/main.scss
deleted file mode 100644
index c74b0df..0000000
--- a/views/ngXosViews/contentProvider/src/sass/main.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xosContentProvider {
-  
-}
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/templates/cp_actions.html b/views/ngXosViews/contentProvider/src/templates/cp_actions.html
deleted file mode 100644
index 8c092ee..0000000
--- a/views/ngXosViews/contentProvider/src/templates/cp_actions.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<a href="#/" class="btn btn-default">
-  <i class="icon icon-arrow-left"></i>Back
-</a>
-<a href="#/contentProvider/" class="btn btn-success">
-  <i class="icon icon-plus"></i>Create
-</a>
-<a ng-click="vm.deleteCp(vm.id)" class="btn btn-danger">
-  <i class="icon icon-remove"></i>Remove
-</a>
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/templates/cp_cdn_prefix.html b/views/ngXosViews/contentProvider/src/templates/cp_cdn_prefix.html
deleted file mode 100644
index baa5402..0000000
--- a/views/ngXosViews/contentProvider/src/templates/cp_cdn_prefix.html
+++ /dev/null
@@ -1,73 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row-fluid">
-  <div class="span6">
-    <h1>{$ vm.cp.humanReadableName $}</h1>
-  </div>
-  <div class="span6 text-right">
-    <cp-actions id="vm.cp.id"></cp-actions>
-  </div>
-</div>
-<hr>
-<div class="row-fluid">
-  <div class="span2">
-    <div ng-include="'templates/cp_side_nav.html'"></div>
-  </div>
-  <div class="span10">
-    <div ng-repeat="item in vm.cp_prf" class="well">
-      <div class="row-fluid">
-        <div class="span4">
-          {{item.humanReadableName}}
-        </div>
-        <div class="span6">
-          <!-- TODO show the name instead that id -->
-          {{item.defaultOriginServer}}
-        </div>
-        <div class="span2">
-          <a ng-click="vm.removePrefix(item)" class="btn btn-danger pull-right">
-            <i class="icon icon-remove"></i>
-          </a>
-        </div>
-      </div>
-    </div>
-    <hr>
-    <form ng-submit="vm.addPrefix(vm.new_prf)">
-      <div class="row-fluid">
-        <div class="span4">
-          <label>Prefix</label>
-          <input type="text" ng-model="vm.new_prf.prefix" required style="max-width: 90%">
-        </div>
-        <div class="span6">
-          <label>Default Origin Server</label>
-          <select ng-model="vm.new_prf.defaultOriginServer" style="max-width: 100%">
-            <option ng-repeat="prf in vm.prf" ng-value="prf.id">{$ prf.humanReadableName $}</option>
-          </select>
-        </div>
-        <div class="span2 text-right">
-          <button class="btn btn-success margin-wells">
-            <i class="icon icon-plus"></i>
-          </button>
-        </div>
-      </div>
-    </form>
-    <div class="alert" ng-show="vm.result" ng-class="{'alert-success': vm.result.status === 1,'alert-error': vm.result.status === 0}">
-      {$ vm.result.msg $}
-    </div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/templates/cp_detail.html b/views/ngXosViews/contentProvider/src/templates/cp_detail.html
deleted file mode 100644
index 6b1e78f..0000000
--- a/views/ngXosViews/contentProvider/src/templates/cp_detail.html
+++ /dev/null
@@ -1,73 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row">
-  <div class="col-xs-6">
-    <h1>{$ vm.cp.humanReadableName $}</h1>
-  </div>
-  <div class="col-xs-6 text-right">
-    <cp-actions id="vm.cp.id"></cp-actions>
-  </div>
-</div>
-<hr>
-<div class="row">
-  <div ng-show="vm.cp.id" class="col-xs-2">
-    <div ng-include="'templates/cp_side_nav.html'"></div>
-  </div>
-  <div ng-class="{'col-xs-10': vm.cp.id, 'col-xs-12': !vm.cp.id}">
-  <!-- TODO hide form on not found -->
-    <form ng-submit="vm.saveContentProvider(vm.cp)">
-      <fieldset>
-        <div class="row">
-          <div class="col-xs-6">
-            <label>Name:</label>
-            <input class="form-control" type="text" ng-model="vm.cp.humanReadableName" required/>
-          </div>
-          <div class="col-xs-6">
-            <label class="checkbox">
-              <input class="form-control" type="checkbox" ng-model="vm.cp.enabled" /> Enabled
-            </label>
-          </div>
-        </div>
-        <div class="row">
-          <div class="col-xs-12">
-            <label>Description</label>
-            <textarea class="form-control" ng-model="vm.cp.description"></textarea>
-          </div>
-        </div>
-        <div class="row">
-          <div class="col-xs-12">
-            <label>Service provider</label>
-            <select class="form-control" required ng-model="vm.cp.serviceProvider" ng-options="sp.id as sp.humanReadableName for sp in vm.sp"></select>
-          </div>
-        </div>
-        <div class="row">
-          <div class="col-xs-12">
-            <button class="btn btn-success">
-              <span ng-show="vm.cp.id">Save</span>
-              <span ng-show="!vm.cp.id">Create</span>
-            </button>
-          </div>
-        </div>
-      </fieldset>
-    </form>
-    <div class="alert" ng-show="vm.result" ng-class="{'alert-success': vm.result.status === 1,'alert-danger': vm.result.status === 0}">
-      {$ vm.result.msg $}
-    </div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/templates/cp_list.html b/views/ngXosViews/contentProvider/src/templates/cp_list.html
deleted file mode 100644
index 950b7b7..0000000
--- a/views/ngXosViews/contentProvider/src/templates/cp_list.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- <xos-table data="vm.contentProviderList" config="vm.config"/> -->
-
-<table class="table table-striped" ng-show="vm.contentProviderList.length > 0">
-  <thead>
-    <tr>
-      <th>
-        Name
-      </th>
-      <th>Description</th>
-      <th>Status</th>
-      <th></th>
-    </tr>
-  </thead>
-  <tr ng-repeat="item in vm.contentProviderList">
-    <td>
-      <a ui-sref="details({ id: item.id })">{$ item.humanReadableName $}</a>
-    </td>
-    <td>
-      {$ item.description $}
-    </td>
-    <td>
-      {$ item.enabled $}
-    </td>
-    <td class="text-right">
-      <a ng-click="vm.deleteCp(item.id)" class="btn btn-danger"><i class="glyphicon glyphicon-remove"></i></a></td>
-  </tr>
-</table>
-<div class="alert alert-error" ng-show="vm.contentProviderList.length == 0">
-  No Content Provider defined
-</div>
-
-<div class="row">
-  <div class="span12 text-right">
-    <a class="btn btn-success"href="#/contentProvider/">Create</a>
-  </div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/templates/cp_origin_server.html b/views/ngXosViews/contentProvider/src/templates/cp_origin_server.html
deleted file mode 100644
index 0ba4b73..0000000
--- a/views/ngXosViews/contentProvider/src/templates/cp_origin_server.html
+++ /dev/null
@@ -1,71 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row-fluid">
-  <div class="span6">
-    <h1>{$ vm.cp.humanReadableName $}</h1>
-  </div>
-  <div class="span6 text-right">
-    <cp-actions id="vm.cp.id"></cp-actions>
-  </div>
-</div>
-<hr>
-<div class="row-fluid">
-  <div class="span2">
-    <div ng-include="'templates/cp_side_nav.html'"></div>
-  </div>
-  <div class="span10">
-    <div ng-repeat="item in vm.cp_os" class="well">
-      <div class="row-fluid">
-        <div class="span4">
-          {{item.humanReadableName}}
-        </div>
-        <div class="span6">
-          <!-- TODO shoe the name instead that url -->
-          {{item.defaultOriginServer}}
-        </div>
-        <div class="span2">
-          <a ng-click="vm.removeOrigin(item)" class="btn btn-danger pull-right">
-            <i class="icon icon-remove"></i>
-          </a>
-        </div>
-      </div>
-    </div>
-    <hr>
-    <form ng-submit="vm.addOrigin(vm.new_os)">
-      <div class="row-fluid">
-        <div class="span4">
-          <label>Protocol</label>
-          <select ng-model="vm.new_os.protocol" ng-options="k as v for (k,v) in vm.protocols" style="max-width: 100%;"></select>
-        </div>
-        <div class="span6">
-          <label>Url</label>
-          <input type="text" ng-model="vm.new_os.url" required>
-        </div>
-        <div class="span2 text-right">
-          <button class="btn btn-success margin-wells">
-            <i class="icon icon-plus"></i>
-          </button>
-        </div>
-      </div>
-    </form>
-    <div class="alert" ng-show="vm.result" ng-class="{'alert-success': vm.result.status === 1,'alert-error': vm.result.status === 0}">
-      {$ vm.result.msg $}
-    </div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/templates/cp_side_nav.html b/views/ngXosViews/contentProvider/src/templates/cp_side_nav.html
deleted file mode 100644
index deaac95..0000000
--- a/views/ngXosViews/contentProvider/src/templates/cp_side_nav.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<ul class="nav nav-list">
-  <li>
-    <a class="btn" ng-class="{'btn-primary': vm.pageName == 'detail'}" href="#/contentProvider/{$ vm.cp.id $}">Details</a>
-  </li>
-  <li>
-    <a class="btn" ng-class="{'btn-primary': vm.pageName == 'cdn'}" href="#/contentProvider/{$ vm.cp.id $}/cdn_prefix">Cdn Prexix</a>
-  </li>
-  <li>
-    <a class="btn" ng-class="{'btn-primary': vm.pageName == 'server'}" href="#/contentProvider/{$ vm.cp.id $}/origin_server">Origin Server</a>
-  </li>
-  <li>
-    <a class="btn" ng-class="{'btn-primary': vm.pageName == 'user'}" href="#/contentProvider/{$ vm.cp.id $}/users">Users</a>
-  </li>
-</ul>
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/templates/cp_user.html b/views/ngXosViews/contentProvider/src/templates/cp_user.html
deleted file mode 100644
index 720f160..0000000
--- a/views/ngXosViews/contentProvider/src/templates/cp_user.html
+++ /dev/null
@@ -1,69 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row-fluid">
-  <div class="span6">
-    <h1>{$ vm.cp.humanReadableName $}</h1>
-  </div>
-  <div class="span6 text-right">
-    <cp-actions id="vm.cp.id"></cp-actions>
-  </div>
-</div>
-<hr>
-<div class="row-fluid">
-  <div class="span2">
-    <div ng-include="'templates/cp_side_nav.html'"></div>
-  </div>
-  <div class="span10">
-    <div ng-repeat="item in vm.cp.users" class="well">
-      <div class="row-fluid">
-        <div class="span3">
-          {{item.firstname}}
-        </div>
-        <div class="span3">
-          {{item.lastname}}
-        </div>
-        <div class="span4">
-          {{item.email}}
-        </div>
-        <div class="span2">
-          <a ng-click="vm.removeUserFromCp(item)" class="btn btn-danger pull-right">
-            <i class="icon icon-remove"></i>
-          </a>
-        </div>
-      </div>
-    </div>
-    <hr>
-    <form ng-submit="vm.saveContentProvider(vm.cp)">
-      <div class="row-fluid">
-        <div class="span8">
-          <label>Select user:</label>
-          <select ng-model="vm.user" ng-options="u as u.username for u in vm.users" ng-change="vm.addUserToCp(vm.user)"></select>
-        </div>  
-        <div class="span4 text-right">
-          <button class="btn btn-success margin-wells">
-            Save
-          </button>
-        </div>
-      </div>
-    </form>
-    <div class="alert" ng-show="vm.result" ng-class="{'alert-success': vm.result.status === 1,'alert-error': vm.result.status === 0}">
-      {$ vm.result.msg $}
-    </div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/contentProvider/src/templates/users-list.tpl.html b/views/ngXosViews/contentProvider/src/templates/users-list.tpl.html
deleted file mode 100644
index 6d26747..0000000
--- a/views/ngXosViews/contentProvider/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.users"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/.bowerrc b/views/ngXosViews/dashboardManager/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/dashboardManager/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/.eslintrc b/views/ngXosViews/dashboardManager/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/dashboardManager/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/.gitignore b/views/ngXosViews/dashboardManager/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/dashboardManager/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/bower.json b/views/ngXosViews/dashboardManager/bower.json
deleted file mode 100644
index 6e0f60b..0000000
--- a/views/ngXosViews/dashboardManager/bower.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "name": "xos-dashboardManager",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The dashboardManager view",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "angular-drag-and-drop-lists": "~1.4.0",
-    "js-yaml": "~3.6.1"
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/dashboardManager/gulp/build.js b/views/ngXosViews/dashboardManager/gulp/build.js
deleted file mode 100644
index 4036e79..0000000
--- a/views/ngXosViews/dashboardManager/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.dashboardManager')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosDashboardManager.html',
-        options.static + 'css/xosDashboardManager.css',
-        options.static + 'images/dashboardManager-icon.png',
-        options.static + 'images/dashboardManager-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosDashboardManager.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/dashboardManager-icon.png`, `${options.icon}/dashboardManager-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosDashboardManager.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.dashboardManager',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosDashboardManagerVendor.js',
-            options.static + 'js/xosDashboardManager.js',
-            options.static + 'css/xosDashboardManager.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosDashboardManager.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosDashboardManagerVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['DashboardManager'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosDashboardManager'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/dashboardManager-icon.png`) &&
-      fs.existsSync(`${options.icon}/dashboardManager-icon-active.png`)
-    ){
-      dashboardJson['DashboardManager'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['dashboardManager_dashboard'] = {
-      node: 'DashboardManager',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/gulp/server.js b/views/ngXosViews/dashboardManager/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosViews/dashboardManager/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/dashboardManager/gulpfile.js b/views/ngXosViews/dashboardManager/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/dashboardManager/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/dashboardManager/karma.conf.js b/views/ngXosViews/dashboardManager/karma.conf.js
deleted file mode 100644
index 0b66ed8..0000000
--- a/views/ngXosViews/dashboardManager/karma.conf.js
+++ /dev/null
@@ -1,117 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-// dirty trick to load angular as first
-var ngIndex = bowerComponents.findIndex((item) => {
-  return item === 'src/vendor/angular/angular.js';
-});
-
-bowerComponents.splice(ngIndex, 1);
-bowerComponents.unshift('src/vendor/angular/angular.js');
-// end dirty trick to load angular as first
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/dashboardManager/package.json b/views/ngXosViews/dashboardManager/package.json
deleted file mode 100644
index fcf051f..0000000
--- a/views/ngXosViews/dashboardManager/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-dashboardManager",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/dashboardManager/spec/sample.test.js b/views/ngXosViews/dashboardManager/spec/sample.test.js
deleted file mode 100644
index 9f0874f..0000000
--- a/views/ngXosViews/dashboardManager/spec/sample.test.js
+++ /dev/null
@@ -1,57 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// TODO angular-drag-drop is inject in the wrong place, test failing
-
-describe('The User List', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.dashboardManager'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('/api/core/users/?no_hyperlinks=1').respond([
-      {
-        email: 'matteo.scandolo@gmail.com',
-        firstname: 'Matteo',
-        lastname: 'Scandolo' 
-      }
-    ]);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<users-list></users-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  xit('should load 1 users', () => {
-    httpBackend.flush();
-    expect(isolatedScope.users.length).toBe(1);
-    expect(isolatedScope.users[0].email).toEqual('matteo.scandolo@gmail.com');
-    expect(isolatedScope.users[0].firstname).toEqual('Matteo');
-    expect(isolatedScope.users[0].lastname).toEqual('Scandolo');
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/src/css/dev.css b/views/ngXosViews/dashboardManager/src/css/dev.css
deleted file mode 100644
index 54ed1d6..0000000
--- a/views/ngXosViews/dashboardManager/src/css/dev.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosDashboardManager{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/src/css/main.css b/views/ngXosViews/dashboardManager/src/css/main.css
deleted file mode 100644
index 1d26161..0000000
--- a/views/ngXosViews/dashboardManager/src/css/main.css
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosDashboardManager {
-  /* DRAG AND DROP STYLING */ }
-  #xosDashboardManager .col-xs-10 + .col-xs-2.text-right {
-    padding-top: 20px; }
-  #xosDashboardManager ul[dnd-list] {
-    min-height: 42px;
-    border: 1px dashed #337ab7;
-    padding: 20px;
-    margin-bottom: 0; }
-    #xosDashboardManager ul[dnd-list] li {
-      list-style: none; }
-    #xosDashboardManager ul[dnd-list] li:not(:last-child) {
-      margin-bottom: 20px; }
-    #xosDashboardManager ul[dnd-list] li:hover {
-      cursor: pointer; }
-    #xosDashboardManager ul[dnd-list] li.dndDraggingSource {
-      display: none; }
-  #xosDashboardManager ul[dnd-list] > li, #xosDashboardManager .dashboard-container {
-    display: block;
-    border: 1px solid #337ab7;
-    padding: 20px; }
-    #xosDashboardManager ul[dnd-list] > li a, #xosDashboardManager .dashboard-container a {
-      text-decoration: none !important; }
-      #xosDashboardManager ul[dnd-list] > li a img, #xosDashboardManager .dashboard-container a img {
-        width: 20px; }
-    #xosDashboardManager ul[dnd-list] > li i, #xosDashboardManager .dashboard-container i {
-      float: right; }
diff --git a/views/ngXosViews/dashboardManager/src/icons/README.md b/views/ngXosViews/dashboardManager/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/dashboardManager/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/src/icons/dashboardManager-icon-active.png b/views/ngXosViews/dashboardManager/src/icons/dashboardManager-icon-active.png
deleted file mode 100644
index 3dba74a..0000000
--- a/views/ngXosViews/dashboardManager/src/icons/dashboardManager-icon-active.png
+++ /dev/null
Binary files differ
diff --git a/views/ngXosViews/dashboardManager/src/icons/dashboardManager-icon.png b/views/ngXosViews/dashboardManager/src/icons/dashboardManager-icon.png
deleted file mode 100644
index 1d60a9a..0000000
--- a/views/ngXosViews/dashboardManager/src/icons/dashboardManager-icon.png
+++ /dev/null
Binary files differ
diff --git a/views/ngXosViews/dashboardManager/src/index.html b/views/ngXosViews/dashboardManager/src/index.html
deleted file mode 100644
index 4476a54..0000000
--- a/views/ngXosViews/dashboardManager/src/index.html
+++ /dev/null
@@ -1,58 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.dashboardManager" id="xosDashboardManager" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/js-yaml/dist/js-yaml.js"></script>
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-drag-and-drop-lists/angular-drag-and-drop-lists.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/user-dashboards.directive.js"></script>
-<script src="/.tmp/dashboard-form.directive.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/src/js/dashboard-form.directive.js b/views/ngXosViews/dashboardManager/src/js/dashboard-form.directive.js
deleted file mode 100644
index f82c173..0000000
--- a/views/ngXosViews/dashboardManager/src/js/dashboard-form.directive.js
+++ /dev/null
@@ -1,173 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.dashboardManager')
-  .directive('dashboardForm', function(){
-    return {
-      restrict: 'E',
-      scope: {},
-      bindToController: true,
-      controllerAs: 'vm',
-      templateUrl: 'templates/dashboard-form.tpl.html',
-      controller: function($stateParams, $log, Dashboards){
-
-        this.dashboard = {
-          enabled: true
-        };
-
-        if($stateParams.id){
-          Dashboards.get({id: $stateParams.id}).$promise
-          .then(dash => {
-            this.dashboard = dash;
-          })
-          .catch(e => {
-            console.log(e);
-          })
-        }
-
-        this.formConfig = {
-          exclude: [
-            'backend_register',
-            'controllers',
-            'deployments',
-            'enacted',
-            'humanReadableName',
-            'lazy_blocked',
-            'no_policy',
-            'no_sync',
-            'policed',
-            'write_protect',
-            'icon',
-            'icon_active'
-          ],
-          actions: [
-            {
-              label: 'Save',
-              icon: 'ok',
-              cb: (item,form) => {
-
-                if (!form.$valid){
-                  return;
-                }
-                if(item.name && item.url && item.custom_icon){
-                  var indexOfXos = item.url.indexOf('xos');
-                  if (indexOfXos>=0){
-                    var dashboard_name = item.url.slice(indexOfXos+3,item.url.length).toLowerCase();
-                    item.icon =dashboard_name.concat('-icon.png');
-                    item.icon_active =dashboard_name.concat('-icon-active.png');
-                  }
-                  else{
-                    item.icon ='default-icon.png';
-                    item.icon_active ='default-icon-active.png';
-                  }
-                }
-                else{
-                  item.icon ='default-icon.png';
-                  item.icon_active ='default-icon-active.png';
-                }
-                this.createOrUpdateDashboard(item);
-              },
-              class: 'success'
-            },
-            {
-              label: 'Esport to TOSCA',
-              icon: 'export',
-              cb: (item) => {
-                this.toTosca(item);
-              },
-              class: 'primary'
-            }
-          ],
-          formName: 'dashboardForm',
-          feedback: {
-            show: false,
-            message: 'Form submitted successfully !!!',
-            type: 'success'
-          },
-          fields: {
-            name: {
-              type: 'string',
-              validators: {
-                required: true
-              }
-            },
-            url: {
-              type: 'string',
-              validators: {
-                required: true
-              }
-            },
-            enabled: {
-              type: 'boolean'
-            },
-            custom_icon: {
-              type: 'boolean'
-            }
-          }
-        };
-
-        this.createOrUpdateDashboard = dashboard => {
-          let p;
-          if(dashboard.id){
-            delete dashboard.controllers;
-            delete dashboard.deployments;
-            p = dashboard.$save();
-          }
-          else{
-            p = Dashboards.save(dashboard).$promise;
-          }
-
-          p.then(res => {
-            this.formConfig.feedback.show = true;
-          })
-          .catch(e => {
-            $log.info(e);
-            this.formConfig.feedback.show = true;
-            this.formConfig.feedback.message = e;
-            this.formConfig.feedback.type='danger';
-          })
-        };
-
-        this.toTosca = dashboard => {
-          const yaml = {}
-          yaml[dashboard.name] = {
-            type: 'tosca.nodes.DashboardView',
-            properties: {
-              url: dashboard.url
-            }
-          };
-          this.tosca = jsyaml.dump(yaml).replace(/'/g, '');
-
-          const yamlRequirements = {
-            requirements: []
-          };
-          const dashboardRequirements = {};
-          dashboardRequirements[`${dashboard.name.toLowerCase()}_dashboard`] = {
-            node: dashboard.name,
-            relationship: 'tosca.relationships.UsesDashboard'
-          }
-          yamlRequirements.requirements.push(dashboardRequirements);
-          this.toscaRequirements = jsyaml.dump(yamlRequirements).replace(/'/g, '');
-        };
-      }
-    }
-  });
-})();
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/src/js/main.js b/views/ngXosViews/dashboardManager/src/js/main.js
deleted file mode 100644
index 510fa18..0000000
--- a/views/ngXosViews/dashboardManager/src/js/main.js
+++ /dev/null
@@ -1,73 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.dashboardManager', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers',
-  'dndLists'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('manage-user-dashboards', {
-    url: '/',
-    template: '<user-dashboards></user-dashboards>'
-  })
-  .state('add-dashboards', {
-    url: '/add',
-    template: '<dashboard-form></dashboard-form>'
-  })
-  .state('edit-dashboards', {
-    url: '/dashboards/:id',
-    template: '<dashboard-form></dashboard-form>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.service('UserDashboards', function($http, $q){
-  this.query = () => {
-    const d = $q.defer();
-
-    $http.get('/api/utility/dashboards')
-    .then(res => {
-      d.resolve(res.data);
-    })
-    .catch(err => {
-      d.reject(err);
-    });
-
-    return {$promise: d.promise};
-  }
-
-  this.update = (dashboard) => {
-    const d = $q.defer();
-    $http.post('/api/utility/dashboards/', dashboard)
-    .then(res => {
-      d.resolve(res.data);
-    })
-    .catch(err => {
-      d.reject(err);
-    });
-
-    return {$promise: d.promise};
-  }
-});
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/src/js/user-dashboards.directive.js b/views/ngXosViews/dashboardManager/src/js/user-dashboards.directive.js
deleted file mode 100644
index b5b00af..0000000
--- a/views/ngXosViews/dashboardManager/src/js/user-dashboards.directive.js
+++ /dev/null
@@ -1,117 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  angular.module('xos.dashboardManager')
-  .directive('userDashboards', function(){
-    return {
-      restrict: 'E',
-      scope: {},
-      bindToController: true,
-      controllerAs: 'vm',
-      templateUrl: 'templates/user-dashboards.tpl.html',
-      controller: function($q, _, UserDashboards, Dashboards){
-        
-        // retrieving user list
-        $q.all([
-          UserDashboards.query().$promise,
-          Dashboards.query({enabled: 'False'}).$promise,
-        ])
-        .then((res) => {
-          let [dashboards, disabled] = res;
-          this.disabled = disabled;
-          this.list = {
-            enabled: _.filter(dashboards, {shown: true}),
-            disabled: _.filter(dashboards, {shown: false})
-          };
-        })
-        .catch((e) => {
-          throw new Error(e);
-        });
-
-        this.removeFromList = (listName, itemId) => {
-          _.remove(this.list[listName], {id: itemId});
-        };
-
-        this.addToList = (listName, item) => {
-          this.list[listName].push(item)
-          location.reload();
-        };
-
-        this.isInList = (listName, item) => {
-          return _.find(this.list[listName], item);
-        };
-
-        this.reorderList = (list, newPos, oldPos, item) => {
-
-          let listToOrder = _.filter(list, i => {
-            // if is the item, skip it, it is already updated
-            if(i.id === item.id){
-              return false;
-            }
-            if(i.order < oldPos){
-              return true;
-            }
-            if(i.order >= newPos){
-              return true;
-            }
-            return false;
-          });
-
-          listToOrder = listToOrder.map(i => {
-            i.order++;
-            return i;
-          })
-        };
-
-        this.addedToList = (event, index, item, external, list) => {
-          let originalPosition;
-
-          // load the item in the list
-          let itemInList = this.isInList(list, item);
-          if(itemInList){
-            // if is in the list update it
-            originalPosition = item.order;
-            itemInList.order = index;
-            item.order = index;
-          }
-          else {
-            // create a new one
-            item.order = this.list[list].length;
-            item.shown = !item.shown;
-          }
-
-          const otherList = list === 'enabled' ? 'disabled' : 'enabled';
-
-          UserDashboards.update(item).$promise
-          .then((item) => {
-            if(!itemInList){
-              // if it is not in the list, update both lists
-              this.addToList(list, item);
-              this.removeFromList(otherList, item.id);
-            }
-            else {
-              // reorder
-              this.reorderList(this.list[list], index, originalPosition, item);
-            }
-          });
-        }
-      }
-    };
-  });
-})(); 
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/src/sass/main.scss b/views/ngXosViews/dashboardManager/src/sass/main.scss
deleted file mode 100644
index 161e4d9..0000000
--- a/views/ngXosViews/dashboardManager/src/sass/main.scss
+++ /dev/null
@@ -1,66 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-@import '../../../../style/sass/bootstrap/bootstrap/_variables.scss';
-
-#xosDashboardManager {
-
-  .col-xs-10 + .col-xs-2.text-right {
-    padding-top: $line-height-computed;
-  }
-
-  /* DRAG AND DROP STYLING */
-  ul[dnd-list] {
-    min-height: 42px;
-    border: 1px dashed $brand-primary;
-    padding: $line-height-computed;;
-    margin-bottom: 0;
-
-    li {
-      list-style: none;
-    }
-
-    li:not(:last-child){
-      margin-bottom: $line-height-computed;;
-    }
-
-    li:hover{
-      cursor: pointer;
-    }
-
-    li.dndDraggingSource {
-      display: none;
-    }
-  }
-
-  ul[dnd-list] > li, .dashboard-container {
-    display: block;
-    border: 1px solid $brand-primary;
-    padding: $line-height-computed;
-    a {
-      text-decoration: none !important;
-      img {
-        width: 20px;
-      }
-    }
-    i {
-      float: right;
-    }
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/src/templates/dashboard-form.tpl.html b/views/ngXosViews/dashboardManager/src/templates/dashboard-form.tpl.html
deleted file mode 100644
index 19c9f28..0000000
--- a/views/ngXosViews/dashboardManager/src/templates/dashboard-form.tpl.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row">
-  <div class="col-xs-10">
-    <h1>Manage Dashboard</h1>
-  </div>
-  <div class="col-xs-2 text-right">
-    <a ui-sref="manage-user-dashboards" class="btn btn-success">Back</a>
-  </div>
-</div>
-<div class="row">
-  <div class="col-xs-12">
-    <xos-form ng-model="vm.dashboard" config="vm.formConfig"></xos-form>
-  </div>
-</div>
-<div class="row" ng-show="vm.tosca">
-  <div class="col-sm-6">
-    <div class="row">
-      <div class="col-xs-12">
-        <xos-alert show="true" config="{type: 'info'}">
-          Include this lines in a TOSCA recipe to load the {{vm.dashboard.name}} dashboard in the system.
-        </xos-alert>
-      </div>
-      <div class="col-xs-12">
-        <pre>{{vm.tosca}}</pre>
-      </div>
-    </div>
-  </div>
-  <div class="col-sm-6">
-    <div class="row">
-      <div class="col-xs-12">
-        <xos-alert show="true" config="{type: 'info'}">
-          Add this lines as a requirement for the user in a TOSCA recipe to assign the {{vm.dashboard.name}} to the user.
-        </xos-alert>
-      </div>
-      <div class="col-xs-12">
-        <pre>{{vm.toscaRequirements}}</pre>
-      </div>
-    </div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/dashboardManager/src/templates/user-dashboards.tpl.html b/views/ngXosViews/dashboardManager/src/templates/user-dashboards.tpl.html
deleted file mode 100644
index 759c03c0..0000000
--- a/views/ngXosViews/dashboardManager/src/templates/user-dashboards.tpl.html
+++ /dev/null
@@ -1,93 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row">
-  <div class="col-xs-10">
-    <h1>Manage Your Dashboards</h1>
-  </div>
-  <div class="col-xs-2 text-right">
-    <a ui-sref="add-dashboards" class="btn btn-success">Add</a>
-  </div>
-</div>
-
-<div class="row">
-  <div class="col-xs-6">
-    <div class="panel panel-primary">
-      <div class="panel-heading">
-        <h3 class="panel-title">
-          Available Dashboards
-        </h3>
-      </div>
-      <div class="panel-body">
-        <ul dnd-list="vm.list.disabled"
-          dnd-drop="vm.addedToList(event, index, item, external, 'disabled')">
-          <li ng-repeat="item in vm.list.disabled"
-            dnd-moved="vm.removeFromList('disabled', item.id)"
-            dnd-draggable="item">
-            <a ui-sref="edit-dashboards({id: item.id,})">
-              <img src="/static/images/{{item.icon}}"></img>
-              {{item.name}}
-              <i class="glyphicon glyphicon-pencil"></i>
-            </a>
-          </li>
-        </ul>
-      </div>
-    </div>
-  </div>
-  <div class="col-xs-6">
-    <div class="panel panel-primary">
-      <div class="panel-heading">
-        <h3 class="panel-title">
-          Enabled Dashboards
-        </h3>
-      </div>
-      <div class="panel-body">
-        <ul dnd-list="vm.list.enabled"
-          dnd-drop="vm.addedToList(event, index, item, external, 'enabled')">
-          <li ng-repeat="item in vm.list.enabled | orderBy : 'order'"
-            dnd-moved="vm.removeFromList('enabled', item.id)"
-            dnd-draggable="item">
-            <a ui-sref="edit-dashboards({id: item.id,})">
-              <img src="/static/images/{{item.icon}}"></img>
-              {{item.name}}
-              <i class="glyphicon glyphicon-pencil"></i>
-            </a>
-          </li>
-        </ul>
-      </div>
-    </div>
-  </div>
-</div>
-<div class="row" ng-show="vm.disabled.length > 0">
-  <div class="col-xs-12">
-    <h1>Disabled Dashboard</h1>
-  </div>
-  <div class="col-xs-12">
-    <div class="row">
-      <div class="col-sm-2" ng-repeat="item in vm.disabled | orderBy : 'id'">
-        <span class="dashboard-container">
-          <a ui-sref="edit-dashboards({id: item.id,})">
-            <img src="/static/images/{{item.icon}}"></img>
-            {{item.name}}
-            <i class="glyphicon glyphicon-pencil"></i>
-          </a>
-        </span>
-      </div>
-    </div>
-  </div>
-</div>
diff --git a/views/ngXosViews/dashboardManager/src/templates/users-list.tpl.html b/views/ngXosViews/dashboardManager/src/templates/users-list.tpl.html
deleted file mode 100644
index 6d26747..0000000
--- a/views/ngXosViews/dashboardManager/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.users"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosViews/developer/.bowerrc b/views/ngXosViews/developer/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/developer/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/developer/.eslintrc b/views/ngXosViews/developer/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/developer/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/developer/.gitignore b/views/ngXosViews/developer/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/developer/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/developer/bower.json b/views/ngXosViews/developer/bower.json
deleted file mode 100644
index 1d82b4a..0000000
--- a/views/ngXosViews/developer/bower.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "xos-developer",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The developer view",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/developer/gulp/build.js b/views/ngXosViews/developer/gulp/build.js
deleted file mode 100644
index 27dc346..0000000
--- a/views/ngXosViews/developer/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.developer')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosDeveloper.html',
-        options.static + 'css/xosDeveloper.css',
-        options.static + 'images/developer-icon.png',
-        options.static + 'images/developer-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosDeveloper.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/developer-icon.png`, `${options.icon}/developer-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosDeveloper.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.developer',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosDeveloperVendor.js',
-            options.static + 'js/xosDeveloper.js',
-            options.static + 'css/xosDeveloper.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosDeveloper.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosDeveloperVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['Developer'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosDeveloper'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/developer-icon.png`) &&
-      fs.existsSync(`${options.icon}/developer-icon-active.png`)
-    ){
-      dashboardJson['Developer'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['developer_dashboard'] = {
-      node: 'Developer',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/developer/gulp/server.js b/views/ngXosViews/developer/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosViews/developer/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/developer/gulpfile.js b/views/ngXosViews/developer/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/developer/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/developer/karma.conf.js b/views/ngXosViews/developer/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/developer/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/developer/mocks/config.json b/views/ngXosViews/developer/mocks/config.json
deleted file mode 100644
index 827ddb5..0000000
--- a/views/ngXosViews/developer/mocks/config.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "endpoints": [
-    {
-      "url": "slicesplus",
-      "base": "api/utility/",
-      "methods": ["GET"]
-    },
-    {
-      "url": "instances",
-      "base": "api/core/",
-      "methods": ["GET"]
-    }
-  ]
-}
\ No newline at end of file
diff --git a/views/ngXosViews/developer/mocks/multi-site/instances.json b/views/ngXosViews/developer/mocks/multi-site/instances.json
deleted file mode 100644
index 6e1fad7..0000000
--- a/views/ngXosViews/developer/mocks/multi-site/instances.json
+++ /dev/null
@@ -1,77 +0,0 @@
-[
-   {
-      "humanReadableName":"Instance 1",
-      "id":1,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 2",
-      "id":2,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 3",
-      "id":3,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 4",
-      "id":4,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 5",
-      "id":5,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 6",
-      "id":6,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 7",
-      "id":7,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 8",
-      "id":8,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 9",
-      "id":9,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 10",
-      "id":10,
-      "slice":"2"
-   },
-   {
-      "humanReadableName":"Instance 11",
-      "id":11,
-      "slice":"2"
-   },
-   {
-      "humanReadableName":"Instance 12",
-      "id":12,
-      "slice":"2"
-   },
-   {
-      "humanReadableName":"Instance 13",
-      "id":13,
-      "slice":"2"
-   },
-   {
-      "humanReadableName":"Instance 14",
-      "id":14,
-      "slice":"2"
-   },
-   {
-      "humanReadableName":"Instance 15",
-      "id":15,
-      "slice":"2"
-   }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/developer/mocks/multi-site/slicesplus.json b/views/ngXosViews/developer/mocks/multi-site/slicesplus.json
deleted file mode 100644
index ba05da2..0000000
--- a/views/ngXosViews/developer/mocks/multi-site/slicesplus.json
+++ /dev/null
@@ -1,48 +0,0 @@
-[
-   {
-      "id":1,
-      "name":"mysite_management1",
-      "site":1,
-      "max_instances":10,
-      "networks":[1, 2],
-      "current_user_roles":[
-         "Admin"
-      ],
-      "instance_distribution":{
-         "mysite": 4,
-         "anothersite": 5
-      },
-      "instance_distribution_ready":{
-         "mysite": 3,
-         "anothersite": 1
-      },
-      "instance_total":9,
-      "instance_total_ready":4,
-      "instance_status":{
-
-      }
-   },
-   {
-      "id":2,
-      "name":"mysite_management2",
-      "site":1,
-      "max_instances":10,
-      "networks":[2, 3, 4],
-      "current_user_roles":[
-         "Access"
-      ],
-      "instance_distribution":{
-        "mysite": 3,
-        "anothersite": 3
-      },
-      "instance_distribution_ready":{
-         "mysite": 2,
-         "anothersite": 3
-      },
-      "instance_total":6,
-      "instance_total_ready":5,
-      "instance_status":{
-
-      }
-   }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/developer/mocks/single-site/instances.json b/views/ngXosViews/developer/mocks/single-site/instances.json
deleted file mode 100644
index 6e1fad7..0000000
--- a/views/ngXosViews/developer/mocks/single-site/instances.json
+++ /dev/null
@@ -1,77 +0,0 @@
-[
-   {
-      "humanReadableName":"Instance 1",
-      "id":1,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 2",
-      "id":2,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 3",
-      "id":3,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 4",
-      "id":4,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 5",
-      "id":5,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 6",
-      "id":6,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 7",
-      "id":7,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 8",
-      "id":8,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 9",
-      "id":9,
-      "slice":"1"
-   },
-   {
-      "humanReadableName":"Instance 10",
-      "id":10,
-      "slice":"2"
-   },
-   {
-      "humanReadableName":"Instance 11",
-      "id":11,
-      "slice":"2"
-   },
-   {
-      "humanReadableName":"Instance 12",
-      "id":12,
-      "slice":"2"
-   },
-   {
-      "humanReadableName":"Instance 13",
-      "id":13,
-      "slice":"2"
-   },
-   {
-      "humanReadableName":"Instance 14",
-      "id":14,
-      "slice":"2"
-   },
-   {
-      "humanReadableName":"Instance 15",
-      "id":15,
-      "slice":"2"
-   }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/developer/mocks/single-site/slicesplus.json b/views/ngXosViews/developer/mocks/single-site/slicesplus.json
deleted file mode 100644
index 9f7802c..0000000
--- a/views/ngXosViews/developer/mocks/single-site/slicesplus.json
+++ /dev/null
@@ -1,44 +0,0 @@
-[
-   {
-      "id":1,
-      "name":"mysite_management1",
-      "site":1,
-      "max_instances":10,
-      "networks":[1, 2],
-      "current_user_roles":[
-         "Admin"
-      ],
-      "instance_distribution":{
-         "mysite": 9
-      },
-      "instance_distribution_ready":{
-         "mysite": 4
-      },
-      "instance_total":9,
-      "instance_total_ready":4,
-      "instance_status":{
-
-      }
-   },
-   {
-      "id":2,
-      "name":"mysite_management2",
-      "site":1,
-      "max_instances":10,
-      "networks":[2, 3, 4],
-      "current_user_roles":[
-         "Access"
-      ],
-      "instance_distribution":{
-        "mysite": 6
-      },
-      "instance_distribution_ready":{
-         "mysite": 5
-      },
-      "instance_total":6,
-      "instance_total_ready":5,
-      "instance_status":{
-
-      }
-   }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/developer/package.json b/views/ngXosViews/developer/package.json
deleted file mode 100644
index 8b3ac4e..0000000
--- a/views/ngXosViews/developer/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-developer",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/developer/spec/sample.test.js b/views/ngXosViews/developer/spec/sample.test.js
deleted file mode 100644
index a74e101..0000000
--- a/views/ngXosViews/developer/spec/sample.test.js
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The User List', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.developer'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('/api/core/users/?no_hyperlinks=1').respond([
-      {
-        email: 'teo@onlab.us',
-        firstname: 'Matteo',
-        lastname: 'Scandolo' 
-      }
-    ]);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<users-list></users-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  xit('should load 1 users', () => {
-    httpBackend.flush();
-    expect(isolatedScope.users.length).toBe(1);
-    expect(isolatedScope.users[0].email).toEqual('teo@onlab.us');
-    expect(isolatedScope.users[0].firstname).toEqual('Matteo');
-    expect(isolatedScope.users[0].lastname).toEqual('Scandolo');
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/developer/src/css/dev.css b/views/ngXosViews/developer/src/css/dev.css
deleted file mode 100644
index 1f1e2b7..0000000
--- a/views/ngXosViews/developer/src/css/dev.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosDeveloper{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/developer/src/css/main.css b/views/ngXosViews/developer/src/css/main.css
deleted file mode 100644
index 3300744..0000000
--- a/views/ngXosViews/developer/src/css/main.css
+++ /dev/null
@@ -1,36 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosDeveloper .pie-legend li {
-  display: inline-block;
-  white-space: nowrap;
-  position: relative;
-  margin-bottom: 4px;
-  border-radius: 5px;
-  padding: 2px 8px 2px 28px;
-  font-size: smaller;
-  cursor: default; }
-
-#xosDeveloper .pie-legend-icon {
-  display: block;
-  position: absolute;
-  left: 0;
-  top: 0;
-  width: 20px;
-  height: 20px;
-  border-radius: 5px; }
diff --git a/views/ngXosViews/developer/src/icons/README.md b/views/ngXosViews/developer/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/developer/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/developer/src/index.html b/views/ngXosViews/developer/src/index.html
deleted file mode 100644
index ddc2453..0000000
--- a/views/ngXosViews/developer/src/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.developer" id="xosDeveloper" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/developer/src/js/main.js b/views/ngXosViews/developer/src/js/main.js
deleted file mode 100644
index 31dca57..0000000
--- a/views/ngXosViews/developer/src/js/main.js
+++ /dev/null
@@ -1,153 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.developer', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('developer', {
-    url: '/',
-    template: '<developer-dashboard></developer-dashboard>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.directive('developerDashboard', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/developer-dashboard.tpl.html',
-    controller: function($scope, $timeout, SlicesPlus, Instances, _){
-
-      this.instancePerSliceConfig = {
-        data: [],
-        groupBy: 'slice',
-        legend: true,
-        classes: 'instance per slice',
-        labelFormatter: (labels) => {
-          return labels.map(l => {
-            return _.find(this.slices, {id: parseInt(l)}).name
-          });
-        }
-      };
-
-      this.instancePerSiteConfig = {
-        data: [],
-        groupBy: 'site',
-        legend: true,
-        classes: 'instance per site',
-      };
-
-      this.networkPerSliceConfig = {
-        data: [],
-        groupBy: 'name',
-        legend: true,
-        classes: 'network per slice',
-      };
-
-      this.tableConfig = {
-        columns: [
-          {
-            label: 'Name',
-            prop: 'name'
-          },
-          {
-            label: 'Privileges',
-            prop: 'current_user_roles',
-            type: 'array'
-          },
-          {
-            label: 'Number of Instances (active / total)',
-            type: 'custom',
-            formatter: item => `${item.instance_total_ready} / ${item.instance_total}`
-          },
-          {
-            label: 'Active Instances per Sites',
-            type: 'object',
-            prop: 'instance_distribution_ready'
-          },
-          {
-            label: 'Total Instances per Sites',
-            type: 'object',
-            prop: 'instance_distribution'
-          },
-          {
-            label: 'Networks',
-            type: 'custom',
-            formatter: item => item.networks.length
-          }
-        ]
-      };
-
-      // retrieving user list
-      SlicesPlus.query().$promise
-      .then((slices) => {
-        this.slices = slices;
-        return Instances.query().$promise
-      })
-      .then(instances => {
-        
-        // formatting data in this way sucks.
-        // Provide a way to just pass data to the chart if needed [smartPie].
-
-        // retrieving network per slices
-        let networkPerSlice = _.reduce(this.slices, (list, s) => {
-          if( s.networks.length > 1){
-            // push s.neworks.length values in array
-            for(let i = 0; i < s.networks.length; i++){
-              list.push({id: s.id, name: s.name, network: s.networks[i]})
-            }
-          }
-          else if ( s.networks.length === 1){
-            list.push({id: s.id, name: s.name, network: s.networks[0]});
-          }
-          return list;
-        }, []);
-
-        // retrieving instance distribution across sites
-        let instancePerSite = _.reduce(this.slices, (list, s) => {
-          _.forEach(Object.keys(s.instance_distribution), k => {
-            for(let i = 0; i < s.instance_distribution[k]; i++){
-              list.push({site: k, instance: i})
-            }
-          })
-          return list;
-        }, []);
-
-        this.sites = Object.keys(_.groupBy(instancePerSite, 'site'));
-
-        this.instancePerSliceConfig.data = instances;
-        this.instancePerSiteConfig.data = instancePerSite;
-        this.networkPerSliceConfig.data = networkPerSlice;
-
-      })
-      .catch((e) => {
-        throw new Error(e);
-      });
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/developer/src/sass/main.scss b/views/ngXosViews/developer/src/sass/main.scss
deleted file mode 100644
index 015f156..0000000
--- a/views/ngXosViews/developer/src/sass/main.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xosDeveloper {
-
-  .pie-legend li {
-      display: inline-block;
-    white-space: nowrap;
-    position: relative;
-    margin-bottom: 4px;
-    border-radius: 5px;
-    padding: 2px 8px 2px 28px;
-    font-size: smaller;
-    cursor: default;
-  }
-
-  .pie-legend-icon {
-    display: block;
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 20px;
-    height: 20px;
-    border-radius: 5px;
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/developer/src/templates/developer-dashboard.tpl.html b/views/ngXosViews/developer/src/templates/developer-dashboard.tpl.html
deleted file mode 100644
index 09f06f0..0000000
--- a/views/ngXosViews/developer/src/templates/developer-dashboard.tpl.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row">
-  <div ng-class="{'col-sm-4': vm.sites.length > 1 || !vm.sites, 'col-sm-6': vm.sites.length <= 1}" class="text-center">
-    <h3>Instances per Slice</h3>
-    <xos-smart-pie ng-if="vm.instancePerSliceConfig.data.length > 0" config="vm.instancePerSliceConfig"></xos-smart-pie>
-  </div>
-  <div ng-if="vm.sites.length > 1" class="col-sm-4 text-center">
-    <h3>Instances per Site</h3>
-    <xos-smart-pie ng-if="vm.instancePerSiteConfig.data.length > 0" config="vm.instancePerSiteConfig"></xos-smart-pie>
-  </div>
-  <div ng-class="{'col-sm-4': vm.sites.length > 1 || !vm.sites, 'col-sm-6': vm.sites.length <= 1}" class="text-center">
-    <h3>Network per Slice</h3>
-    <xos-smart-pie ng-if="vm.networkPerSliceConfig.data.length > 0" config="vm.networkPerSliceConfig"></xos-smart-pie>
-  </div>
-</div>
-
-<xos-table config="vm.tableConfig" data="vm.slices"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosViews/developer/src/templates/users-list.tpl.html b/views/ngXosViews/developer/src/templates/users-list.tpl.html
deleted file mode 100644
index 6d26747..0000000
--- a/views/ngXosViews/developer/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.users"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/.bowerrc b/views/ngXosViews/diagnostic/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/diagnostic/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/.eslintrc b/views/ngXosViews/diagnostic/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/diagnostic/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/.gitignore b/views/ngXosViews/diagnostic/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/diagnostic/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/bower.json b/views/ngXosViews/diagnostic/bower.json
deleted file mode 100644
index e5693ea..0000000
--- a/views/ngXosViews/diagnostic/bower.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "xos-diagnostic",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The diagnostic view",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/diagnostic/gulp/build.js b/views/ngXosViews/diagnostic/gulp/build.js
deleted file mode 100644
index 7e90645..0000000
--- a/views/ngXosViews/diagnostic/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.diagnostic')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosDiagnostic.html',
-        options.static + 'css/xosDiagnostic.css',
-        options.static + 'images/diagnostic-icon.png',
-        options.static + 'images/diagnostic-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosDiagnostic.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/diagnostic-icon.png`, `${options.icon}/diagnostic-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosDiagnostic.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.diagnostic',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosDiagnosticVendor.js',
-            options.static + 'js/xosDiagnostic.js',
-            options.static + 'css/xosDiagnostic.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosDiagnostic.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosDiagnosticVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['Diagnostic'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosDiagnostic'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/diagnostic-icon.png`) &&
-      fs.existsSync(`${options.icon}/diagnostic-icon-active.png`)
-    ){
-      dashboardJson['Diagnostic'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['diagnostic_dashboard'] = {
-      node: 'Diagnostic',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/gulp/server.js b/views/ngXosViews/diagnostic/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosViews/diagnostic/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/diagnostic/gulpfile.js b/views/ngXosViews/diagnostic/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/diagnostic/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/diagnostic/karma.conf.js b/views/ngXosViews/diagnostic/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/diagnostic/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/diagnostic/mocks/data/cordsubscriber.json b/views/ngXosViews/diagnostic/mocks/data/cordsubscriber.json
deleted file mode 100644
index 9f5919a..0000000
--- a/views/ngXosViews/diagnostic/mocks/data/cordsubscriber.json
+++ /dev/null
@@ -1,35 +0,0 @@
-[
-     {
-          "humanReadableName": "cordSubscriber-1", 
-          "id": 1, 
-          "service_specific_id": "123", 
-          "s_tag": "222", 
-          "c_tag": "432", 
-          "vcpe_id": 4, 
-          "instance": 1, 
-          "instance_name": "mysite_vcpe", 
-          "image": 1, 
-          "image_name": "trusty-server-multi-nic", 
-          "firewall_enable": false, 
-          "firewall_rules": "accept all anywhere anywhere", 
-          "url_filter_enable": false, 
-          "url_filter_rules": "allow all", 
-          "url_filter_level": "R", 
-          "bbs_account": null, 
-          "ssh_command": null, 
-          "vcpe_synced": false, 
-          "cdn_enable": false, 
-          "vbng_id": 5, 
-          "routeable_subnet": "", 
-          "nat_ip": null, 
-          "lan_ip": null, 
-          "wan_ip": null, 
-          "private_ip": null, 
-          "wan_mac": null, 
-          "wan_container_ip": "10.0.1.24", 
-          "uplink_speed": "1000000000", 
-          "downlink_speed": "1000000000", 
-          "status": "copyrightviolation", 
-          "enable_uverse": true
-     }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/mocks/data/instances.json b/views/ngXosViews/diagnostic/mocks/data/instances.json
deleted file mode 100644
index d9814f3..0000000
--- a/views/ngXosViews/diagnostic/mocks/data/instances.json
+++ /dev/null
@@ -1,322 +0,0 @@
-[
-    {
-        "humanReadableName": "sflow_service_instance", 
-        "id": 8, 
-        "created": "2016-02-17T22:01:02.663Z", 
-        "updated": "2016-02-17T22:05:58.270Z", 
-        "enacted": "2016-02-17T22:05:58.281Z", 
-        "policed": "2016-02-17T22:05:59.137Z", 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455746758.281283, \"exponent\": 0}", 
-        "backend_status": "1 - OK", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "instance_id": "instance-00000005", 
-        "instance_uuid": "42b75cb7-7205-4a68-9100-b2c1e3ea69b5", 
-        "name": "sflow_service_instance", 
-        "instance_name": "mysite_sflow-8", 
-        "ip": "130.127.133.93", 
-        "image": 1, 
-        "creator": 1, 
-        "slice": 8, 
-        "deployment": 1, 
-        "node": 2, 
-        "numberCores": 0, 
-        "flavor": 1, 
-        "userData": null, 
-        "networks": [
-            21, 
-            20
-        ]
-    }, 
-    {
-        "humanReadableName": "client1", 
-        "id": 4, 
-        "created": "2016-02-17T22:00:58.284Z", 
-        "updated": "2016-02-17T22:03:56.863Z", 
-        "enacted": "2016-02-17T22:03:56.872Z", 
-        "policed": "2016-02-17T22:03:56.953Z", 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455746636.872524, \"exponent\": 0}", 
-        "backend_status": "1 - OK", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "instance_id": "instance-00000001", 
-        "instance_uuid": "cca264bb-8136-45dd-a5a3-41902a4bcf5b", 
-        "name": "client1", 
-        "instance_name": "mysite_clients-4", 
-        "ip": "130.127.133.90", 
-        "image": 1, 
-        "creator": 1, 
-        "slice": 3, 
-        "deployment": 1, 
-        "node": 1, 
-        "numberCores": 0, 
-        "flavor": 1, 
-        "userData": null, 
-        "networks": [
-            10, 
-            4, 
-            11
-        ]
-    }, 
-    {
-        "humanReadableName": "mysite_ceilometer-7", 
-        "id": 7, 
-        "created": "2016-02-17T22:01:02.550Z", 
-        "updated": "2016-02-17T22:06:15.667Z", 
-        "enacted": "2016-02-17T22:06:15.672Z", 
-        "policed": "2016-02-17T22:06:15.818Z", 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455746775.672678, \"exponent\": 0}", 
-        "backend_status": "1 - OK", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "instance_id": "instance-00000006", 
-        "instance_uuid": "23d04870-5e0d-4b03-b2e2-032cbfec56fa", 
-        "name": "mysite_ceilometer", 
-        "instance_name": "mysite_ceilometer-7", 
-        "ip": "130.127.133.90", 
-        "image": 1, 
-        "creator": 1, 
-        "slice": 7, 
-        "deployment": 1, 
-        "node": 1, 
-        "numberCores": 0, 
-        "flavor": 1, 
-        "userData": null, 
-        "networks": [
-            18, 
-            19, 
-            5
-        ]
-    }, 
-    {
-        "humanReadableName": "onos_app_1", 
-        "id": 3, 
-        "created": "2016-02-17T22:00:58.258Z", 
-        "updated": "2016-02-17T22:04:43.301Z", 
-        "enacted": "2016-02-17T22:04:43.309Z", 
-        "policed": "2016-02-17T22:04:43.943Z", 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455746683.309321, \"exponent\": 0}", 
-        "backend_status": "1 - OK", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "instance_id": "instance-00000002", 
-        "instance_uuid": "c21dc52f-363e-47f6-9a2a-489c0af392fb", 
-        "name": "onos_app_1", 
-        "instance_name": "mysite_onos_vbng-3", 
-        "ip": "130.127.133.59", 
-        "image": 1, 
-        "creator": 1, 
-        "slice": 5, 
-        "deployment": 1, 
-        "node": 3, 
-        "numberCores": 0, 
-        "flavor": 1, 
-        "userData": null, 
-        "networks": [
-            15, 
-            14
-        ]
-    }, 
-    {
-        "humanReadableName": "ovs_vbng", 
-        "id": 6, 
-        "created": "2016-02-17T22:00:58.567Z", 
-        "updated": "2016-02-17T22:06:33.495Z", 
-        "enacted": "2016-02-17T22:06:33.562Z", 
-        "policed": "2016-02-17T22:06:34.619Z", 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455746793.562678, \"exponent\": 0}", 
-        "backend_status": "1 - OK", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "instance_id": "instance-00000007", 
-        "instance_uuid": "81dc0638-c9bc-4396-be17-ea805050e388", 
-        "name": "ovs_vbng", 
-        "instance_name": "mysite_vbng-6", 
-        "ip": "130.127.133.59", 
-        "image": 1, 
-        "creator": 1, 
-        "slice": 2, 
-        "deployment": 1, 
-        "node": 3, 
-        "numberCores": 0, 
-        "flavor": 1, 
-        "userData": null, 
-        "networks": [
-            8, 
-            3, 
-            9
-        ]
-    }, 
-    {
-        "humanReadableName": "onos_app_2", 
-        "id": 2, 
-        "created": "2016-02-17T22:00:58.199Z", 
-        "updated": "2016-02-17T22:05:26.512Z", 
-        "enacted": "2016-02-17T22:05:26.521Z", 
-        "policed": "2016-02-17T22:05:26.730Z", 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455746726.521625, \"exponent\": 0}", 
-        "backend_status": "1 - OK", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "instance_id": "instance-00000003", 
-        "instance_uuid": "8e3f00c5-0957-4505-ae69-e03e41306435", 
-        "name": "onos_app_2", 
-        "instance_name": "mysite_onos_volt-2", 
-        "ip": "130.127.133.93", 
-        "image": 1, 
-        "creator": 1, 
-        "slice": 4, 
-        "deployment": 1, 
-        "node": 2, 
-        "numberCores": 0, 
-        "flavor": 1, 
-        "userData": null, 
-        "networks": [
-            12, 
-            13
-        ]
-    }, 
-    {
-        "humanReadableName": "ovs_volt", 
-        "id": 5, 
-        "created": "2016-02-17T22:00:58.540Z", 
-        "updated": "2016-02-17T22:06:50.666Z", 
-        "enacted": "2016-02-17T22:06:50.680Z", 
-        "policed": "2016-02-17T22:06:51.342Z", 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455746810.680553, \"exponent\": 0}", 
-        "backend_status": "1 - OK", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "instance_id": "instance-00000008", 
-        "instance_uuid": "49c08f77-f05a-4c9b-859c-20c2982b19c6", 
-        "name": "ovs_volt", 
-        "instance_name": "mysite_volt-5", 
-        "ip": "130.127.133.93", 
-        "image": 1, 
-        "creator": 1, 
-        "slice": 6, 
-        "deployment": 1, 
-        "node": 2, 
-        "numberCores": 0, 
-        "flavor": 1, 
-        "userData": null, 
-        "networks": [
-            17, 
-            16, 
-            4
-        ]
-    }, 
-    {
-        "humanReadableName": "mysite_vsg-1", 
-        "id": 1, 
-        "created": "2016-02-17T22:00:58.015Z", 
-        "updated": "2016-02-17T22:05:44.877Z", 
-        "enacted": "2016-02-17T22:05:44.887Z", 
-        "policed": "2016-02-17T22:05:45.538Z", 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455746744.887768, \"exponent\": 0}", 
-        "backend_status": "1 - OK", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "instance_id": "instance-00000004", 
-        "instance_uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746", 
-        "name": "mysite_vsg", 
-        "instance_name": "mysite_vsg-1", 
-        "ip": "130.127.133.90", 
-        "image": 1, 
-        "creator": 1, 
-        "slice": 1, 
-        "deployment": 1, 
-        "node": 1, 
-        "numberCores": 0, 
-        "flavor": 1, 
-        "userData": null, 
-        "networks": [
-            1, 
-            6, 
-            7, 
-            2
-        ]
-    },
-    {
-        "humanReadableName": "mysite_vsg-2", 
-        "id": 11, 
-        "created": "2016-02-17T22:00:58.015Z", 
-        "updated": "2016-02-17T22:05:44.877Z", 
-        "enacted": "2016-02-17T22:05:44.887Z", 
-        "policed": "2016-02-17T22:05:45.538Z", 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455746744.887768, \"exponent\": 0}", 
-        "backend_status": "0 - Provisioning in progress", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "instance_id": "instance-00000004", 
-        "instance_uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746", 
-        "name": "mysite_vsg", 
-        "instance_name": "mysite_vsg-2", 
-        "ip": "130.127.133.90", 
-        "image": 1, 
-        "creator": 1, 
-        "slice": 1, 
-        "deployment": 1, 
-        "node": 2, 
-        "numberCores": 0, 
-        "flavor": 1, 
-        "userData": null, 
-        "networks": [
-            1, 
-            6, 
-            7, 
-            2
-        ]
-    },
-    {
-        "humanReadableName": "mysite_vsg-3", 
-        "id": 12, 
-        "created": "2016-02-17T22:00:58.015Z", 
-        "updated": "2016-02-17T22:05:44.877Z", 
-        "enacted": "2016-02-17T22:05:44.887Z", 
-        "policed": "2016-02-17T22:05:45.538Z", 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455746744.887768, \"exponent\": 0}", 
-        "backend_status": "2 - Error", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "instance_id": "instance-00000004", 
-        "instance_uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746", 
-        "name": "mysite_vsg", 
-        "instance_name": "mysite_vsg-3", 
-        "ip": "130.127.133.90", 
-        "image": 1, 
-        "creator": 1, 
-        "slice": 1, 
-        "deployment": 1, 
-        "node": 3, 
-        "numberCores": 0, 
-        "flavor": 1, 
-        "userData": null, 
-        "networks": [
-            1, 
-            6, 
-            7, 
-            2
-        ]
-    }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/mocks/data/meterstatistics.json b/views/ngXosViews/diagnostic/mocks/data/meterstatistics.json
deleted file mode 100644
index 8678222..0000000
--- a/views/ngXosViews/diagnostic/mocks/data/meterstatistics.json
+++ /dev/null
@@ -1,242 +0,0 @@
-[
-    {
-        "resource_name": "vcpe-222-432", 
-        "resource": "vcpe-222-432", 
-        "description": "Existence of vcpe instance", 
-        "resource_id": "vcpe-222-432", 
-        "meter": "vcpe", 
-        "unit": "vcpe", 
-        "category": "VCPE", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 1.0, 
-        "time": "2016-02-24T00:21:28", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432", 
-        "resource": "vcpe-222-432", 
-        "description": "Number of entries in DNS cache", 
-        "resource_id": "vcpe-222-432", 
-        "meter": "vcpe.dns.cache.size", 
-        "unit": "entries", 
-        "category": "VCPE", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 150.0, 
-        "time": "2016-02-24T00:21:28", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432", 
-        "resource": "vcpe-222-432", 
-        "description": "Unexpired entries that were thrown out of cache", 
-        "resource_id": "vcpe-222-432", 
-        "meter": "vcpe.dns.replaced_unexpired_entries", 
-        "unit": "entries", 
-        "category": "VCPE", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.0, 
-        "time": "2016-02-24T00:21:28", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432", 
-        "resource": "vcpe-222-432", 
-        "description": "Number of cache hits", 
-        "resource_id": "vcpe-222-432", 
-        "meter": "vcpe.dns.queries_answered_locally", 
-        "unit": "queries", 
-        "category": "VCPE", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.0, 
-        "time": "2016-02-24T00:21:28", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432", 
-        "resource": "vcpe-222-432", 
-        "description": "Number of cache misses", 
-        "resource_id": "vcpe-222-432", 
-        "meter": "vcpe.dns.queries_forwarded", 
-        "unit": "queries", 
-        "category": "VCPE", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.0, 
-        "time": "2016-02-24T00:21:28", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432", 
-        "resource": "vcpe-222-432", 
-        "description": "Volume of RAM", 
-        "resource_id": "vcpe-222-432", 
-        "meter": "memory", 
-        "unit": "MB", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 2099.0, 
-        "time": "2016-02-24T00:21:28", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432", 
-        "resource": "vcpe-222-432", 
-        "description": "Volume of RAM used", 
-        "resource_id": "vcpe-222-432", 
-        "meter": "memory.usage", 
-        "unit": "MB", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 31.1625, 
-        "time": "2016-02-24T00:21:28", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432", 
-        "resource": "vcpe-222-432", 
-        "description": "Average CPU utilization", 
-        "resource_id": "vcpe-222-432", 
-        "meter": "cpu_util", 
-        "unit": "%", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 4.845000000000001, 
-        "time": "2016-02-24T00:21:28", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    },
-    {
-        "resource_name": "vcpe-222-432-eth0", 
-        "resource": "vcpe-222-432-eth0", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface", 
-        "resource_id": "vcpe-222-432-eth0", 
-        "meter": "network.incoming.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.0, 
-        "time": "2016-02-24T01:19:25", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432-eth0", 
-        "resource": "vcpe-222-432-eth0", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface", 
-        "resource_id": "vcpe-222-432-eth0", 
-        "meter": "network.outgoing.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.00030304561114446413, 
-        "time": "2016-02-24T01:19:25", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432-eth0", 
-        "resource": "vcpe-222-432-eth0", 
-        "description": "Average rate per sec of incoming packets on a VM network interface", 
-        "resource_id": "vcpe-222-432-eth0", 
-        "meter": "network.incoming.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.0, 
-        "time": "2016-02-24T01:19:25", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432-eth0", 
-        "resource": "vcpe-222-432-eth0", 
-        "description": "Average rate per sec of outgoing packets on a VM network interface", 
-        "resource_id": "vcpe-222-432-eth0", 
-        "meter": "network.outgoing.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 4.714042840024997e-06, 
-        "time": "2016-02-24T01:19:25", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    },
-     {
-        "resource_name": "vcpe-222-432-eth1", 
-        "resource": "vcpe-222-432-eth1", 
-        "description": "Average rate per sec of incoming bytes on a VM network interface", 
-        "resource_id": "vcpe-222-432-eth1", 
-        "meter": "network.incoming.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.0, 
-        "time": "2016-02-24T01:19:25", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432-eth1", 
-        "resource": "vcpe-222-432-eth1", 
-        "description": "Average rate per sec of outgoing bytes on a VM network interface", 
-        "resource_id": "vcpe-222-432-eth1", 
-        "meter": "network.outgoing.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.00030304561114446413, 
-        "time": "2016-02-24T01:19:25", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432-eth1", 
-        "resource": "vcpe-222-432-eth1", 
-        "description": "Average rate per sec of incoming packets on a VM network interface", 
-        "resource_id": "vcpe-222-432-eth1", 
-        "meter": "network.incoming.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.0, 
-        "time": "2016-02-24T01:19:25", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "vcpe-222-432-eth1", 
-        "resource": "vcpe-222-432-eth1", 
-        "description": "Average rate per sec of outgoing packets on a VM network interface", 
-        "resource_id": "vcpe-222-432-eth1", 
-        "meter": "network.outgoing.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 4.714042840024997e-06, 
-        "time": "2016-02-24T01:19:25", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }
-]
diff --git a/views/ngXosViews/diagnostic/mocks/data/nodes.json b/views/ngXosViews/diagnostic/mocks/data/nodes.json
deleted file mode 100644
index 03ca1da..0000000
--- a/views/ngXosViews/diagnostic/mocks/data/nodes.json
+++ /dev/null
@@ -1,53 +0,0 @@
-[
-    {
-        "humanReadableName": "cp-3.teone-cord.xos-pg0.clemson.cloudlab.us", 
-        "id": 3, 
-        "created": "2016-02-17T22:00:53.717Z", 
-        "updated": "2016-02-17T22:01:24.890Z", 
-        "enacted": null, 
-        "policed": null, 
-        "backend_register": "{}", 
-        "backend_status": "0 - Provisioning in progress", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": true, 
-        "name": "cp-3.teone-cord.xos-pg0.clemson.cloudlab.us", 
-        "site_deployment": "http://clnode067.clemson.cloudlab.us:9999/xos/sitedeployments/1/", 
-        "site": "http://clnode067.clemson.cloudlab.us:9999/xos/sites/1/"
-    }, 
-    {
-        "humanReadableName": "cp-2.teone-cord.xos-pg0.clemson.cloudlab.us", 
-        "id": 2, 
-        "created": "2016-02-17T22:00:53.701Z", 
-        "updated": "2016-02-17T22:01:24.891Z", 
-        "enacted": null, 
-        "policed": null, 
-        "backend_register": "{}", 
-        "backend_status": "0 - Provisioning in progress", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": true, 
-        "name": "cp-2.teone-cord.xos-pg0.clemson.cloudlab.us", 
-        "site_deployment": "http://clnode067.clemson.cloudlab.us:9999/xos/sitedeployments/1/", 
-        "site": "http://clnode067.clemson.cloudlab.us:9999/xos/sites/1/"
-    }, 
-    {
-        "humanReadableName": "cp-1.teone-cord.xos-pg0.clemson.cloudlab.us", 
-        "id": 1, 
-        "created": "2016-02-17T22:00:53.680Z", 
-        "updated": "2016-02-17T22:01:24.892Z", 
-        "enacted": null, 
-        "policed": null, 
-        "backend_register": "{}", 
-        "backend_status": "0 - Provisioning in progress", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": true, 
-        "name": "cp-1.teone-cord.xos-pg0.clemson.cloudlab.us", 
-        "site_deployment": "http://clnode067.clemson.cloudlab.us:9999/xos/sitedeployments/1/", 
-        "site": "http://clnode067.clemson.cloudlab.us:9999/xos/sites/1/"
-    }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/mocks/data/services.json b/views/ngXosViews/diagnostic/mocks/data/services.json
deleted file mode 100644
index b3ae7b7..0000000
--- a/views/ngXosViews/diagnostic/mocks/data/services.json
+++ /dev/null
@@ -1,177 +0,0 @@
-[
-   {
-      "humanReadableName":"service_vbng",
-      "id":1,
-      "created":"2016-02-17T19:36:04.242Z",
-      "updated":"2016-02-17T19:36:04.242Z",
-      "enacted":null,
-      "policed":null,
-      "backend_register":"{}",
-      "backend_status":"0 - Provisioning in progress",
-      "deleted":false,
-      "write_protect":false,
-      "lazy_blocked":false,
-      "no_sync":false,
-      "description":null,
-      "enabled":true,
-      "kind":"vBNG",
-      "name":"service_vbng",
-      "versionNumber":"",
-      "published":true,
-      "view_url":"/admin/cord/vbngservice/$id$/",
-      "icon_url":null,
-      "public_key":null,
-      "service_specific_id":null,
-      "service_specific_attribute":null
-   },
-   {
-      "humanReadableName":"service_vsg",
-      "id":2,
-      "created":"2016-02-17T19:36:04.249Z",
-      "updated":"2016-02-17T19:36:04.249Z",
-      "enacted":null,
-      "policed":null,
-      "backend_register":"{}",
-      "backend_status":"0 - Provisioning in progress",
-      "deleted":false,
-      "write_protect":false,
-      "lazy_blocked":false,
-      "no_sync":false,
-      "description":null,
-      "enabled":true,
-      "kind":"vCPE",
-      "name":"service_vsg",
-      "versionNumber":"",
-      "published":true,
-      "view_url":"/admin/cord/vsgservice/$id$/",
-      "icon_url":null,
-      "public_key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0bhkFHg3DxtQY1S0bN4nV2USTO2scHIrTO/WhZYFB9cqxKJPPlayMzi7sJxZFjsEPG9+gUJn7942eObs0mWkn7eIbph1rgKDhh2ZT6GFdJojgaRr0E3HhjmdHXF3IkCEz0DZ1aiBRX0dAEcp+B7eHvcg9QmBUN9TWhMlN82EKwMtWlrMwAqycNEcPiKiwMC3SPNPrq5qTrxIlzMG8Q51Z1b0FYx2oP0E44zecquFF8qfwoVbA48qT0fdPIdcQ0otEdsGaOxxurOPA86q1zYg60w+Hsygl8L2UpyUqEuXKm0OuhckCmCkcPlEysMAty0bx/9M3DwSkMJdOj81Jl+Bd teone@ctl.teone.xos-pg0.clemson.cloudlab.us\n",
-      "service_specific_id":null,
-      "service_specific_attribute":"{\"backend_network_label\": \"hpc_client\"}"
-   },
-   {
-      "humanReadableName":"service_volt",
-      "id":3,
-      "created":"2016-02-17T19:36:04.585Z",
-      "updated":"2016-02-17T19:36:04.585Z",
-      "enacted":null,
-      "policed":null,
-      "backend_register":"{}",
-      "backend_status":"0 - Provisioning in progress",
-      "deleted":false,
-      "write_protect":false,
-      "lazy_blocked":false,
-      "no_sync":false,
-      "description":null,
-      "enabled":true,
-      "kind":"vOLT",
-      "name":"service_volt",
-      "versionNumber":"",
-      "published":true,
-      "view_url":"/admin/cord/voltservice/$id$/",
-      "icon_url":null,
-      "public_key":null,
-      "service_specific_id":null,
-      "service_specific_attribute":null
-   },
-   {
-      "humanReadableName":"service_ceilometer",
-      "id":6,
-      "created":"2016-02-17T19:36:09.291Z",
-      "updated":"2016-02-17T19:36:09.291Z",
-      "enacted":null,
-      "policed":null,
-      "backend_register":"{}",
-      "backend_status":"0 - Provisioning in progress",
-      "deleted":false,
-      "write_protect":false,
-      "lazy_blocked":false,
-      "no_sync":false,
-      "description":null,
-      "enabled":true,
-      "kind":"ceilometer",
-      "name":"service_ceilometer",
-      "versionNumber":"",
-      "published":true,
-      "view_url":"/admin/ceilometer/ceilometerservice/$id$/",
-      "icon_url":null,
-      "public_key":null,
-      "service_specific_id":null,
-      "service_specific_attribute":"{\"ceilometer_pub_sub_url\": \"http://10.11.10.1:4455/\"}"
-   },
-   {
-      "humanReadableName":"service_sflow",
-      "id":7,
-      "created":"2016-02-17T19:36:09.339Z",
-      "updated":"2016-02-17T20:01:35.518Z",
-      "enacted":null,
-      "policed":null,
-      "backend_register":"{\"next_run\": 1455768095.518195, \"last_failure\": 1455739295.518198, \"last_success\": 1455737795.306011, \"exponent\": 293, \"failures\": 293}",
-      "backend_status":"2 - Exception('defer object service_sflow due to waiting on instance.instance_name',)",
-      "deleted":false,
-      "write_protect":false,
-      "lazy_blocked":false,
-      "no_sync":false,
-      "description":null,
-      "enabled":true,
-      "kind":"sflow",
-      "name":"service_sflow",
-      "versionNumber":"",
-      "published":true,
-      "view_url":"/admin/ceilometer/sflowservice/$id$/",
-      "icon_url":null,
-      "public_key":null,
-      "service_specific_id":null,
-      "service_specific_attribute":"{\"sflow_api_port\": 33333, \"sflow_port\": 6343}"
-   },
-   {
-      "humanReadableName":"service_ONOS_vOLT",
-      "id":4,
-      "created":"2016-02-17T19:36:04.840Z",
-      "updated":"2016-02-17T20:01:35.987Z",
-      "enacted":null,
-      "policed":null,
-      "backend_register":"{\"next_run\": 1455768095.987071, \"failures\": 282, \"last_success\": 1455737792.664808, \"exponent\": 282, \"last_failure\": 1455739295.987074}",
-      "backend_status":"2 - Exception('defer object service_ONOS_vOLT due to waiting on instance.instance_name',)",
-      "deleted":false,
-      "write_protect":false,
-      "lazy_blocked":false,
-      "no_sync":false,
-      "description":null,
-      "enabled":true,
-      "kind":"onos",
-      "name":"service_ONOS_vOLT",
-      "versionNumber":"",
-      "published":true,
-      "view_url":"/admin/onos/onosservice/$id$/",
-      "icon_url":null,
-      "public_key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0bhkFHg3DxtQY1S0bN4nV2USTO2scHIrTO/WhZYFB9cqxKJPPlayMzi7sJxZFjsEPG9+gUJn7942eObs0mWkn7eIbph1rgKDhh2ZT6GFdJojgaRr0E3HhjmdHXF3IkCEz0DZ1aiBRX0dAEcp+B7eHvcg9QmBUN9TWhMlN82EKwMtWlrMwAqycNEcPiKiwMC3SPNPrq5qTrxIlzMG8Q51Z1b0FYx2oP0E44zecquFF8qfwoVbA48qT0fdPIdcQ0otEdsGaOxxurOPA86q1zYg60w+Hsygl8L2UpyUqEuXKm0OuhckCmCkcPlEysMAty0bx/9M3DwSkMJdOj81Jl+Bd teone@ctl.teone.xos-pg0.clemson.cloudlab.us\n",
-      "service_specific_id":null,
-      "service_specific_attribute":"{\"no_container\": false}"
-   },
-   {
-      "humanReadableName":"service_ONOS_vBNG",
-      "id":5,
-      "created":"2016-02-17T19:36:04.917Z",
-      "updated":"2016-02-17T20:01:36.011Z",
-      "enacted":null,
-      "policed":null,
-      "backend_register":"{\"next_run\": 1455768096.011113, \"failures\": 282, \"last_success\": 1455737792.697535, \"exponent\": 282, \"last_failure\": 1455739296.011116}",
-      "backend_status":"2 - Exception('defer object service_ONOS_vBNG due to waiting on instance.instance_name',)",
-      "deleted":false,
-      "write_protect":false,
-      "lazy_blocked":false,
-      "no_sync":false,
-      "description":null,
-      "enabled":true,
-      "kind":"onos",
-      "name":"service_ONOS_vBNG",
-      "versionNumber":"",
-      "published":true,
-      "view_url":"/admin/onos/onosservice/$id$/",
-      "icon_url":null,
-      "public_key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0bhkFHg3DxtQY1S0bN4nV2USTO2scHIrTO/WhZYFB9cqxKJPPlayMzi7sJxZFjsEPG9+gUJn7942eObs0mWkn7eIbph1rgKDhh2ZT6GFdJojgaRr0E3HhjmdHXF3IkCEz0DZ1aiBRX0dAEcp+B7eHvcg9QmBUN9TWhMlN82EKwMtWlrMwAqycNEcPiKiwMC3SPNPrq5qTrxIlzMG8Q51Z1b0FYx2oP0E44zecquFF8qfwoVbA48qT0fdPIdcQ0otEdsGaOxxurOPA86q1zYg60w+Hsygl8L2UpyUqEuXKm0OuhckCmCkcPlEysMAty0bx/9M3DwSkMJdOj81Jl+Bd teone@ctl.teone.xos-pg0.clemson.cloudlab.us\n",
-      "service_specific_id":null,
-      "service_specific_attribute":"{\"no_container\": false}"
-   }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/mocks/data/tenants.json b/views/ngXosViews/diagnostic/mocks/data/tenants.json
deleted file mode 100644
index 4e7557b..0000000
--- a/views/ngXosViews/diagnostic/mocks/data/tenants.json
+++ /dev/null
@@ -1,232 +0,0 @@
-[
-    {
-        "humanReadableName": "coarse-tenant-1", 
-        "id": 1, 
-        "created": "2016-02-17T19:36:04.259Z", 
-        "updated": "2016-02-17T19:36:04.259Z", 
-        "enacted": null, 
-        "policed": null, 
-        "backend_register": "{}", 
-        "backend_status": "0 - Provisioning in progress", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "kind": "coarse", 
-        "provider_service": 1, 
-        "subscriber_service": 2, 
-        "subscriber_tenant": null, 
-        "subscriber_user": null, 
-        "subscriber_root": null, 
-        "service_specific_id": null, 
-        "service_specific_attribute": null, 
-        "connect_method": "na"
-    }, 
-    {
-        "humanReadableName": "coarse-tenant-2", 
-        "id": 2, 
-        "created": "2016-02-17T19:36:04.600Z", 
-        "updated": "2016-02-17T19:36:04.600Z", 
-        "enacted": null, 
-        "policed": null, 
-        "backend_register": "{}", 
-        "backend_status": "0 - Provisioning in progress", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "kind": "coarse", 
-        "provider_service": 2, 
-        "subscriber_service": 3, 
-        "subscriber_tenant": null, 
-        "subscriber_user": null, 
-        "subscriber_root": null, 
-        "service_specific_id": null, 
-        "service_specific_attribute": null, 
-        "connect_method": "na"
-    }, 
-    {
-        "humanReadableName": "vCPE-tenant-4", 
-        "id": 4, 
-        "created": "2016-02-17T19:36:04.650Z", 
-        "updated": "2016-02-17T20:55:18.115Z", 
-        "enacted": null, 
-        "policed": null, 
-        "backend_register": "{\"next_run\": 1455771318.072057, \"last_failure\": 1455742518.072061, \"last_success\": 1455737797.006782, \"exponent\": 871, \"failures\": 871}", 
-        "backend_status": "2 - Exception('defer object vCPE-tenant-4 due to waiting on instance.instance_name',)", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "kind": "vCPE", 
-        "provider_service": 2, 
-        "subscriber_service": null, 
-        "subscriber_tenant": 3, 
-        "subscriber_user": null, 
-        "subscriber_root": null, 
-        "service_specific_id": null, 
-        "service_specific_attribute": "{\"instance_id\": 1, \"creator_id\": 1, \"wan_container_ip\": \"10.0.1.24\"}", 
-        "connect_method": "na"
-    }, 
-    {
-        "humanReadableName": "ceilometer-tenant-8", 
-        "id": 8, 
-        "created": "2016-02-17T19:36:09.370Z", 
-        "updated": "2016-02-17T20:55:19.823Z", 
-        "enacted": null, 
-        "policed": null, 
-        "backend_register": "{\"next_run\": 1455771319.823556, \"failures\": 874, \"last_success\": 1455737795.314296, \"exponent\": 874, \"last_failure\": 1455742519.823559}", 
-        "backend_status": "2 - Exception('defer object ceilometer-tenant-8 due to waiting on instance.instance_name',)", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "kind": "ceilometer", 
-        "provider_service": 6, 
-        "subscriber_service": null, 
-        "subscriber_tenant": null, 
-        "subscriber_user": null, 
-        "subscriber_root": null, 
-        "service_specific_id": null, 
-        "service_specific_attribute": "{\"instance_id\": 7, \"creator_id\": 1, \"use_same_instance_for_multiple_tenants\": true}", 
-        "connect_method": "na"
-    }, 
-    {
-        "humanReadableName": "vBNG-tenant-5", 
-        "id": 5, 
-        "created": "2016-02-17T19:36:04.769Z", 
-        "updated": "2016-02-17T20:55:21.385Z", 
-        "enacted": null, 
-        "policed": null, 
-        "backend_register": "{\"next_run\": 1455771321.384039, \"last_failure\": 1455742521.384043, \"last_success\": 1455737796.18277, \"exponent\": 881, \"failures\": 881}", 
-        "backend_status": "2 - Exception('defer object vBNG-tenant-5 due to does not have a WAN IP yet',)", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "kind": "vBNG", 
-        "provider_service": 1, 
-        "subscriber_service": null, 
-        "subscriber_tenant": 4, 
-        "subscriber_user": null, 
-        "subscriber_root": null, 
-        "service_specific_id": null, 
-        "service_specific_attribute": null, 
-        "connect_method": "na"
-    }, 
-    {
-        "humanReadableName": "onos-tenant-6", 
-        "id": 6, 
-        "created": "2016-02-17T19:36:05.048Z", 
-        "updated": "2016-02-17T20:41:16.675Z", 
-        "enacted": "2016-02-17T20:41:16.729Z", 
-        "policed": null, 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455741676.729897, \"exponent\": 0}", 
-        "backend_status": "1 - OK", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "kind": "onos", 
-        "provider_service": 5, 
-        "subscriber_service": 1, 
-        "subscriber_tenant": null, 
-        "subscriber_user": null, 
-        "subscriber_root": null, 
-        "service_specific_id": null, 
-        "service_specific_attribute": "{\"creator_id\": 1, \"dependencies\": \"org.onosproject.proxyarp, org.onosproject.virtualbng, org.onosproject.openflow, org.onosproject.fwd\", \"name\": \"vBNG_ONOS_app\"}", 
-        "connect_method": "na"
-    }, 
-    {
-        "humanReadableName": "vOLT-tenant-3", 
-        "id": 3, 
-        "created": "2016-02-17T19:36:04.631Z", 
-        "updated": "2016-02-17T20:28:30.428Z", 
-        "enacted": null, 
-        "policed": null, 
-        "backend_register": "{}", 
-        "backend_status": "0 - Provisioning in progress", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "kind": "vOLT", 
-        "provider_service": 3, 
-        "subscriber_service": null, 
-        "subscriber_tenant": null, 
-        "subscriber_user": null, 
-        "subscriber_root": 1, 
-        "service_specific_id": "123", 
-        "service_specific_attribute": "{\"creator_id\": 1, \"c_tag\": \"432\", \"s_tag\": \"222\"}", 
-        "connect_method": "na"
-    }, 
-    {
-        "humanReadableName": "onos-tenant-7", 
-        "id": 7, 
-        "created": "2016-02-17T19:36:05.089Z", 
-        "updated": "2016-02-17T20:40:54.451Z", 
-        "enacted": "2016-02-17T20:40:54.468Z", 
-        "policed": null, 
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1455741654.468755, \"exponent\": 0}", 
-        "backend_status": "1 - OK", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "kind": "onos", 
-        "provider_service": 4, 
-        "subscriber_service": 3, 
-        "subscriber_tenant": null, 
-        "subscriber_user": null, 
-        "subscriber_root": null, 
-        "service_specific_id": null, 
-        "service_specific_attribute": "{\"creator_id\": 1, \"dependencies\": \"org.onosproject.openflow-base, org.onosproject.olt, org.ciena.onos.ext_notifier, org.ciena.onos.volt_event_publisher\", \"name\": \"vOLT_ONOS_app\", \"install_dependencies\": \"onos-ext-notifier-1.0-SNAPSHOT.oar, onos-ext-volt-event-publisher-1.0-SNAPSHOT.oar\"}", 
-        "connect_method": "na"
-    },
-    {
-        "humanReadableName": "vCPE-tenant-4", 
-        "id": 14, 
-        "created": "2016-02-17T19:36:04.650Z", 
-        "updated": "2016-02-17T20:55:18.115Z", 
-        "enacted": null, 
-        "policed": null, 
-        "backend_register": "{\"next_run\": 1455771318.072057, \"last_failure\": 1455742518.072061, \"last_success\": 1455737797.006782, \"exponent\": 871, \"failures\": 871}", 
-        "backend_status": "2 - Exception('defer object vCPE-tenant-4 due to waiting on instance.instance_name',)", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "kind": "vCPE", 
-        "provider_service": 2, 
-        "subscriber_service": null, 
-        "subscriber_tenant": 3, 
-        "subscriber_user": null, 
-        "subscriber_root": null, 
-        "service_specific_id": null, 
-        "service_specific_attribute": "{\"instance_id\": 11, \"creator_id\": 1}", 
-        "connect_method": "na"
-    },
-    {
-        "humanReadableName": "vCPE-tenant-5", 
-        "id": 14, 
-        "created": "2016-02-17T19:36:04.650Z", 
-        "updated": "2016-02-17T20:55:18.115Z", 
-        "enacted": null, 
-        "policed": null, 
-        "backend_register": "{\"next_run\": 1455771318.072057, \"last_failure\": 1455742518.072061, \"last_success\": 1455737797.006782, \"exponent\": 871, \"failures\": 871}", 
-        "backend_status": "2 - Exception('defer object vCPE-tenant-4 due to waiting on instance.instance_name',)", 
-        "deleted": false, 
-        "write_protect": false, 
-        "lazy_blocked": false, 
-        "no_sync": false, 
-        "kind": "vCPE", 
-        "provider_service": 2, 
-        "subscriber_service": null, 
-        "subscriber_tenant": 3, 
-        "subscriber_user": null, 
-        "subscriber_root": null, 
-        "service_specific_id": null, 
-        "service_specific_attribute": "{\"instance_id\": 12, \"creator_id\": 1}", 
-        "connect_method": "na"
-    }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/mocks/data/users.json b/views/ngXosViews/diagnostic/mocks/data/users.json
deleted file mode 100644
index 4cf36f7..0000000
--- a/views/ngXosViews/diagnostic/mocks/data/users.json
+++ /dev/null
@@ -1,25 +0,0 @@
-[
-  {
-    "mac": "01:02:03:04:05:06",
-    "level": "PG_13",
-    "id": 0,
-    "name": "Mom's PC"
-  },
-  {
-    "mac": "34:36:3B:C9:B6:A6",
-    "id": 1,
-    "level": "PG_13"
-  },
-  {
-    "mac": "68:5B:35:9D:91:D5",
-    "level": "PG_13",
-    "id": 2,
-    "name": "Jack's Laptop"
-  },
-  {
-    "id": 3,
-    "mac": "90:E2:BA:82:F9:75",
-    "name": "Dad's PC",
-    "level": "PG_13"
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/mocks/data/xos-instance-statistics.json b/views/ngXosViews/diagnostic/mocks/data/xos-instance-statistics.json
deleted file mode 100644
index 7b83f5d..0000000
--- a/views/ngXosViews/diagnostic/mocks/data/xos-instance-statistics.json
+++ /dev/null
@@ -1,557 +0,0 @@
-[
-    {
-        "resource_name": "mysite_vsg-1", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average CPU utilization", 
-        "resource_id": "075a3ae4-9e76-4198-8e6b-67c67b996745", 
-        "meter": "cpu_util", 
-        "unit": "%", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 34.39350127615451, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "mysite_vsg-1", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of VCPUs", 
-        "resource_id": "075a3ae4-9e76-4198-8e6b-67c67b996745", 
-        "meter": "vcpus", 
-        "unit": "vcpu", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 1.0, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "mysite_vsg-1", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Volume of RAM", 
-        "resource_id": "075a3ae4-9e76-4198-8e6b-67c67b996745", 
-        "meter": "memory", 
-        "unit": "MB", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 2048.0, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "mysite_vsg-1", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "CPU time used", 
-        "resource_id": "075a3ae4-9e76-4198-8e6b-67c67b996745", 
-        "meter": "cpu", 
-        "unit": "ns", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 199610924583333.34, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "mysite_vsg-1", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Volume of RAM used", 
-        "resource_id": "075a3ae4-9e76-4198-8e6b-67c67b996745", 
-        "meter": "memory.usage", 
-        "unit": "MB", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 1931.625, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapcf5721c4-c6", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of outgoing packets on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapcf5721c4-c6", 
-        "meter": "network.outgoing.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.0001851851851851852, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapcf5721c4-c6", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of outgoing bytes on the network for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapcf5721c4-c6", 
-        "meter": "network.outgoing.bytes", 
-        "unit": "B", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 14088.506944444445, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapcf5721c4-c6", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of incoming bytes on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapcf5721c4-c6", 
-        "meter": "network.incoming.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.015026113884266964, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapcf5721c4-c6", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of outgoing bytes on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapcf5721c4-c6", 
-        "meter": "network.outgoing.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.02625256131755716, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapcf5721c4-c6", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of incoming packets for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapcf5721c4-c6", 
-        "meter": "network.incoming.packets", 
-        "unit": "packet", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 66.71527777777777, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapcf5721c4-c6", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of incoming packets on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapcf5721c4-c6", 
-        "meter": "network.incoming.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 9.25925925925926e-05, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapcf5721c4-c6", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of incoming bytes on the network for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapcf5721c4-c6", 
-        "meter": "network.incoming.bytes", 
-        "unit": "B", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 8747.979166666666, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapcf5721c4-c6", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of outgoing packets for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapcf5721c4-c6", 
-        "meter": "network.outgoing.packets", 
-        "unit": "packet", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 111.22222222222223, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap3f06c6d0-fb", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of outgoing packets on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap3f06c6d0-fb", 
-        "meter": "network.outgoing.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 1.603090277777778, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap3f06c6d0-fb", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of outgoing bytes on the network for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap3f06c6d0-fb", 
-        "meter": "network.outgoing.bytes", 
-        "unit": "B", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 1486894584.4722223, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap3f06c6d0-fb", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of incoming bytes on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap3f06c6d0-fb", 
-        "meter": "network.incoming.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 1248.113658402975, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap3f06c6d0-fb", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of outgoing bytes on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap3f06c6d0-fb", 
-        "meter": "network.outgoing.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 143.5401912417864, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap3f06c6d0-fb", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of incoming packets for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap3f06c6d0-fb", 
-        "meter": "network.incoming.packets", 
-        "unit": "packet", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 12888749.868055556, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap3f06c6d0-fb", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of incoming packets on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap3f06c6d0-fb", 
-        "meter": "network.incoming.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 1.5918200296505445, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap3f06c6d0-fb", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of incoming bytes on the network for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap3f06c6d0-fb", 
-        "meter": "network.incoming.bytes", 
-        "unit": "B", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 28949696952.67361, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap3f06c6d0-fb", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of outgoing packets for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap3f06c6d0-fb", 
-        "meter": "network.outgoing.packets", 
-        "unit": "packet", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 13835573.3125, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapb7ae5310-e2", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of outgoing packets on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapb7ae5310-e2", 
-        "meter": "network.outgoing.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 6.944444444444444e-05, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapb7ae5310-e2", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of outgoing bytes on the network for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapb7ae5310-e2", 
-        "meter": "network.outgoing.bytes", 
-        "unit": "B", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 6808.0, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapb7ae5310-e2", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of incoming bytes on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapb7ae5310-e2", 
-        "meter": "network.incoming.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.014062500000000002, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapb7ae5310-e2", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of outgoing bytes on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapb7ae5310-e2", 
-        "meter": "network.outgoing.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.013333333333333332, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapb7ae5310-e2", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of incoming packets for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapb7ae5310-e2", 
-        "meter": "network.incoming.packets", 
-        "unit": "packet", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 42.958333333333336, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapb7ae5310-e2", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of incoming packets on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapb7ae5310-e2", 
-        "meter": "network.incoming.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 6.944444444444444e-05, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapb7ae5310-e2", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of incoming bytes on the network for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapb7ae5310-e2", 
-        "meter": "network.incoming.bytes", 
-        "unit": "B", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 7230.0625, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tapb7ae5310-e2", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of outgoing packets for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tapb7ae5310-e2", 
-        "meter": "network.outgoing.packets", 
-        "unit": "packet", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 40.958333333333336, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap38f1f5be-89", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of outgoing packets on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap38f1f5be-89", 
-        "meter": "network.outgoing.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 6.944444444444444e-05, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap38f1f5be-89", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of outgoing bytes on the network for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap38f1f5be-89", 
-        "meter": "network.outgoing.bytes", 
-        "unit": "B", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 6773.333333333333, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap38f1f5be-89", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of incoming bytes on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap38f1f5be-89", 
-        "meter": "network.incoming.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.014062500000000002, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap38f1f5be-89", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of outgoing bytes on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap38f1f5be-89", 
-        "meter": "network.outgoing.bytes.rate", 
-        "unit": "B/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 0.013325938251063044, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap38f1f5be-89", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of incoming packets for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap38f1f5be-89", 
-        "meter": "network.incoming.packets", 
-        "unit": "packet", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 44.77777777777778, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap38f1f5be-89", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Average rate per sec of incoming packets on a VM network interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap38f1f5be-89", 
-        "meter": "network.incoming.packets.rate", 
-        "unit": "packet/s", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 6.944444444444444e-05, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap38f1f5be-89", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of incoming bytes on the network for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap38f1f5be-89", 
-        "meter": "network.incoming.bytes", 
-        "unit": "B", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 7365.5, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }, 
-    {
-        "resource_name": "tap38f1f5be-89", 
-        "instance-uuid": "075a3ae4-9e76-4198-8e6b-67c67b996746",
-        "description": "Number of outgoing packets for a VM interface", 
-        "resource_id": "instance-00000004-075a3ae4-9e76-4198-8e6b-67c67b996745-tap38f1f5be-89", 
-        "meter": "network.outgoing.packets", 
-        "unit": "packet", 
-        "category": "Nova", 
-        "slice": "mysite_vsg", 
-        "name": "none", 
-        "service": "service_vsg", 
-        "value": 40.77777777777778, 
-        "time": "2016-02-23T22:30:34", 
-        "project_id": "718dd78532a24a74b0491437bbef398c"
-    }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/mocks/diagnostic.conf.json b/views/ngXosViews/diagnostic/mocks/diagnostic.conf.json
deleted file mode 100644
index a346dc6..0000000
--- a/views/ngXosViews/diagnostic/mocks/diagnostic.conf.json
+++ /dev/null
@@ -1,44 +0,0 @@
-[
-  {
-    "url": "cordsubscriber",
-    "base": "xoslib/",
-    "methods": ["GET", "PUT"],
-    "param": "id"
-  },
-  {
-    "url": "users",
-    "base": "xoslib/rs/subscriber/1/",
-    "methods": ["GET"]
-  },
-  {
-    "url": "services",
-    "base": "xos/",
-    "methods": ["GET"]
-  },
-  {
-    "url": "tenants",
-    "base": "xos/",
-    "methods": ["GET"]
-  },
-  {
-    "url": "nodes",
-    "base": "xos/",
-    "methods": ["GET"]
-  },
-  {
-    "url": "instances",
-    "base": "xos/",
-    "methods": ["GET"],
-    "param": "id"
-  },
-  {
-    "url": "meterstatistics",
-    "base": "xoslib/",
-    "methods": ["GET"]
-  },
-  {
-    "url": "xos-instance-statistics",
-    "base": "xoslib/",
-    "methods": ["GET"]
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/package.json b/views/ngXosViews/diagnostic/package.json
deleted file mode 100644
index 7eb7458..0000000
--- a/views/ngXosViews/diagnostic/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-diagnostic",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/diagnostic/spec/.eslintrc b/views/ngXosViews/diagnostic/spec/.eslintrc
deleted file mode 100644
index c1764a5..0000000
--- a/views/ngXosViews/diagnostic/spec/.eslintrc
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "globals" :{
-        "describe": true,
-        "xdescribe": true,
-        "beforeEach": true,
-        "it": true,
-        "inject": true,
-        "expect": true,
-        "jasmine": true
-    },
-    "rules": {
-      "max-nested-callbacks": [0, 4],
-      "camelcase": 0
-    }
-}
diff --git a/views/ngXosViews/diagnostic/spec/logicTopologyHelper.test.js b/views/ngXosViews/diagnostic/spec/logicTopologyHelper.test.js
deleted file mode 100644
index 7ea1071..0000000
--- a/views/ngXosViews/diagnostic/spec/logicTopologyHelper.test.js
+++ /dev/null
@@ -1,79 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  describe('The Logic Topology Helper Service', () => {
-    
-    var Service, Config;
-
-    var x0, x1, x2, x3, x4;
-
-    var svgWidth = 900;
-
-    beforeEach(module('xos.diagnostic'));
-
-    // inject the rackHelper service
-    beforeEach(inject(function (_LogicTopologyHelper_, _serviceTopologyConfig_) {
-      // The injector unwraps the underscores (_) from around the parameter names when matching
-      Service = _LogicTopologyHelper_;
-      Config = _serviceTopologyConfig_;
-
-      // result
-      let totalElWidth = Config.elWidths.reduce((el, val) => val + el, 0);
-      let remainingSpace = svgWidth - totalElWidth - (Config.widthMargin * 2);
-      let step = remainingSpace / (Config.elWidths.length - 1);
-      x0 = Config.widthMargin;
-      x1 = x0 + Config.elWidths[0] + step;
-      x2 = x1 + Config.elWidths[1] + step;
-      x3 = x2 + Config.elWidths[2] + step;
-      x4 = x3 + Config.elWidths[3] + step;
-    }));
-
-    var customMatchers = {
-      toBeSimilar: () => {
-
-        const tolerance = 0.1;
-
-        return {
-          compare: (actual, expected) => {
-            return {
-              pass: (Math.abs(actual - expected) < tolerance),
-              message: `Expected ${actual} to be ${expected}`
-            }
-          }
-        }
-      }
-    };
-
-    beforeEach(function() {
-      jasmine.addMatchers(customMatchers);
-    });
-
-    it('should calculate horizontal position for each element', () => {
-      let [el0x, el1x, el2x, el3x, el4x] = Service.computeElementPosition(svgWidth);
-      expect(el0x).toBeSimilar(svgWidth - (x0 + (Config.elWidths[0] / 2)));
-      expect(el1x).toBeSimilar(svgWidth - (x1 + (Config.elWidths[1] / 2)));
-      expect(el2x).toBeSimilar(svgWidth - (x2 + (Config.elWidths[2] / 2)));
-      expect(el3x).toBeSimilar(svgWidth - (x3 + (Config.elWidths[3] / 2)));
-      expect(el4x).toBeSimilar(svgWidth - (x4 + (Config.elWidths[4] / 2)));
-    });
-  });
-
-})();
diff --git a/views/ngXosViews/diagnostic/spec/rackHelper.test.js b/views/ngXosViews/diagnostic/spec/rackHelper.test.js
deleted file mode 100644
index 7633029..0000000
--- a/views/ngXosViews/diagnostic/spec/rackHelper.test.js
+++ /dev/null
@@ -1,205 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  const computeNodes = [
-    {
-      humanReadableName: 'cp-1.teone.xos-pg0.clemson.cloudlab.us',
-      instances: [
-        {
-          instance_name: 'mysite_clients-3'
-        },
-        {
-          instance_name: 'mysite_clients-4'
-        },
-        {
-          instance_name: 'mysite_clients-5'
-        }
-      ]
-    },
-    {
-      humanReadableName: 'cp-2.teone.xos-pg0.clemson.cloudlab.us',
-      instances: [
-        {
-          instance_name: 'mysite_clients-1'
-        },
-        {
-          instance_name: 'mysite_clients-2'
-        }
-      ]
-    },
-    {
-      humanReadableName: 'cp-2.teone.xos-pg0.clemson.cloudlab.us',
-      instances: [
-        {
-          instance_name: 'mysite_clients-1'
-        },
-        {
-          instance_name: 'mysite_clients-2'
-        }
-      ]
-    }
-  ];
-
-  describe('The Rack Helper Service', () => {
-    
-    var Service, Config;
-
-    // results
-    var cp1, cp2, cp3, rack, instancePos, nodePos;
-
-    beforeEach(module('xos.diagnostic'));
-
-    // inject the rackHelper service
-    beforeEach(inject(function (_RackHelper_, _serviceTopologyConfig_) {
-      // The injector unwraps the underscores (_) from around the parameter names when matching
-      Service = _RackHelper_;
-      Config = _serviceTopologyConfig_;
-
-      cp1 = {
-        width: (Config.instance.width * 2) + (Config.instance.margin * 3),
-        height: (Config.instance.height * 2) + (Config.instance.margin * 5) + Config.computeNode.labelHeight
-      };
-
-      cp2 = {
-        width: (Config.instance.width * 2) + (Config.instance.margin * 3),
-        height: Config.instance.height + (Config.instance.margin * 4) + Config.computeNode.labelHeight
-      };
-
-      cp3 = {
-        width: (Config.instance.width * 2) + (Config.instance.margin * 3),
-        height: Config.instance.height + (Config.instance.margin * 4) + Config.computeNode.labelHeight
-      };
-
-      rack = {
-        width: cp1.width + (Config.computeNode.margin * 2),
-        height: cp1.height + cp2.height + cp3.height + (Config.computeNode.margin * 4)
-      }
-
-      instancePos = [
-        {
-          x: Config.instance.margin,
-          y: Config.instance.margin + Service.getComputeNodeLabelSize()
-        },
-        {
-          x: Config.instance.margin + (Config.instance.width * 1) + (Config.instance.margin * 1),
-          y: Config.instance.margin + Service.getComputeNodeLabelSize()
-        },
-        {
-          x: Config.instance.margin,
-          y: Config.instance.margin + Service.getComputeNodeLabelSize() + + (Config.instance.height * 1) + (Config.instance.margin * 1)
-        },
-        {
-          x: Config.instance.margin + (Config.instance.width * 1) + (Config.instance.margin * 1),
-          y: Config.instance.margin + Service.getComputeNodeLabelSize() + + (Config.instance.height * 1) + (Config.instance.margin * 1)
-        }
-      ];
-
-      nodePos = [
-        {
-          x: Config.computeNode.margin,
-          y: Config.computeNode.margin
-        },
-        {
-          x: Config.computeNode.margin,
-          y: (Config.computeNode.margin * 2) + cp1.height
-        },
-        {
-          x: Config.computeNode.margin,
-          y: (Config.computeNode.margin * 3) + cp1.height + cp2.height
-        }
-      ]
-    }));
-
-    describe('Given a list of instances', () => {
-      it('should calculate the first Compute Node Size', () => {
-        const [width, height] = Service.getComputeNodeSize(computeNodes[0].instances);
-        expect(width).toBe(cp1.width);
-        expect(height).toBe(cp1.height);
-      });
-
-      it('should calculate the second Compute Node Size', () => {
-        const [width, height] = Service.getComputeNodeSize(computeNodes[1].instances);
-        expect(width).toBe(cp2.width);
-        expect(height).toBe(cp2.height);
-      });
-
-      it('should calculate the third Compute Node Size', () => {
-        const [width, height] = Service.getComputeNodeSize(computeNodes[1].instances);
-        expect(width).toBe(cp3.width);
-        expect(height).toBe(cp3.height);
-      });
-    });
-
-    describe('Given a list of Compute Nodes', () => {
-      it('should return rack size', () => {
-        const [width, height] = Service.getRackSize(computeNodes);
-        expect(width).toBe(rack.width);
-        expect(height).toBe(rack.height);
-      });
-    });
-
-    describe('Given an instance index', () => {
-      it('should return the position for first instance', () => {
-        const [x, y] = Service.getInstancePosition(0);
-        expect(x).toBe(instancePos[0].x);
-        expect(y).toBe(instancePos[0].y);
-      })
-
-      it('should return the position for second instance', () => {
-        const [x, y] = Service.getInstancePosition(1);
-        expect(x).toBe(instancePos[1].x);
-        expect(y).toBe(instancePos[1].y);
-      });
-
-      it('should return the position for third instance', () => {
-        const [x, y] = Service.getInstancePosition(2);
-        expect(x).toBe(instancePos[2].x);
-        expect(y).toBe(instancePos[2].y);
-      });
-
-      it('should return the position for 4th instance', () => {
-        const [x, y] = Service.getInstancePosition(3);
-        expect(x).toBe(instancePos[3].x);
-        expect(y).toBe(instancePos[3].y);
-      });
-    });
-
-    describe('Given an ComputeNode index', () => {
-      it('should return the position for 1st node', () => {
-        const [x, y] = Service.getComputeNodePosition(computeNodes, 0);
-        expect(x).toBe(nodePos[0].x);
-        expect(y).toBe(nodePos[0].y);
-      })
-
-      it('should return the position for 2st node', () => {
-        const [x, y] = Service.getComputeNodePosition(computeNodes, 1);
-        expect(x).toBe(nodePos[1].x);
-        expect(y).toBe(nodePos[1].y);
-      });
-
-      it('should return the position for 2st node', () => {
-        const [x, y] = Service.getComputeNodePosition(computeNodes, 2);
-        expect(x).toBe(nodePos[2].x);
-        expect(y).toBe(nodePos[2].y);
-      });
-    });
-  });
-})();
diff --git a/views/ngXosViews/diagnostic/spec/serviceChain.test.js b/views/ngXosViews/diagnostic/spec/serviceChain.test.js
deleted file mode 100644
index 78c937e..0000000
--- a/views/ngXosViews/diagnostic/spec/serviceChain.test.js
+++ /dev/null
@@ -1,229 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The Service Relation Service', () => {
-  
-  var Service;
-
-  beforeEach(module('xos.diagnostic'));
-  beforeEach(module('templates'));
-
-  // inject the cartService
-  beforeEach(inject(function (_ServiceRelation_) {
-    // The injector unwraps the underscores (_) from around the parameter names when matching
-    Service = _ServiceRelation_;
-  }));
-
-  describe('given a service', () => {
-
-    const levelRelations = [
-      {
-        subscriber_service: 1
-      },
-      {
-        subscriber_service: 1
-      },
-      {
-        subscriber_service: 2
-      }
-    ];
-
-    it('should find all involved relations', () => {
-      expect(typeof Service.findLevelRelation).toBe('function');
-      let levelRelation = Service.findLevelRelation(levelRelations, 1);
-      expect(levelRelation.length).toBe(2);
-    });
-  });
-
-  describe('given a set of relation', () => {
-
-    const levelRelations = [
-      {
-        provider_service: 1,
-        service_specific_attribute: '{"instance_id": "instance1"}',
-        subscriber_tenant: 2
-      },
-      {
-        provider_service: 2
-      }
-    ];
-
-    const services = [
-      {
-        id: 1
-      },
-      {
-        id: 2
-      },
-      {
-        id: 3
-      }
-    ];
-
-    it('should find all the provider service', () => {
-      expect(typeof Service.findLevelServices).toBe('function');
-      let levelServices = Service.findLevelServices(levelRelations, services);
-      expect(levelServices.length).toBe(2);
-    });
-
-    it('should retrieve all service specific information', () => {
-      let info = Service.findSpecificInformation(levelRelations, 1);
-      expect(info.instance_id).toBe('instance1');
-    });
-  });
-
-
-
-  describe('given a list of services and a list of relations', () => {
-
-    const services = [
-      {
-        id: 1,
-        humanReadableName: 'service-1'
-      },
-      {
-        id: 2,
-        humanReadableName: 'service-2'
-      },
-      {
-        id: 3,
-        humanReadableName: 'service-3'
-      },
-      {
-        id: 4,
-        humanReadableName: 'service-4'
-      }
-    ];
-
-    const tenants = [
-      {
-        id: 1,
-        provider_service: 2,
-        subscriber_tenant: 4,
-        subscriber_service: 1,
-      },
-      {
-        id: 2,
-        provider_service: 3,
-        subscriber_tenant: 1,
-        subscriber_service: 2
-      },
-      {
-        id: 3,
-        provider_service: 4,
-        subscriber_tenant: 4,
-        subscriber_service: 1
-      },
-      {
-        id: 4,
-        subscriber_root: 1,
-        provider_service: 1
-      }
-    ];
-
-    it('should return a tree ordered by tenants', () => {
-      let tree = Service.buildSubscriberServiceTree(services, tenants);
-
-      expect(tree.name).toBe('fakeSubs');
-      expect(tree.parent).toBeNull();
-      expect(tree.children.length).toBe(1);
-
-      expect(tree.children[0].name).toBe('service-1');
-      expect(tree.children[0].parent).toBeNull();
-      expect(tree.children[0].tenant).toEqual({id: 4, subscriber_root: 1, provider_service: 1});
-      expect(tree.children[0].children.length).toBe(2);
-
-      expect(tree.children[0].children[0].name).toBe('service-2');
-      expect(tree.children[0].children[0].tenant).toEqual({ id: 1, provider_service: 2, subscriber_tenant: 4, subscriber_service: 1 });;
-      expect(tree.children[0].children[0].children[0].name).toBe('service-3');
-
-      // expect(tree.children[0].children[0].children[0].children[0].name).toBe('Router');
-
-      expect(tree.children[0].children[1].name).toBe('service-4');
-      // expect(tree.children[0].children[1].children[0].name).toBe('Router');
-    });
-  });
-
-  describe('given an object', () => {
-
-    const sample = {
-      name: '1',
-      children: [
-        {
-          name: '2',
-          children: [
-            {
-              name: '3'
-            }
-          ]
-        }
-      ]
-    };
-
-    it('should return the depth', () => {
-      expect(Service.depthOf(sample)).toBe(3);
-    });
-  });
-
-  describe('Given a list of services and COARSE tenant', () => {
-    
-    const coarseTenants = [
-      {
-        humanReadableName: 'coarse-1',
-        provider_service: 1,
-        subscriber_service: 2
-      },
-      {
-        humanReadableName: 'coarse-2',
-        provider_service: 2,
-        subscriber_service: 3
-      }
-    ];
-
-    const services = [
-      {
-        id: 1,
-        name: 'vbng',
-        humanReadableName: 'vbng'
-      },
-      {
-        id: 2,
-        name: 'vsg',
-        humanReadableName: 'vsg'
-      },
-      {
-        id: 3,
-        name: 'volt',
-        humanReadableName: 'volt'
-      }
-    ];
-
-    it('should build the tenancy graph', () => {
-      let tree = Service.buildServiceTree(services, coarseTenants);
-
-      expect(tree.type).toBe('subscriber');
-      expect(tree.children[0].name).toBe('volt');
-      expect(tree.children[0].service).toBeDefined();
-      expect(tree.children[0].children[0].name).toBe('vsg');
-      expect(tree.children[0].children[0].children[0].name).toBe('vbng');
-    });
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/css/dev.css b/views/ngXosViews/diagnostic/src/css/dev.css
deleted file mode 100644
index f1d1665..0000000
--- a/views/ngXosViews/diagnostic/src/css/dev.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosDiagnostic{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/css/main.css b/views/ngXosViews/diagnostic/src/css/main.css
deleted file mode 100644
index 7b79357..0000000
--- a/views/ngXosViews/diagnostic/src/css/main.css
+++ /dev/null
@@ -1,300 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/* CONTAINER */
-#xosDiagnostic, [ui-view] {
-  height: 100%;
-  min-height: 700px;
-  position: relative; }
-
-diagnostic-container .form-control.small-padding {
-  padding: 6px; }
-
-diagnostic-container .half-height {
-  position: relative;
-  height: 50%; }
-
-diagnostic-container .onethird-height {
-  position: relative;
-  height: 33%;
-  border-bottom: 1px solid #999; }
-
-diagnostic-container .twothird-height {
-  position: relative;
-  height: 67%; }
-
-diagnostic-container .subscriber-select {
-  max-width: 200px;
-  position: absolute;
-  top: 20px;
-  right: 20px;
-  z-index: 1; }
-
-diagnostic-container .onethird-height .well,
-diagnostic-container .twothird-height .well {
-  font-weight: bold;
-  max-width: 165px;
-  text-align: center;
-  margin-top: 15px;
-  background: #eee;
-  border-color: steelblue;
-  padding: 10px; }
-
-diagnostic-container .onethird-height .well.pull-right {
-  position: absolute;
-  right: 0px;
-  top: -15px;
-  cursor: pointer;
-  z-index: 200; }
-
-/* subscriber-status-modal */
-subscriber-status-modal .row + .row {
-  margin-top: 20px; }
-
-.half-height + .half-height {
-  border-top: 1px solid black; }
-
-service-topology,
-logic-topology {
-  height: 100%;
-  width: 100%;
-  display: block;
-  position: absolute;
-  top: 0; }
-
-logic-topology .subscriber circle,
-logic-topology .device circle {
-  fill: #fff;
-  stroke: green;
-  stroke-width: 1px; }
-
-logic-topology > svg {
-  position: absolute;
-  top: 0; }
-
-/* CLOUDS */
-logic-topology .network .cloud {
-  fill: #fff;
-  stroke: green;
-  stroke-width: 1px; }
-
-/* RACK */
-logic-topology .node.rack > g > rect {
-  fill: #ccc;
-  stroke: steelblue;
-  stroke-width: 1px; }
-
-/* CP NODE */
-logic-topology .compute-node > rect {
-  fill: #fff;
-  stroke: steelblue;
-  stroke-width: 1px; }
-
-logic-topology .compute-node > text {
-  font-size: 16px; }
-
-/* INSTANCE */
-logic-topology .instance > rect {
-  fill: #eee;
-  stroke: steelblue;
-  stroke-width: 1px; }
-
-logic-topology .node .instance.active rect {
-  fill: lightsteelblue;
-  stroke: steelblue;
-  stroke-width: 1px; }
-
-logic-topology .node .instance.active.good > rect {
-  fill: green; }
-
-logic-topology .node .instance.active.provisioning > rect {
-  fill: yellow; }
-
-logic-topology .node .instance.active.bad > rect {
-  fill: red; }
-
-/* INSTANCE STATS */
-logic-topology .node .instance .stats-container rect {
-  fill: white; }
-
-logic-topology .node .instance .stats-container text.name {
-  font-weight: bold; }
-
-logic-topology .node .instance .stats-container text.ip {
-  font-style: italic;
-  font-size: 10px; }
-
-/* CONTAINERS */
-logic-topology .node .instance .stats-container .container rect {
-  fill: #eee;
-  stroke: steelblue;
-  stroke-width: 1px; }
-
-/* LEGEND */
-.legend {
-  fill: #fff;
-  stroke: #ccc;
-  stroke-width: 1px;
-  position: relative; }
-
-.legend text {
-  stroke: #000; }
-
-.node {
-  cursor: pointer; }
-
-.node circle,
-.node rect {
-  fill: #fff;
-  stroke: steelblue;
-  stroke-width: 1px; }
-
-.node.subscriber circle,
-.node.subscriber rect,
-.node.router circle,
-.node.router rect {
-  stroke: #05ffcb; }
-
-.node.slice rect {
-  stroke: #b01dff; }
-
-.node.instance rect {
-  stroke: #ccc; }
-
-.node.instance rect.active {
-  stroke: #ff8b00; }
-
-.node rect.slice-detail {
-  fill: #fff;
-  stroke: steelblue;
-  stroke-width: 3px; }
-
-.node text {
-  font: 18px sans-serif; }
-
-.node .instance text {
-  font: 12px sans-serif; }
-
-.node text.small {
-  font-size: 10px; }
-
-.link, .device-link {
-  fill: none;
-  stroke: #ccc;
-  stroke-width: 2px; }
-
-.link.slice {
-  stroke: rgba(157, 4, 183, 0.29); }
-
-.link.instance {
-  stroke: #ccc; }
-
-.link.instance.active {
-  stroke: rgba(255, 138, 0, 0.65); }
-
-.service-details {
-  width: 200px;
-  position: absolute;
-  top: 20px;
-  right: 20px; }
-
-/* when showing the thing */
-.animate.ng-hide-remove {
-  animation: 0.5s bounceInRight ease; }
-
-/* when hiding the picture */
-.animate.ng-hide-add {
-  animation: 0.5s bounceOutRight ease; }
-
-/* LOADER */
-.loader {
-  font-size: 10px;
-  margin: 150px auto;
-  text-indent: -9999em;
-  width: 11em;
-  height: 11em;
-  border-radius: 50%;
-  background: #ffffff;
-  background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  position: relative;
-  animation: load3 1.4s infinite linear;
-  transform: translateZ(0); }
-
-.loader:before {
-  width: 50%;
-  height: 50%;
-  background: #105E9E;
-  border-radius: 100% 0 0 0;
-  position: absolute;
-  top: 0;
-  left: 0;
-  content: ''; }
-
-.loader:after {
-  background: #fff;
-  width: 75%;
-  height: 75%;
-  border-radius: 50%;
-  content: '';
-  margin: auto;
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0; }
-
-@keyframes load3 {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg); }
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg); } }
-
-/* MODALS */
-.modal.fade.in {
-  display: block; }
-
-/* ANIMATIONS */
-@keyframes bounceInRight {
-  from, 60%, 75%, 90%, to {
-    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }
-  from {
-    opacity: 0;
-    transform: translate3d(3000px, 0, 0); }
-  60% {
-    opacity: 1;
-    transform: translate3d(-25px, 0, 0); }
-  75% {
-    transform: translate3d(10px, 0, 0); }
-  90% {
-    transform: translate3d(-5px, 0, 0); }
-  to {
-    transform: none; } }
-
-@keyframes bounceOutRight {
-  20% {
-    opacity: 1;
-    transform: translate3d(-20px, 0, 0); }
-  to {
-    opacity: 0;
-    transform: translate3d(2000px, 0, 0); } }
diff --git a/views/ngXosViews/diagnostic/src/icons/README.md b/views/ngXosViews/diagnostic/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/diagnostic/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/icons/diagnostic-icon-active.png b/views/ngXosViews/diagnostic/src/icons/diagnostic-icon-active.png
deleted file mode 100644
index e5decc8..0000000
--- a/views/ngXosViews/diagnostic/src/icons/diagnostic-icon-active.png
+++ /dev/null
Binary files differ
diff --git a/views/ngXosViews/diagnostic/src/icons/diagnostic-icon.png b/views/ngXosViews/diagnostic/src/icons/diagnostic-icon.png
deleted file mode 100644
index b5d91ed..0000000
--- a/views/ngXosViews/diagnostic/src/icons/diagnostic-icon.png
+++ /dev/null
Binary files differ
diff --git a/views/ngXosViews/diagnostic/src/index.html b/views/ngXosViews/diagnostic/src/index.html
deleted file mode 100644
index 9f0fb4c..0000000
--- a/views/ngXosViews/diagnostic/src/index.html
+++ /dev/null
@@ -1,64 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower --><!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.diagnostic" id="xosDiagnostic">
-    <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower --><!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/subscriber-modal.js"></script>
-<script src="/.tmp/serviceTopologyHelper.js"></script>
-<script src="/.tmp/serviceTopology.js"></script>
-<script src="/.tmp/rest_services.js"></script>
-<script src="/.tmp/rackHelper.js"></script>
-<script src="/.tmp/nodeDrawer.js"></script>
-<script src="/.tmp/logicTopologyHelper.js"></script>
-<script src="/.tmp/logicTopology.js"></script>
-<script src="/.tmp/diagnostic.js"></script>
-<script src="/.tmp/d3.js"></script>
-<script src="/.tmp/config.js"></script>
-<script src="/.tmp/chart_data_service.js"></script>
-<!-- endinject -->
diff --git a/views/ngXosViews/diagnostic/src/js/chart_data_service.js b/views/ngXosViews/diagnostic/src/js/chart_data_service.js
deleted file mode 100644
index 419a3eb..0000000
--- a/views/ngXosViews/diagnostic/src/js/chart_data_service.js
+++ /dev/null
@@ -1,242 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.diagnostic')
-  .service('ChartData', function($rootScope, $q, _, Tenant, Node, serviceTopologyConfig, Ceilometer, Instances) {
-    this.currentSubscriber = null;
-    this.currentServiceChain = null;
-
-    this.logicTopologyData = {
-      name: 'Router',
-      type: 'router',
-      children: [
-        {
-          name: 'WAN-Side',
-          subtitle: 'Virtual Network',
-          type: 'network',
-          children: [
-            {
-              name: 'Compute Servers',
-              type: 'rack',
-              computeNodes: [],
-              children: [
-                {
-                  name: 'LAN-Side',
-                  subtitle: 'Virtual Network',
-                  type: 'network',
-                  children: [{
-                    name: 'Subscriber',
-                    type: 'subscriber'
-                  }] //subscribers goes here
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    };
-
-    this.getLogicTree = () => {
-      const deferred = $q.defer();
-
-      Node.queryWithInstances().$promise
-        .then((computeNodes) => {
-          this.logicTopologyData.children[0].children[0].computeNodes = computeNodes;
-          // LogicTopologyHelper.updateTree(svg);
-          deferred.resolve(this.logicTopologyData);
-        });
-
-      return deferred.promise;
-    };
-
-    /**
-    * Add Subscriber tag to LAN Network
-    */
-    this.addSubscriberTag = (tags) => {
-      this.logicTopologyData.children[0].children[0].children[0].subscriberTag = {
-        cTag: tags.cTag,
-        sTag: tags.sTag
-      };
-    };
-
-    /**
-    * Add Subscribers to the tree
-    */
-    this.addSubscriber = (subscriber) => {
-      subscriber.children = subscriber.devices;
-
-      // add subscriber to data tree
-      this.logicTopologyData.children[0].children[0].children[0].children = [subscriber];
-      return this.logicTopologyData;
-    };
-
-    /**
-    * Remove a subscriber from the tree
-    */
-   
-    this.removeSubscriber = () => {
-      this.logicTopologyData.children[0].children[0].children[0].children[0].humanReadableName = 'Subscriber';
-      this.currentSubscriber = null;
-      if(serviceTopologyConfig.elWidths[serviceTopologyConfig.elWidths.length - 1] === 160){
-        serviceTopologyConfig.elWidths.pop();
-      }
-
-      //remove tags and ip
-      delete this.logicTopologyData.children[0].children[0].children[0].subscriberTag;
-      delete this.logicTopologyData.children[0].subscriberIP;
-
-      this.highlightInstances([]);
-      delete this.logicTopologyData.children[0].children[0].children[0].children[0].children;
-    }
-
-    this.getSubscriberTag = (subscriber) => {
-      const tags = {
-        cTag: subscriber.related.c_tag,
-        sTag: subscriber.related.s_tag
-      };
-      
-      this.addSubscriberTag(tags);
-      // add tags info to current subscriber
-      this.currentSubscriber.tags = tags;
-
-    };
-
-    this.getSubscriberIP = (subscriber) => {
-      this.logicTopologyData.children[0].subscriberIP = subscriber.related.wan_container_ip;
-    };
-
-    this.selectSubscriber = (subscriber) => {
-
-      // append the device with to config settings
-      serviceTopologyConfig.elWidths.push(160);
-
-      this.addSubscriber(angular.copy(subscriber));
-
-      //clean selected instances
-      this.highlightInstances([]);
-
-      this.getSubscriberTag(subscriber);
-      this.getSubscriberIP(subscriber);
-
-    };
-
-    this.highlightInstances = (instances) => {
-
-      const computeNodes = this.logicTopologyData.children[0].children[0].computeNodes;
-
-      // unselect all
-      computeNodes.map((node) => {
-        node.instances.map((instance) => {
-          instance.selected = false
-          return instance;
-        });
-      });
-
-      _.forEach(instances, (instance) => {
-        computeNodes.map((node) => {
-          node.instances.map((d3instance) => {
-            if(d3instance.id === instance.id){
-              // console.log(d3instance, instance);
-              d3instance.selected = true;
-              d3instance.stats = instance.stats; //add stats to d3 node
-              d3instance.container = instance.container; // container info to d3 node
-            }
-            return d3instance;
-          });
-        });
-      });
-
-    }
-
-    this.getInstanceStatus = (service) => {
-      const deferred = $q.defer();
-
-      let p;
-
-      // subscriber specific
-      if(this.currentSubscriber){
-
-        let attr;
-        try {
-          attr = JSON.parse(service.tenant.service_specific_attribute);
-        }
-        catch(e){
-          attr = null;
-        }
-        
-        // if no instances are associated to the subscriber
-        if(!attr || !attr.instance_id){
-          let d = $q.defer();
-          d.resolve([]);
-          p = d.promise;
-        }
-        // if ther is an instance
-        else{
-          let instance = {};
-          p = Instances.get({id: attr.instance_id}).$promise
-          .then(function(_instance){
-            instance = _instance;
-            return Ceilometer.getInstanceStats(instance.instance_uuid);
-          })
-          .then((stats) => {
-            instance.stats = stats;
-            const containerName = `vcpe-${this.currentSubscriber.tags.sTag}-${this.currentSubscriber.tags.cTag}`;
-            // append containers
-            instance.container = {
-              name: containerName
-            };
-
-            // TODO fetch container stats
-            return Ceilometer.getContainerStats(containerName);
-          })
-          .then((containerStats) => {
-            instance.container.stats = containerStats.stats;
-            instance.container.port = containerStats.port;
-            return [instance];
-          });
-        }
-      }
-      // global scope
-      else {
-        const param = {
-          'service_vsg': {kind: 'vCPE'},
-          'service_vbng': {kind: 'vBNG'},
-          'service_volt': {kind: 'vOLT'}
-        };
-
-        p = Tenant.queryVsgInstances(param[service.name]).$promise
-        .then((instances) => {
-          return Ceilometer.getInstancesStats(_.uniq(instances));
-        });
-      }
-
-      p.then((instances) => {
-        this.highlightInstances(instances);
-        deferred.resolve(instances);
-      })
-      .catch((e) => {
-        deferred.reject(e);
-      });
-
-      return deferred.promise;
-    };
-  })
-})();
diff --git a/views/ngXosViews/diagnostic/src/js/config.js b/views/ngXosViews/diagnostic/src/js/config.js
deleted file mode 100644
index 3c1c486..0000000
--- a/views/ngXosViews/diagnostic/src/js/config.js
+++ /dev/null
@@ -1,69 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.diagnostic')
-  .constant('serviceTopologyConfig', {
-    widthMargin: 60,
-    heightMargin: 30,
-    duration: 750,
-    elWidths: [20, 104, 105, 104, 20], //this is not true
-    circle: {
-      radius: 10,
-      r: 10,
-      selectedRadius: 15
-    },
-    square: {
-      width: 20,
-      height: 20,
-      x: -10,
-      y: -10
-    },
-    rack: {
-      width: 105,
-      height: 50,
-      x: -30,
-      y: -25
-    },
-    computeNode: {
-      width: 50,
-      height: 20,
-      margin: 5,
-      labelHeight: 10,
-      x: -25,
-      y: -10
-    },
-    instance: {
-      width: 80,
-      height: 36,
-      margin: 5,
-      x: -40,
-      y: -18
-    },
-    container: {
-      width: 60,
-      height: 130,
-      margin: 5,
-      x: -30,
-      y: -15
-    }
-  })
-
-}());
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/js/d3.js b/views/ngXosViews/diagnostic/src/js/d3.js
deleted file mode 100644
index 747d72d..0000000
--- a/views/ngXosViews/diagnostic/src/js/d3.js
+++ /dev/null
@@ -1,27 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.diagnostic')
-  .factory('d3', function($window){
-    return $window.d3;
-  })
-
-}());
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/js/diagnostic.js b/views/ngXosViews/diagnostic/src/js/diagnostic.js
deleted file mode 100644
index dc8430a..0000000
--- a/views/ngXosViews/diagnostic/src/js/diagnostic.js
+++ /dev/null
@@ -1,79 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-  angular.module('xos.diagnostic')
-  .directive('diagnosticContainer', function(){
-    return {
-      restrict: 'E',
-      templateUrl: 'templates/diagnostic.tpl.html',
-      controllerAs: 'vm',
-      controller: function(ChartData, Subscribers, SubscribersWithDevice, ServiceRelation, $rootScope){
-
-        this.loader = true;
-        this.error = false;
-        
-        const loadGlobalScope = () => {
-          Subscribers.query().$promise
-          .then((subscribers) => {
-            this.subscribers = subscribers;
-            return ServiceRelation.get();
-          })
-          .then((serviceChain) => {
-            this.serviceChain = serviceChain;
-            // debug helper
-            // loadSubscriber(this.subscribers[0]);
-          })
-          .catch(e => {
-            throw new Error(e);
-            this.error = e;
-          })
-          .finally(() => {
-            this.loader = false;
-          });
-        };
-
-        loadGlobalScope();
-
-        this.reloadGlobalScope = () => {
-          this.selectedSubscriber = null;
-          loadGlobalScope();
-        }
-
-        const loadSubscriber = (subscriber) => {
-          ServiceRelation.getBySubscriber(subscriber)
-          .then((serviceChain) => {
-            this.serviceChain = serviceChain;
-            ChartData.currentServiceChain = serviceChain;
-            return SubscribersWithDevice.get({id: subscriber.id}).$promise;
-          })
-          .then((subscriber) => {
-            this.selectedSubscriber = subscriber;
-            ChartData.currentSubscriber = subscriber;
-          });
-        };
-
-        $rootScope.$on('subscriber.selected', (evt, subscriber) => {
-          loadSubscriber(subscriber);
-        });
-
-      }
-    }
-  });
-})();
diff --git a/views/ngXosViews/diagnostic/src/js/logicTopology.js b/views/ngXosViews/diagnostic/src/js/logicTopology.js
deleted file mode 100644
index 55378fc..0000000
--- a/views/ngXosViews/diagnostic/src/js/logicTopology.js
+++ /dev/null
@@ -1,136 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-  angular.module('xos.diagnostic')
-  .directive('logicTopology', function(){
-    return {
-      restrict: 'E',
-      scope: {
-        subscribers: '=',
-        selected: '='
-      },
-      bindToController: true,
-      controllerAs: 'vm',
-      templateUrl: 'templates/logicTopology.tpl.html',
-      controller: function($element, $log, $scope, $rootScope, $timeout, d3, LogicTopologyHelper, Node, Tenant, Ceilometer, serviceTopologyConfig, ChartData){
-        $log.info('Logic Plane');
-
-        var svg;
-        this.selectedInstances = [];
-        this.hideInstanceStats = true;
-        var _this = this;
-
-        const handleSvg = (el) => {
-
-          d3.select($element[0]).select('svg').remove();
-
-          svg = d3.select(el)
-          .append('svg')
-          .style('width', `${el.clientWidth}px`)
-          .style('height', `${el.clientHeight}px`);
-        }
-
-        const loadGlobalScope = () => {
-          ChartData.getLogicTree()
-          .then((tree) => {
-            LogicTopologyHelper.updateTree(svg);
-          });
-        }
-        loadGlobalScope();
-
-        $scope.$watch(() => this.selected, (selected) => {
-          if(selected){
-            ChartData.selectSubscriber(selected);
-            LogicTopologyHelper.updateTree(svg);
-          }
-          else{
-            ChartData.removeSubscriber();
-            LogicTopologyHelper.updateTree(svg);
-          }
-        });
-
-        $rootScope.$on('instance.detail.hide', () => {
-          this.hideInstanceStats = true;
-          $timeout(() => {
-            this.selectedInstances = [];
-            ChartData.highlightInstances([]);
-            LogicTopologyHelper.updateTree(svg);
-          }, 500);
-        });
-
-        $rootScope.$on('instance.detail', (evt, service) => {
-          ChartData.getInstanceStatus(service)
-          .then((instances) => {
-            LogicTopologyHelper.updateTree(svg);
-          })
-          .catch(e => {
-            _this.error = 'Service statistics are not available at this time. Please try again later.'
-            $timeout(() => {
-              _this.error = null;
-            }, 2000);
-          })
-        });
-
-        d3.select(window)
-        .on('resize.logic', () => {
-          handleSvg($element[0]);
-          LogicTopologyHelper.setupTree(svg);
-          LogicTopologyHelper.updateTree(svg);
-        });
-
-        handleSvg($element[0]);
-        LogicTopologyHelper.setupTree(svg);
-
-        this.selectSubscriberModal = () => {
-          this.openSelectSubscriberModal = true;
-          $scope.$apply();
-        };
-
-        this.subscriberStatusModal = () => {
-          this.openSubscriberStatusModal = true;
-          $scope.$apply();
-        };
-
-        // listen for subscriber modal event
-        // $rootScope.$on('subscriber.modal.open', () => {
-        //
-        //   if(ChartData.currentSubscriber){
-        //     this.subscriberStatusModal();
-        //   }
-        //   else{
-        //     this.selectSubscriberModal();
-        //   }
-        // });
-
-        // listen for subscriber modal event
-        $rootScope.$on('subscriber.modal.open', () => {
-          if(ChartData.currentSubscriber){
-            this.currentSubscriber = ChartData.currentSubscriber;
-            this.subscriberStatusModal();
-          }
-          else{
-            this.selectSubscriberModal();
-          }
-        });
-
-      }
-    };
-  });
-})();
diff --git a/views/ngXosViews/diagnostic/src/js/logicTopologyHelper.js b/views/ngXosViews/diagnostic/src/js/logicTopologyHelper.js
deleted file mode 100644
index 40ec182..0000000
--- a/views/ngXosViews/diagnostic/src/js/logicTopologyHelper.js
+++ /dev/null
@@ -1,195 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.diagnostic')
-  .service('LogicTopologyHelper', function($window, $log, $rootScope, _, serviceTopologyConfig, NodeDrawer, ChartData){
-
-    var diagonal, nodes, links, i = 0, svgWidth, svgHeight, layout;
-
-    const baseData = ChartData.logicTopologyData;
-
-    /**
-     * Calculate the horizontal position for each element.
-     * subsrcribers, devices and routers have the same fixed width 20
-     * network have a fixed width 104
-     * rack have a fixed width 105
-     * build and array of 6 elements representing the position of each element in the svg
-     * to equally space them
-     */
-
-    this.computeElementPosition = (svgWidth) => {
-
-      let xPos = [];
-
-      let totalElWidth = _.reduce(serviceTopologyConfig.elWidths, (el, val) => val + el, 0);
-
-      let remainingSpace = svgWidth - totalElWidth - (serviceTopologyConfig.widthMargin * 2);
-
-      let step = remainingSpace / (serviceTopologyConfig.elWidths.length - 1);
-
-      _.forEach(serviceTopologyConfig.elWidths, (el, i) => {
-
-        // get half of the previous elements width
-        let previousElWidth = 0;
-        if(i !== 0){
-          previousElWidth = _.reduce(serviceTopologyConfig.elWidths.slice(0, i), (el, val) => val + el, 0);
-        }
-
-        let elPos =
-          serviceTopologyConfig.widthMargin // right margin
-          + (step * i) // space between elements
-          + (el / 2) // this el width
-          + previousElWidth; // previous elements width
-
-        xPos.push(svgWidth - elPos);
-      })
-
-      return xPos
-    };
-
-    /**
-    * from a nested data structure,
-    * create nodes and links for a D3 Tree Layout
-    */
-    const computeLayout = (data) => {
-      let nodes = layout.nodes(data);
-
-      // Normalize for fixed-depth.
-      nodes.forEach((d) => {
-        // position the child node horizontally
-        d.y = this.computeElementPosition(svgWidth)[d.depth];
-      });
-
-      let links = layout.links(nodes);
-
-      return [nodes, links];
-    };
-
-    /**
-    * Draw the containing group for any node or update the existing one
-    */
-    const drawNodes = (svg, nodes) => {
-      // Update the nodes…
-      var node = svg.selectAll('g.node')
-      .data(nodes, d => {
-        if(!angular.isString(d.d3Id)){
-          d.d3Id = `tree-${++i}`;
-        }
-        return d.d3Id;
-      });
-
-      // Enter any new nodes
-      var nodeEnter = node.enter().append('g')
-      .attr({
-        class: d => `node ${d.type}`,
-        transform: `translate(${svgWidth / 2}, ${svgHeight / 2})`
-      });
-
-      // create Nodes
-      NodeDrawer.addNetworks(node.filter('.network'));
-      NodeDrawer.addRack(node.filter('.rack'));
-      NodeDrawer.addPhisical(node.filter('.router'));
-      NodeDrawer.addPhisical(node.filter('.subscriber'));
-      NodeDrawer.addDevice(node.filter('.device'));
-
-      // add event listener to subscriber
-      node.filter('.subscriber')
-      .on('click', () => {
-        $rootScope.$emit('subscriber.modal.open');
-      });
-
-      //update nodes
-      // TODO if data change, only update them
-      // NodeDrawer.updateRack(node.filter('.rack'));
-
-      // Transition nodes to their new position.
-      var nodeUpdate = node.transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr({
-          'transform': d => `translate(${d.y},${d.x})`
-        });
-
-      // TODO handle node remove
-      var nodeExit = node.exit().remove();
-    };
-
-    /**
-    * Handle links in the tree layout
-    */
-    const drawLinks = (svg, links) => {
-
-      diagonal = d3.svg.diagonal()
-      .projection(d => [d.y, d.x]);
-
-      // Update the links…
-      var link = svg.selectAll('path.link')
-        .data(links, d => {
-          return d.target.d3Id
-        });
-
-      // Enter any new links at the parent's previous position.
-      link.enter().insert('path', 'g')
-        .attr('class', d => `link ${d.target.type}`)
-        .attr('d', function(d) {
-          var o = {x: svgHeight / 2, y: svgWidth / 2};
-          return diagonal({source: o, target: o});
-        });
-
-      // Transition links to their new position.
-      link.transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr('d', diagonal);
-
-      link.exit().remove();
-    };
-
-    /**
-    * Calculate the svg size and setup tree layout
-    */
-    this.setupTree = (svg) => {
-      
-
-      svgWidth = svg.node().getBoundingClientRect().width;
-      svgHeight = svg.node().getBoundingClientRect().height;
-
-      const width = svgWidth - (serviceTopologyConfig.widthMargin * 2);
-      const height = svgHeight - (serviceTopologyConfig.heightMargin * 2);
-
-      layout = d3.layout.tree()
-      .size([height, width]);
-    };
-
-    /**
-    * Update the tree layout
-    */
-
-    this.updateTree = (svg) => {
-      // Compute the new tree layout.
-      [nodes, links] = computeLayout(baseData);
-
-      // console.log(baseData);
-      drawNodes(svg, nodes);
-      drawLinks(svg, links);
-    }
-
-  });
-
-}());
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/js/main.js b/views/ngXosViews/diagnostic/src/js/main.js
deleted file mode 100644
index d4fbc92..0000000
--- a/views/ngXosViews/diagnostic/src/js/main.js
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.diagnostic', [
-    'ngResource',
-    'ngCookies',
-    'ngAnimate',
-    'ui.router',
-    'xos.helpers'
-  ])
-  .config(($stateProvider) => {
-    $stateProvider
-    .state('home', {
-      url: '/',
-      template: '<diagnostic-container></diagnostic-container>'
-    });
-  })
-  .config(function($httpProvider){
-    $httpProvider.interceptors.push('NoHyperlinks');
-  })
-  .run(($log) => {
-    $log.info('Diagnostic Started');
-  });
-
-})();
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/js/nodeDrawer.js b/views/ngXosViews/diagnostic/src/js/nodeDrawer.js
deleted file mode 100644
index 6560a8e..0000000
--- a/views/ngXosViews/diagnostic/src/js/nodeDrawer.js
+++ /dev/null
@@ -1,585 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  const shapes = {
-    cloud: ' M 79.72 49.60 C 86.00 37.29 98.57 29.01 111.96 26.42 C 124.27 24.11 137.53 26.15 148.18 32.90 C 158.08 38.78 165.39 48.87 167.65 60.20 C 176.20 57.90 185.14 56.01 194.00 57.73 C 206.08 59.59 217.92 66.01 224.37 76.66 C 227.51 81.54 228.85 87.33 229.23 93.06 C 237.59 93.33 246.22 95.10 253.04 100.19 C 256.69 103.13 259.87 107.67 258.91 112.59 C 257.95 118.43 252.78 122.38 247.78 124.82 C 235.27 130.43 220.23 130.09 207.98 123.93 C 199.33 127.88 189.76 129.43 180.30 128.57 C 173.70 139.92 161.70 147.65 148.86 149.93 C 133.10 153.26 116.06 148.15 104.42 137.08 C 92.98 143.04 78.96 143.87 66.97 139.04 C 57.75 135.41 49.70 128.00 46.60 118.43 C 43.87 109.95 45.81 100.29 51.30 93.32 C 57.38 85.18 67.10 80.44 76.99 78.89 C 74.38 69.20 74.87 58.52 79.72 49.60 Z'
-  }
-
-  var computeNodeId = 0;
-  var instanceId = 0;
-
-  angular.module('xos.diagnostic')
-  .service('NodeDrawer', function(d3, serviceTopologyConfig, RackHelper, _){
-
-    var _this = this;
-
-    this.addNetworks = (nodes) => {
-
-      // clean childs
-      nodes.selectAll('*').remove();
-
-      nodes.append('path')
-      .attr({
-        d: shapes.cloud,
-        transform: 'translate(-100, -72), scale(0.7)',
-        class: 'cloud'
-      });
-
-      nodes.append('text')
-      .attr({
-        'text-anchor': 'middle',
-        y: -5,
-        x: 5,
-      })
-      .text(d => d.name)
-
-      nodes.append('text')
-      .attr({
-        'text-anchor': 'middle',
-        y: 8,
-        x: 5,
-        class: 'small'
-      })
-      .text(d => d.subtitle)
-
-      nodes.each(function(n){
-        let currentNode = d3.select(this);
-        // cicle trouch node to add Tags and Public IP
-        if(n.name === 'LAN-Side' && angular.isDefined(n.subscriberTag)){
-          currentNode.append('text')
-          .attr({
-            'text-anchor': 'middle',
-            y: 50
-          })
-          .text(() => `C-Tag: ${n.subscriberTag.cTag}`);
-
-          currentNode.append('text')
-          .attr({
-            'text-anchor': 'middle',
-            y: 70
-          })
-          .text(() => `S-Tag: ${n.subscriberTag.sTag}`);
-        }
-
-        if(n.name === 'WAN-Side' && angular.isDefined(n.subscriberIP)){
-          currentNode.append('text')
-          .attr({
-            'text-anchor': 'middle',
-            y: 50
-          })
-          .text(() => `Public IP: ${n.subscriberIP}`);
-        }
-      });
-    }
-
-    this.addRack = (nodes) => {
-
-      // loop because of D3
-      // rack will be only one
-      nodes.each(d => {
-        let [w, h] = RackHelper.getRackSize(d.computeNodes);
-
-        // TODO update instead of delete and redraw
-        nodes.select('g').remove();
-
-        let rack = nodes
-        .append('g');
-
-        rack
-        .attr({
-          transform: `translate(0,0)`
-        })
-        .transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr({
-          transform: () => `translate(${- (w / 2)}, ${- (h / 2)})`
-        });
-
-        rack
-        .append('rect')
-        .attr({
-          width: 0,
-          height: 0
-        })
-        .transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr({
-          width: w,
-          height: h
-        });
-
-        rack.append('text')
-        .attr({
-          'text-anchor': 'middle',
-          y: - 10,
-          x: w / 2,
-          opacity: 0
-        })
-        .text(d => d.name)
-        .transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr({
-          opacity: 1
-        })
-
-        this.drawComputeNodes(rack, d.computeNodes);
-
-      });
-
-    };
-
-    this.drawComputeNodes = (container, nodes) => {
-      
-      let elements = container.selectAll('.compute-nodes')
-      .data(nodes, d => {
-        if(!angular.isString(d.d3Id)){
-          d.d3Id = `compute-node-${++computeNodeId}`;
-        }
-        return d.d3Id;
-      });
-
-      let {width, height} = container.node().getBoundingClientRect();
-
-      var nodeContainer = elements.enter().append('g');
-
-      nodeContainer
-      .attr({
-        transform: `translate(${width / 2}, ${ height / 2})`,
-        class: 'compute-node',
-      })
-      .transition()
-      .duration(serviceTopologyConfig.duration)
-      .attr({
-        transform: (d) => `translate(${RackHelper.getComputeNodePosition(nodes, d.d3Id.replace('compute-node-', '') - 1)})`
-      });
-
-      nodeContainer.append('rect')
-      .attr({
-        width: 0,
-        height: 0
-      })
-      .transition()
-      .duration(serviceTopologyConfig.duration)
-      .attr({
-        width: d => RackHelper.getComputeNodeSize(d.instances)[0],
-        height: d => RackHelper.getComputeNodeSize(d.instances)[1],
-      });
-
-      nodeContainer.append('text')
-      .attr({
-        'text-anchor': 'start',
-        y: 17, //FIXME
-        x: 10, //FIXME
-        opacity: 0
-      })
-      .text(d => d.humanReadableName.split('.')[0])
-      .transition()
-      .duration(serviceTopologyConfig.duration)
-      .attr({
-        opacity: 1
-      })
-
-      // if there are Compute Nodes
-      if(nodeContainer.length > 0){
-        // draw instances for each compute node
-        nodeContainer.each(function(a){
-          _this.drawInstances(d3.select(this), a.instances);
-        })
-      }
-
-    };
-
-    // NOTE Stripping unuseful names to shorten labels.
-    // This is not elegant
-    const formatInstanceName = (name) => {
-      return name
-        .replace('app_', '')
-        .replace('service_', '')
-        // .replace('ovs_', '')
-        .replace('mysite_', '')
-        .replace('_instance', '');
-    };
-
-    const getInstanceStatusColor = (instance) => {
-      function startWith(val, string){
-        return string.substring(0, val.length) === val;
-      }
-
-      if(startWith('0 - ', instance.backend_status)){
-        return 'provisioning';
-      }
-      if(startWith('1 - ', instance.backend_status)){
-        return 'good';
-      }
-      if(startWith('2 - ', instance.backend_status)){
-        return 'bad';
-      }
-      else {
-        return '';
-      }
-    };
-
-    const drawContainer = (container, docker) => {
-
-      const containerBox = container.append('g')
-        .attr({
-          class: 'container',
-          transform: `translate(${serviceTopologyConfig.instance.margin}, 115)`
-        });
-
-      containerBox.append('rect')
-        .attr({
-          width: 250 - (serviceTopologyConfig.container.margin * 2),
-          height: serviceTopologyConfig.container.height,
-        });
-
-      containerBox.append('text')
-        .attr({
-          y: 20,
-          x: serviceTopologyConfig.instance.margin,
-          class: 'name'
-        })
-        .text(docker.name)
-
-      // add stats
-      const interestingMeters = ['memory', 'memory.usage', 'cpu_util'];
-
-      interestingMeters.forEach((m, i) => {
-        const meter = _.find(docker.stats, {meter: m});
-        // if there is no meter stats skip rendering
-        if(!angular.isDefined(meter)){
-          return;
-        }
-        containerBox.append('text')
-        .attr({
-          y: 40 + (i * 15),
-          x: serviceTopologyConfig.instance.margin,
-          opacity: 0
-        })
-        .text(`${meter.description}: ${Math.round(meter.value)} ${meter.unit}`)
-        .transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr({
-          opacity: 1
-        });
-      });
-
-      // add port stats
-      const ports = ['eth0', 'eth1'];
-      const interestingPortMeters = [
-        {
-          meter: 'network.incoming.bytes.rate',
-          label: 'Incoming'
-        },
-        {
-          meter: 'network.outgoing.bytes.rate',
-          label: 'Outgoing'
-        }
-      ];
-      
-      ports.forEach((p, j) => {
-
-        // if there are no port stats skip rendering
-        if(docker.port[p].length === 0){
-          return;
-        }
-
-        containerBox.append('text')
-        .attr({
-          y: 90,
-          x: serviceTopologyConfig.instance.margin + (120 * j),
-          class: 'name'
-        })
-        .text(`${docker.name}-${p}`)
-
-        interestingPortMeters.forEach((m, i) => {
-
-          const meter = _.find(docker.port[p], {meter: m.meter});
-          // if there is no meter stats skip rendering
-          if(!angular.isDefined(meter)){
-            return;
-          }
-          containerBox.append('text')
-          .attr({
-            y: 105 + (i * 15),
-            x: serviceTopologyConfig.instance.margin + (120 * j),
-            opacity: 0
-          })
-          .text(`${m.label}: ${Math.round(meter.value)} ${meter.unit}`)
-          .transition()
-          .duration(serviceTopologyConfig.duration)
-          .attr({
-            opacity: 1
-          });
-        });
-      });
-    }
-
-    const showInstanceStats = (container, instance) => {
-
-      // NOTE this should be dinamically positioned
-      // base on the number of element present
-
-      // fake the position
-      let translation = {
-        'mysite_vsg-1': '200, -120',
-        'mysite_vsg-2': '-300, 30',
-        'mysite_vsg-3': '-300, -250',
-      };
-
-      const statsContainer = container.append('g')
-        .attr({
-          transform: `translate(${translation[instance.humanReadableName] || translation['mysite_vsg-1']})`,
-          class: 'stats-container'
-        })
-        .on('click', function(d) {
-          // toggling visisbility
-          d.fade = !d.fade;
-          let opacity;
-          if(d.fade){
-            opacity = 0.1;
-          }
-          else{
-            opacity = 1;
-          }
-
-          d3.select(this)
-          .transition()
-          .duration(serviceTopologyConfig.duration)
-          .attr({
-            opacity: opacity
-          })
-        });
-
-      let lines = {
-        'mysite_vsg-1': {
-          x1: -160,
-          y1: 120,
-          x2: 0,
-          y2: 50,
-        },
-        'mysite_vsg-2': {
-          x1: 250,
-          y1: 50,
-          x2: 300,
-          y2: -10
-        },
-        'mysite_vsg-3': {
-          x1: 250,
-          y1: 50,
-          x2: 300,
-          y2: 270
-        }
-      }
-
-      statsContainer.append('line')
-        .attr({
-          x1: d => lines[d.humanReadableName].x1 || lines['mysite_vsg-1'].x1,
-          y1: d => lines[d.humanReadableName].y1 || lines['mysite_vsg-1'].y1,
-          x2: d => lines[d.humanReadableName].x2 || lines['mysite_vsg-1'].x2,
-          y2: d => lines[d.humanReadableName].y2 || lines['mysite_vsg-1'].y2,
-          stroke: 'black',
-          opacity: 0
-        })
-        .transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr({
-          opacity: 1
-        })
-
-      // NOTE rect should be dinamically sized base on the presence of a container
-      let statsHeight = 110;
-      let statsWidth = 250;
-
-      if (instance.container){
-        statsHeight += serviceTopologyConfig.container.height + (serviceTopologyConfig.container.margin * 2)
-      }
-
-      const statsVignette = statsContainer.append('rect')
-        .attr({
-          width: statsWidth,
-          height: statsHeight,
-          opacity: 0
-        })
-        .transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr({
-          opacity: 1
-        });
-
-
-      // add instance info
-      statsContainer.append('text')
-        .attr({
-          y: 15,
-          x: serviceTopologyConfig.instance.margin,
-          class: 'name',
-          opacity: 0
-        })
-        .text(instance.humanReadableName)
-        .transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr({
-          opacity: 1
-        })
-
-      statsContainer.append('text')
-        .attr({
-          y: 30,
-          x: serviceTopologyConfig.instance.margin,
-          class: 'ip',
-          opacity: 0
-        })
-        .text(instance.ip)
-        .transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr({
-          opacity: 1
-        })
-
-      // add stats
-      const interestingMeters = ['memory', 'memory.usage', 'cpu', 'cpu_util'];
-
-      interestingMeters.forEach((m, i) => {
-        const meter = _.find(instance.stats, {meter: m});
-
-        if(meter){
-          
-          statsContainer.append('text')
-          .attr({
-            y: 55 + (i * 15),
-            x: serviceTopologyConfig.instance.margin,
-            opacity: 0
-          })
-          .text(`${meter.description}: ${Math.round(meter.value)} ${meter.unit}`)
-          .transition()
-          .duration(serviceTopologyConfig.duration)
-          .attr({
-            opacity: 1
-          });
-        }
-
-      });
-
-      if(instance.container){
-        // draw container
-        drawContainer(statsContainer, instance.container);
-      }
-
-    };
-
-    this.drawInstances = (container, instances) => {
-      
-      // TODO check for stats field in instance and draw popup
-
-      let {width, height} = container.node().getBoundingClientRect();
-
-      let elements = container.selectAll('.instances')
-      .data(instances, d => angular.isString(d.d3Id) ? d.d3Id : d.d3Id = `instance-${++instanceId}`)
-
-      var instanceContainer = elements.enter().append('g');
-
-      instanceContainer
-      .attr({
-        transform: `translate(${width / 2}, ${ height / 2})`,
-        class: d => `instance ${d.selected ? 'active' : ''} ${getInstanceStatusColor(d)}`,
-      })
-      .transition()
-      .duration(serviceTopologyConfig.duration)
-      .attr({
-        transform: (d, i) => `translate(${RackHelper.getInstancePosition(i)})`
-      });
-
-      instanceContainer.append('rect')
-      .attr({
-        width: 0,
-        height: 0
-      })
-      .transition()
-      .duration(serviceTopologyConfig.duration)
-      .attr({
-        width: serviceTopologyConfig.instance.width,
-        height: serviceTopologyConfig.instance.height
-      });
-
-      instanceContainer.append('text')
-      .attr({
-        'text-anchor': 'middle',
-        y: 23, //FIXME
-        x: 40, //FIXME
-        opacity: 0
-      })
-      .text(d => formatInstanceName(d.humanReadableName))
-      .transition()
-      .duration(serviceTopologyConfig.duration)
-      .attr({
-        opacity: 1
-      });
-
-      // if stats are attached and instance is active,
-      // draw stats
-      instanceContainer.each(function(instance, i){
-
-        const container = d3.select(this);
-
-        if(angular.isDefined(instance.stats) && instance.selected){
-          showInstanceStats(container, instance, i);
-        }
-      });
-
-      // instanceContainer
-      // .on('click', function(d){
-      //   console.log(`Draw vignette with stats for instance: ${d.name}`);
-      // });
-    };
-
-    this.addPhisical = (nodes) => {
-
-      nodes.select('rect').remove();
-      nodes.select('text').remove();
-
-      nodes.append('rect')
-      .attr(serviceTopologyConfig.square);
-
-      nodes.append('text')
-      .attr({
-        'text-anchor': 'middle',
-        y: serviceTopologyConfig.square.y - 10
-      })
-      .text(d => {
-        return d.name || d.humanReadableName
-      });
-    }
-
-    this.addDevice = (nodes) => {
-      nodes.append('circle')
-      .attr(serviceTopologyConfig.circle);
-
-      nodes.append('text')
-      .attr({
-        'text-anchor': 'end',
-        x: - serviceTopologyConfig.circle.r - 10,
-        y: serviceTopologyConfig.circle.r / 2
-      })
-      .text(d => d.name || d.mac); 
-    }
-  });
-})();
diff --git a/views/ngXosViews/diagnostic/src/js/rackHelper.js b/views/ngXosViews/diagnostic/src/js/rackHelper.js
deleted file mode 100644
index 2802943..0000000
--- a/views/ngXosViews/diagnostic/src/js/rackHelper.js
+++ /dev/null
@@ -1,103 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  angular.module('xos.diagnostic')
-  .service('RackHelper', function(serviceTopologyConfig, _){
-
-    this.getComputeNodeLabelSize = () => {
-      return serviceTopologyConfig.computeNode.labelHeight + (serviceTopologyConfig.instance.margin * 2)
-    }
-
-    /**
-    * Given a list of instance should get the Compute Node size.
-    * They are placed in rows of 2 with 5px margin on each side.
-    */
-   
-    this.getComputeNodeSize = _.memoize((instances) => {
-      const width = (serviceTopologyConfig.instance.margin * 3) + (serviceTopologyConfig.instance.width *2);
-
-      const rows = Math.round(instances.length / 2);
-
-      const labelSpace = this.getComputeNodeLabelSize();
-
-      const height = (serviceTopologyConfig.instance.height * rows) + (serviceTopologyConfig.instance.margin * (rows + 1)) + labelSpace;
-
-      return [width, height];
-    });
-
-    /**
-    * Give a list on Compute Node should calculate the Rack Size.
-    * Compute nodes are placed in a single column with 5px margin on each side.
-    */
-    this.getRackSize = (nodes) => {
-
-      let width = 0;
-      let height = serviceTopologyConfig.computeNode.margin;
-
-      _.forEach(nodes, (node) => {
-        let [nodeWidth, nodeHeight] = this.getComputeNodeSize(node.instances);
-
-        width = nodeWidth + (serviceTopologyConfig.computeNode.margin * 2);
-        height += (nodeHeight + serviceTopologyConfig.computeNode.margin);
-      });
-
-      return [width, height];
-    };
-
-    /**
-    * Given an instance index, return the coordinates
-    */
-   
-    this.getInstancePosition = (position) => {
-      const row = Math.floor(position / 2);
-      const column = (position % 2) ? 1 : 0;
-
-      // add ComputeNode label size
-      const labelSpace = this.getComputeNodeLabelSize();
-
-      // x = margin + (width * column) + ( maring * column)
-      const x = serviceTopologyConfig.instance.margin + (serviceTopologyConfig.instance.width * column) + (serviceTopologyConfig.instance.margin * column);
-
-      // y = label + margin + (height * row) + ( maring * row)
-      const y = labelSpace + serviceTopologyConfig.instance.margin + (serviceTopologyConfig.instance.height * row) + (serviceTopologyConfig.instance.margin * row);
-      return [x, y];
-    };
-
-    /**
-    * Given an Compute Node index, return the coordinates
-    */
-
-    this.getComputeNodePosition = (nodes, position) => {
-
-      const x = serviceTopologyConfig.computeNode.margin;
-
-      let previousElEight = _.reduce(nodes.slice(0, position), (val, node) => {
-        return val + this.getComputeNodeSize(node.instances)[1]
-      }, 0);
-
-      const y =
-        serviceTopologyConfig.computeNode.margin
-        + (serviceTopologyConfig.computeNode.margin * position)
-        + previousElEight;
-
-      return [x, y];
-    };
-
-  });
-})();
diff --git a/views/ngXosViews/diagnostic/src/js/rest_services.js b/views/ngXosViews/diagnostic/src/js/rest_services.js
deleted file mode 100644
index 7287693..0000000
--- a/views/ngXosViews/diagnostic/src/js/rest_services.js
+++ /dev/null
@@ -1,429 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.diagnostic')
-  .service('Services', function($resource){
-    return $resource('/api/core/services/:id', {id: '@id'});
-  })
-  .service('Tenant', function($resource){
-    return $resource('/api/core/tenants', {id: '@id'}, {
-      queryVsgInstances: {
-        method: 'GET',
-        isArray: true,
-        interceptor: {
-          response: (res) => {
-
-            // NOTE
-            // Note that VCPETenant is now VSGTenant.
-
-            let instances = [];
-
-            angular.forEach(res.data, (tenant) => {
-              let info = JSON.parse(tenant.service_specific_attribute);
-              if(info && info.instance_id){
-                instances.push(info.instance_id);
-              }
-            });
-
-            return instances;
-          }
-        }
-      },
-      getSubscriberTag: {
-        method: 'GET',
-        isArray: true,
-        interceptor: {
-          response: (res) => {
-            // NOTE we should receive only one vOLT tenant here
-            return JSON.parse(res.data[0].service_specific_attribute);
-          }
-        }
-      }
-    });
-  })
-  .service('Ceilometer', function($http, $q, Instances) {
-
-    /**
-    * Get stats for a single instance
-    */
-    this.getInstanceStats = (instanceUuid) => {
-      let deferred = $q.defer();
-
-      $http.get('/xoslib/xos-instance-statistics', {params: {'instance-uuid': instanceUuid}})
-      .then((res) => {
-        deferred.resolve(res.data);
-      })
-      .catch((e) => {
-        deferred.reject(e);
-      })
-
-      return deferred.promise;
-    };
-
-    /**
-    * Collect stats for an array of instances
-    */
-    this.getInstancesStats = (instances) => {
-      let deferred = $q.defer();
-      let instancePromises = [];
-      let instanceList = [];
-
-      // retrieve instance details
-      instances.forEach((instanceId) => {
-        instancePromises.push(Instances.get({id: instanceId}).$promise);
-      });
-
-      // get all instance data
-      $q.all(instancePromises)
-      .then((_instanceList) => {
-        instanceList = _instanceList;
-        let promises = [];
-        // foreach instance query stats
-        instanceList.forEach((instance) => {
-          promises.push(this.getInstanceStats(instance.instance_uuid));
-        });
-        return $q.all(promises);
-      })
-      .then(stats => {
-        // augment instance with stats information
-        instanceList.map((instance, i) => {
-          instance.stats = stats[i];
-        });
-        deferred.resolve(instanceList);
-      })
-      .catch(deferred.reject);
-
-      return deferred.promise;
-    };
-
-    this.getContainerStats = (containerName) => {
-      const deferred = $q.defer();
-
-      let res = {};
-
-      $http.get('/xoslib/meterstatistics', {params: {'resource': containerName}})
-      .then((containerStats) => {
-        res.stats = containerStats.data;
-        return $http.get('/xoslib/meterstatistics', {params: {'resource': `${containerName}-eth0`}})
-      })
-      .then((portStats) => {
-        res.port = {
-          eth0: portStats.data
-        };
-        return $http.get('/xoslib/meterstatistics', {params: {'resource': `${containerName}-eth1`}})
-      })
-      .then((portStats) => {
-        res.port.eth1 = portStats.data;
-        deferred.resolve(res);
-      })
-      .catch((e) => {
-        deferred.reject(e);
-      })
-
-      return deferred.promise;
-    }
-  })
-  .service('Slice', function($resource){
-    return $resource('/api/core/slices', {id: '@id'});
-  })
-  .service('Instances', function($resource){
-    return $resource('/api/core/instances/:id', {id: '@id'});
-  })
-  .service('Node', function($resource, $q, Instances){
-    return $resource('/api/core/nodes', {id: '@id'}, {
-      queryWithInstances: {
-        method: 'GET',
-        isArray: true,
-        interceptor: {
-          response: function(res){
-
-            // TODO update the API to include instances in nodes
-            // http://stackoverflow.com/questions/14573102/how-do-i-include-related-model-fields-using-django-rest-framework
-
-            const deferred = $q.defer();
-
-            let requests = [];
-
-            angular.forEach(res.data, (node) => {
-              requests.push(Instances.query({node: node.id}).$promise);
-            })
-
-            $q.all(requests)
-            .then((list) => {
-              res.data.map((node, i) => {
-                node.instances = list[i];
-                return node;
-              });
-              deferred.resolve(res.data);
-            })
-
-            return deferred.promise;
-          }
-        }
-      }
-    });
-  })
-  // TODO extend the resource in xosLib
-  .service('SubscribersWithDevice', function($http, $q, Subscribers){
-
-    this.get = (s) => {
-      const d = $q.defer();
-      let subscriber;
-
-      Subscribers.get({id: s.id}).$promise
-      .then(res => {
-        subscriber = res;
-        return $http.get(`/api/tenant/cord/subscriber/${subscriber.id}/devices/`);
-      })
-      .then(res => {
-        res.data.map(d => d.type = 'device');
-        subscriber.devices = res.data;
-        subscriber.type = 'subscriber';
-        d.resolve(subscriber);
-      })
-      .catch(err => {
-        d.reject(err);
-      });
-      return {$promise: d.promise};
-    };
-
-  })
-  .service('ServiceRelation', function($q, _, Services, Tenant, Slice, Instances){
-
-    // count the mas depth of an object
-    const depthOf = (obj) => {
-      var depth = 0;
-      if (obj.children) {
-        obj.children.forEach(function (d) {
-          var tmpDepth = depthOf(d);
-          if (tmpDepth > depth) {
-            depth = tmpDepth
-          }
-        })
-      }
-      return 1 + depth
-    };
-
-    // find all the relation defined for a given root
-    const findLevelRelation = (tenants, rootId) => {
-      return _.filter(tenants, service => {
-        return service.subscriber_service === rootId;
-      });
-    };
-
-    const findSpecificInformation = (tenants, rootId) => {
-      var tenants = _.filter(tenants, service => {
-        return service.provider_service === rootId && service.subscriber_tenant;
-      });
-
-      var info;
-
-      tenants.forEach((tenant) => {
-        if(tenant.service_specific_attribute){
-          info = JSON.parse(tenant.service_specific_attribute);
-        }
-      });
-
-      return info;
-    };
-
-    // find all the service defined by a given array of relations
-    const findLevelServices = (relations, services) => {
-      const levelServices = [];
-      _.forEach(relations, (tenant) => {
-        var service = _.find(services, {id: tenant.provider_service});
-        levelServices.push(service);
-      });
-      return levelServices;
-    };
-
-    const buildLevel = (tenants, services, rootService, rootTenant, parentName = null) => {
-
-      // build an array of unlinked services
-      // these are the services that should still placed in the tree
-      var unlinkedServices = _.difference(services, [rootService]);
-
-      // find all relations relative to this rootElement
-      const levelRelation = findLevelRelation(tenants, rootService.id);
-      // find all items related to rootElement
-      const levelServices = findLevelServices(levelRelation, services);
-
-      // remove this item from the list (performance
-      unlinkedServices = _.difference(unlinkedServices, levelServices);
-
-      rootService.service_specific_attribute = findSpecificInformation(tenants, rootService.id);
-
-      if(rootService.humanReadableName === 'service_vbng'){
-        rootService.humanReadableName = 'service_vrouter'
-      }
-
-      const tree = {
-        name: rootService.humanReadableName,
-        parent: parentName,
-        type: 'service',
-        service: rootService,
-        tenant: rootTenant,
-        children: []
-      };
-
-      _.forEach(levelServices, (service) => {
-        if(service.humanReadableName === 'service_ONOS_vBNG' || service.humanReadableName === 'service_ONOS_vOLT'){
-          // remove ONOSes from service chart
-          return;
-        }
-        let tenant = _.find(tenants, {subscriber_tenant: rootTenant.id, provider_service: service.id});
-        tree.children.push(buildLevel(tenants, unlinkedServices, service, tenant, rootService.humanReadableName));
-      });
-
-      // if it is the last element append internet
-      if(tree.children.length === 0){
-        tree.children.push({
-          name: 'Router',
-          type: 'router',
-          children: []
-        });
-      }
-
-      return tree;
-    };
-
-    const buildSubscriberServiceTree = (services, tenants, subscriber = {id: 1, name: 'fakeSubs'}) => {
-
-      // find the root service
-      // it is the one attached to subsriber_root
-      // as now we have only one root so this can work
-      const rootTenant = _.find(tenants, {subscriber_root: subscriber.id});
-      const rootService = _.find(services, {id: rootTenant.provider_service});
-
-      const serviceTree = buildLevel(tenants, services, rootService, rootTenant);
-
-      return {
-        name: subscriber.name || subscriber.humanReadableName,
-        parent: null,
-        type: 'subscriber',
-        children: [serviceTree]
-      };
-
-    };
-
-    // applying domain knowledge to build the global service tree
-    const buildServiceTree = (services, tenants) => {
-
-      // TODO refactor
-      const buildChild = (services, tenants, currentService) => {
-
-        if(currentService.humanReadableName === 'service_vbng'){
-          currentService.humanReadableName = 'service_vrouter'
-        }
-
-        const response = {
-          type: 'service',
-          name: currentService.humanReadableName,
-          service: currentService
-        };
-
-        let tenant = _.find(tenants, {subscriber_service: currentService.id});
-        if(tenant){
-          let next = _.find(services, {id: tenant.provider_service});
-          response.children = [buildChild(services, tenants, next)];
-        }
-        else {
-          response.children = [
-            {
-              name: 'Router',
-              type: 'router',
-              children: []
-            }
-          ]
-        }
-        delete currentService.id; // conflict with d3
-        return response;
-      }
-
-      let baseService = _.find(services, {id: 3});
-      
-      if(!angular.isDefined(baseService)){
-        console.error('Missing Base service!');
-        return;
-      }
-
-      const baseData = {
-        name: 'Subscriber',
-        type: 'subscriber',
-        parent: null,
-        children: [buildChild(services, tenants, baseService)]
-      };
-      return baseData;
-    };
-
-    const getBySubscriber = (subscriber) => {
-      var deferred = $q.defer();
-      var services, tenants;
-      Services.query().$promise
-      .then((res) => {
-        services = res;
-        return Tenant.query().$promise;
-      })
-      .then((res) => {
-        tenants = res;
-        deferred.resolve(buildSubscriberServiceTree(services, tenants, subscriber));
-      })
-      .catch((e) => {
-        throw new Error(e);
-      });
-
-      return deferred.promise;
-    };
-
-    const get = () => {
-      var deferred = $q.defer();
-      var services, tenants;
-      Services.query().$promise
-      .then((res) => {
-        services = res;
-        return Tenant.query({kind: 'coarse'}).$promise;
-      })
-      .then((res) => {
-        tenants = res;
-        deferred.resolve(buildServiceTree(services, tenants));
-      })
-      .catch((e) => {
-        throw new Error(e);
-      });
-
-      return deferred.promise;
-    }
-
-    // export APIs
-    return {
-      get: get,
-      buildServiceTree: buildServiceTree,
-      getBySubscriber: getBySubscriber,
-      buildLevel: buildLevel,
-      buildSubscriberServiceTree: buildSubscriberServiceTree,
-      findLevelRelation: findLevelRelation,
-      findLevelServices: findLevelServices,
-      depthOf: depthOf,
-      findSpecificInformation: findSpecificInformation
-    }
-  });
-
-}());
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/js/serviceTopology.js b/views/ngXosViews/diagnostic/src/js/serviceTopology.js
deleted file mode 100644
index 76368c1..0000000
--- a/views/ngXosViews/diagnostic/src/js/serviceTopology.js
+++ /dev/null
@@ -1,87 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.diagnostic')
-  .directive('serviceTopology', function(){
-    return {
-      restrict: 'E',
-      scope: {
-        serviceChain: '='
-      },
-      bindToController: true,
-      controllerAs: 'vm',
-      template: '',
-      controller: function($element, $window, $scope, d3, serviceTopologyConfig, ServiceRelation, Instances, Subscribers, ServiceTopologyHelper){
-
-        const el = $element[0];
-
-        d3.select(window)
-        .on('resize.service', () => {
-          draw(this.serviceChain);
-        });
-
-        var root, svg;
-
-        const draw = (tree) => {
-
-          if(!tree){
-            console.error('Tree is missing');
-            return;
-          }
-
-          // TODO update instead clear and redraw
-
-          // clean
-          d3.select($element[0]).select('svg').remove();
-
-
-          const width = el.clientWidth - (serviceTopologyConfig.widthMargin * 2);
-          const height = el.clientHeight - (serviceTopologyConfig.heightMargin * 2);
-
-          const treeLayout = d3.layout.tree()
-            .size([height, width]);
-
-          svg = d3.select($element[0])
-            .append('svg')
-            .style('width', `${el.clientWidth}px`)
-            .style('height', `${el.clientHeight}px`)
-
-          const treeContainer = svg.append('g')
-            .attr('transform', `translate(${serviceTopologyConfig.widthMargin * 2},${serviceTopologyConfig.heightMargin})`);
-
-          root = tree;
-          root.x0 = height / 2;
-          root.y0 = width / 2;
-
-          // ServiceTopologyHelper.drawLegend(svg);
-          ServiceTopologyHelper.updateTree(treeContainer, treeLayout, root, el);
-        };
-        
-        $scope.$watch(() => this.serviceChain, (chain) => {
-          if(angular.isDefined(chain)){
-            draw(chain);
-          }
-        });
-      }
-    }
-  });
-
-}());
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/js/serviceTopologyHelper.js b/views/ngXosViews/diagnostic/src/js/serviceTopologyHelper.js
deleted file mode 100644
index ecb8ade..0000000
--- a/views/ngXosViews/diagnostic/src/js/serviceTopologyHelper.js
+++ /dev/null
@@ -1,196 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.diagnostic')
-  .service('ServiceTopologyHelper', function($rootScope, $window, $log, _, ServiceRelation, serviceTopologyConfig, d3){
-
-    var _svg, _layout, _source, _el;
-
-    var i = 0;
-
-    // given a canvas, a layout and a data source, draw a tree layout
-    const updateTree = (svg, layout, source, el = _el) => {
-      if(el){
-        _el = el;
-      }
-      
-      let targetWidth = _el.clientWidth - serviceTopologyConfig.widthMargin * 2;
-
-      //cache data
-      _svg = svg;
-      _layout = layout;
-      _source = source;
-
-      const maxDepth = ServiceRelation.depthOf(source);
-
-      const diagonal = d3.svg.diagonal()
-        .projection(d => [d.y, d.x]);
-
-      // Compute the new tree layout.
-      var nodes = layout.nodes(source).reverse(),
-        links = layout.links(nodes);
-
-      // Normalize for fixed-depth.
-      nodes.forEach(function(d) {
-        // position the child node horizontally
-        const step = ((targetWidth - (serviceTopologyConfig.widthMargin * 2)) / (maxDepth - 1));
-        d.y = d.depth * step;
-      });
-
-      // Update the nodes…
-      var node = svg.selectAll('g.node')
-        .data(nodes, function(d) { return d.id || (d.id = ++i); });
-
-      // Enter any new nodes at the parent's previous position.
-      var nodeEnter = node.enter().append('g')
-        .attr({
-          class: d => {
-            return `node ${d.type}`
-          },
-          transform: d => (d.x && d.y) ? `translate(${d.y}, ${d.x})` : `translate(${source.y0}, ${source.x0})`
-        });
-
-      const subscriberNodes = nodeEnter.filter('.subscriber');
-      const internetNodes = nodeEnter.filter('.router');
-      const serviceNodes = nodeEnter.filter('.service');
-
-      subscriberNodes.append('rect')
-        .attr(serviceTopologyConfig.square)
-        // add event listener to subscriber
-        .on('click', () => {
-          $rootScope.$emit('subscriber.modal.open');
-        });
-
-      internetNodes.append('rect')
-        .attr(serviceTopologyConfig.square);
-
-      serviceNodes.append('circle')
-        .attr('r', 1e-6)
-        .style('fill', d => d._children ? 'lightsteelblue' : '#fff')
-        .on('click', serviceClick);
-
-      nodeEnter.append('text')
-        .attr({
-          x: d => d.children ? -serviceTopologyConfig.circle.selectedRadius -5 : serviceTopologyConfig.circle.selectedRadius + 5,
-          dy: '.35em',
-          y: d => {
-            if (d.children && d.parent){
-              return '-5';
-            }
-          },
-          transform: d => {
-            if (d.children && d.parent){
-              if(d.parent.x < d.x){
-                return 'rotate(-30)';
-              }
-              return 'rotate(30)';
-            }
-          },
-          'text-anchor': d => d.children ? 'end' : 'start'
-        })
-        .text(d => d.name)
-        .style('fill-opacity', 1e-6);
-
-      // Transition nodes to their new position.
-      var nodeUpdate = node.transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr({
-          'transform': d => `translate(${d.y},${d.x})`
-        });
-
-      nodeUpdate.select('circle')
-        .attr('r', d => {
-          return d.selected ? serviceTopologyConfig.circle.selectedRadius : serviceTopologyConfig.circle.radius
-        })
-        .style('fill', d => d.selected ? 'lightsteelblue' : '#fff');
-
-      nodeUpdate.select('text')
-        .style('fill-opacity', 1);
-
-      // Transition exiting nodes to the parent's new position.
-      var nodeExit = node.exit().transition()
-        .duration(serviceTopologyConfig.duration)
-        .remove();
-
-      nodeExit.select('circle')
-        .attr('r', 1e-6);
-
-      nodeExit.select('text')
-        .style('fill-opacity', 1e-6);
-
-      // Update the links…
-      var link = svg.selectAll('path.link')
-        .data(links, function(d) { return d.target.id; });
-
-      // Enter any new links at the parent's previous position.
-      link.enter().insert('path', 'g')
-        .attr('class', d => `link ${d.target.type} ${d.target.active ? '' : 'active'}`)
-        .attr('d', function(d) {
-          var o = {x: source.x0, y: source.y0};
-          return diagonal({source: o, target: o});
-        });
-
-      // Transition links to their new position.
-      link.transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr('d', diagonal);
-
-      // Transition exiting nodes to the parent's new position.
-      link.exit().transition()
-        .duration(serviceTopologyConfig.duration)
-        .attr('d', function(d) {
-          var o = {x: source.x, y: source.y};
-          return diagonal({source: o, target: o});
-        })
-        .remove();
-
-      // Stash the old positions for transition.
-      nodes.forEach(function(d) {
-        d.x0 = d.x;
-        d.y0 = d.y;
-      });
-    };
-
-    const serviceClick = function(d) {
-
-      // if was selected
-      if(d.selected){
-        d.selected = !d.selected;
-        $rootScope.$emit('instance.detail.hide', {});
-        return updateTree(_svg, _layout, _source);
-      }
-      
-      $rootScope.$emit('instance.detail', {name: d.name, service: d.service, tenant: d.tenant});
-
-      // unselect all
-      _svg.selectAll('circle')
-      .each(d => d.selected = false);
-
-      // toggling selected status
-      d.selected = !d.selected;
-
-      updateTree(_svg, _layout, _source);
-    };
-
-    this.updateTree = updateTree;
-  });
-
-}());
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/js/subscriber-modal.js b/views/ngXosViews/diagnostic/src/js/subscriber-modal.js
deleted file mode 100644
index c681f93..0000000
--- a/views/ngXosViews/diagnostic/src/js/subscriber-modal.js
+++ /dev/null
@@ -1,105 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-  angular.module('xos.diagnostic')
-  .directive('selectSubscriberModal', function(){
-    return {
-      scope: {
-        subscribers: '=',
-        open: '='
-      },
-      bindToController: true,
-      restrict: 'E',
-      templateUrl: 'templates/select-subscriber-modal.tpl.html',
-      controllerAs: 'vm',
-      controller: function($rootScope){
-
-        this.close = () => {
-          this.open = false;
-        };
-
-        this.select = (subscriber) => {
-          $rootScope.$emit('subscriber.selected', subscriber);
-          this.close();
-        };
-      }
-    };
-  })
-  .directive('subscriberStatusModal', function(){
-    return {
-      scope: {
-        open: '=',
-        subscriber: '='
-      },
-      bindToController: true,
-      restrict: 'E',
-      templateUrl: 'templates/subscriber-status-modal.tpl.html',
-      controllerAs: 'vm',
-      controller: function($log, $timeout, $scope, Subscribers){
-
-        const mb = 1000000;
-
-        $scope.$watch(() => this.open, () => {
-          this.success = null;
-          this.formError = null;
-        });
-
-        $scope.$watch(() => this.subscriber, (newVal, oldVal) => {
-          if(!this.subscriber){
-            return;
-          }
-          this.subscriber.features.uplink_speed = parseInt(this.subscriber.features.uplink_speed, 10) / mb;
-          this.subscriber.features.downlink_speed = parseInt(this.subscriber.features.downlink_speed, 10) / mb;
-        });
-
-        this.close = () => {
-          this.open = false;
-        };
-
-        this.updateSubscriber = (subscriber) => {
-
-          // TODO Copy the subscriber, this will update the GUI also and we don't want
-          // TODO Change GBps to MBps
-
-          let body = angular.copy(subscriber, body);
-
-          body.features.uplink_speed = body.features.uplink_speed * mb;
-          body.features.downlink_speed = body.features.downlink_speed * mb;
-
-          // remove read only attributes
-          delete body.related;
-
-          Subscribers.update(body).$promise
-          .then((res) => {
-            this.success = 'Subscriber successfully updated!';
-          })
-          .catch((e) => {
-            this.formError = e;
-          })
-          .finally(() => {
-            $timeout(() => {
-              this.close();
-            }, 1500);
-          });
-        };
-      }
-    };
-  });
-})();
diff --git a/views/ngXosViews/diagnostic/src/sass/main.scss b/views/ngXosViews/diagnostic/src/sass/main.scss
deleted file mode 100644
index 391ad88..0000000
--- a/views/ngXosViews/diagnostic/src/sass/main.scss
+++ /dev/null
@@ -1,374 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/* CONTAINER */
-#xosDiagnostic, [ui-view] {
-    height: 100%;
-    min-height: 700px;
-    position: relative;
-}
-
-diagnostic-container .form-control.small-padding{
-  padding: 6px;
-}
-
-diagnostic-container .half-height {
-    position: relative;
-    height: 50%;
-}
-
-diagnostic-container .onethird-height {
-    position: relative;
-    height: 33%;
-    border-bottom: 1px solid #999;
-}
-
-diagnostic-container .twothird-height {
-    position: relative;
-    height: 67%;
-}
-
-diagnostic-container .subscriber-select{
-    max-width: 200px;
-    position: absolute;
-    top: 20px;
-    right: 20px;
-    z-index: 1;
-}
-
-diagnostic-container .onethird-height .well,
-diagnostic-container .twothird-height .well {
-  font-weight: bold;
-  max-width: 165px;
-  text-align: center;
-  margin-top: 15px;
-  background: #eee;
-  border-color: steelblue;
-  padding: 10px;
-}
-
-diagnostic-container .onethird-height .well.pull-right{
-  position: absolute;
-  right: 0px;
-  top: -15px;
-  cursor: pointer;
-  z-index: 200;
-}
-
-
-/* subscriber-status-modal */
-subscriber-status-modal .row + .row {
-  margin-top: 20px;
-}
-
-.half-height + .half-height {
-    border-top: 1px solid black;
-}
-
-service-topology,
-logic-topology {
-    height: 100%;
-    width: 100%;
-    display: block;
-    position: absolute;
-    top: 0;
-}
-
-logic-topology .subscriber circle,
-logic-topology .device circle{
-    fill: #fff;
-    stroke: green;
-    stroke-width: 1px;
-}
-
-logic-topology > svg {
-    position: absolute;
-    top: 0;
-}
-
-/* CLOUDS */
-
-logic-topology .network .cloud {
-    fill: #fff;
-    stroke: green;
-    stroke-width: 1px;   
-}
-
-/* RACK */
-logic-topology .node.rack > g > rect{
-    fill: #ccc;
-    stroke: steelblue;
-    stroke-width: 1px;
-}
-
-/* CP NODE */
-
-logic-topology .compute-node > rect{
-    fill: #fff;
-    stroke: steelblue;
-    stroke-width: 1px;
-}
-
-logic-topology .compute-node > text{
-    font-size: 16px;
-}
-
-/* INSTANCE */
-
-logic-topology .instance > rect{
-    fill: #eee;
-    stroke: steelblue;
-    stroke-width: 1px;
-}
-
-logic-topology .node .instance.active rect{
-    fill: lightsteelblue;
-    stroke: steelblue;
-    stroke-width: 1px;   
-}
-
-logic-topology .node .instance.active.good > rect{
-    fill: green;
-}
-
-logic-topology .node .instance.active.provisioning > rect{
-    fill: yellow;
-}
-
-logic-topology .node .instance.active.bad > rect{
-    fill: red;
-}
-
-/* INSTANCE STATS */
-
-logic-topology .node .instance .stats-container rect {
-  fill: white;
-}
-
-logic-topology .node .instance .stats-container text.name{
-  font-weight: bold;
-}
-
-logic-topology .node .instance .stats-container text.ip{
-  font-style: italic;
-  font-size: 10px;
-}
-
-/* CONTAINERS */
-logic-topology .node .instance .stats-container .container rect {
-  fill: #eee;
-  stroke: steelblue;
-  stroke-width: 1px;
-}
-
-/* LEGEND */
-
-.legend {
-    fill: #fff;
-    stroke: #ccc;
-    stroke-width: 1px;
-    position: relative;
-}
-
-.legend text {
-    stroke: #000;
-}
-
-.node {
-    cursor: pointer;
-}
-
-.node circle,
-.node rect{
-    fill: #fff;
-    stroke: steelblue;
-    stroke-width: 1px;
-}
-
-.node.subscriber circle,
-.node.subscriber rect,
-.node.router circle,
-.node.router rect {
-    stroke: #05ffcb;
-}
-
-.node.slice rect {
-    stroke: #b01dff;
-}
-
-.node.instance rect {
-    stroke: #ccc;
-}
-
-.node.instance rect.active {
-    stroke: #ff8b00;
-}
-
-.node rect.slice-detail{
-    fill: #fff;
-    stroke: steelblue;
-    stroke-width: 3px;
-}
-
-.node text {
-    font: 18px sans-serif;
-}
-
-.node .instance text {
-    font: 12px sans-serif;
-}
-
-.node text.small {
-    font-size: 10px;
-}
-
-.link, .device-link {
-    fill: none;
-    stroke: #ccc;
-    stroke-width: 2px;
-}
-
-.link.slice {
-    stroke: rgba(157, 4, 183, 0.29);
-}
-.link.instance{
-    stroke: #ccc;
-}
-
-.link.instance.active{
-    stroke: rgba(255, 138, 0, 0.65);
-}
-
-.service-details{
-    width: 200px;
-    position: absolute;
-    top: 20px;
-    right: 20px;
-}
-
-/* when showing the thing */
-
-.animate.ng-hide-remove {
-    animation:0.5s bounceInRight ease;
-}
-
-/* when hiding the picture */
-.animate.ng-hide-add {
-    animation:0.5s bounceOutRight ease;
-}
-
-/* LOADER */
-.loader {
-  font-size: 10px;
-  margin: 150px auto;
-  text-indent: -9999em;
-  width: 11em;
-  height: 11em;
-  border-radius: 50%;
-  background: #ffffff;
-  background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  position: relative;
-  animation: load3 1.4s infinite linear;
-  transform: translateZ(0);
-}
-.loader:before {
-  width: 50%;
-  height: 50%;
-  background: #105E9E;
-  border-radius: 100% 0 0 0;
-  position: absolute;
-  top: 0;
-  left: 0;
-  content: '';
-}
-.loader:after {
-  background: #fff;
-  width: 75%;
-  height: 75%;
-  border-radius: 50%;
-  content: '';
-  margin: auto;
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-}
-
-@keyframes load3 {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-
-/* MODALS */
-
-.modal.fade.in {
-  display: block;
-}
-
-/* ANIMATIONS */
-
-@keyframes bounceInRight {
-    from, 60%, 75%, 90%, to {
-        animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    }
-
-    from {
-        opacity: 0;
-        transform: translate3d(3000px, 0, 0);
-    }
-
-    60% {
-        opacity: 1;
-        transform: translate3d(-25px, 0, 0);
-    }
-
-    75% {
-        transform: translate3d(10px, 0, 0);
-    }
-
-    90% {
-        transform: translate3d(-5px, 0, 0);
-    }
-
-    to {
-        transform: none;
-    }
-}
-
-@keyframes bounceOutRight {
-  20% {
-    opacity: 1;
-    transform: translate3d(-20px, 0, 0);
-  }
-
-  to {
-    opacity: 0;
-    transform: translate3d(2000px, 0, 0);
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/templates/diagnostic.tpl.html b/views/ngXosViews/diagnostic/src/templates/diagnostic.tpl.html
deleted file mode 100644
index f6b00cb..0000000
--- a/views/ngXosViews/diagnostic/src/templates/diagnostic.tpl.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="container-fluid">
-  <div ng-hide="vm.error && vm.loader" style="height: 900px">
-    <div class="onethird-height">
-      <div class="well">
-        Services Graph
-      </div>
-      <div class="well pull-right" ng-click="vm.reloadGlobalScope()" ng-show="vm.selectedSubscriber">
-        Reset subscriber
-      </div>
-      <service-topology service-chain="vm.serviceChain"></service-topology>
-    </div>
-    <div class="twothird-height">
-      <div class="well">
-        Logical Resources
-      </div>
-      <logic-topology ng-if="vm.subscribers" subscribers="vm.subscribers" selected="vm.selectedSubscriber"></logic-topology>
-    </div>
-  </div>
-  <div class="row" ng-if="vm.error">
-    <div class="col-xs-12">
-      <div class="alert alert-danger">
-        {{vm.error}}
-      </div>
-    </div>
-  </div>
-  <div class="row" ng-if="vm.loader">
-    <div class="col-xs-12">
-      <div class="loader">Loading</div>
-    </div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/templates/logicTopology.tpl.html b/views/ngXosViews/diagnostic/src/templates/logicTopology.tpl.html
deleted file mode 100644
index 9dba380..0000000
--- a/views/ngXosViews/diagnostic/src/templates/logicTopology.tpl.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<select-subscriber-modal open="vm.openSelectSubscriberModal" subscribers="vm.subscribers"></select-subscriber-modal>
-<subscriber-status-modal open="vm.openSubscriberStatusModal" subscriber="vm.currentSubscriber"></subscriber-status-modal>
-<div class="alert alert-danger animate" ng-hide="!vm.error">
-  {{vm.error}}
-</div>
-<!-- <div class="instances-stats animate" ng-hide="vm.hideInstanceStats">
-  <div class="row">
-    <div class="col-sm-3 col-sm-offset-8">
-      <div class="panel panel-primary" ng-repeat="instance in vm.selectedInstances">
-        <div class="panel-heading">
-          {{instance.humanReadableName}}
-        </div>
-          <ul class="list-group">
-            <li class="list-group-item">Backend Status: {{instance.backend_status}}</li>
-            <li class="list-group-item">IP Address: {{instance.ip}}</li>
-          </ul>
-          <ul class="list-group">
-            <li class="list-group-item" ng-repeat="stat in instance.stats">
-              <span class="badge">{{stat.value}}</span>
-              {{stat.meter}}
-            </li>
-          </ul>
-        </div>
-      </div>  
-    </div>
-  </div>
-</div> -->
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/templates/select-subscriber-modal.tpl.html b/views/ngXosViews/diagnostic/src/templates/select-subscriber-modal.tpl.html
deleted file mode 100644
index f66336b..0000000
--- a/views/ngXosViews/diagnostic/src/templates/select-subscriber-modal.tpl.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 fade" ng-class="{in: vm.open}" tabindex="-1" role="dialog">
-  <div class="modal-dialog modal-sm">
-    <div class="modal-content">
-      <div class="modal-header">
-        <button ng-click="vm.close()"  type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
-        <h4 class="modal-title">Select a subscriber:</h4>
-      </div>
-      <div class="modal-body">
-        <select class="form-control" ng-options="s as s.humanReadableName for s in vm.subscribers" ng-model="vm.selected"></select>
-      </div>
-      <div class="modal-footer">
-        <button ng-click="vm.close()" type="button" class="btn btn-default" data-dismiss="modal">Close</button>
-        <button ng-click="vm.select(vm.selected)" type="button" class="btn btn-primary">Select</button>
-      </div>
-    </div><!-- /.modal-content -->
-  </div><!-- /.modal-dialog -->
-</div><!-- /.modal -->
\ No newline at end of file
diff --git a/views/ngXosViews/diagnostic/src/templates/subscriber-status-modal.tpl.html b/views/ngXosViews/diagnostic/src/templates/subscriber-status-modal.tpl.html
deleted file mode 100644
index 35fbee8..0000000
--- a/views/ngXosViews/diagnostic/src/templates/subscriber-status-modal.tpl.html
+++ /dev/null
@@ -1,105 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 fade" ng-class="{in: vm.open}" tabindex="-1" role="dialog">
-  <div class="modal-dialog modal-sm">
-    <div class="modal-content">
-      <div class="modal-header">
-        <button ng-click="vm.close()"  type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
-        <h4 class="modal-title">Manage subscriber:</h4>
-      </div>
-      <form name="vm.subscriber-detail">
-        <div class="modal-body">
-          <div class="row">
-            <div class="col-xs-12">
-              <label>Status</label>
-            </div>
-            <div class="col-xs-6">
-              <a ng-click="vm.subscriber.features.status = 'enabled'"
-                class="btn btn-block"
-                ng-class="{'btn-primary': vm.subscriber.features.status === 'enabled' ,'btn-default': vm.subscriber.features.status !== 'enabled'}"
-                >Enabled</a>
-            </div>
-            <div class="col-xs-6">
-              <a ng-click="vm.subscriber.features.status = 'suspended'"
-                class="btn btn-block"
-                ng-class="{'btn-primary': vm.subscriber.features.status === 'suspended' ,'btn-default': vm.subscriber.features.status !== 'suspended'}"
-                >Suspended</a>
-            </div>
-          </div>
-          <div class="row">
-            <div class="col-xs-6">
-              <a ng-click="vm.subscriber.features.status = 'delinquent'"
-                class="btn btn-block"
-                ng-class="{'btn-primary': vm.subscriber.features.status === 'delinquent' ,'btn-default': vm.subscriber.features.status !== 'delinquent'}"
-                >Delinquent <br> payment</a>
-            </div>
-            <div class="col-xs-6">
-              <a ng-click="vm.subscriber.features.status = 'copyrightviolation'"
-                class="btn btn-block"
-                ng-class="{'btn-primary': vm.subscriber.features.status === 'copyrightviolation' ,'btn-default': vm.subscriber.features.status !== 'copyrightviolation'}"
-                >Copyright <br> violation</a>
-            </div>
-          </div>
-          <div class="row">
-            <div class="col-xs-6">
-              <label>Uplink Speed</label>
-              <div class="input-group">
-                <input type="number" class="form-control small-padding" ng-model="vm.subscriber.features.uplink_speed"/>
-                <span class="input-group-addon">Mbps</span>
-              </div>
-            </div>
-            <div class="col-xs-6">
-              <label>Downlink Speed</label>
-              <div class="input-group">
-                <input type="number" class="form-control small-padding" ng-model="vm.subscriber.features.downlink_speed"/>
-                <span class="input-group-addon">Mbps</span>
-              </div>
-            </div>
-          </div>
-          <div class="row">
-            <div class="col-xs-6">
-              <label>Enable Internet</label>
-            </div>
-            <div class="col-xs-6">
-              <a 
-                ng-click="vm.subscriber.features.uverse = !vm.subscriber.features.uverse"
-                ng-class="{'btn-success': vm.subscriber.features.enable_uverse, 'btn-danger': !vm.subscriber.features.enable_uverse}"
-                class="btn btn-block">
-                <span ng-show="vm.subscriber.features.uverse === true">Enabled</span>
-                <span ng-show="vm.subscriber.features.uverse !== true">Disabled</span>
-              </a>
-            </div>
-          </div>
-        </div>
-        <div class="modal-footer" ng-show="vm.success || vm.formError">
-          <div class="alert alert-success" ng-show="vm.success">
-            {{vm.success}}
-          </div>
-          <div class="alert alert-danger" ng-show="vm.formError">
-            {{vm.formError}}
-          </div>
-        </div>
-        <div class="modal-footer">
-          <button ng-click="vm.close()" type="button" class="btn btn-default" data-dismiss="modal">Close</button>
-          <button ng-click="vm.updateSubscriber(vm.subscriber)" type="button" class="btn btn-primary">Save</button>
-        </div>
-      </form>
-    </div><!-- /.modal-content -->
-  </div><!-- /.modal-dialog -->
-</div><!-- /.modal -->
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/.bowerrc b/views/ngXosViews/ecordTopology/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/ecordTopology/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/.eslintrc b/views/ngXosViews/ecordTopology/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/ecordTopology/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/.gitignore b/views/ngXosViews/ecordTopology/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/ecordTopology/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/README.md b/views/ngXosViews/ecordTopology/README.md
deleted file mode 100644
index 04b5188..0000000
--- a/views/ngXosViews/ecordTopology/README.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# M-CORD UI
-
-## Requirements
-
-To run this UI is required to have installd:
-- NodeJs > v4
-- Bower
-
-## Mock Server
-
-A server that mock the response, used for development, is available and can be started with `npm run server`
-
-## Application setup
-
-This development environment require to be executed from inside the `xos` repo. The correct location for this folder is `/views/ngXosViews`. 
-An `environment` configuration should also be present under `/views/env` and should contain a `default.js` file (to connect to XOS) and a `local.js` file (to connect to the mock server).
-
-The content of the `local.js` should be (to work with the provided server):
-```
-module.exports = {
-  host: 'http://localhost:4000/'
-};
-```
-
-While the `default.js` file should look like (please updated your values, refer to https://www.youtube.com/watch?v=iEp9F7JYPO8 for more information):
-```
-module.exports = {
-  host: 'http://127.0.0.1:9999/', // XOS Url
-  xoscsrftoken: 'jJRuH4YNK69qYV4Jks3dPCNrYDKFMtyL', // XOS token
-  xossessionid: 'jbsvkfjlcqtroxhxgz53oyvnd3348a03' // XOS session id
-};
-```
-
-## Start the application
-
-### To use the mock server
-
-From the root of this application (`/views/ngXosViews/ecordTopology`):
-- execute: `NODE_ENV=local npm start`
-- In another shell `npm run server`
-
-### To connect to your running XOS instance
-
-From the root of this application (`/views/ngXosViews/ecordTopology`) execute `npm start` (make sure that token and sessionId in the `default.js` config file are correct).
-
-## Build the App
-
-Once everything is working you can execute `npm run build` that will copy the files in the correct location and then you can load the dashboard in the UI (refer again to the tutorial).
diff --git a/views/ngXosViews/ecordTopology/bower.json b/views/ngXosViews/ecordTopology/bower.json
deleted file mode 100644
index 8466b09..0000000
--- a/views/ngXosViews/ecordTopology/bower.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "name": "xos-ecordTopology",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The ecordTopology view",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "angular-bootstrap-checkbox": "~0.4.0",
-    "topojson.v1.min": "http://d3js.org/topojson.v1.min.js"
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5"
-  },
-  "overrides": {
-    "topojson.v1.min": {
-      "main": [
-        "index.js"
-      ]
-    }
-  }
-}
diff --git a/views/ngXosViews/ecordTopology/gulp/build.js b/views/ngXosViews/ecordTopology/gulp/build.js
deleted file mode 100644
index 3774c47..0000000
--- a/views/ngXosViews/ecordTopology/gulp/build.js
+++ /dev/null
@@ -1,182 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.ecordTopology')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosEcordTopology.html',
-        options.static + 'css/xosEcordTopology.css'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosEcordTopology.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosEcordTopology.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.ecordTopology',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'js/vendor/xosEcordTopologyVendor.js',
-            options.static + 'js/xosEcordTopology.js',
-            options.static + 'css/xosEcordTopology.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosEcordTopology.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosEcordTopologyVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'js/vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyHtml',
-      'cleanTmp'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/gulp/server.js b/views/ngXosViews/ecordTopology/gulp/server.js
deleted file mode 100644
index f11a875..0000000
--- a/views/ngXosViews/ecordTopology/gulp/server.js
+++ /dev/null
@@ -1,190 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/xoslib/static/js/vendor': options.helpers,
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1 ||
-            req.url.indexOf('/onos/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-              req.headers['Authorization'] = "Basic cGFkbWluQHZpY2NpLm9yZzpsZXRtZWlu";
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/ecordTopology/gulpfile.js b/views/ngXosViews/ecordTopology/gulpfile.js
deleted file mode 100644
index c824ebc..0000000
--- a/views/ngXosViews/ecordTopology/gulpfile.js
+++ /dev/null
@@ -1,44 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: '../../../xos/core/xoslib/static/js/vendor/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/ecordTopology/karma.conf.js b/views/ngXosViews/ecordTopology/karma.conf.js
deleted file mode 100644
index a708fd5..0000000
--- a/views/ngXosViews/ecordTopology/karma.conf.js
+++ /dev/null
@@ -1,106 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      '../../../xos/core/xoslib/static/js/vendor/ngXosVendor.js',
-      '../../../xos/core/xoslib/static/js/vendor/ngXosHelpers.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/ecordTopology/mocks/data/SCA_ETH_FDFr_EC.json b/views/ngXosViews/ecordTopology/mocks/data/SCA_ETH_FDFr_EC.json
deleted file mode 100644
index 0637a08..0000000
--- a/views/ngXosViews/ecordTopology/mocks/data/SCA_ETH_FDFr_EC.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/mocks/data/SCA_ETH_FPP_UNI_N.json b/views/ngXosViews/ecordTopology/mocks/data/SCA_ETH_FPP_UNI_N.json
deleted file mode 100644
index 6a0e547..0000000
--- a/views/ngXosViews/ecordTopology/mocks/data/SCA_ETH_FPP_UNI_N.json
+++ /dev/null
@@ -1,80 +0,0 @@
-[
-  {
-    "id": 3,
-    "interfaceCfgIdentifier": "uni3",
-    "transportPort": {
-        "Hostname": "Host1",
-        "Port": 1
-    },
-    "physicalLayer": "string",
-    "physicalLayerDuplexMode": "string",
-    "synchronousMode": "string",
-    "numberOfLinks": 0,
-    "uniResiliency": "string",
-    "frameFormat": "string",
-    "uniMaximumServiceFrameSize": 0,
-    "multiplexing": "string",
-    "uniCfgCeVidUntagged": 0,
-    "uniCfgCePriorityUntagged": 0,
-    "ceVlanId": "ceVlanId",
-    "evcId": "evcId",
-    "interfaceStatusMaxVc": 0,
-    "bundling": "string",
-    "allToOneBundling": "string",
-    "linkOam": "string",
-    "uniMeg": "string",
-    "eLMI": "string"
-  },
-  {
-    "id": 4,
-    "interfaceCfgIdentifier": "uni4",
-    "transportPort": {
-        "Hostname": "Host2",
-        "Port": 1
-    },
-    "physicalLayer": "string",
-    "physicalLayerDuplexMode": "string",
-    "synchronousMode": "string",
-    "numberOfLinks": 0,
-    "uniResiliency": "string",
-    "frameFormat": "string",
-    "uniMaximumServiceFrameSize": 0,
-    "multiplexing": "string",
-    "uniCfgCeVidUntagged": 0,
-    "uniCfgCePriorityUntagged": 0,
-    "ceVlanId": "ceVlanId",
-    "evcId": "evcId",
-    "interfaceStatusMaxVc": 0,
-    "bundling": "string",
-    "allToOneBundling": "string",
-    "linkOam": "string",
-    "uniMeg": "string",
-    "eLMI": "string"
-  },
-  {
-    "id": 5,
-    "interfaceCfgIdentifier": "uni5",
-    "transportPort": {
-        "Hostname": "Host3",
-        "Port": 1
-    },
-    "physicalLayer": "string",
-    "physicalLayerDuplexMode": "string",
-    "synchronousMode": "string",
-    "numberOfLinks": 0,
-    "uniResiliency": "string",
-    "frameFormat": "string",
-    "uniMaximumServiceFrameSize": 0,
-    "multiplexing": "string",
-    "uniCfgCeVidUntagged": 0,
-    "uniCfgCePriorityUntagged": 0,
-    "ceVlanId": "ceVlanId",
-    "evcId": "evcId",
-    "interfaceStatusMaxVc": 0,
-    "bundling": "string",
-    "allToOneBundling": "string",
-    "linkOam": "string",
-    "uniMeg": "string",
-    "eLMI": "string"
-  }
-]
diff --git a/views/ngXosViews/ecordTopology/mocks/ecord.conf.json b/views/ngXosViews/ecordTopology/mocks/ecord.conf.json
deleted file mode 100644
index 5f4d08b..0000000
--- a/views/ngXosViews/ecordTopology/mocks/ecord.conf.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-  "endpoints": [
-    {
-      "url": "SCA_ETH_FPP_UNI_N",
-      "base": "onos/mef-sca-api/",
-      "methods": ["GET", "POST"],
-      "param": "interfaceCfgIdentifier"
-    },
-    {
-      "url": "SCA_ETH_FDFr_EC",
-      "base": "onos/mef-sca-api/",
-      "methods": ["GET", "POST"],
-      "param": "id"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/mocks/sca.py b/views/ngXosViews/ecordTopology/mocks/sca.py
deleted file mode 100644
index 111d16f..0000000
--- a/views/ngXosViews/ecordTopology/mocks/sca.py
+++ /dev/null
@@ -1,96 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-#!/usr/bin/python
-
-import copy
-import json
-from flask import Flask, make_response, request
-from flask.ext.cors import CORS
-from subprocess import call
-
-app = Flask(__name__)
-app.debug = True
-CORS(app)
-
-e_lines = {}
-
-
-@app.route('/SCA_ETH_FDFr_EC/findByState', methods=['GET'])
-def get_elines_by_state():
-    resp = make_response(json.dumps(e_lines.values()))
-    resp.mimetype = 'application/json'
-    resp.headers['Access-Control-Allow-Origin'] = '*'
-    return resp
-
-
-@app.route('/SCA_ETH_FDFr_EC', methods=['GET'])
-def get_elines():
-    resp = make_response(json.dumps(e_lines.values()))
-    resp.mimetype = 'application/json'
-    resp.headers['Access-Control-Allow-Origin'] = '*'
-    return resp
-
-
-@app.route('/SCA_ETH_FDFr_EC/<name>/', methods=['GET'])
-def get_eline(name):
-    resp = make_response(json.dumps(e_lines[int(name)]))
-    resp.mimetype = 'application/json'
-    resp.headers['Access-Control-Allow-Origin'] = '*'
-    return resp
-
-
-# Convert long value to dotted hex value with specified length in bytes
-def longToHex(l, length=6):
-    h = ("%x" % l)
-    if len(h) % 2 != 0:
-        h = '0' + h
-    result = ':'.join([h[i:i+2] for i in range(0, len(h), 2)])
-    prefix = '00:' * (length - (len(h) / 2) - (len(h) % 2))
-    return prefix + result
-
-
-@app.route('/SCA_ETH_FDFr_EC', methods=['POST'])
-def create_eline():
-    # Store E-Line
-    e_line = json.loads(request.data)
-    e_line['id'] = len(e_lines) + 1
-
-    e_lines[e_line['id']] = e_line
-
-    # Create E-Line in ONOS
-    flow_points = e_line['SCA_ETH_Flow_Points']
-
-    # src_host = flow_points[0]['scaEthFppUniN']['transportPort']['Hostname'] + '/-' + flow_points[0]['scaEthFppUniN']['transportPort']['Port']
-    # dst_host = flow_points[1]['scaEthFppUniN']['transportPort']['Hostname'] + '/-' + flow_points[1]['scaEthFppUniN']['transportPort']['Port']
-
-    src_index = int(flow_points[0]['scaEthFppUniN']['transportPort']['Hostname'][-2:])
-    dst_index = int(flow_points[1]['scaEthFppUniN']['transportPort']['Hostname'][-2:])
-
-    src_host = str(longToHex(src_index, 6)) + '/-1'
-    dst_host = str(longToHex(dst_index, 6)) + '/-1'
-
-    print 'Creating E-Line between %s (%s) and %s (%s)' % (src_index, src_host, dst_index, dst_host)
-    call(['onos', 'localhost', 'add-host-intent', src_host, dst_host])
-
-    # Return response
-    resp = make_response(json.dumps(e_line))
-    resp.mimetype = 'application/json'
-    resp.headers['Access-Control-Allow-Origin'] = '*'
-    return resp
-
-if __name__ == '__main__':
-    app.run(host='0.0.0.0', port=6000)
diff --git a/views/ngXosViews/ecordTopology/package.json b/views/ngXosViews/ecordTopology/package.json
deleted file mode 100644
index 3bee7c2..0000000
--- a/views/ngXosViews/ecordTopology/package.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "name": "xos-ecordTopology",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/",
-    "server": "easy-mocker -c ./mocks/ecord.conf.json -d ./mocks/data/ -p 4000"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "MIT",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/ecordTopology/spec/sample.test.js b/views/ngXosViews/ecordTopology/spec/sample.test.js
deleted file mode 100644
index 4e34115..0000000
--- a/views/ngXosViews/ecordTopology/spec/sample.test.js
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The User List', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.ecordTopology'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('/api/core/users/?no_hyperlinks=1').respond([
-      {
-        email: 'matteo.scandolo@gmail.com',
-        firstname: 'Matteo',
-        lastname: 'Scandolo' 
-      }
-    ]);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<users-list></users-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  xit('should load 1 users', () => {
-    httpBackend.flush();
-    expect(isolatedScope.users.length).toBe(1);
-    expect(isolatedScope.users[0].email).toEqual('matteo.scandolo@gmail.com');
-    expect(isolatedScope.users[0].firstname).toEqual('Matteo');
-    expect(isolatedScope.users[0].lastname).toEqual('Scandolo');
-  });
-
-});
diff --git a/views/ngXosViews/ecordTopology/src/css/elan-map.css b/views/ngXosViews/ecordTopology/src/css/elan-map.css
deleted file mode 100644
index f2fa007..0000000
--- a/views/ngXosViews/ecordTopology/src/css/elan-map.css
+++ /dev/null
@@ -1,60 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/*$brand-primary: $cord-red;*/
-elan-map {
-  display: block;
-  width: 100%;
-  height: 380px;
-  position: relative; }
-  elan-map svg {
-    position: absolute;
-    top: 0;
-    left: 0; }
-  elan-map circle.elan,
-  elan-map rect.elan {
-    stroke: #5bc0de;
-    stroke-width: 2;
-    fill: #fff; }
-  elan-map circle.elan,
-  elan-map circle.uni {
-    cursor: pointer; }
-  elan-map .node.uni circle.uni,
-  elan-map .node.uni rect.uni {
-    stroke: #CE5650;
-    stroke-width: 2;
-    fill: #fff; }
-  elan-map .node.uni path {
-    fill: #902d28; }
-  elan-map line {
-    stroke: #CE5650;
-    stroke-width: 1; }
-  elan-map #map {
-    background: #EFEBE2; }
-  elan-map .subunit {
-    fill: #B7DAFF;
-    stroke: white;
-    stroke-width: 1px; }
-  elan-map .subunit._10 {
-    fill: transparent;
-    stroke: transparent; }
-  elan-map .exterior-boundary {
-    fill: none;
-    stroke: black;
-    stroke-linejoin: round;
-    stroke-width: 1px; }
diff --git a/views/ngXosViews/ecordTopology/src/css/eline-details.css b/views/ngXosViews/ecordTopology/src/css/eline-details.css
deleted file mode 100644
index fcfb41b..0000000
--- a/views/ngXosViews/ecordTopology/src/css/eline-details.css
+++ /dev/null
@@ -1,24 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-.service-container .btn {
-  font-size: 12px; }
-
-.sla input.input-sm {
-  max-width: 60px;
-  text-align: right; }
diff --git a/views/ngXosViews/ecordTopology/src/css/main.css b/views/ngXosViews/ecordTopology/src/css/main.css
deleted file mode 100644
index 90aa31c..0000000
--- a/views/ngXosViews/ecordTopology/src/css/main.css
+++ /dev/null
@@ -1,5948 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-@charset "UTF-8";
-/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
-html {
-  font-family: sans-serif;
-  -ms-text-size-adjust: 100%;
-  -webkit-text-size-adjust: 100%; }
-
-body {
-  margin: 0; }
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-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-color: transparent; }
-
-a:active,
-a:hover {
-  outline: 0; }
-
-abbr[title] {
-  border-bottom: 1px dotted; }
-
-b,
-strong {
-  font-weight: bold; }
-
-dfn {
-  font-style: italic; }
-
-h1 {
-  font-size: 2em;
-  margin: 0.67em 0; }
-
-mark {
-  background: #ff0;
-  color: #000; }
-
-small {
-  font-size: 80%; }
-
-sub,
-sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline; }
-
-sup {
-  top: -0.5em; }
-
-sub {
-  bottom: -0.25em; }
-
-img {
-  border: 0; }
-
-svg:not(:root) {
-  overflow: hidden; }
-
-figure {
-  margin: 1em 40px; }
-
-hr {
-  box-sizing: content-box;
-  height: 0; }
-
-pre {
-  overflow: auto; }
-
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em; }
-
-button,
-input,
-optgroup,
-select,
-textarea {
-  color: inherit;
-  font: inherit;
-  margin: 0; }
-
-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 {
-  border: 0;
-  padding: 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-appearance: textfield;
-  box-sizing: content-box; }
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none; }
-
-fieldset {
-  border: 1px solid #c0c0c0;
-  margin: 0 2px;
-  padding: 0.35em 0.625em 0.75em; }
-
-legend {
-  border: 0;
-  padding: 0; }
-
-textarea {
-  overflow: auto; }
-
-optgroup {
-  font-weight: bold; }
-
-table {
-  border-collapse: collapse;
-  border-spacing: 0; }
-
-td,
-th {
-  padding: 0; }
-
-/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
-@media print {
-  *,
-  *:before,
-  *:after {
-    background: transparent !important;
-    color: #000 !important;
-    box-shadow: none !important;
-    text-shadow: none !important; }
-  a,
-  a:visited {
-    text-decoration: underline; }
-  a[href]:after {
-    content: " (" attr(href) ")"; }
-  abbr[title]:after {
-    content: " (" attr(title) ")"; }
-  a[href^="#"]:after,
-  a[href^="javascript:"]: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; }
-  .navbar {
-    display: none; }
-  .btn > .caret,
-  .dropup > .btn > .caret {
-    border-top-color: #000 !important; }
-  .label {
-    border: 1px solid #000; }
-  .table {
-    border-collapse: collapse !important; }
-    .table td,
-    .table th {
-      background-color: #fff !important; }
-  .table-bordered th,
-  .table-bordered td {
-    border: 1px solid #ddd !important; } }
-
-@font-face {
-  font-family: 'Glyphicons Halflings';
-  src: url("/static/suit/bootstrap/fonts/glyphicons-halflings-regular.eot");
-  src: url("/static/suit/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("/static/suit/bootstrap/fonts/glyphicons-halflings-regular.woff2") format("woff2"), url("/static/suit/bootstrap/fonts/glyphicons-halflings-regular.woff") format("woff"), url("/static/suit/bootstrap/fonts/glyphicons-halflings-regular.ttf") format("truetype"), url("/static/suit/bootstrap/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: "\002a"; }
-
-.glyphicon-plus:before {
-  content: "\002b"; }
-
-.glyphicon-euro:before,
-.glyphicon-eur: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"; }
-
-.glyphicon-cd:before {
-  content: "\e201"; }
-
-.glyphicon-save-file:before {
-  content: "\e202"; }
-
-.glyphicon-open-file:before {
-  content: "\e203"; }
-
-.glyphicon-level-up:before {
-  content: "\e204"; }
-
-.glyphicon-copy:before {
-  content: "\e205"; }
-
-.glyphicon-paste:before {
-  content: "\e206"; }
-
-.glyphicon-alert:before {
-  content: "\e209"; }
-
-.glyphicon-equalizer:before {
-  content: "\e210"; }
-
-.glyphicon-king:before {
-  content: "\e211"; }
-
-.glyphicon-queen:before {
-  content: "\e212"; }
-
-.glyphicon-pawn:before {
-  content: "\e213"; }
-
-.glyphicon-bishop:before {
-  content: "\e214"; }
-
-.glyphicon-knight:before {
-  content: "\e215"; }
-
-.glyphicon-baby-formula:before {
-  content: "\e216"; }
-
-.glyphicon-tent:before {
-  content: "\26fa"; }
-
-.glyphicon-blackboard:before {
-  content: "\e218"; }
-
-.glyphicon-bed:before {
-  content: "\e219"; }
-
-.glyphicon-apple:before {
-  content: "\f8ff"; }
-
-.glyphicon-erase:before {
-  content: "\e221"; }
-
-.glyphicon-hourglass:before {
-  content: "\231b"; }
-
-.glyphicon-lamp:before {
-  content: "\e223"; }
-
-.glyphicon-duplicate:before {
-  content: "\e224"; }
-
-.glyphicon-piggy-bank:before {
-  content: "\e225"; }
-
-.glyphicon-scissors:before {
-  content: "\e226"; }
-
-.glyphicon-bitcoin:before {
-  content: "\e227"; }
-
-.glyphicon-btc:before {
-  content: "\e227"; }
-
-.glyphicon-xbt:before {
-  content: "\e227"; }
-
-.glyphicon-yen:before {
-  content: "\00a5"; }
-
-.glyphicon-jpy:before {
-  content: "\00a5"; }
-
-.glyphicon-ruble:before {
-  content: "\20bd"; }
-
-.glyphicon-rub:before {
-  content: "\20bd"; }
-
-.glyphicon-scale:before {
-  content: "\e230"; }
-
-.glyphicon-ice-lolly:before {
-  content: "\e231"; }
-
-.glyphicon-ice-lolly-tasted:before {
-  content: "\e232"; }
-
-.glyphicon-education:before {
-  content: "\e233"; }
-
-.glyphicon-option-horizontal:before {
-  content: "\e234"; }
-
-.glyphicon-option-vertical:before {
-  content: "\e235"; }
-
-.glyphicon-menu-hamburger:before {
-  content: "\e236"; }
-
-.glyphicon-modal-window:before {
-  content: "\e237"; }
-
-.glyphicon-oil:before {
-  content: "\e238"; }
-
-.glyphicon-grain:before {
-  content: "\e239"; }
-
-.glyphicon-sunglasses:before {
-  content: "\e240"; }
-
-.glyphicon-text-size:before {
-  content: "\e241"; }
-
-.glyphicon-text-color:before {
-  content: "\e242"; }
-
-.glyphicon-text-background:before {
-  content: "\e243"; }
-
-.glyphicon-object-align-top:before {
-  content: "\e244"; }
-
-.glyphicon-object-align-bottom:before {
-  content: "\e245"; }
-
-.glyphicon-object-align-horizontal:before {
-  content: "\e246"; }
-
-.glyphicon-object-align-left:before {
-  content: "\e247"; }
-
-.glyphicon-object-align-vertical:before {
-  content: "\e248"; }
-
-.glyphicon-object-align-right:before {
-  content: "\e249"; }
-
-.glyphicon-triangle-right:before {
-  content: "\e250"; }
-
-.glyphicon-triangle-left:before {
-  content: "\e251"; }
-
-.glyphicon-triangle-bottom:before {
-  content: "\e252"; }
-
-.glyphicon-triangle-top:before {
-  content: "\e253"; }
-
-.glyphicon-console:before {
-  content: "\e254"; }
-
-.glyphicon-superscript:before {
-  content: "\e255"; }
-
-.glyphicon-subscript:before {
-  content: "\e256"; }
-
-.glyphicon-menu-left:before {
-  content: "\e257"; }
-
-.glyphicon-menu-right:before {
-  content: "\e258"; }
-
-.glyphicon-menu-down:before {
-  content: "\e259"; }
-
-.glyphicon-menu-up:before {
-  content: "\e260"; }
-
-* {
-  -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: 10px;
-  -webkit-tap-highlight-color: transparent; }
-
-body {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 14px;
-  line-height: 1.42857;
-  color: #333333;
-  background-color: #fff; }
-
-input,
-button,
-select,
-textarea {
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit; }
-
-a {
-  color: #337ab7;
-  text-decoration: none; }
-  a:hover, a:focus {
-    color: #23527c;
-    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 {
-  display: block;
-  max-width: 100%;
-  height: auto; }
-
-.img-rounded {
-  border-radius: 6px; }
-
-.img-thumbnail {
-  padding: 4px;
-  line-height: 1.42857;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  -webkit-transition: all 0.2s ease-in-out;
-  -o-transition: all 0.2s ease-in-out;
-  transition: all 0.2s ease-in-out;
-  display: inline-block;
-  max-width: 100%;
-  height: auto; }
-
-.img-circle {
-  border-radius: 50%; }
-
-hr {
-  margin-top: 20px;
-  margin-bottom: 20px;
-  border: 0;
-  border-top: 1px solid #eeeeee; }
-
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  margin: -1px;
-  padding: 0;
-  overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0; }
-
-.sr-only-focusable:active, .sr-only-focusable:focus {
-  position: static;
-  width: auto;
-  height: auto;
-  margin: 0;
-  overflow: visible;
-  clip: auto; }
-
-[role="button"] {
-  cursor: pointer; }
-
-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,
-  h1 .small, h2 small,
-  h2 .small, h3 small,
-  h3 .small, h4 small,
-  h4 .small, h5 small,
-  h5 .small, h6 small,
-  h6 .small,
-  .h1 small,
-  .h1 .small, .h2 small,
-  .h2 .small, .h3 small,
-  .h3 .small, .h4 small,
-  .h4 .small, .h5 small,
-  .h5 .small, .h6 small,
-  .h6 .small {
-    font-weight: normal;
-    line-height: 1;
-    color: #777777; }
-
-h1, .h1,
-h2, .h2,
-h3, .h3 {
-  margin-top: 20px;
-  margin-bottom: 10px; }
-  h1 small,
-  h1 .small, .h1 small,
-  .h1 .small,
-  h2 small,
-  h2 .small, .h2 small,
-  .h2 .small,
-  h3 small,
-  h3 .small, .h3 small,
-  .h3 .small {
-    font-size: 65%; }
-
-h4, .h4,
-h5, .h5,
-h6, .h6 {
-  margin-top: 10px;
-  margin-bottom: 10px; }
-  h4 small,
-  h4 .small, .h4 small,
-  .h4 .small,
-  h5 small,
-  h5 .small, .h5 small,
-  .h5 .small,
-  h6 small,
-  h6 .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: 300;
-  line-height: 1.4; }
-  @media (min-width: 768px) {
-    .lead {
-      font-size: 21px; } }
-
-small,
-.small {
-  font-size: 85%; }
-
-mark,
-.mark {
-  background-color: #fcf8e3;
-  padding: .2em; }
-
-.text-left {
-  text-align: left; }
-
-.text-right {
-  text-align: right; }
-
-.text-center {
-  text-align: center; }
-
-.text-justify {
-  text-align: justify; }
-
-.text-nowrap {
-  white-space: nowrap; }
-
-.text-lowercase {
-  text-transform: lowercase; }
-
-.text-uppercase, .initialism {
-  text-transform: uppercase; }
-
-.text-capitalize {
-  text-transform: capitalize; }
-
-.text-muted {
-  color: #777777; }
-
-.text-primary {
-  color: #337ab7; }
-
-a.text-primary:hover,
-a.text-primary:focus {
-  color: #286090; }
-
-.text-success {
-  color: #3c763d; }
-
-a.text-success:hover,
-a.text-success:focus {
-  color: #2b542c; }
-
-.text-info {
-  color: #31708f; }
-
-a.text-info:hover,
-a.text-info:focus {
-  color: #245269; }
-
-.text-warning {
-  color: #8a6d3b; }
-
-a.text-warning:hover,
-a.text-warning:focus {
-  color: #66512c; }
-
-.text-danger {
-  color: #a94442; }
-
-a.text-danger:hover,
-a.text-danger:focus {
-  color: #843534; }
-
-.bg-primary {
-  color: #fff; }
-
-.bg-primary {
-  background-color: #337ab7; }
-
-a.bg-primary:hover,
-a.bg-primary:focus {
-  background-color: #286090; }
-
-.bg-success {
-  background-color: #dff0d8; }
-
-a.bg-success:hover,
-a.bg-success:focus {
-  background-color: #c1e2b3; }
-
-.bg-info {
-  background-color: #d9edf7; }
-
-a.bg-info:hover,
-a.bg-info:focus {
-  background-color: #afd9ee; }
-
-.bg-warning {
-  background-color: #fcf8e3; }
-
-a.bg-warning:hover,
-a.bg-warning:focus {
-  background-color: #f7ecb5; }
-
-.bg-danger {
-  background-color: #f2dede; }
-
-a.bg-danger:hover,
-a.bg-danger:focus {
-  background-color: #e4b9b9; }
-
-.page-header {
-  padding-bottom: 9px;
-  margin: 40px 0 20px;
-  border-bottom: 1px solid #eeeeee; }
-
-ul,
-ol {
-  margin-top: 0;
-  margin-bottom: 10px; }
-  ul ul,
-  ul ol,
-  ol ul,
-  ol ol {
-    margin-bottom: 0; }
-
-.list-unstyled {
-  padding-left: 0;
-  list-style: none; }
-
-.list-inline {
-  padding-left: 0;
-  list-style: none;
-  margin-left: -5px; }
-  .list-inline > li {
-    display: inline-block;
-    padding-left: 5px;
-    padding-right: 5px; }
-
-dl {
-  margin-top: 0;
-  margin-bottom: 20px; }
-
-dt,
-dd {
-  line-height: 1.42857; }
-
-dt {
-  font-weight: bold; }
-
-dd {
-  margin-left: 0; }
-
-.dl-horizontal dd:before, .dl-horizontal dd:after {
-  content: " ";
-  display: table; }
-
-.dl-horizontal dd:after {
-  clear: both; }
-
-@media (min-width: 768px) {
-  .dl-horizontal dt {
-    float: left;
-    width: 160px;
-    clear: left;
-    text-align: right;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap; }
-  .dl-horizontal dd {
-    margin-left: 180px; } }
-
-abbr[title],
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted #777777; }
-
-.initialism {
-  font-size: 90%; }
-
-blockquote {
-  padding: 10px 20px;
-  margin: 0 0 20px;
-  font-size: 17.5px;
-  border-left: 5px solid #eeeeee; }
-  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.42857;
-    color: #777777; }
-    blockquote footer:before,
-    blockquote small:before,
-    blockquote .small:before {
-      content: '\2014 \00A0'; }
-
-.blockquote-reverse,
-blockquote.pull-right {
-  padding-right: 15px;
-  padding-left: 0;
-  border-right: 5px solid #eeeeee;
-  border-left: 0;
-  text-align: right; }
-  .blockquote-reverse footer:before,
-  .blockquote-reverse small:before,
-  .blockquote-reverse .small:before,
-  blockquote.pull-right footer:before,
-  blockquote.pull-right small:before,
-  blockquote.pull-right .small:before {
-    content: ''; }
-  .blockquote-reverse footer:after,
-  .blockquote-reverse small:after,
-  .blockquote-reverse .small:after,
-  blockquote.pull-right footer:after,
-  blockquote.pull-right small:after,
-  blockquote.pull-right .small:after {
-    content: '\00A0 \2014'; }
-
-address {
-  margin-bottom: 20px;
-  font-style: normal;
-  line-height: 1.42857; }
-
-code,
-kbd,
-pre,
-samp {
-  font-family: Menlo, Monaco, Consolas, "Courier New", monospace; }
-
-code {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #c7254e;
-  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, 0.25); }
-  kbd kbd {
-    padding: 0;
-    font-size: 100%;
-    font-weight: bold;
-    box-shadow: none; }
-
-pre {
-  display: block;
-  padding: 9.5px;
-  margin: 0 0 10px;
-  font-size: 13px;
-  line-height: 1.42857;
-  word-break: break-all;
-  word-wrap: break-word;
-  color: #333333;
-  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 {
-  margin-right: auto;
-  margin-left: auto;
-  padding-left: 15px;
-  padding-right: 15px; }
-  .container:before, .container:after {
-    content: " ";
-    display: table; }
-  .container:after {
-    clear: both; }
-  @media (min-width: 768px) {
-    .container {
-      width: 750px; } }
-  @media (min-width: 992px) {
-    .container {
-      width: 970px; } }
-  @media (min-width: 1200px) {
-    .container {
-      width: 1170px; } }
-
-.container-fluid {
-  margin-right: auto;
-  margin-left: auto;
-  padding-left: 15px;
-  padding-right: 15px; }
-  .container-fluid:before, .container-fluid:after {
-    content: " ";
-    display: table; }
-  .container-fluid:after {
-    clear: both; }
-
-.row {
-  margin-left: -15px;
-  margin-right: -15px; }
-  .row:before, .row:after {
-    content: " ";
-    display: table; }
-  .row:after {
-    clear: both; }
-
-.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-left: 15px;
-  padding-right: 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-1 {
-  width: 8.33333%; }
-
-.col-xs-2 {
-  width: 16.66667%; }
-
-.col-xs-3 {
-  width: 25%; }
-
-.col-xs-4 {
-  width: 33.33333%; }
-
-.col-xs-5 {
-  width: 41.66667%; }
-
-.col-xs-6 {
-  width: 50%; }
-
-.col-xs-7 {
-  width: 58.33333%; }
-
-.col-xs-8 {
-  width: 66.66667%; }
-
-.col-xs-9 {
-  width: 75%; }
-
-.col-xs-10 {
-  width: 83.33333%; }
-
-.col-xs-11 {
-  width: 91.66667%; }
-
-.col-xs-12 {
-  width: 100%; }
-
-.col-xs-pull-0 {
-  right: auto; }
-
-.col-xs-pull-1 {
-  right: 8.33333%; }
-
-.col-xs-pull-2 {
-  right: 16.66667%; }
-
-.col-xs-pull-3 {
-  right: 25%; }
-
-.col-xs-pull-4 {
-  right: 33.33333%; }
-
-.col-xs-pull-5 {
-  right: 41.66667%; }
-
-.col-xs-pull-6 {
-  right: 50%; }
-
-.col-xs-pull-7 {
-  right: 58.33333%; }
-
-.col-xs-pull-8 {
-  right: 66.66667%; }
-
-.col-xs-pull-9 {
-  right: 75%; }
-
-.col-xs-pull-10 {
-  right: 83.33333%; }
-
-.col-xs-pull-11 {
-  right: 91.66667%; }
-
-.col-xs-pull-12 {
-  right: 100%; }
-
-.col-xs-push-0 {
-  left: auto; }
-
-.col-xs-push-1 {
-  left: 8.33333%; }
-
-.col-xs-push-2 {
-  left: 16.66667%; }
-
-.col-xs-push-3 {
-  left: 25%; }
-
-.col-xs-push-4 {
-  left: 33.33333%; }
-
-.col-xs-push-5 {
-  left: 41.66667%; }
-
-.col-xs-push-6 {
-  left: 50%; }
-
-.col-xs-push-7 {
-  left: 58.33333%; }
-
-.col-xs-push-8 {
-  left: 66.66667%; }
-
-.col-xs-push-9 {
-  left: 75%; }
-
-.col-xs-push-10 {
-  left: 83.33333%; }
-
-.col-xs-push-11 {
-  left: 91.66667%; }
-
-.col-xs-push-12 {
-  left: 100%; }
-
-.col-xs-offset-0 {
-  margin-left: 0%; }
-
-.col-xs-offset-1 {
-  margin-left: 8.33333%; }
-
-.col-xs-offset-2 {
-  margin-left: 16.66667%; }
-
-.col-xs-offset-3 {
-  margin-left: 25%; }
-
-.col-xs-offset-4 {
-  margin-left: 33.33333%; }
-
-.col-xs-offset-5 {
-  margin-left: 41.66667%; }
-
-.col-xs-offset-6 {
-  margin-left: 50%; }
-
-.col-xs-offset-7 {
-  margin-left: 58.33333%; }
-
-.col-xs-offset-8 {
-  margin-left: 66.66667%; }
-
-.col-xs-offset-9 {
-  margin-left: 75%; }
-
-.col-xs-offset-10 {
-  margin-left: 83.33333%; }
-
-.col-xs-offset-11 {
-  margin-left: 91.66667%; }
-
-.col-xs-offset-12 {
-  margin-left: 100%; }
-
-@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-1 {
-    width: 8.33333%; }
-  .col-sm-2 {
-    width: 16.66667%; }
-  .col-sm-3 {
-    width: 25%; }
-  .col-sm-4 {
-    width: 33.33333%; }
-  .col-sm-5 {
-    width: 41.66667%; }
-  .col-sm-6 {
-    width: 50%; }
-  .col-sm-7 {
-    width: 58.33333%; }
-  .col-sm-8 {
-    width: 66.66667%; }
-  .col-sm-9 {
-    width: 75%; }
-  .col-sm-10 {
-    width: 83.33333%; }
-  .col-sm-11 {
-    width: 91.66667%; }
-  .col-sm-12 {
-    width: 100%; }
-  .col-sm-pull-0 {
-    right: auto; }
-  .col-sm-pull-1 {
-    right: 8.33333%; }
-  .col-sm-pull-2 {
-    right: 16.66667%; }
-  .col-sm-pull-3 {
-    right: 25%; }
-  .col-sm-pull-4 {
-    right: 33.33333%; }
-  .col-sm-pull-5 {
-    right: 41.66667%; }
-  .col-sm-pull-6 {
-    right: 50%; }
-  .col-sm-pull-7 {
-    right: 58.33333%; }
-  .col-sm-pull-8 {
-    right: 66.66667%; }
-  .col-sm-pull-9 {
-    right: 75%; }
-  .col-sm-pull-10 {
-    right: 83.33333%; }
-  .col-sm-pull-11 {
-    right: 91.66667%; }
-  .col-sm-pull-12 {
-    right: 100%; }
-  .col-sm-push-0 {
-    left: auto; }
-  .col-sm-push-1 {
-    left: 8.33333%; }
-  .col-sm-push-2 {
-    left: 16.66667%; }
-  .col-sm-push-3 {
-    left: 25%; }
-  .col-sm-push-4 {
-    left: 33.33333%; }
-  .col-sm-push-5 {
-    left: 41.66667%; }
-  .col-sm-push-6 {
-    left: 50%; }
-  .col-sm-push-7 {
-    left: 58.33333%; }
-  .col-sm-push-8 {
-    left: 66.66667%; }
-  .col-sm-push-9 {
-    left: 75%; }
-  .col-sm-push-10 {
-    left: 83.33333%; }
-  .col-sm-push-11 {
-    left: 91.66667%; }
-  .col-sm-push-12 {
-    left: 100%; }
-  .col-sm-offset-0 {
-    margin-left: 0%; }
-  .col-sm-offset-1 {
-    margin-left: 8.33333%; }
-  .col-sm-offset-2 {
-    margin-left: 16.66667%; }
-  .col-sm-offset-3 {
-    margin-left: 25%; }
-  .col-sm-offset-4 {
-    margin-left: 33.33333%; }
-  .col-sm-offset-5 {
-    margin-left: 41.66667%; }
-  .col-sm-offset-6 {
-    margin-left: 50%; }
-  .col-sm-offset-7 {
-    margin-left: 58.33333%; }
-  .col-sm-offset-8 {
-    margin-left: 66.66667%; }
-  .col-sm-offset-9 {
-    margin-left: 75%; }
-  .col-sm-offset-10 {
-    margin-left: 83.33333%; }
-  .col-sm-offset-11 {
-    margin-left: 91.66667%; }
-  .col-sm-offset-12 {
-    margin-left: 100%; } }
-
-@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-1 {
-    width: 8.33333%; }
-  .col-md-2 {
-    width: 16.66667%; }
-  .col-md-3 {
-    width: 25%; }
-  .col-md-4 {
-    width: 33.33333%; }
-  .col-md-5 {
-    width: 41.66667%; }
-  .col-md-6 {
-    width: 50%; }
-  .col-md-7 {
-    width: 58.33333%; }
-  .col-md-8 {
-    width: 66.66667%; }
-  .col-md-9 {
-    width: 75%; }
-  .col-md-10 {
-    width: 83.33333%; }
-  .col-md-11 {
-    width: 91.66667%; }
-  .col-md-12 {
-    width: 100%; }
-  .col-md-pull-0 {
-    right: auto; }
-  .col-md-pull-1 {
-    right: 8.33333%; }
-  .col-md-pull-2 {
-    right: 16.66667%; }
-  .col-md-pull-3 {
-    right: 25%; }
-  .col-md-pull-4 {
-    right: 33.33333%; }
-  .col-md-pull-5 {
-    right: 41.66667%; }
-  .col-md-pull-6 {
-    right: 50%; }
-  .col-md-pull-7 {
-    right: 58.33333%; }
-  .col-md-pull-8 {
-    right: 66.66667%; }
-  .col-md-pull-9 {
-    right: 75%; }
-  .col-md-pull-10 {
-    right: 83.33333%; }
-  .col-md-pull-11 {
-    right: 91.66667%; }
-  .col-md-pull-12 {
-    right: 100%; }
-  .col-md-push-0 {
-    left: auto; }
-  .col-md-push-1 {
-    left: 8.33333%; }
-  .col-md-push-2 {
-    left: 16.66667%; }
-  .col-md-push-3 {
-    left: 25%; }
-  .col-md-push-4 {
-    left: 33.33333%; }
-  .col-md-push-5 {
-    left: 41.66667%; }
-  .col-md-push-6 {
-    left: 50%; }
-  .col-md-push-7 {
-    left: 58.33333%; }
-  .col-md-push-8 {
-    left: 66.66667%; }
-  .col-md-push-9 {
-    left: 75%; }
-  .col-md-push-10 {
-    left: 83.33333%; }
-  .col-md-push-11 {
-    left: 91.66667%; }
-  .col-md-push-12 {
-    left: 100%; }
-  .col-md-offset-0 {
-    margin-left: 0%; }
-  .col-md-offset-1 {
-    margin-left: 8.33333%; }
-  .col-md-offset-2 {
-    margin-left: 16.66667%; }
-  .col-md-offset-3 {
-    margin-left: 25%; }
-  .col-md-offset-4 {
-    margin-left: 33.33333%; }
-  .col-md-offset-5 {
-    margin-left: 41.66667%; }
-  .col-md-offset-6 {
-    margin-left: 50%; }
-  .col-md-offset-7 {
-    margin-left: 58.33333%; }
-  .col-md-offset-8 {
-    margin-left: 66.66667%; }
-  .col-md-offset-9 {
-    margin-left: 75%; }
-  .col-md-offset-10 {
-    margin-left: 83.33333%; }
-  .col-md-offset-11 {
-    margin-left: 91.66667%; }
-  .col-md-offset-12 {
-    margin-left: 100%; } }
-
-@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-1 {
-    width: 8.33333%; }
-  .col-lg-2 {
-    width: 16.66667%; }
-  .col-lg-3 {
-    width: 25%; }
-  .col-lg-4 {
-    width: 33.33333%; }
-  .col-lg-5 {
-    width: 41.66667%; }
-  .col-lg-6 {
-    width: 50%; }
-  .col-lg-7 {
-    width: 58.33333%; }
-  .col-lg-8 {
-    width: 66.66667%; }
-  .col-lg-9 {
-    width: 75%; }
-  .col-lg-10 {
-    width: 83.33333%; }
-  .col-lg-11 {
-    width: 91.66667%; }
-  .col-lg-12 {
-    width: 100%; }
-  .col-lg-pull-0 {
-    right: auto; }
-  .col-lg-pull-1 {
-    right: 8.33333%; }
-  .col-lg-pull-2 {
-    right: 16.66667%; }
-  .col-lg-pull-3 {
-    right: 25%; }
-  .col-lg-pull-4 {
-    right: 33.33333%; }
-  .col-lg-pull-5 {
-    right: 41.66667%; }
-  .col-lg-pull-6 {
-    right: 50%; }
-  .col-lg-pull-7 {
-    right: 58.33333%; }
-  .col-lg-pull-8 {
-    right: 66.66667%; }
-  .col-lg-pull-9 {
-    right: 75%; }
-  .col-lg-pull-10 {
-    right: 83.33333%; }
-  .col-lg-pull-11 {
-    right: 91.66667%; }
-  .col-lg-pull-12 {
-    right: 100%; }
-  .col-lg-push-0 {
-    left: auto; }
-  .col-lg-push-1 {
-    left: 8.33333%; }
-  .col-lg-push-2 {
-    left: 16.66667%; }
-  .col-lg-push-3 {
-    left: 25%; }
-  .col-lg-push-4 {
-    left: 33.33333%; }
-  .col-lg-push-5 {
-    left: 41.66667%; }
-  .col-lg-push-6 {
-    left: 50%; }
-  .col-lg-push-7 {
-    left: 58.33333%; }
-  .col-lg-push-8 {
-    left: 66.66667%; }
-  .col-lg-push-9 {
-    left: 75%; }
-  .col-lg-push-10 {
-    left: 83.33333%; }
-  .col-lg-push-11 {
-    left: 91.66667%; }
-  .col-lg-push-12 {
-    left: 100%; }
-  .col-lg-offset-0 {
-    margin-left: 0%; }
-  .col-lg-offset-1 {
-    margin-left: 8.33333%; }
-  .col-lg-offset-2 {
-    margin-left: 16.66667%; }
-  .col-lg-offset-3 {
-    margin-left: 25%; }
-  .col-lg-offset-4 {
-    margin-left: 33.33333%; }
-  .col-lg-offset-5 {
-    margin-left: 41.66667%; }
-  .col-lg-offset-6 {
-    margin-left: 50%; }
-  .col-lg-offset-7 {
-    margin-left: 58.33333%; }
-  .col-lg-offset-8 {
-    margin-left: 66.66667%; }
-  .col-lg-offset-9 {
-    margin-left: 75%; }
-  .col-lg-offset-10 {
-    margin-left: 83.33333%; }
-  .col-lg-offset-11 {
-    margin-left: 91.66667%; }
-  .col-lg-offset-12 {
-    margin-left: 100%; } }
-
-table {
-  background-color: transparent; }
-
-caption {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  color: #777777;
-  text-align: left; }
-
-th {
-  text-align: left; }
-
-.table {
-  width: 100%;
-  max-width: 100%;
-  margin-bottom: 20px; }
-  .table > thead > tr > th,
-  .table > thead > tr > td,
-  .table > tbody > tr > th,
-  .table > tbody > tr > td,
-  .table > tfoot > tr > th,
-  .table > tfoot > tr > td {
-    padding: 8px;
-    line-height: 1.42857;
-    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 > caption + thead > tr:first-child > td,
-  .table > colgroup + thead > tr:first-child > th,
-  .table > colgroup + thead > tr:first-child > td,
-  .table > thead:first-child > tr:first-child > th,
-  .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 > thead > tr > td,
-.table-condensed > tbody > tr > th,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > th,
-.table-condensed > tfoot > tr > td {
-  padding: 5px; }
-
-.table-bordered {
-  border: 1px solid #ddd; }
-  .table-bordered > thead > tr > th,
-  .table-bordered > thead > tr > td,
-  .table-bordered > tbody > tr > th,
-  .table-bordered > tbody > tr > td,
-  .table-bordered > tfoot > tr > th,
-  .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-of-type(odd) {
-  background-color: #f9f9f9; }
-
-.table-hover > tbody > tr:hover {
-  background-color: #f5f5f5; }
-
-table col[class*="col-"] {
-  position: static;
-  float: none;
-  display: table-column; }
-
-table td[class*="col-"],
-table th[class*="col-"] {
-  position: static;
-  float: none;
-  display: table-cell; }
-
-.table > thead > tr > td.active,
-.table > thead > tr > th.active,
-.table > thead > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr > td.active,
-.table > tbody > tr > th.active,
-.table > tbody > tr.active > td,
-.table > tbody > tr.active > th,
-.table > tfoot > tr > td.active,
-.table > tfoot > tr > th.active,
-.table > tfoot > tr.active > td,
-.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:hover > .active,
-.table-hover > tbody > tr.active:hover > th {
-  background-color: #e8e8e8; }
-
-.table > thead > tr > td.success,
-.table > thead > tr > th.success,
-.table > thead > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr > td.success,
-.table > tbody > tr > th.success,
-.table > tbody > tr.success > td,
-.table > tbody > tr.success > th,
-.table > tfoot > tr > td.success,
-.table > tfoot > tr > th.success,
-.table > tfoot > tr.success > td,
-.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:hover > .success,
-.table-hover > tbody > tr.success:hover > th {
-  background-color: #d0e9c6; }
-
-.table > thead > tr > td.info,
-.table > thead > tr > th.info,
-.table > thead > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr > td.info,
-.table > tbody > tr > th.info,
-.table > tbody > tr.info > td,
-.table > tbody > tr.info > th,
-.table > tfoot > tr > td.info,
-.table > tfoot > tr > th.info,
-.table > tfoot > tr.info > td,
-.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:hover > .info,
-.table-hover > tbody > tr.info:hover > th {
-  background-color: #c4e3f3; }
-
-.table > thead > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr > td.warning,
-.table > tbody > tr > th.warning,
-.table > tbody > tr.warning > td,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr > td.warning,
-.table > tfoot > tr > th.warning,
-.table > tfoot > tr.warning > td,
-.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:hover > .warning,
-.table-hover > tbody > tr.warning:hover > th {
-  background-color: #faf2cc; }
-
-.table > thead > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr > td.danger,
-.table > tbody > tr > th.danger,
-.table > tbody > tr.danger > td,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr > td.danger,
-.table > tfoot > tr > th.danger,
-.table > tfoot > tr.danger > td,
-.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:hover > .danger,
-.table-hover > tbody > tr.danger:hover > th {
-  background-color: #ebcccc; }
-
-.table-responsive {
-  overflow-x: auto;
-  min-height: 0.01%; }
-  @media screen and (max-width: 767px) {
-    .table-responsive {
-      width: 100%;
-      margin-bottom: 15px;
-      overflow-y: hidden;
-      -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 > thead > tr > td,
-        .table-responsive > .table > tbody > tr > th,
-        .table-responsive > .table > tbody > tr > td,
-        .table-responsive > .table > tfoot > tr > th,
-        .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 > thead > tr > td:first-child,
-        .table-responsive > .table-bordered > tbody > tr > th:first-child,
-        .table-responsive > .table-bordered > tbody > tr > td:first-child,
-        .table-responsive > .table-bordered > tfoot > tr > th: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 > thead > tr > td:last-child,
-        .table-responsive > .table-bordered > tbody > tr > th:last-child,
-        .table-responsive > .table-bordered > tbody > tr > td:last-child,
-        .table-responsive > .table-bordered > tfoot > tr > th: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 > tbody > tr:last-child > td,
-        .table-responsive > .table-bordered > tfoot > tr:last-child > th,
-        .table-responsive > .table-bordered > tfoot > tr:last-child > td {
-          border-bottom: 0; } }
-
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-  min-width: 0; }
-
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 20px;
-  font-size: 21px;
-  line-height: inherit;
-  color: #333333;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5; }
-
-label {
-  display: inline-block;
-  max-width: 100%;
-  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;
-  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.42857;
-  color: #555555; }
-
-.form-control {
-  display: block;
-  width: 100%;
-  height: 34px;
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.42857;
-  color: #555555;
-  background-color: #fff;
-  background-image: none;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
-  -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
-  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }
-  .form-control:focus {
-    border-color: #66afe9;
-    outline: 0;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.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::-ms-expand {
-    border: 0;
-    background-color: transparent; }
-  .form-control[disabled], .form-control[readonly],
-  fieldset[disabled] .form-control {
-    background-color: #eeeeee;
-    opacity: 1; }
-  .form-control[disabled],
-  fieldset[disabled] .form-control {
-    cursor: not-allowed; }
-
-textarea.form-control {
-  height: auto; }
-
-input[type="search"] {
-  -webkit-appearance: none; }
-
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
-  input[type="date"].form-control,
-  input[type="time"].form-control,
-  input[type="datetime-local"].form-control,
-  input[type="month"].form-control {
-    line-height: 34px; }
-  input[type="date"].input-sm, .input-group-sm > input[type="date"].form-control,
-  .input-group-sm > input[type="date"].input-group-addon,
-  .input-group-sm > .input-group-btn > input[type="date"].btn,
-  .input-group-sm input[type="date"],
-  input[type="time"].input-sm,
-  .input-group-sm > input[type="time"].form-control,
-  .input-group-sm > input[type="time"].input-group-addon,
-  .input-group-sm > .input-group-btn > input[type="time"].btn,
-  .input-group-sm
-  input[type="time"],
-  input[type="datetime-local"].input-sm,
-  .input-group-sm > input[type="datetime-local"].form-control,
-  .input-group-sm > input[type="datetime-local"].input-group-addon,
-  .input-group-sm > .input-group-btn > input[type="datetime-local"].btn,
-  .input-group-sm
-  input[type="datetime-local"],
-  input[type="month"].input-sm,
-  .input-group-sm > input[type="month"].form-control,
-  .input-group-sm > input[type="month"].input-group-addon,
-  .input-group-sm > .input-group-btn > input[type="month"].btn,
-  .input-group-sm
-  input[type="month"] {
-    line-height: 30px; }
-  input[type="date"].input-lg, .input-group-lg > input[type="date"].form-control,
-  .input-group-lg > input[type="date"].input-group-addon,
-  .input-group-lg > .input-group-btn > input[type="date"].btn,
-  .input-group-lg input[type="date"],
-  input[type="time"].input-lg,
-  .input-group-lg > input[type="time"].form-control,
-  .input-group-lg > input[type="time"].input-group-addon,
-  .input-group-lg > .input-group-btn > input[type="time"].btn,
-  .input-group-lg
-  input[type="time"],
-  input[type="datetime-local"].input-lg,
-  .input-group-lg > input[type="datetime-local"].form-control,
-  .input-group-lg > input[type="datetime-local"].input-group-addon,
-  .input-group-lg > .input-group-btn > input[type="datetime-local"].btn,
-  .input-group-lg
-  input[type="datetime-local"],
-  input[type="month"].input-lg,
-  .input-group-lg > input[type="month"].form-control,
-  .input-group-lg > input[type="month"].input-group-addon,
-  .input-group-lg > .input-group-btn > input[type="month"].btn,
-  .input-group-lg
-  input[type="month"] {
-    line-height: 46px; } }
-
-.form-group {
-  margin-bottom: 15px; }
-
-.radio,
-.checkbox {
-  position: relative;
-  display: block;
-  margin-top: 10px;
-  margin-bottom: 10px; }
-  .radio label,
-  .checkbox label {
-    min-height: 20px;
-    padding-left: 20px;
-    margin-bottom: 0;
-    font-weight: normal;
-    cursor: pointer; }
-
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
-  position: absolute;
-  margin-left: -20px;
-  margin-top: 4px \9; }
-
-.radio + .radio,
-.checkbox + .checkbox {
-  margin-top: -5px; }
-
-.radio-inline,
-.checkbox-inline {
-  position: relative;
-  display: inline-block;
-  padding-left: 20px;
-  margin-bottom: 0;
-  vertical-align: middle;
-  font-weight: normal;
-  cursor: pointer; }
-
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
-  margin-top: 0;
-  margin-left: 10px; }
-
-input[type="radio"][disabled], input[type="radio"].disabled,
-fieldset[disabled] input[type="radio"],
-input[type="checkbox"][disabled],
-input[type="checkbox"].disabled,
-fieldset[disabled]
-input[type="checkbox"] {
-  cursor: not-allowed; }
-
-.radio-inline.disabled,
-fieldset[disabled] .radio-inline,
-.checkbox-inline.disabled,
-fieldset[disabled]
-.checkbox-inline {
-  cursor: not-allowed; }
-
-.radio.disabled label,
-fieldset[disabled] .radio label,
-.checkbox.disabled label,
-fieldset[disabled]
-.checkbox label {
-  cursor: not-allowed; }
-
-.form-control-static {
-  padding-top: 7px;
-  padding-bottom: 7px;
-  margin-bottom: 0;
-  min-height: 34px; }
-  .form-control-static.input-lg, .input-group-lg > .form-control-static.form-control,
-  .input-group-lg > .form-control-static.input-group-addon,
-  .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control,
-  .input-group-sm > .form-control-static.input-group-addon,
-  .input-group-sm > .input-group-btn > .form-control-static.btn {
-    padding-left: 0;
-    padding-right: 0; }
-
-.input-sm, .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-sm, .input-group-sm > select.form-control,
-.input-group-sm > select.input-group-addon,
-.input-group-sm > .input-group-btn > select.btn {
-  height: 30px;
-  line-height: 30px; }
-
-textarea.input-sm, .input-group-sm > textarea.form-control,
-.input-group-sm > textarea.input-group-addon,
-.input-group-sm > .input-group-btn > textarea.btn,
-select[multiple].input-sm,
-.input-group-sm > select[multiple].form-control,
-.input-group-sm > select[multiple].input-group-addon,
-.input-group-sm > .input-group-btn > select[multiple].btn {
-  height: auto; }
-
-.form-group-sm .form-control {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px; }
-
-.form-group-sm select.form-control {
-  height: 30px;
-  line-height: 30px; }
-
-.form-group-sm textarea.form-control,
-.form-group-sm select[multiple].form-control {
-  height: auto; }
-
-.form-group-sm .form-control-static {
-  height: 30px;
-  min-height: 32px;
-  padding: 6px 10px;
-  font-size: 12px;
-  line-height: 1.5; }
-
-.input-lg, .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.33333;
-  border-radius: 6px; }
-
-select.input-lg, .input-group-lg > select.form-control,
-.input-group-lg > select.input-group-addon,
-.input-group-lg > .input-group-btn > select.btn {
-  height: 46px;
-  line-height: 46px; }
-
-textarea.input-lg, .input-group-lg > textarea.form-control,
-.input-group-lg > textarea.input-group-addon,
-.input-group-lg > .input-group-btn > textarea.btn,
-select[multiple].input-lg,
-.input-group-lg > select[multiple].form-control,
-.input-group-lg > select[multiple].input-group-addon,
-.input-group-lg > .input-group-btn > select[multiple].btn {
-  height: auto; }
-
-.form-group-lg .form-control {
-  height: 46px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33333;
-  border-radius: 6px; }
-
-.form-group-lg select.form-control {
-  height: 46px;
-  line-height: 46px; }
-
-.form-group-lg textarea.form-control,
-.form-group-lg select[multiple].form-control {
-  height: auto; }
-
-.form-group-lg .form-control-static {
-  height: 46px;
-  min-height: 38px;
-  padding: 11px 16px;
-  font-size: 18px;
-  line-height: 1.33333; }
-
-.has-feedback {
-  position: relative; }
-  .has-feedback .form-control {
-    padding-right: 42.5px; }
-
-.form-control-feedback {
-  position: absolute;
-  top: 0;
-  right: 0;
-  z-index: 2;
-  display: block;
-  width: 34px;
-  height: 34px;
-  line-height: 34px;
-  text-align: center;
-  pointer-events: none; }
-
-.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback,
-.input-group-lg > .input-group-addon + .form-control-feedback,
-.input-group-lg > .input-group-btn > .btn + .form-control-feedback,
-.input-group-lg + .form-control-feedback,
-.form-group-lg .form-control + .form-control-feedback {
-  width: 46px;
-  height: 46px;
-  line-height: 46px; }
-
-.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback,
-.input-group-sm > .input-group-addon + .form-control-feedback,
-.input-group-sm > .input-group-btn > .btn + .form-control-feedback,
-.input-group-sm + .form-control-feedback,
-.form-group-sm .form-control + .form-control-feedback {
-  width: 30px;
-  height: 30px;
-  line-height: 30px; }
-
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline,
-.has-success.radio label,
-.has-success.checkbox label,
-.has-success.radio-inline label,
-.has-success.checkbox-inline label {
-  color: #3c763d; }
-
-.has-success .form-control {
-  border-color: #3c763d;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
-  .has-success .form-control:focus {
-    border-color: #2b542c;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }
-
-.has-success .input-group-addon {
-  color: #3c763d;
-  border-color: #3c763d;
-  background-color: #dff0d8; }
-
-.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,
-.has-warning.radio label,
-.has-warning.checkbox label,
-.has-warning.radio-inline label,
-.has-warning.checkbox-inline label {
-  color: #8a6d3b; }
-
-.has-warning .form-control {
-  border-color: #8a6d3b;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
-  .has-warning .form-control:focus {
-    border-color: #66512c;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }
-
-.has-warning .input-group-addon {
-  color: #8a6d3b;
-  border-color: #8a6d3b;
-  background-color: #fcf8e3; }
-
-.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,
-.has-error.radio label,
-.has-error.checkbox label,
-.has-error.radio-inline label,
-.has-error.checkbox-inline label {
-  color: #a94442; }
-
-.has-error .form-control {
-  border-color: #a94442;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
-  .has-error .form-control:focus {
-    border-color: #843534;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }
-
-.has-error .input-group-addon {
-  color: #a94442;
-  border-color: #a94442;
-  background-color: #f2dede; }
-
-.has-error .form-control-feedback {
-  color: #a94442; }
-
-.has-feedback label ~ .form-control-feedback {
-  top: 25px; }
-
-.has-feedback label.sr-only ~ .form-control-feedback {
-  top: 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 .form-control-static {
-    display: inline-block; }
-  .form-inline .input-group {
-    display: inline-table;
-    vertical-align: middle; }
-    .form-inline .input-group .input-group-addon,
-    .form-inline .input-group .input-group-btn,
-    .form-inline .input-group .form-control {
-      width: auto; }
-  .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;
-    margin-top: 0;
-    margin-bottom: 0;
-    vertical-align: middle; }
-    .form-inline .radio label,
-    .form-inline .checkbox label {
-      padding-left: 0; }
-  .form-inline .radio input[type="radio"],
-  .form-inline .checkbox input[type="checkbox"] {
-    position: relative;
-    margin-left: 0; }
-  .form-inline .has-feedback .form-control-feedback {
-    top: 0; } }
-
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
-  margin-top: 0;
-  margin-bottom: 0;
-  padding-top: 7px; }
-
-.form-horizontal .radio,
-.form-horizontal .checkbox {
-  min-height: 27px; }
-
-.form-horizontal .form-group {
-  margin-left: -15px;
-  margin-right: -15px; }
-  .form-horizontal .form-group:before, .form-horizontal .form-group:after {
-    content: " ";
-    display: table; }
-  .form-horizontal .form-group:after {
-    clear: both; }
-
-@media (min-width: 768px) {
-  .form-horizontal .control-label {
-    text-align: right;
-    margin-bottom: 0;
-    padding-top: 7px; } }
-
-.form-horizontal .has-feedback .form-control-feedback {
-  right: 15px; }
-
-@media (min-width: 768px) {
-  .form-horizontal .form-group-lg .control-label {
-    padding-top: 11px;
-    font-size: 18px; } }
-
-@media (min-width: 768px) {
-  .form-horizontal .form-group-sm .control-label {
-    padding-top: 6px;
-    font-size: 12px; } }
-
-.btn {
-  display: inline-block;
-  margin-bottom: 0;
-  font-weight: normal;
-  text-align: center;
-  vertical-align: middle;
-  touch-action: manipulation;
-  cursor: pointer;
-  background-image: none;
-  border: 1px solid transparent;
-  white-space: nowrap;
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.42857;
-  border-radius: 4px;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none; }
-  .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {
-    outline: thin dotted;
-    outline: 5px auto -webkit-focus-ring-color;
-    outline-offset: -2px; }
-  .btn:hover, .btn:focus, .btn.focus {
-    color: #333;
-    text-decoration: none; }
-  .btn:active, .btn.active {
-    outline: 0;
-    background-image: none;
-    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-    box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }
-  .btn.disabled, .btn[disabled],
-  fieldset[disabled] .btn {
-    cursor: not-allowed;
-    opacity: 0.65;
-    filter: alpha(opacity=65);
-    -webkit-box-shadow: none;
-    box-shadow: none; }
-
-a.btn.disabled,
-fieldset[disabled] a.btn {
-  pointer-events: none; }
-
-.btn-default {
-  color: #333;
-  background-color: #fff;
-  border-color: #ccc; }
-  .btn-default:focus, .btn-default.focus {
-    color: #333;
-    background-color: #e6e6e6;
-    border-color: #8c8c8c; }
-  .btn-default:hover {
-    color: #333;
-    background-color: #e6e6e6;
-    border-color: #adadad; }
-  .btn-default:active, .btn-default.active,
-  .open > .btn-default.dropdown-toggle {
-    color: #333;
-    background-color: #e6e6e6;
-    border-color: #adadad; }
-    .btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus,
-    .open > .btn-default.dropdown-toggle:hover,
-    .open > .btn-default.dropdown-toggle:focus,
-    .open > .btn-default.dropdown-toggle.focus {
-      color: #333;
-      background-color: #d4d4d4;
-      border-color: #8c8c8c; }
-  .btn-default:active, .btn-default.active,
-  .open > .btn-default.dropdown-toggle {
-    background-image: none; }
-  .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus,
-  fieldset[disabled] .btn-default:hover,
-  fieldset[disabled] .btn-default:focus,
-  fieldset[disabled] .btn-default.focus {
-    background-color: #fff;
-    border-color: #ccc; }
-  .btn-default .badge {
-    color: #fff;
-    background-color: #333; }
-
-.btn-primary {
-  color: #fff;
-  background-color: #337ab7;
-  border-color: #2e6da4; }
-  .btn-primary:focus, .btn-primary.focus {
-    color: #fff;
-    background-color: #286090;
-    border-color: #122b40; }
-  .btn-primary:hover {
-    color: #fff;
-    background-color: #286090;
-    border-color: #204d74; }
-  .btn-primary:active, .btn-primary.active,
-  .open > .btn-primary.dropdown-toggle {
-    color: #fff;
-    background-color: #286090;
-    border-color: #204d74; }
-    .btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus,
-    .open > .btn-primary.dropdown-toggle:hover,
-    .open > .btn-primary.dropdown-toggle:focus,
-    .open > .btn-primary.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #204d74;
-      border-color: #122b40; }
-  .btn-primary:active, .btn-primary.active,
-  .open > .btn-primary.dropdown-toggle {
-    background-image: none; }
-  .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus,
-  fieldset[disabled] .btn-primary:hover,
-  fieldset[disabled] .btn-primary:focus,
-  fieldset[disabled] .btn-primary.focus {
-    background-color: #337ab7;
-    border-color: #2e6da4; }
-  .btn-primary .badge {
-    color: #337ab7;
-    background-color: #fff; }
-
-.btn-success {
-  color: #fff;
-  background-color: #5cb85c;
-  border-color: #4cae4c; }
-  .btn-success:focus, .btn-success.focus {
-    color: #fff;
-    background-color: #449d44;
-    border-color: #255625; }
-  .btn-success:hover {
-    color: #fff;
-    background-color: #449d44;
-    border-color: #398439; }
-  .btn-success:active, .btn-success.active,
-  .open > .btn-success.dropdown-toggle {
-    color: #fff;
-    background-color: #449d44;
-    border-color: #398439; }
-    .btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus,
-    .open > .btn-success.dropdown-toggle:hover,
-    .open > .btn-success.dropdown-toggle:focus,
-    .open > .btn-success.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #398439;
-      border-color: #255625; }
-  .btn-success:active, .btn-success.active,
-  .open > .btn-success.dropdown-toggle {
-    background-image: none; }
-  .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus,
-  fieldset[disabled] .btn-success:hover,
-  fieldset[disabled] .btn-success:focus,
-  fieldset[disabled] .btn-success.focus {
-    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:focus, .btn-info.focus {
-    color: #fff;
-    background-color: #31b0d5;
-    border-color: #1b6d85; }
-  .btn-info:hover {
-    color: #fff;
-    background-color: #31b0d5;
-    border-color: #269abc; }
-  .btn-info:active, .btn-info.active,
-  .open > .btn-info.dropdown-toggle {
-    color: #fff;
-    background-color: #31b0d5;
-    border-color: #269abc; }
-    .btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus,
-    .open > .btn-info.dropdown-toggle:hover,
-    .open > .btn-info.dropdown-toggle:focus,
-    .open > .btn-info.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #269abc;
-      border-color: #1b6d85; }
-  .btn-info:active, .btn-info.active,
-  .open > .btn-info.dropdown-toggle {
-    background-image: none; }
-  .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus,
-  fieldset[disabled] .btn-info:hover,
-  fieldset[disabled] .btn-info:focus,
-  fieldset[disabled] .btn-info.focus {
-    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:focus, .btn-warning.focus {
-    color: #fff;
-    background-color: #ec971f;
-    border-color: #985f0d; }
-  .btn-warning:hover {
-    color: #fff;
-    background-color: #ec971f;
-    border-color: #d58512; }
-  .btn-warning:active, .btn-warning.active,
-  .open > .btn-warning.dropdown-toggle {
-    color: #fff;
-    background-color: #ec971f;
-    border-color: #d58512; }
-    .btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus,
-    .open > .btn-warning.dropdown-toggle:hover,
-    .open > .btn-warning.dropdown-toggle:focus,
-    .open > .btn-warning.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #d58512;
-      border-color: #985f0d; }
-  .btn-warning:active, .btn-warning.active,
-  .open > .btn-warning.dropdown-toggle {
-    background-image: none; }
-  .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus,
-  fieldset[disabled] .btn-warning:hover,
-  fieldset[disabled] .btn-warning:focus,
-  fieldset[disabled] .btn-warning.focus {
-    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:focus, .btn-danger.focus {
-    color: #fff;
-    background-color: #c9302c;
-    border-color: #761c19; }
-  .btn-danger:hover {
-    color: #fff;
-    background-color: #c9302c;
-    border-color: #ac2925; }
-  .btn-danger:active, .btn-danger.active,
-  .open > .btn-danger.dropdown-toggle {
-    color: #fff;
-    background-color: #c9302c;
-    border-color: #ac2925; }
-    .btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus,
-    .open > .btn-danger.dropdown-toggle:hover,
-    .open > .btn-danger.dropdown-toggle:focus,
-    .open > .btn-danger.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #ac2925;
-      border-color: #761c19; }
-  .btn-danger:active, .btn-danger.active,
-  .open > .btn-danger.dropdown-toggle {
-    background-image: none; }
-  .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus,
-  fieldset[disabled] .btn-danger:hover,
-  fieldset[disabled] .btn-danger:focus,
-  fieldset[disabled] .btn-danger.focus {
-    background-color: #d9534f;
-    border-color: #d43f3a; }
-  .btn-danger .badge {
-    color: #d9534f;
-    background-color: #fff; }
-
-.btn-link {
-  color: #337ab7;
-  font-weight: normal;
-  border-radius: 0; }
-  .btn-link, .btn-link:active, .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: #23527c;
-    text-decoration: underline;
-    background-color: transparent; }
-  .btn-link[disabled]:hover, .btn-link[disabled]:focus,
-  fieldset[disabled] .btn-link:hover,
-  fieldset[disabled] .btn-link:focus {
-    color: #777777;
-    text-decoration: none; }
-
-.btn-lg, .btn-group-lg > .btn {
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33333;
-  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%; }
-
-.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 0.15s linear;
-  -o-transition: opacity 0.15s linear;
-  transition: opacity 0.15s linear; }
-  .fade.in {
-    opacity: 1; }
-
-.collapse {
-  display: none; }
-  .collapse.in {
-    display: block; }
-
-tr.collapse.in {
-  display: table-row; }
-
-tbody.collapse.in {
-  display: table-row-group; }
-
-.collapsing {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -webkit-transition-property: height, visibility;
-  transition-property: height, visibility;
-  -webkit-transition-duration: 0.35s;
-  transition-duration: 0.35s;
-  -webkit-transition-timing-function: ease;
-  transition-timing-function: ease; }
-
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  margin-left: 2px;
-  vertical-align: middle;
-  border-top: 4px dashed;
-  border-top: 4px solid \9;
-  border-right: 4px solid transparent;
-  border-left: 4px solid transparent; }
-
-.dropup,
-.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;
-  list-style: none;
-  font-size: 14px;
-  text-align: left;
-  background-color: #fff;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  border-radius: 4px;
-  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-  background-clip: padding-box; }
-  .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.42857;
-    color: #333333;
-    white-space: nowrap; }
-
-.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
-  text-decoration: none;
-  color: #262626;
-  background-color: #f5f5f5; }
-
-.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
-  color: #fff;
-  text-decoration: none;
-  outline: 0;
-  background-color: #337ab7; }
-
-.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
-  color: #777777; }
-
-.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  background-color: transparent;
-  background-image: none;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  cursor: not-allowed; }
-
-.open > .dropdown-menu {
-  display: block; }
-
-.open > a {
-  outline: 0; }
-
-.dropdown-menu-right {
-  left: auto;
-  right: 0; }
-
-.dropdown-menu-left {
-  left: 0;
-  right: auto; }
-
-.dropdown-header {
-  display: block;
-  padding: 3px 20px;
-  font-size: 12px;
-  line-height: 1.42857;
-  color: #777777;
-  white-space: nowrap; }
-
-.dropdown-backdrop {
-  position: fixed;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  top: 0;
-  z-index: 990; }
-
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto; }
-
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  border-top: 0;
-  border-bottom: 4px dashed;
-  border-bottom: 4px solid \9;
-  content: ""; }
-
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 2px; }
-
-@media (min-width: 768px) {
-  .navbar-right .dropdown-menu {
-    right: 0;
-    left: auto; }
-  .navbar-right .dropdown-menu-left {
-    left: 0;
-    right: auto; } }
-
-.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 > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,
-    .btn-group-vertical > .btn:hover,
-    .btn-group-vertical > .btn:focus,
-    .btn-group-vertical > .btn:active,
-    .btn-group-vertical > .btn.active {
-      z-index: 2; }
-
-.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:before, .btn-toolbar:after {
-    content: " ";
-    display: table; }
-  .btn-toolbar:after {
-    clear: both; }
-  .btn-toolbar .btn,
-  .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-bottom-right-radius: 0;
-    border-top-right-radius: 0; }
-
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
-  border-bottom-left-radius: 0;
-  border-top-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:not(:last-child) > .btn:last-child,
-.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
-  border-bottom-right-radius: 0;
-  border-top-right-radius: 0; }
-
-.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  border-bottom-left-radius: 0;
-  border-top-left-radius: 0; }
-
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0; }
-
-.btn-group > .btn + .dropdown-toggle {
-  padding-left: 8px;
-  padding-right: 8px; }
-
-.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle {
-  padding-left: 12px;
-  padding-right: 12px; }
-
-.btn-group.open .dropdown-toggle {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-  box-shadow: inset 0 3px 5px rgba(0, 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, .btn-group-lg > .btn .caret {
-  border-width: 5px 5px 0;
-  border-bottom-width: 0; }
-
-.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .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:before, .btn-group-vertical > .btn-group:after {
-  content: " ";
-  display: table; }
-
-.btn-group-vertical > .btn-group:after {
-  clear: both; }
-
-.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-top-left-radius: 4px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0; }
-
-.btn-group-vertical > .btn:last-child:not(:first-child) {
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-  border-bottom-right-radius: 4px;
-  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-right-radius: 0;
-  border-top-left-radius: 0; }
-
-.btn-group-justified {
-  display: table;
-  width: 100%;
-  table-layout: fixed;
-  border-collapse: separate; }
-  .btn-group-justified > .btn,
-  .btn-group-justified > .btn-group {
-    float: none;
-    display: table-cell;
-    width: 1%; }
-  .btn-group-justified > .btn-group .btn {
-    width: 100%; }
-  .btn-group-justified > .btn-group .dropdown-menu {
-    left: auto; }
-
-[data-toggle="buttons"] > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn input[type="checkbox"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
-  position: absolute;
-  clip: rect(0, 0, 0, 0);
-  pointer-events: none; }
-
-.input-group {
-  position: relative;
-  display: table;
-  border-collapse: separate; }
-  .input-group[class*="col-"] {
-    float: none;
-    padding-left: 0;
-    padding-right: 0; }
-  .input-group .form-control {
-    position: relative;
-    z-index: 2;
-    float: left;
-    width: 100%;
-    margin-bottom: 0; }
-    .input-group .form-control:focus {
-      z-index: 3; }
-
-.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: #555555;
-  text-align: center;
-  background-color: #eeeeee;
-  border: 1px solid #ccc;
-  border-radius: 4px; }
-  .input-group-addon.input-sm,
-  .input-group-sm > .input-group-addon,
-  .input-group-sm > .input-group-btn > .input-group-addon.btn {
-    padding: 5px 10px;
-    font-size: 12px;
-    border-radius: 3px; }
-  .input-group-addon.input-lg,
-  .input-group-lg > .input-group-addon,
-  .input-group-lg > .input-group-btn > .input-group-addon.btn {
-    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-bottom-right-radius: 0;
-  border-top-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-bottom-left-radius: 0;
-  border-top-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 {
-    z-index: 2;
-    margin-left: -1px; }
-
-.nav {
-  margin-bottom: 0;
-  padding-left: 0;
-  list-style: none; }
-  .nav:before, .nav:after {
-    content: " ";
-    display: table; }
-  .nav:after {
-    clear: both; }
-  .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: #eeeeee; }
-    .nav > li.disabled > a {
-      color: #777777; }
-      .nav > li.disabled > a:hover, .nav > li.disabled > a:focus {
-        color: #777777;
-        text-decoration: none;
-        background-color: transparent;
-        cursor: not-allowed; }
-  .nav .open > a, .nav .open > a:hover, .nav .open > a:focus {
-    background-color: #eeeeee;
-    border-color: #337ab7; }
-  .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.42857;
-      border: 1px solid transparent;
-      border-radius: 4px 4px 0 0; }
-      .nav-tabs > li > a:hover {
-        border-color: #eeeeee #eeeeee #ddd; }
-    .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
-      color: #555555;
-      background-color: #fff;
-      border: 1px solid #ddd;
-      border-bottom-color: transparent;
-      cursor: default; }
-
-.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: #337ab7; }
-
-.nav-stacked > li {
-  float: none; }
-  .nav-stacked > li + li {
-    margin-top: 2px;
-    margin-left: 0; }
-
-.nav-justified, .nav-tabs.nav-justified {
-  width: 100%; }
-  .nav-justified > li, .nav-tabs.nav-justified > li {
-    float: none; }
-    .nav-justified > li > a, .nav-tabs.nav-justified > li > a {
-      text-align: center;
-      margin-bottom: 5px; }
-  .nav-justified > .dropdown .dropdown-menu {
-    top: auto;
-    left: auto; }
-  @media (min-width: 768px) {
-    .nav-justified > li, .nav-tabs.nav-justified > li {
-      display: table-cell;
-      width: 1%; }
-      .nav-justified > li > a, .nav-tabs.nav-justified > li > a {
-        margin-bottom: 0; } }
-
-.nav-tabs-justified, .nav-tabs.nav-justified {
-  border-bottom: 0; }
-  .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {
-    margin-right: 0;
-    border-radius: 4px; }
-  .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,
-  .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,
-  .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {
-    border: 1px solid #ddd; }
-  @media (min-width: 768px) {
-    .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {
-      border-bottom: 1px solid #ddd;
-      border-radius: 4px 4px 0 0; }
-    .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,
-    .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,
-    .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-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-right-radius: 0;
-  border-top-left-radius: 0; }
-
-.navbar {
-  position: relative;
-  min-height: 50px;
-  margin-bottom: 20px;
-  border: 1px solid transparent; }
-  .navbar:before, .navbar:after {
-    content: " ";
-    display: table; }
-  .navbar:after {
-    clear: both; }
-  @media (min-width: 768px) {
-    .navbar {
-      border-radius: 4px; } }
-
-.navbar-header:before, .navbar-header:after {
-  content: " ";
-  display: table; }
-
-.navbar-header:after {
-  clear: both; }
-
-@media (min-width: 768px) {
-  .navbar-header {
-    float: left; } }
-
-.navbar-collapse {
-  overflow-x: visible;
-  padding-right: 15px;
-  padding-left: 15px;
-  border-top: 1px solid transparent;
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
-  -webkit-overflow-scrolling: touch; }
-  .navbar-collapse:before, .navbar-collapse:after {
-    content: " ";
-    display: table; }
-  .navbar-collapse:after {
-    clear: both; }
-  .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-left: 0;
-        padding-right: 0; } }
-
-.navbar-fixed-top .navbar-collapse,
-.navbar-fixed-bottom .navbar-collapse {
-  max-height: 340px; }
-  @media (max-device-width: 480px) and (orientation: landscape) {
-    .navbar-fixed-top .navbar-collapse,
-    .navbar-fixed-bottom .navbar-collapse {
-      max-height: 200px; } }
-
-.container > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-header,
-.container-fluid > .navbar-collapse {
-  margin-right: -15px;
-  margin-left: -15px; }
-  @media (min-width: 768px) {
-    .container > .navbar-header,
-    .container > .navbar-collapse,
-    .container-fluid > .navbar-header,
-    .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;
-  padding: 15px 15px;
-  font-size: 18px;
-  line-height: 20px;
-  height: 50px; }
-  .navbar-brand:hover, .navbar-brand:focus {
-    text-decoration: none; }
-  .navbar-brand > img {
-    display: block; }
-  @media (min-width: 768px) {
-    .navbar > .container .navbar-brand,
-    .navbar > .container-fluid .navbar-brand {
-      margin-left: -15px; } }
-
-.navbar-toggle {
-  position: relative;
-  float: right;
-  margin-right: 15px;
-  padding: 9px 10px;
-  margin-top: 8px;
-  margin-bottom: 8px;
-  background-color: transparent;
-  background-image: none;
-  border: 1px solid transparent;
-  border-radius: 4px; }
-  .navbar-toggle:focus {
-    outline: 0; }
-  .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-form {
-  margin-left: -15px;
-  margin-right: -15px;
-  padding: 10px 15px;
-  border-top: 1px solid transparent;
-  border-bottom: 1px solid transparent;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-  margin-top: 8px;
-  margin-bottom: 8px; }
-  @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 .form-control-static {
-      display: inline-block; }
-    .navbar-form .input-group {
-      display: inline-table;
-      vertical-align: middle; }
-      .navbar-form .input-group .input-group-addon,
-      .navbar-form .input-group .input-group-btn,
-      .navbar-form .input-group .form-control {
-        width: auto; }
-    .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;
-      margin-top: 0;
-      margin-bottom: 0;
-      vertical-align: middle; }
-      .navbar-form .radio label,
-      .navbar-form .checkbox label {
-        padding-left: 0; }
-    .navbar-form .radio input[type="radio"],
-    .navbar-form .checkbox input[type="checkbox"] {
-      position: relative;
-      margin-left: 0; }
-    .navbar-form .has-feedback .form-control-feedback {
-      top: 0; } }
-  @media (max-width: 767px) {
-    .navbar-form .form-group {
-      margin-bottom: 5px; }
-      .navbar-form .form-group:last-child {
-        margin-bottom: 0; } }
-  @media (min-width: 768px) {
-    .navbar-form {
-      width: auto;
-      border: 0;
-      margin-left: 0;
-      margin-right: 0;
-      padding-top: 0;
-      padding-bottom: 0;
-      -webkit-box-shadow: none;
-      box-shadow: none; } }
-
-.navbar-nav > li > .dropdown-menu {
-  margin-top: 0;
-  border-top-right-radius: 0;
-  border-top-left-radius: 0; }
-
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
-  margin-bottom: 0;
-  border-top-right-radius: 4px;
-  border-top-left-radius: 4px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0; }
-
-.navbar-btn {
-  margin-top: 8px;
-  margin-bottom: 8px; }
-  .navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn {
-    margin-top: 10px;
-    margin-bottom: 10px; }
-  .navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn {
-    margin-top: 14px;
-    margin-bottom: 14px; }
-
-.navbar-text {
-  margin-top: 15px;
-  margin-bottom: 15px; }
-  @media (min-width: 768px) {
-    .navbar-text {
-      float: left;
-      margin-left: 15px;
-      margin-right: 15px; } }
-
-@media (min-width: 768px) {
-  .navbar-left {
-    float: left !important; }
-  .navbar-right {
-    float: right !important;
-    margin-right: -15px; }
-    .navbar-right ~ .navbar-right {
-      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 {
-    background-color: #e7e7e7;
-    color: #555; }
-  @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-default .btn-link {
-    color: #777; }
-    .navbar-default .btn-link:hover, .navbar-default .btn-link:focus {
-      color: #333; }
-    .navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus,
-    fieldset[disabled] .navbar-default .btn-link:hover,
-    fieldset[disabled] .navbar-default .btn-link:focus {
-      color: #ccc; }
-
-.navbar-inverse {
-  background-color: #222;
-  border-color: #090909; }
-  .navbar-inverse .navbar-brand {
-    color: #9d9d9d; }
-    .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {
-      color: #fff;
-      background-color: transparent; }
-  .navbar-inverse .navbar-text {
-    color: #9d9d9d; }
-  .navbar-inverse .navbar-nav > li > a {
-    color: #9d9d9d; }
-    .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: #090909; }
-  .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 {
-    background-color: #090909;
-    color: #fff; }
-  @media (max-width: 767px) {
-    .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
-      border-color: #090909; }
-    .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
-      background-color: #090909; }
-    .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
-      color: #9d9d9d; }
-      .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
-        color: #fff;
-        background-color: transparent; }
-    .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
-      color: #fff;
-      background-color: #090909; }
-    .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-      color: #444;
-      background-color: transparent; } }
-  .navbar-inverse .navbar-link {
-    color: #9d9d9d; }
-    .navbar-inverse .navbar-link:hover {
-      color: #fff; }
-  .navbar-inverse .btn-link {
-    color: #9d9d9d; }
-    .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {
-      color: #fff; }
-    .navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus,
-    fieldset[disabled] .navbar-inverse .btn-link:hover,
-    fieldset[disabled] .navbar-inverse .btn-link:focus {
-      color: #444; }
-
-.breadcrumb {
-  padding: 8px 15px;
-  margin-bottom: 20px;
-  list-style: none;
-  background-color: #f5f5f5;
-  border-radius: 4px; }
-  .breadcrumb > li {
-    display: inline-block; }
-    .breadcrumb > li + li:before {
-      content: "/ ";
-      padding: 0 5px;
-      color: #ccc; }
-  .breadcrumb > .active {
-    color: #777777; }
-
-.pagination {
-  display: inline-block;
-  padding-left: 0;
-  margin: 20px 0;
-  border-radius: 4px; }
-  .pagination > li {
-    display: inline; }
-    .pagination > li > a,
-    .pagination > li > span {
-      position: relative;
-      float: left;
-      padding: 6px 12px;
-      line-height: 1.42857;
-      text-decoration: none;
-      color: #337ab7;
-      background-color: #fff;
-      border: 1px solid #ddd;
-      margin-left: -1px; }
-    .pagination > li:first-child > a,
-    .pagination > li:first-child > span {
-      margin-left: 0;
-      border-bottom-left-radius: 4px;
-      border-top-left-radius: 4px; }
-    .pagination > li:last-child > a,
-    .pagination > li:last-child > span {
-      border-bottom-right-radius: 4px;
-      border-top-right-radius: 4px; }
-  .pagination > li > a:hover, .pagination > li > a:focus,
-  .pagination > li > span:hover,
-  .pagination > li > span:focus {
-    z-index: 2;
-    color: #23527c;
-    background-color: #eeeeee;
-    border-color: #ddd; }
-  .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,
-  .pagination > .active > span,
-  .pagination > .active > span:hover,
-  .pagination > .active > span:focus {
-    z-index: 3;
-    color: #fff;
-    background-color: #337ab7;
-    border-color: #337ab7;
-    cursor: default; }
-  .pagination > .disabled > span,
-  .pagination > .disabled > span:hover,
-  .pagination > .disabled > span:focus,
-  .pagination > .disabled > a,
-  .pagination > .disabled > a:hover,
-  .pagination > .disabled > a:focus {
-    color: #777777;
-    background-color: #fff;
-    border-color: #ddd;
-    cursor: not-allowed; }
-
-.pagination-lg > li > a,
-.pagination-lg > li > span {
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33333; }
-
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
-  border-bottom-left-radius: 6px;
-  border-top-left-radius: 6px; }
-
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
-  border-bottom-right-radius: 6px;
-  border-top-right-radius: 6px; }
-
-.pagination-sm > li > a,
-.pagination-sm > li > span {
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5; }
-
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
-  border-bottom-left-radius: 3px;
-  border-top-left-radius: 3px; }
-
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
-  border-bottom-right-radius: 3px;
-  border-top-right-radius: 3px; }
-
-.pager {
-  padding-left: 0;
-  margin: 20px 0;
-  list-style: none;
-  text-align: center; }
-  .pager:before, .pager:after {
-    content: " ";
-    display: table; }
-  .pager:after {
-    clear: both; }
-  .pager li {
-    display: inline; }
-    .pager li > a,
-    .pager li > span {
-      display: inline-block;
-      padding: 5px 14px;
-      background-color: #fff;
-      border: 1px solid #ddd;
-      border-radius: 15px; }
-    .pager li > a:hover,
-    .pager li > a:focus {
-      text-decoration: none;
-      background-color: #eeeeee; }
-  .pager .next > a,
-  .pager .next > span {
-    float: right; }
-  .pager .previous > a,
-  .pager .previous > span {
-    float: left; }
-  .pager .disabled > a,
-  .pager .disabled > a:hover,
-  .pager .disabled > a:focus,
-  .pager .disabled > span {
-    color: #777777;
-    background-color: #fff;
-    cursor: not-allowed; }
-
-.label {
-  display: inline;
-  padding: .2em .6em .3em;
-  font-size: 75%;
-  font-weight: bold;
-  line-height: 1;
-  color: #fff;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: baseline;
-  border-radius: .25em; }
-  .label:empty {
-    display: none; }
-  .btn .label {
-    position: relative;
-    top: -1px; }
-
-a.label:hover, a.label:focus {
-  color: #fff;
-  text-decoration: none;
-  cursor: pointer; }
-
-.label-default {
-  background-color: #777777; }
-  .label-default[href]:hover, .label-default[href]:focus {
-    background-color: #5e5e5e; }
-
-.label-primary {
-  background-color: #337ab7; }
-  .label-primary[href]:hover, .label-primary[href]:focus {
-    background-color: #286090; }
-
-.label-success {
-  background-color: #5cb85c; }
-  .label-success[href]:hover, .label-success[href]:focus {
-    background-color: #449d44; }
-
-.label-info {
-  background-color: #5bc0de; }
-  .label-info[href]:hover, .label-info[href]:focus {
-    background-color: #31b0d5; }
-
-.label-warning {
-  background-color: #f0ad4e; }
-  .label-warning[href]:hover, .label-warning[href]:focus {
-    background-color: #ec971f; }
-
-.label-danger {
-  background-color: #d9534f; }
-  .label-danger[href]:hover, .label-danger[href]:focus {
-    background-color: #c9302c; }
-
-.badge {
-  display: inline-block;
-  min-width: 10px;
-  padding: 3px 7px;
-  font-size: 12px;
-  font-weight: bold;
-  color: #fff;
-  line-height: 1;
-  vertical-align: middle;
-  white-space: nowrap;
-  text-align: center;
-  background-color: #777777;
-  border-radius: 10px; }
-  .badge:empty {
-    display: none; }
-  .btn .badge {
-    position: relative;
-    top: -1px; }
-  .btn-xs .badge, .btn-group-xs > .btn .badge,
-  .btn-group-xs > .btn .badge {
-    top: 0;
-    padding: 1px 5px; }
-  .list-group-item.active > .badge,
-  .nav-pills > .active > a > .badge {
-    color: #337ab7;
-    background-color: #fff; }
-  .list-group-item > .badge {
-    float: right; }
-  .list-group-item > .badge + .badge {
-    margin-right: 5px; }
-  .nav-pills > li > a > .badge {
-    margin-left: 3px; }
-
-a.badge:hover, a.badge:focus {
-  color: #fff;
-  text-decoration: none;
-  cursor: pointer; }
-
-.jumbotron {
-  padding-top: 30px;
-  padding-bottom: 30px;
-  margin-bottom: 30px;
-  color: inherit;
-  background-color: #eeeeee; }
-  .jumbotron h1,
-  .jumbotron .h1 {
-    color: inherit; }
-  .jumbotron p {
-    margin-bottom: 15px;
-    font-size: 21px;
-    font-weight: 200; }
-  .jumbotron > hr {
-    border-top-color: #d5d5d5; }
-  .container .jumbotron,
-  .container-fluid .jumbotron {
-    border-radius: 6px;
-    padding-left: 15px;
-    padding-right: 15px; }
-  .jumbotron .container {
-    max-width: 100%; }
-  @media screen and (min-width: 768px) {
-    .jumbotron {
-      padding-top: 48px;
-      padding-bottom: 48px; }
-      .container .jumbotron,
-      .container-fluid .jumbotron {
-        padding-left: 60px;
-        padding-right: 60px; }
-      .jumbotron h1,
-      .jumbotron .h1 {
-        font-size: 63px; } }
-
-.thumbnail {
-  display: block;
-  padding: 4px;
-  margin-bottom: 20px;
-  line-height: 1.42857;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  -webkit-transition: border 0.2s ease-in-out;
-  -o-transition: border 0.2s ease-in-out;
-  transition: border 0.2s ease-in-out; }
-  .thumbnail > img,
-  .thumbnail a > img {
-    display: block;
-    max-width: 100%;
-    height: auto;
-    margin-left: auto;
-    margin-right: auto; }
-  .thumbnail .caption {
-    padding: 9px;
-    color: #333333; }
-
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
-  border-color: #337ab7; }
-
-.alert {
-  padding: 15px;
-  margin-bottom: 20px;
-  border: 1px solid transparent;
-  border-radius: 4px; }
-  .alert h4 {
-    margin-top: 0;
-    color: inherit; }
-  .alert .alert-link {
-    font-weight: bold; }
-  .alert > p,
-  .alert > ul {
-    margin-bottom: 0; }
-  .alert > p + p {
-    margin-top: 5px; }
-
-.alert-dismissable,
-.alert-dismissible {
-  padding-right: 35px; }
-  .alert-dismissable .close,
-  .alert-dismissible .close {
-    position: relative;
-    top: -2px;
-    right: -21px;
-    color: inherit; }
-
-.alert-success {
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-  color: #3c763d; }
-  .alert-success hr {
-    border-top-color: #c9e2b3; }
-  .alert-success .alert-link {
-    color: #2b542c; }
-
-.alert-info {
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-  color: #31708f; }
-  .alert-info hr {
-    border-top-color: #a6e1ec; }
-  .alert-info .alert-link {
-    color: #245269; }
-
-.alert-warning {
-  background-color: #fcf8e3;
-  border-color: #faebcc;
-  color: #8a6d3b; }
-  .alert-warning hr {
-    border-top-color: #f7e1b5; }
-  .alert-warning .alert-link {
-    color: #66512c; }
-
-.alert-danger {
-  background-color: #f2dede;
-  border-color: #ebccd1;
-  color: #a94442; }
-  .alert-danger hr {
-    border-top-color: #e4b9c0; }
-  .alert-danger .alert-link {
-    color: #843534; }
-
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0; }
-  to {
-    background-position: 0 0; } }
-
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0; }
-  to {
-    background-position: 0 0; } }
-
-.progress {
-  overflow: hidden;
-  height: 20px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); }
-
-.progress-bar {
-  float: left;
-  width: 0%;
-  height: 100%;
-  font-size: 12px;
-  line-height: 20px;
-  color: #fff;
-  text-align: center;
-  background-color: #337ab7;
-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  -webkit-transition: width 0.6s ease;
-  -o-transition: width 0.6s ease;
-  transition: width 0.6s ease; }
-
-.progress-striped .progress-bar,
-.progress-bar-striped {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-size: 40px 40px; }
-
-.progress.active .progress-bar,
-.progress-bar.active {
-  -webkit-animation: progress-bar-stripes 2s linear infinite;
-  -o-animation: progress-bar-stripes 2s linear infinite;
-  animation: progress-bar-stripes 2s linear infinite; }
-
-.progress-bar-success {
-  background-color: #5cb85c; }
-  .progress-striped .progress-bar-success {
-    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }
-
-.progress-bar-info {
-  background-color: #5bc0de; }
-  .progress-striped .progress-bar-info {
-    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }
-
-.progress-bar-warning {
-  background-color: #f0ad4e; }
-  .progress-striped .progress-bar-warning {
-    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }
-
-.progress-bar-danger {
-  background-color: #d9534f; }
-  .progress-striped .progress-bar-danger {
-    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }
-
-.media {
-  margin-top: 15px; }
-  .media:first-child {
-    margin-top: 0; }
-
-.media,
-.media-body {
-  zoom: 1;
-  overflow: hidden; }
-
-.media-body {
-  width: 10000px; }
-
-.media-object {
-  display: block; }
-  .media-object.img-thumbnail {
-    max-width: none; }
-
-.media-right,
-.media > .pull-right {
-  padding-left: 10px; }
-
-.media-left,
-.media > .pull-left {
-  padding-right: 10px; }
-
-.media-left,
-.media-right,
-.media-body {
-  display: table-cell;
-  vertical-align: top; }
-
-.media-middle {
-  vertical-align: middle; }
-
-.media-bottom {
-  vertical-align: bottom; }
-
-.media-heading {
-  margin-top: 0;
-  margin-bottom: 5px; }
-
-.media-list {
-  padding-left: 0;
-  list-style: none; }
-
-.list-group {
-  margin-bottom: 20px;
-  padding-left: 0; }
-
-.list-group-item {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-  margin-bottom: -1px;
-  background-color: #fff;
-  border: 1px solid #ddd; }
-  .list-group-item:first-child {
-    border-top-right-radius: 4px;
-    border-top-left-radius: 4px; }
-  .list-group-item:last-child {
-    margin-bottom: 0;
-    border-bottom-right-radius: 4px;
-    border-bottom-left-radius: 4px; }
-
-a.list-group-item,
-button.list-group-item {
-  color: #555; }
-  a.list-group-item .list-group-item-heading,
-  button.list-group-item .list-group-item-heading {
-    color: #333; }
-  a.list-group-item:hover, a.list-group-item:focus,
-  button.list-group-item:hover,
-  button.list-group-item:focus {
-    text-decoration: none;
-    color: #555;
-    background-color: #f5f5f5; }
-
-button.list-group-item {
-  width: 100%;
-  text-align: left; }
-
-.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus {
-  background-color: #eeeeee;
-  color: #777777;
-  cursor: not-allowed; }
-  .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading {
-    color: inherit; }
-  .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text {
-    color: #777777; }
-
-.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {
-  z-index: 2;
-  color: #fff;
-  background-color: #337ab7;
-  border-color: #337ab7; }
-  .list-group-item.active .list-group-item-heading,
-  .list-group-item.active .list-group-item-heading > small,
-  .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading,
-  .list-group-item.active:hover .list-group-item-heading > small,
-  .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading,
-  .list-group-item.active:focus .list-group-item-heading > small,
-  .list-group-item.active:focus .list-group-item-heading > .small {
-    color: inherit; }
-  .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text {
-    color: #c7ddef; }
-
-.list-group-item-success {
-  color: #3c763d;
-  background-color: #dff0d8; }
-
-a.list-group-item-success,
-button.list-group-item-success {
-  color: #3c763d; }
-  a.list-group-item-success .list-group-item-heading,
-  button.list-group-item-success .list-group-item-heading {
-    color: inherit; }
-  a.list-group-item-success:hover, a.list-group-item-success:focus,
-  button.list-group-item-success:hover,
-  button.list-group-item-success:focus {
-    color: #3c763d;
-    background-color: #d0e9c6; }
-  a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus,
-  button.list-group-item-success.active,
-  button.list-group-item-success.active:hover,
-  button.list-group-item-success.active:focus {
-    color: #fff;
-    background-color: #3c763d;
-    border-color: #3c763d; }
-
-.list-group-item-info {
-  color: #31708f;
-  background-color: #d9edf7; }
-
-a.list-group-item-info,
-button.list-group-item-info {
-  color: #31708f; }
-  a.list-group-item-info .list-group-item-heading,
-  button.list-group-item-info .list-group-item-heading {
-    color: inherit; }
-  a.list-group-item-info:hover, a.list-group-item-info:focus,
-  button.list-group-item-info:hover,
-  button.list-group-item-info:focus {
-    color: #31708f;
-    background-color: #c4e3f3; }
-  a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus,
-  button.list-group-item-info.active,
-  button.list-group-item-info.active:hover,
-  button.list-group-item-info.active:focus {
-    color: #fff;
-    background-color: #31708f;
-    border-color: #31708f; }
-
-.list-group-item-warning {
-  color: #8a6d3b;
-  background-color: #fcf8e3; }
-
-a.list-group-item-warning,
-button.list-group-item-warning {
-  color: #8a6d3b; }
-  a.list-group-item-warning .list-group-item-heading,
-  button.list-group-item-warning .list-group-item-heading {
-    color: inherit; }
-  a.list-group-item-warning:hover, a.list-group-item-warning:focus,
-  button.list-group-item-warning:hover,
-  button.list-group-item-warning:focus {
-    color: #8a6d3b;
-    background-color: #faf2cc; }
-  a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus,
-  button.list-group-item-warning.active,
-  button.list-group-item-warning.active:hover,
-  button.list-group-item-warning.active:focus {
-    color: #fff;
-    background-color: #8a6d3b;
-    border-color: #8a6d3b; }
-
-.list-group-item-danger {
-  color: #a94442;
-  background-color: #f2dede; }
-
-a.list-group-item-danger,
-button.list-group-item-danger {
-  color: #a94442; }
-  a.list-group-item-danger .list-group-item-heading,
-  button.list-group-item-danger .list-group-item-heading {
-    color: inherit; }
-  a.list-group-item-danger:hover, a.list-group-item-danger:focus,
-  button.list-group-item-danger:hover,
-  button.list-group-item-danger:focus {
-    color: #a94442;
-    background-color: #ebcccc; }
-  a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus,
-  button.list-group-item-danger.active,
-  button.list-group-item-danger.active:hover,
-  button.list-group-item-danger.active:focus {
-    color: #fff;
-    background-color: #a94442;
-    border-color: #a94442; }
-
-.list-group-item-heading {
-  margin-top: 0;
-  margin-bottom: 5px; }
-
-.list-group-item-text {
-  margin-bottom: 0;
-  line-height: 1.3; }
-
-.panel {
-  margin-bottom: 20px;
-  background-color: #fff;
-  border: 1px solid transparent;
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); }
-
-.panel-body {
-  padding: 15px; }
-  .panel-body:before, .panel-body:after {
-    content: " ";
-    display: table; }
-  .panel-body:after {
-    clear: both; }
-
-.panel-heading {
-  padding: 10px 15px;
-  border-bottom: 1px solid transparent;
-  border-top-right-radius: 3px;
-  border-top-left-radius: 3px; }
-  .panel-heading > .dropdown .dropdown-toggle {
-    color: inherit; }
-
-.panel-title {
-  margin-top: 0;
-  margin-bottom: 0;
-  font-size: 16px;
-  color: inherit; }
-  .panel-title > a,
-  .panel-title > small,
-  .panel-title > .small,
-  .panel-title > small > a,
-  .panel-title > .small > a {
-    color: inherit; }
-
-.panel-footer {
-  padding: 10px 15px;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px; }
-
-.panel > .list-group,
-.panel > .panel-collapse > .list-group {
-  margin-bottom: 0; }
-  .panel > .list-group .list-group-item,
-  .panel > .panel-collapse > .list-group .list-group-item {
-    border-width: 1px 0;
-    border-radius: 0; }
-  .panel > .list-group:first-child .list-group-item:first-child,
-  .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
-    border-top: 0;
-    border-top-right-radius: 3px;
-    border-top-left-radius: 3px; }
-  .panel > .list-group:last-child .list-group-item:last-child,
-  .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
-    border-bottom: 0;
-    border-bottom-right-radius: 3px;
-    border-bottom-left-radius: 3px; }
-
-.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
-  border-top-right-radius: 0;
-  border-top-left-radius: 0; }
-
-.panel-heading + .list-group .list-group-item:first-child {
-  border-top-width: 0; }
-
-.list-group + .panel-footer {
-  border-top-width: 0; }
-
-.panel > .table,
-.panel > .table-responsive > .table,
-.panel > .panel-collapse > .table {
-  margin-bottom: 0; }
-  .panel > .table caption,
-  .panel > .table-responsive > .table caption,
-  .panel > .panel-collapse > .table caption {
-    padding-left: 15px;
-    padding-right: 15px; }
-
-.panel > .table:first-child,
-.panel > .table-responsive:first-child > .table:first-child {
-  border-top-right-radius: 3px;
-  border-top-left-radius: 3px; }
-  .panel > .table:first-child > thead:first-child > tr:first-child,
-  .panel > .table:first-child > tbody:first-child > tr:first-child,
-  .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
-  .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
-    border-top-left-radius: 3px;
-    border-top-right-radius: 3px; }
-    .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
-    .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
-    .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-    .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
-    .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
-    .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
-    .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-    .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
-      border-top-left-radius: 3px; }
-    .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
-    .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
-    .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-    .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
-    .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
-    .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
-    .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-    .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
-      border-top-right-radius: 3px; }
-
-.panel > .table:last-child,
-.panel > .table-responsive:last-child > .table:last-child {
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px; }
-  .panel > .table:last-child > tbody:last-child > tr:last-child,
-  .panel > .table:last-child > tfoot:last-child > tr:last-child,
-  .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
-  .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
-    border-bottom-left-radius: 3px;
-    border-bottom-right-radius: 3px; }
-    .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-    .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-    .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-    .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
-    .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-    .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-    .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-    .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
-      border-bottom-left-radius: 3px; }
-    .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-    .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-    .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-    .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
-    .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-    .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-    .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-    .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
-      border-bottom-right-radius: 3px; }
-
-.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive,
-.panel > .table + .panel-body,
-.panel > .table-responsive + .panel-body {
-  border-top: 1px solid #ddd; }
-
-.panel > .table > tbody:first-child > tr:first-child th,
-.panel > .table > tbody:first-child > tr:first-child td {
-  border-top: 0; }
-
-.panel > .table-bordered,
-.panel > .table-responsive > .table-bordered {
-  border: 0; }
-  .panel > .table-bordered > thead > tr > th:first-child,
-  .panel > .table-bordered > thead > tr > td:first-child,
-  .panel > .table-bordered > tbody > tr > th:first-child,
-  .panel > .table-bordered > tbody > tr > td:first-child,
-  .panel > .table-bordered > tfoot > tr > th:first-child,
-  .panel > .table-bordered > tfoot > tr > td:first-child,
-  .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
-  .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
-  .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
-  .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
-  .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-  .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-    border-left: 0; }
-  .panel > .table-bordered > thead > tr > th:last-child,
-  .panel > .table-bordered > thead > tr > td:last-child,
-  .panel > .table-bordered > tbody > tr > th:last-child,
-  .panel > .table-bordered > tbody > tr > td:last-child,
-  .panel > .table-bordered > tfoot > tr > th:last-child,
-  .panel > .table-bordered > tfoot > tr > td:last-child,
-  .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
-  .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
-  .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
-  .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
-  .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-  .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-    border-right: 0; }
-  .panel > .table-bordered > thead > tr:first-child > td,
-  .panel > .table-bordered > thead > tr:first-child > th,
-  .panel > .table-bordered > tbody > tr:first-child > td,
-  .panel > .table-bordered > tbody > tr:first-child > th,
-  .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
-  .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
-  .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
-  .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
-    border-bottom: 0; }
-  .panel > .table-bordered > tbody > tr:last-child > td,
-  .panel > .table-bordered > tbody > tr:last-child > th,
-  .panel > .table-bordered > tfoot > tr:last-child > td,
-  .panel > .table-bordered > tfoot > tr:last-child > th,
-  .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
-  .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
-  .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
-  .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
-    border-bottom: 0; }
-
-.panel > .table-responsive {
-  border: 0;
-  margin-bottom: 0; }
-
-.panel-group {
-  margin-bottom: 20px; }
-  .panel-group .panel {
-    margin-bottom: 0;
-    border-radius: 4px; }
-    .panel-group .panel + .panel {
-      margin-top: 5px; }
-  .panel-group .panel-heading {
-    border-bottom: 0; }
-    .panel-group .panel-heading + .panel-collapse > .panel-body,
-    .panel-group .panel-heading + .panel-collapse > .list-group {
-      border-top: 1px solid #ddd; }
-  .panel-group .panel-footer {
-    border-top: 0; }
-    .panel-group .panel-footer + .panel-collapse .panel-body {
-      border-bottom: 1px solid #ddd; }
-
-.panel-default {
-  border-color: #ddd; }
-  .panel-default > .panel-heading {
-    color: #333333;
-    background-color: #f5f5f5;
-    border-color: #ddd; }
-    .panel-default > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #ddd; }
-    .panel-default > .panel-heading .badge {
-      color: #f5f5f5;
-      background-color: #333333; }
-  .panel-default > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #ddd; }
-
-.panel-primary {
-  border-color: #337ab7; }
-  .panel-primary > .panel-heading {
-    color: #fff;
-    background-color: #337ab7;
-    border-color: #337ab7; }
-    .panel-primary > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #337ab7; }
-    .panel-primary > .panel-heading .badge {
-      color: #337ab7;
-      background-color: #fff; }
-  .panel-primary > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #337ab7; }
-
-.panel-success {
-  border-color: #d6e9c6; }
-  .panel-success > .panel-heading {
-    color: #3c763d;
-    background-color: #dff0d8;
-    border-color: #d6e9c6; }
-    .panel-success > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #d6e9c6; }
-    .panel-success > .panel-heading .badge {
-      color: #dff0d8;
-      background-color: #3c763d; }
-  .panel-success > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #d6e9c6; }
-
-.panel-info {
-  border-color: #bce8f1; }
-  .panel-info > .panel-heading {
-    color: #31708f;
-    background-color: #d9edf7;
-    border-color: #bce8f1; }
-    .panel-info > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #bce8f1; }
-    .panel-info > .panel-heading .badge {
-      color: #d9edf7;
-      background-color: #31708f; }
-  .panel-info > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #bce8f1; }
-
-.panel-warning {
-  border-color: #faebcc; }
-  .panel-warning > .panel-heading {
-    color: #8a6d3b;
-    background-color: #fcf8e3;
-    border-color: #faebcc; }
-    .panel-warning > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #faebcc; }
-    .panel-warning > .panel-heading .badge {
-      color: #fcf8e3;
-      background-color: #8a6d3b; }
-  .panel-warning > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #faebcc; }
-
-.panel-danger {
-  border-color: #ebccd1; }
-  .panel-danger > .panel-heading {
-    color: #a94442;
-    background-color: #f2dede;
-    border-color: #ebccd1; }
-    .panel-danger > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #ebccd1; }
-    .panel-danger > .panel-heading .badge {
-      color: #f2dede;
-      background-color: #a94442; }
-  .panel-danger > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #ebccd1; }
-
-.embed-responsive {
-  position: relative;
-  display: block;
-  height: 0;
-  padding: 0;
-  overflow: hidden; }
-  .embed-responsive .embed-responsive-item,
-  .embed-responsive iframe,
-  .embed-responsive embed,
-  .embed-responsive object,
-  .embed-responsive video {
-    position: absolute;
-    top: 0;
-    left: 0;
-    bottom: 0;
-    height: 100%;
-    width: 100%;
-    border: 0; }
-
-.embed-responsive-16by9 {
-  padding-bottom: 56.25%; }
-
-.embed-responsive-4by3 {
-  padding-bottom: 75%; }
-
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border: 1px solid #e3e3e3;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); }
-  .well blockquote {
-    border-color: #ddd;
-    border-color: rgba(0, 0, 0, 0.15); }
-
-.well-lg {
-  padding: 24px;
-  border-radius: 6px; }
-
-.well-sm {
-  padding: 9px;
-  border-radius: 3px; }
-
-.close {
-  float: right;
-  font-size: 21px;
-  font-weight: bold;
-  line-height: 1;
-  color: #000;
-  text-shadow: 0 1px 0 #fff;
-  opacity: 0.2;
-  filter: alpha(opacity=20); }
-  .close:hover, .close:focus {
-    color: #000;
-    text-decoration: none;
-    cursor: pointer;
-    opacity: 0.5;
-    filter: alpha(opacity=50); }
-
-button.close {
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none; }
-
-.modal-open {
-  overflow: hidden; }
-
-.modal {
-  display: none;
-  overflow: hidden;
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1050;
-  -webkit-overflow-scrolling: touch;
-  outline: 0; }
-  .modal.fade .modal-dialog {
-    -webkit-transform: translate(0, -25%);
-    -ms-transform: translate(0, -25%);
-    -o-transform: translate(0, -25%);
-    transform: translate(0, -25%);
-    -webkit-transition: -webkit-transform 0.3s ease-out;
-    -moz-transition: -moz-transform 0.3s ease-out;
-    -o-transition: -o-transform 0.3s ease-out;
-    transition: transform 0.3s ease-out; }
-  .modal.in .modal-dialog {
-    -webkit-transform: translate(0, 0);
-    -ms-transform: translate(0, 0);
-    -o-transform: translate(0, 0);
-    transform: translate(0, 0); }
-
-.modal-open .modal {
-  overflow-x: hidden;
-  overflow-y: auto; }
-
-.modal-dialog {
-  position: relative;
-  width: auto;
-  margin: 10px; }
-
-.modal-content {
-  position: relative;
-  background-color: #fff;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  border-radius: 6px;
-  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
-  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
-  background-clip: padding-box;
-  outline: 0; }
-
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1040;
-  background-color: #000; }
-  .modal-backdrop.fade {
-    opacity: 0;
-    filter: alpha(opacity=0); }
-  .modal-backdrop.in {
-    opacity: 0.5;
-    filter: alpha(opacity=50); }
-
-.modal-header {
-  padding: 15px;
-  border-bottom: 1px solid #e5e5e5; }
-  .modal-header:before, .modal-header:after {
-    content: " ";
-    display: table; }
-  .modal-header:after {
-    clear: both; }
-
-.modal-header .close {
-  margin-top: -2px; }
-
-.modal-title {
-  margin: 0;
-  line-height: 1.42857; }
-
-.modal-body {
-  position: relative;
-  padding: 15px; }
-
-.modal-footer {
-  padding: 15px;
-  text-align: right;
-  border-top: 1px solid #e5e5e5; }
-  .modal-footer:before, .modal-footer:after {
-    content: " ";
-    display: table; }
-  .modal-footer:after {
-    clear: both; }
-  .modal-footer .btn + .btn {
-    margin-left: 5px;
-    margin-bottom: 0; }
-  .modal-footer .btn-group .btn + .btn {
-    margin-left: -1px; }
-  .modal-footer .btn-block + .btn-block {
-    margin-left: 0; }
-
-.modal-scrollbar-measure {
-  position: absolute;
-  top: -9999px;
-  width: 50px;
-  height: 50px;
-  overflow: scroll; }
-
-@media (min-width: 768px) {
-  .modal-dialog {
-    width: 600px;
-    margin: 30px auto; }
-  .modal-content {
-    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
-    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }
-  .modal-sm {
-    width: 300px; } }
-
-@media (min-width: 992px) {
-  .modal-lg {
-    width: 900px; } }
-
-.tooltip {
-  position: absolute;
-  z-index: 1070;
-  display: block;
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-style: normal;
-  font-weight: normal;
-  letter-spacing: normal;
-  line-break: auto;
-  line-height: 1.42857;
-  text-align: left;
-  text-align: start;
-  text-decoration: none;
-  text-shadow: none;
-  text-transform: none;
-  white-space: normal;
-  word-break: normal;
-  word-spacing: normal;
-  word-wrap: normal;
-  font-size: 12px;
-  opacity: 0;
-  filter: alpha(opacity=0); }
-  .tooltip.in {
-    opacity: 0.9;
-    filter: alpha(opacity=90); }
-  .tooltip.top {
-    margin-top: -3px;
-    padding: 5px 0; }
-  .tooltip.right {
-    margin-left: 3px;
-    padding: 0 5px; }
-  .tooltip.bottom {
-    margin-top: 3px;
-    padding: 5px 0; }
-  .tooltip.left {
-    margin-left: -3px;
-    padding: 0 5px; }
-
-.tooltip-inner {
-  max-width: 200px;
-  padding: 3px 8px;
-  color: #fff;
-  text-align: center;
-  background-color: #000;
-  border-radius: 4px; }
-
-.tooltip-arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid; }
-
-.tooltip.top .tooltip-arrow {
-  bottom: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-width: 5px 5px 0;
-  border-top-color: #000; }
-
-.tooltip.top-left .tooltip-arrow {
-  bottom: 0;
-  right: 5px;
-  margin-bottom: -5px;
-  border-width: 5px 5px 0;
-  border-top-color: #000; }
-
-.tooltip.top-right .tooltip-arrow {
-  bottom: 0;
-  left: 5px;
-  margin-bottom: -5px;
-  border-width: 5px 5px 0;
-  border-top-color: #000; }
-
-.tooltip.right .tooltip-arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-width: 5px 5px 5px 0;
-  border-right-color: #000; }
-
-.tooltip.left .tooltip-arrow {
-  top: 50%;
-  right: 0;
-  margin-top: -5px;
-  border-width: 5px 0 5px 5px;
-  border-left-color: #000; }
-
-.tooltip.bottom .tooltip-arrow {
-  top: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000; }
-
-.tooltip.bottom-left .tooltip-arrow {
-  top: 0;
-  right: 5px;
-  margin-top: -5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000; }
-
-.tooltip.bottom-right .tooltip-arrow {
-  top: 0;
-  left: 5px;
-  margin-top: -5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000; }
-
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: 1060;
-  display: none;
-  max-width: 276px;
-  padding: 1px;
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-style: normal;
-  font-weight: normal;
-  letter-spacing: normal;
-  line-break: auto;
-  line-height: 1.42857;
-  text-align: left;
-  text-align: start;
-  text-decoration: none;
-  text-shadow: none;
-  text-transform: none;
-  white-space: normal;
-  word-break: normal;
-  word-spacing: normal;
-  word-wrap: normal;
-  font-size: 14px;
-  background-color: #fff;
-  background-clip: padding-box;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  border-radius: 6px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); }
-  .popover.top {
-    margin-top: -10px; }
-  .popover.right {
-    margin-left: 10px; }
-  .popover.bottom {
-    margin-top: 10px; }
-  .popover.left {
-    margin-left: -10px; }
-
-.popover-title {
-  margin: 0;
-  padding: 8px 14px;
-  font-size: 14px;
-  background-color: #f7f7f7;
-  border-bottom: 1px solid #ebebeb;
-  border-radius: 5px 5px 0 0; }
-
-.popover-content {
-  padding: 9px 14px; }
-
-.popover > .arrow, .popover > .arrow:after {
-  position: absolute;
-  display: block;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid; }
-
-.popover > .arrow {
-  border-width: 11px; }
-
-.popover > .arrow:after {
-  border-width: 10px;
-  content: ""; }
-
-.popover.top > .arrow {
-  left: 50%;
-  margin-left: -11px;
-  border-bottom-width: 0;
-  border-top-color: #999999;
-  border-top-color: rgba(0, 0, 0, 0.25);
-  bottom: -11px; }
-  .popover.top > .arrow:after {
-    content: " ";
-    bottom: 1px;
-    margin-left: -10px;
-    border-bottom-width: 0;
-    border-top-color: #fff; }
-
-.popover.right > .arrow {
-  top: 50%;
-  left: -11px;
-  margin-top: -11px;
-  border-left-width: 0;
-  border-right-color: #999999;
-  border-right-color: rgba(0, 0, 0, 0.25); }
-  .popover.right > .arrow:after {
-    content: " ";
-    left: 1px;
-    bottom: -10px;
-    border-left-width: 0;
-    border-right-color: #fff; }
-
-.popover.bottom > .arrow {
-  left: 50%;
-  margin-left: -11px;
-  border-top-width: 0;
-  border-bottom-color: #999999;
-  border-bottom-color: rgba(0, 0, 0, 0.25);
-  top: -11px; }
-  .popover.bottom > .arrow:after {
-    content: " ";
-    top: 1px;
-    margin-left: -10px;
-    border-top-width: 0;
-    border-bottom-color: #fff; }
-
-.popover.left > .arrow {
-  top: 50%;
-  right: -11px;
-  margin-top: -11px;
-  border-right-width: 0;
-  border-left-color: #999999;
-  border-left-color: rgba(0, 0, 0, 0.25); }
-  .popover.left > .arrow:after {
-    content: " ";
-    right: 1px;
-    border-right-width: 0;
-    border-left-color: #fff;
-    bottom: -10px; }
-
-.carousel {
-  position: relative; }
-
-.carousel-inner {
-  position: relative;
-  overflow: hidden;
-  width: 100%; }
-  .carousel-inner > .item {
-    display: none;
-    position: relative;
-    -webkit-transition: 0.6s ease-in-out left;
-    -o-transition: 0.6s ease-in-out left;
-    transition: 0.6s ease-in-out left; }
-    .carousel-inner > .item > img,
-    .carousel-inner > .item > a > img {
-      display: block;
-      max-width: 100%;
-      height: auto;
-      line-height: 1; }
-    @media all and (transform-3d), (-webkit-transform-3d) {
-      .carousel-inner > .item {
-        -webkit-transition: -webkit-transform 0.6s ease-in-out;
-        -moz-transition: -moz-transform 0.6s ease-in-out;
-        -o-transition: -o-transform 0.6s ease-in-out;
-        transition: transform 0.6s ease-in-out;
-        -webkit-backface-visibility: hidden;
-        -moz-backface-visibility: hidden;
-        backface-visibility: hidden;
-        -webkit-perspective: 1000px;
-        -moz-perspective: 1000px;
-        perspective: 1000px; }
-        .carousel-inner > .item.next, .carousel-inner > .item.active.right {
-          -webkit-transform: translate3d(100%, 0, 0);
-          transform: translate3d(100%, 0, 0);
-          left: 0; }
-        .carousel-inner > .item.prev, .carousel-inner > .item.active.left {
-          -webkit-transform: translate3d(-100%, 0, 0);
-          transform: translate3d(-100%, 0, 0);
-          left: 0; }
-        .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active {
-          -webkit-transform: translate3d(0, 0, 0);
-          transform: translate3d(0, 0, 0);
-          left: 0; } }
-  .carousel-inner > .active,
-  .carousel-inner > .next,
-  .carousel-inner > .prev {
-    display: block; }
-  .carousel-inner > .active {
-    left: 0; }
-  .carousel-inner > .next,
-  .carousel-inner > .prev {
-    position: absolute;
-    top: 0;
-    width: 100%; }
-  .carousel-inner > .next {
-    left: 100%; }
-  .carousel-inner > .prev {
-    left: -100%; }
-  .carousel-inner > .next.left,
-  .carousel-inner > .prev.right {
-    left: 0; }
-  .carousel-inner > .active.left {
-    left: -100%; }
-  .carousel-inner > .active.right {
-    left: 100%; }
-
-.carousel-control {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  width: 15%;
-  opacity: 0.5;
-  filter: alpha(opacity=50);
-  font-size: 20px;
-  color: #fff;
-  text-align: center;
-  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
-  background-color: transparent; }
-  .carousel-control.left {
-    background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
-    background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
-    background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
-    background-repeat: repeat-x;
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); }
-  .carousel-control.right {
-    left: auto;
-    right: 0;
-    background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
-    background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
-    background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
-    background-repeat: repeat-x;
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); }
-  .carousel-control:hover, .carousel-control:focus {
-    outline: 0;
-    color: #fff;
-    text-decoration: none;
-    opacity: 0.9;
-    filter: alpha(opacity=90); }
-  .carousel-control .icon-prev,
-  .carousel-control .icon-next,
-  .carousel-control .glyphicon-chevron-left,
-  .carousel-control .glyphicon-chevron-right {
-    position: absolute;
-    top: 50%;
-    margin-top: -10px;
-    z-index: 5;
-    display: inline-block; }
-  .carousel-control .icon-prev,
-  .carousel-control .glyphicon-chevron-left {
-    left: 50%;
-    margin-left: -10px; }
-  .carousel-control .icon-next,
-  .carousel-control .glyphicon-chevron-right {
-    right: 50%;
-    margin-right: -10px; }
-  .carousel-control .icon-prev,
-  .carousel-control .icon-next {
-    width: 20px;
-    height: 20px;
-    line-height: 1;
-    font-family: serif; }
-  .carousel-control .icon-prev:before {
-    content: '\2039'; }
-  .carousel-control .icon-next:before {
-    content: '\203a'; }
-
-.carousel-indicators {
-  position: absolute;
-  bottom: 10px;
-  left: 50%;
-  z-index: 15;
-  width: 60%;
-  margin-left: -30%;
-  padding-left: 0;
-  list-style: none;
-  text-align: center; }
-  .carousel-indicators li {
-    display: inline-block;
-    width: 10px;
-    height: 10px;
-    margin: 1px;
-    text-indent: -999px;
-    border: 1px solid #fff;
-    border-radius: 10px;
-    cursor: pointer;
-    background-color: #000 \9;
-    background-color: transparent; }
-  .carousel-indicators .active {
-    margin: 0;
-    width: 12px;
-    height: 12px;
-    background-color: #fff; }
-
-.carousel-caption {
-  position: absolute;
-  left: 15%;
-  right: 15%;
-  bottom: 20px;
-  z-index: 10;
-  padding-top: 20px;
-  padding-bottom: 20px;
-  color: #fff;
-  text-align: center;
-  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }
-  .carousel-caption .btn {
-    text-shadow: none; }
-
-@media screen and (min-width: 768px) {
-  .carousel-control .glyphicon-chevron-left,
-  .carousel-control .glyphicon-chevron-right,
-  .carousel-control .icon-prev,
-  .carousel-control .icon-next {
-    width: 30px;
-    height: 30px;
-    margin-top: -10px;
-    font-size: 30px; }
-  .carousel-control .glyphicon-chevron-left,
-  .carousel-control .icon-prev {
-    margin-left: -10px; }
-  .carousel-control .glyphicon-chevron-right,
-  .carousel-control .icon-next {
-    margin-right: -10px; }
-  .carousel-caption {
-    left: 20%;
-    right: 20%;
-    padding-bottom: 30px; }
-  .carousel-indicators {
-    bottom: 20px; } }
-
-.clearfix:before, .clearfix:after {
-  content: " ";
-  display: table; }
-
-.clearfix:after {
-  clear: both; }
-
-.center-block {
-  display: block;
-  margin-left: auto;
-  margin-right: auto; }
-
-.pull-right {
-  float: right !important; }
-
-.pull-left {
-  float: left !important; }
-
-.hide {
-  display: none !important; }
-
-.show {
-  display: block !important; }
-
-.invisible {
-  visibility: hidden; }
-
-.text-hide {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0; }
-
-.hidden {
-  display: none !important; }
-
-.affix {
-  position: fixed; }
-
-@-ms-viewport {
-  width: device-width; }
-
-.visible-xs {
-  display: none !important; }
-
-.visible-sm {
-  display: none !important; }
-
-.visible-md {
-  display: none !important; }
-
-.visible-lg {
-  display: none !important; }
-
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
-  display: none !important; }
-
-@media (max-width: 767px) {
-  .visible-xs {
-    display: block !important; }
-  table.visible-xs {
-    display: table !important; }
-  tr.visible-xs {
-    display: table-row !important; }
-  th.visible-xs,
-  td.visible-xs {
-    display: table-cell !important; } }
-
-@media (max-width: 767px) {
-  .visible-xs-block {
-    display: block !important; } }
-
-@media (max-width: 767px) {
-  .visible-xs-inline {
-    display: inline !important; } }
-
-@media (max-width: 767px) {
-  .visible-xs-inline-block {
-    display: inline-block !important; } }
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm {
-    display: block !important; }
-  table.visible-sm {
-    display: table !important; }
-  tr.visible-sm {
-    display: table-row !important; }
-  th.visible-sm,
-  td.visible-sm {
-    display: table-cell !important; } }
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-block {
-    display: block !important; } }
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-inline {
-    display: inline !important; } }
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-inline-block {
-    display: inline-block !important; } }
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md {
-    display: block !important; }
-  table.visible-md {
-    display: table !important; }
-  tr.visible-md {
-    display: table-row !important; }
-  th.visible-md,
-  td.visible-md {
-    display: table-cell !important; } }
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-block {
-    display: block !important; } }
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-inline {
-    display: inline !important; } }
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-inline-block {
-    display: inline-block !important; } }
-
-@media (min-width: 1200px) {
-  .visible-lg {
-    display: block !important; }
-  table.visible-lg {
-    display: table !important; }
-  tr.visible-lg {
-    display: table-row !important; }
-  th.visible-lg,
-  td.visible-lg {
-    display: table-cell !important; } }
-
-@media (min-width: 1200px) {
-  .visible-lg-block {
-    display: block !important; } }
-
-@media (min-width: 1200px) {
-  .visible-lg-inline {
-    display: inline !important; } }
-
-@media (min-width: 1200px) {
-  .visible-lg-inline-block {
-    display: inline-block !important; } }
-
-@media (max-width: 767px) {
-  .hidden-xs {
-    display: none !important; } }
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .hidden-sm {
-    display: none !important; } }
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .hidden-md {
-    display: none !important; } }
-
-@media (min-width: 1200px) {
-  .hidden-lg {
-    display: none !important; } }
-
-.visible-print {
-  display: none !important; }
-
-@media print {
-  .visible-print {
-    display: block !important; }
-  table.visible-print {
-    display: table !important; }
-  tr.visible-print {
-    display: table-row !important; }
-  th.visible-print,
-  td.visible-print {
-    display: table-cell !important; } }
-
-.visible-print-block {
-  display: none !important; }
-  @media print {
-    .visible-print-block {
-      display: block !important; } }
-
-.visible-print-inline {
-  display: none !important; }
-  @media print {
-    .visible-print-inline {
-      display: inline !important; } }
-
-.visible-print-inline-block {
-  display: none !important; }
-  @media print {
-    .visible-print-inline-block {
-      display: inline-block !important; } }
-
-@media print {
-  .hidden-print {
-    display: none !important; } }
-
-/*$brand-primary: $cord-red;*/
-elan-map {
-  display: block;
-  width: 100%;
-  height: 380px;
-  position: relative; }
-  elan-map svg {
-    position: absolute;
-    top: 0;
-    left: 0; }
-  elan-map circle.elan,
-  elan-map rect.elan {
-    stroke: #5bc0de;
-    stroke-width: 2;
-    fill: #fff; }
-  elan-map circle.elan,
-  elan-map circle.uni {
-    cursor: pointer; }
-  elan-map .node.uni circle.uni,
-  elan-map .node.uni rect.uni {
-    stroke: #CE5650;
-    stroke-width: 2;
-    fill: #fff; }
-  elan-map .node.uni path {
-    fill: #902d28; }
-  elan-map line {
-    stroke: #CE5650;
-    stroke-width: 1; }
-  elan-map #map {
-    background: #EFEBE2; }
-  elan-map .subunit {
-    fill: #B7DAFF;
-    stroke: white;
-    stroke-width: 1px; }
-  elan-map .subunit._10 {
-    fill: transparent;
-    stroke: transparent; }
-  elan-map .exterior-boundary {
-    fill: none;
-    stroke: black;
-    stroke-linejoin: round;
-    stroke-width: 1px; }
-
-.service-container .btn {
-  font-size: 12px; }
-
-.sla input.input-sm, .sla .input-group-sm > input.form-control, .sla
-.input-group-sm > input.input-group-addon, .sla
-.input-group-sm > .input-group-btn > input.btn {
-  max-width: 60px;
-  text-align: right; }
-
-/*$brand-primary: $cord-red;*/
-service-map {
-  width: 100%;
-  height: 100px;
-  display: block; }
-  service-map .node rect {
-    fill: #fff;
-    stroke-width: 2px; }
-  service-map .node.uni rect {
-    stroke: #CE5650; }
-  service-map .node.uni path {
-    fill: #902d28; }
-  service-map .node.service rect {
-    stroke: #337ab7; }
-  service-map .node.service path {
-    fill: #1d4568; }
-  service-map .node text {
-    font: 12px sans-serif; }
-  service-map .link {
-    fill: none;
-    stroke: #ccc;
-    stroke-width: 1; }
-
-#xosEcordTopology .btn-primary-border {
-  color: #337ab7;
-  background-color: #fff;
-  border-color: #2e6da4; }
-  #xosEcordTopology .btn-primary-border:focus, #xosEcordTopology .btn-primary-border.focus {
-    color: #337ab7;
-    background-color: #e6e6e6;
-    border-color: #122b40; }
-  #xosEcordTopology .btn-primary-border:hover {
-    color: #337ab7;
-    background-color: #e6e6e6;
-    border-color: #204d74; }
-  #xosEcordTopology .btn-primary-border:active, #xosEcordTopology .btn-primary-border.active,
-  .open > #xosEcordTopology .btn-primary-border.dropdown-toggle {
-    color: #337ab7;
-    background-color: #e6e6e6;
-    border-color: #204d74; }
-    #xosEcordTopology .btn-primary-border:active:hover, #xosEcordTopology .btn-primary-border:active:focus, #xosEcordTopology .btn-primary-border:active.focus, #xosEcordTopology .btn-primary-border.active:hover, #xosEcordTopology .btn-primary-border.active:focus, #xosEcordTopology .btn-primary-border.active.focus,
-    .open > #xosEcordTopology .btn-primary-border.dropdown-toggle:hover,
-    .open > #xosEcordTopology .btn-primary-border.dropdown-toggle:focus,
-    .open > #xosEcordTopology .btn-primary-border.dropdown-toggle.focus {
-      color: #337ab7;
-      background-color: #d4d4d4;
-      border-color: #122b40; }
-  #xosEcordTopology .btn-primary-border:active, #xosEcordTopology .btn-primary-border.active,
-  .open > #xosEcordTopology .btn-primary-border.dropdown-toggle {
-    background-image: none; }
-  #xosEcordTopology .btn-primary-border.disabled:hover, #xosEcordTopology .btn-primary-border.disabled:focus, #xosEcordTopology .btn-primary-border.disabled.focus, #xosEcordTopology .btn-primary-border[disabled]:hover, #xosEcordTopology .btn-primary-border[disabled]:focus, #xosEcordTopology .btn-primary-border[disabled].focus,
-  fieldset[disabled] #xosEcordTopology .btn-primary-border:hover,
-  fieldset[disabled] #xosEcordTopology .btn-primary-border:focus,
-  fieldset[disabled] #xosEcordTopology .btn-primary-border.focus {
-    background-color: #fff;
-    border-color: #2e6da4; }
-  #xosEcordTopology .btn-primary-border .badge {
-    color: #fff;
-    background-color: #337ab7; }
diff --git a/views/ngXosViews/ecordTopology/src/css/service-map.css b/views/ngXosViews/ecordTopology/src/css/service-map.css
deleted file mode 100644
index a47ec1f..0000000
--- a/views/ngXosViews/ecordTopology/src/css/service-map.css
+++ /dev/null
@@ -1,40 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/*$brand-primary: $cord-red;*/
-service-map {
-  width: 100%;
-  height: 100px;
-  display: block; }
-  service-map .node rect {
-    fill: #fff;
-    stroke-width: 2px; }
-  service-map .node.uni rect {
-    stroke: #CE5650; }
-  service-map .node.uni path {
-    fill: #902d28; }
-  service-map .node.service rect {
-    stroke: #337ab7; }
-  service-map .node.service path {
-    fill: #1d4568; }
-  service-map .node text {
-    font: 12px sans-serif; }
-  service-map .link {
-    fill: none;
-    stroke: #ccc;
-    stroke-width: 1; }
diff --git a/views/ngXosViews/ecordTopology/src/css/vars.css b/views/ngXosViews/ecordTopology/src/css/vars.css
deleted file mode 100644
index 2eb52a9..0000000
--- a/views/ngXosViews/ecordTopology/src/css/vars.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/*$brand-primary: $cord-red;*/
diff --git a/views/ngXosViews/ecordTopology/src/index.html b/views/ngXosViews/ecordTopology/src/index.html
deleted file mode 100644
index 968e9d4..0000000
--- a/views/ngXosViews/ecordTopology/src/index.html
+++ /dev/null
@@ -1,65 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/elan-map.css">
-<link rel="stylesheet" href="/css/eline-details.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/css/service-map.css">
-<link rel="stylesheet" href="/css/vars.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.ecordTopology" id="xosEcordTopology" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/bootstrap/dist/js/bootstrap.js"></script>
-<script src="vendor/angular-bootstrap-checkbox/angular-bootstrap-checkbox.js"></script>
-<script src="vendor/topojson.v1.min/index.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/uni.service.js"></script>
-<script src="/.tmp/service-map.directive.js"></script>
-<script src="/.tmp/eline.service.js"></script>
-<script src="/.tmp/eline-map.directive.js"></script>
-<script src="/.tmp/eline-form.directive.js"></script>
-<script src="/.tmp/eline-details.directive.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/src/js/eline-details.directive.js b/views/ngXosViews/ecordTopology/src/js/eline-details.directive.js
deleted file mode 100644
index 58781ec..0000000
--- a/views/ngXosViews/ecordTopology/src/js/eline-details.directive.js
+++ /dev/null
@@ -1,143 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/28/16.
- */
-
-(function () {
-  'use strict';
-  angular.module('xos.ecordTopology')
-  .directive('elineDetails', function() {
-    return {
-      restrict: 'E',
-      scope: {
-      },
-      bindToController: true,
-      controllerAs: 'vm',
-      templateUrl: 'templates/eline-details.tpl.html',
-      controller: function ($scope, $stateParams, Eline) {
-
-        this.eline = null;
-
-        const Resource = Eline();
-
-        Eline.get({id: $stateParams.id}).$promise
-        .then((eline) => {
-          this.eline = eline;
-        });
-
-        this.slas = [
-          {
-            name: 'Latency',
-            unit: 'ms',
-            default: 300
-          },
-          {
-            name: 'Latency Variation',
-            unit: '%',
-            default: 5
-          },
-          {
-            name: 'Packet Loss',
-            unit: '%',
-            default: 2
-          }
-        ];
-
-        this.availableServices = {
-          performance: [
-            {id: 1, label: 'WAN Accelerator'},
-            {id: 2, label: 'Traffic Analytics'},
-            {id: 3, label: 'Policy Control'},
-          ],
-          security: [
-            {id: 4, label: 'Firewall'},
-            {id: 5, label: 'Anti-virus'},
-            {id: 6, label: 'IDS'},
-            {id: 7, label: 'Encryption'},
-          ],
-          enterprise: [
-            {id: 8, label: 'vRouter'},
-            {id: 9, label: 'NAT'},
-            {id: 10, label: 'VPN'},
-          ]
-        };
-
-        this.activeServices = [];
-        this.toggleService = (service) => {
-          let isSelected = this.activeServices.indexOf(service);
-          if(isSelected !== -1){
-            this.activeServices.splice(this.activeServices.indexOf(service), 1);
-          }
-          else {
-            this.activeServices.push(service);
-          }
-        };
-
-        this.isServiceActive = (service) => {
-          let isSelected = this.activeServices.indexOf(service);
-          return (isSelected !== -1) ? true : false;
-        };
-
-        $scope.$watch(() => this.el, (val, oldval) => {
-          if(val !== oldval && this.elineUpdate.$saved){
-            this.eline.$saved = false;
-          }
-        }, true);
-
-        this.saveEline = () => {
-
-          const resource = new Eline(this.eline);
-
-          resource.$save()
-          .then(() => {
-            $scope.saved = true;
-          })
-          .catch(e => {
-            console.error(e);
-          });
-        };
-      }
-    }
-  })
-  .directive('bToMb', function() {
-    // TODO improve with this:
-    // https://gist.github.com/thomseddon/3511330
-    return {
-      require: 'ngModel',
-      restrict: 'A',
-      link: function(scope, element, attrs, ngModelController) {
-        ngModelController.$parsers.push(function(data) {
-          //convert data from view format to model format
-          return data * 1000000000; //converted
-        });
-
-        ngModelController.$formatters.push(function(data) {
-          //convert data from model format to view format
-          return data / 1000000000; //converted
-        });
-      }
-    }
-  });
-})();
-
diff --git a/views/ngXosViews/ecordTopology/src/js/eline-form.directive.js b/views/ngXosViews/ecordTopology/src/js/eline-form.directive.js
deleted file mode 100644
index dd0f543..0000000
--- a/views/ngXosViews/ecordTopology/src/js/eline-form.directive.js
+++ /dev/null
@@ -1,203 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/27/16.
- */
-
-(function () {
-  'use strict';
-  angular.module('xos.ecordTopology')
-  .directive('elineForm', function(){
-    return {
-      restrict: 'E',
-      scope: {
-        uni: '='
-      },
-      bindToController: true,
-      controllerAs: 'vm',
-      templateUrl: 'templates/eline-form.tpl.html',
-      controller: function ($scope, $timeout, $location, _, Uni, Eline) {
-        // FORM HELPERS
-        const isUniSelected = (uni, list) => {
-          return _.findIndex(list, {id: uni.id, selected: true}) === -1 ? false : true;
-        };
-
-        const deselectOtherUni = (uni, list) => {
-          list.map(u => {
-            if(u.id !== uni.id){
-              u.selected = false;
-              u.alreadySelected = false;
-            }
-            return u;
-          })
-        };
-
-        this.selectUni = (uni, position) => {
-          if(uni.selected){
-
-            deselectOtherUni(uni, this[`${position}Unis`]);
-
-            // need to check if is selected in the other list
-            const list = position === 'start' ? 'end':'start';
-
-            if(isUniSelected(uni, this[`${list}Unis`])){
-              return uni.alreadySelected = true;
-            }
-            this.formErrors[`${position}Error`] = null;
-            return this.el[position] = uni;
-          }
-
-          this.el[position] = null;
-          return uni.alreadySelected = false;
-        };
-        // END FORM HELPERS
-
-        this.el = {};
-
-        Uni.query().$promise
-        .then((unis) => {
-          // TODO we were mapping UNIS to name, location. Bring that back to life!
-          this.startUnis = angular.copy(unis);
-          this.endUnis = angular.copy(unis);
-          this.infrastructureUnis = angular.copy(unis);
-        });
-
-        const createEline = (el) => {
-
-          // NOTE:
-          // name and latlng have been added to request, will XOS manage them?
-
-          let formatted = {
-              adminstate : 'activationrequested',
-              operstate : 'active',
-              uni1 : {'id' : el.start.id},
-              uni2 : {'id' : el.end.id},
-              sid: el.evcCfgidentifier,
-              type : 'Point_To_Point',
-          };
-
-          return formatted;
-        }
-
-
-        this.formErrors = {};
-        this.createEline = (el, form) => {
-
-          if(!el.start){
-            this.formErrors.startError = 'Select a starting point'
-          }
-
-          if(!el.end){
-            this.formErrors.endError = 'Select an ending point'
-          }
-
-          if(!el.start || !el.end){
-            return;
-          }
-
-          let eline = createEline(el);
-
-          Eline.save(eline).$promise
-          .then((res) => {
-            form.$saved = true;
-            $scope.$emit('elan.created', res);
-            //cordConfig.pages.push(res);
-
-            $timeout(() => {
-              $location.path('/');
-            }, 1000);
-          })
-          .catch(e => {
-            throw new Error(e);
-          });
-        };
-
-        $scope.$watch(() => this.el, (val, oldval) => {
-          if(val !== oldval && this.eline.$saved){
-            this.eline.$saved = false;
-          }
-        }, true);
-
-        this.prepareInfrastructure = (el_prefix, unis) => {
-
-          let i = 0;
-
-          const builElines = (elements) => {
-
-            let elines = [];
-
-            let firstEl =  elements.shift();
-
-            let newElines = elements.reduce((list, end) => {
-              let el = {};
-              // prepare e-line as the form
-              el.evcCfgidentifier = `${el_prefix}-${++i}`;
-              el.start = firstEl;
-              el.end = end;
-              list.push(createEline(el))
-              return list;
-            }, []);
-
-            elines = elines.concat(...newElines);
-
-            if(elements.length === 1){
-
-              return elines;
-            }
-            else {
-              return elines.concat(...builElines(elements));
-            }
-
-          }
-
-          return builElines(unis);
-        }
-
-        this.createInfrastructure = (unis) => {
-
-          unis = _.filter(unis, {selected: true});
-          $log.info('Send request to MARC!!! - Decide the format!', unis);
-
-          let promises = [];
-
-          this.prepareInfrastructure('test', unis).forEach((eline) => {
-            promises.push(Eline().save(eline).$promise)
-          });
-
-          $q.all(promises)
-          .then((res) => {
-            res.forEach(eline => {
-              $scope.$emit('elan.created', eline);
-              cordConfig.pages.push(eline);
-            });
-
-            $timeout(() => {
-              $location.path('/home');
-            }, 1000);
-          });
-        }
-      }
-    }
-  })
-})();
-
diff --git a/views/ngXosViews/ecordTopology/src/js/eline-map.directive.js b/views/ngXosViews/ecordTopology/src/js/eline-map.directive.js
deleted file mode 100644
index 33fe8b5..0000000
--- a/views/ngXosViews/ecordTopology/src/js/eline-map.directive.js
+++ /dev/null
@@ -1,255 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/28/16.
- */
-
-(function () {
-  'use strict';
-
-  angular.module('xos.ecordTopology')
-    .directive('elanMap', function(){
-      return {
-        restrict: 'E',
-        scope: {
-          elan: '='
-        },
-        bindToController: true,
-        controllerAs: 'vm',
-        template: '',
-        controller: function($element, $scope, $rootScope, $timeout,  _, cordIcons){
-          const el = $element[0];
-          var node, projection;
-          $scope.$watch(() => this.elan, (elan) => {
-            if(elan){
-              $timeout(() => {
-                draw(angular.copy(elan));
-              }, 500)
-            }
-          }, true);
-
-          // set force layout params
-          var force = d3.layout.force();
-
-          // DRAW US MAP
-          const drawMap = () => {
-            projection = d3.geo
-              // .albersUsa()
-              .mercator()
-              .center([-122.2, 37.6])
-              .scale(28000)
-              .translate([el.clientWidth / 2, el.clientHeight / 2]);
-
-            var path = d3.geo.path()
-              .projection(projection);
-
-            var map = d3.select(el).append('svg')
-              .attr('id', 'map')
-              .attr('width', el.clientWidth)
-              .attr('height', el.clientHeight);
-
-            d3.json('/js/json/bayarea.json', function(error, ba) {
-              if (error) {
-                throw new Error(error);
-              };
-
-              //bind feature data to the map
-              map.selectAll('.subunit')
-              .data(topojson.feature(ba, ba.objects.bayareaGEO).features)
-              .enter().append('path')
-              .attr('class', function(d, i) {
-                return 'subunit ' + `_${i}`;
-              })
-              .attr('d', path);
-
-
-            });
-          };
-          // END MAP
-
-          const draw = (elan) => {
-            if (!elan[0]){
-              return;
-            }
-            // set size values
-            force
-              .size([el.clientWidth, el.clientHeight])
-              .charge(-20)
-              .chargeDistance(200)
-              // .linkDistance(80)
-              .linkStrength(0.1);
-
-            // clean svg
-            angular.element(el).children().remove();
-            drawMap();
-
-            // create svg elements
-            const svg = d3.select(el)
-              .append('svg')
-              .style('width', `${el.clientWidth}px`)
-              .style('height', `${el.clientHeight}px`)
-
-
-            var nodes = [];
-            var links = [];
-            var d3id = 0;
-            var unis_i = 0;
-            var latlng_val, lat_val, lng_val;
-
-            // cicle trough E-LINE and create nodes/links
-            _.forEach(elan, (eline) => {
-
-                let isOnMap = _.find(nodes, {id: eline.uni1.pid});
-
-                if(!isOnMap){
-                  eline.uni1.fixed = true;
-                  try {
-
-                    //convert latlng value into array for eline.uni1
-                    var uni1_latlng = eline.uni1.latlng;
-                    if (typeof uni1_latlng === 'string' || uni1_latlng instanceof String){
-                        latlng_val = eline.uni1.latlng;
-                        lat_val = latlng_val.substring(1, latlng_val.indexOf(',') - 1);
-                        lat_val = lat_val.trim();
-                        lng_val = latlng_val.substring(latlng_val.indexOf(',') + 1, latlng_val.length - 1);
-                        lng_val = lng_val.trim()
-                        eline.uni1.latlng = [lat_val, lng_val];
-                    }
-
-                    let ps = projection([eline.uni1.latlng[0], eline.uni1.latlng[1]]);
-                    eline.uni1.x = ps[0];
-                    eline.uni1.y = ps[1];
-                    eline.uni1.pid = eline.uni1.pid || d3id++;
-                    nodes.push(eline.uni1)
-                  }
-                  catch(e){
-                    throw new Error(e);
-                  }
-                }
-                else {
-                  eline.uni1.pid = isOnMap.id;
-                }
-
-                isOnMap = _.find(nodes, {id: eline.uni2.pid});
-                if(!isOnMap){
-                  eline.uni2.fixed = true;
-                  try {
-
-                    //convert latlng value into array for eline.uni2
-                    var uni2_latlng = eline.uni2.latlng;
-                    if (typeof uni2_latlng === 'string' || uni2_latlng instanceof String){
-                        latlng_val = eline.uni2.latlng;
-                        lat_val = latlng_val.substring(1, latlng_val.indexOf(',') - 1);
-                        lat_val = lat_val.trim();
-                        lng_val = latlng_val.substring(latlng_val.indexOf(',') + 1, latlng_val.length - 1);
-                        lng_val = lng_val.trim()
-                        eline.uni2.latlng = [lat_val, lng_val];
-                    }
-
-                    let ps = projection([eline.uni2.latlng[0], eline.uni2.latlng[1]]);
-                    eline.uni2.x = ps[0];
-                    eline.uni2.y = ps[1];
-                    eline.uni2.pid = eline.uni2.pid || d3id++;
-                    nodes.push(eline.uni2)
-                  }
-                  catch(e){
-                    throw new Error(e);
-                  }
-                }
-                else {
-                  eline.uni2.pid = isOnMap.id;
-                }
-
-              links.push({
-                source: _.findIndex(nodes, eline.uni1),
-                target: _.findIndex(nodes, eline.uni2),
-                value: 1
-              });
-
-            });
-
-            // start force layout
-            force
-              .nodes(nodes)
-              .links(links)
-              .start();
-
-            // draw links
-            var link = svg.selectAll('.link')
-              .data(links)
-              .enter().append('line')
-              .attr({
-                class: 'link',
-              });
-
-            //draw nodes
-            node = svg.selectAll('.node')
-              .data(nodes)
-              .enter()
-              .append('g', d => d.scaEthFppUniN.interfaceCfgIdentifier)
-              .attr({
-                class: d => `node ${d.type ? d.type : 'uni'}`
-              });
-
-            node.append('rect')
-              .attr({
-                class: d => d.type ? d.type : 'uni',
-                width: 24,
-                height: 24,
-                x: -12,
-                y: -12
-              });
-
-            node.append('path')
-              .attr({
-                d: cordIcons.cordLogo,
-                transform: 'translate(-10, -10),scale(0.18)'
-              });
-
-            node.append('text')
-              .attr({
-                x: 0,
-                y: 25,
-                'text-anchor': 'middle'
-              })
-              .text(d => {
-                return d.pid
-              });
-
-
-            force.on('tick', function() {
-              link
-                .attr('x1', function(d) { return d.source.x; })
-                .attr('y1', function(d) { return d.source.y; })
-                .attr('x2', function(d) { return d.target.x; })
-                .attr('y2', function(d) { return d.target.y; });
-
-              node.attr('transform', (d) => `translate(${d.x},${d.y})`);
-            });
-          };
-
-        }
-      }
-    });
-})();
-
diff --git a/views/ngXosViews/ecordTopology/src/js/eline.service.js b/views/ngXosViews/ecordTopology/src/js/eline.service.js
deleted file mode 100644
index 7bf3379..0000000
--- a/views/ngXosViews/ecordTopology/src/js/eline.service.js
+++ /dev/null
@@ -1,63 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/27/16.
- */
-
-(function () {
-  'use strict';
-
-  angular.module('xos.ecordTopology')
-  .service('Eline', ($resource) => {
-    return $resource(`/api/service/metronetworkservice/SCA_ETH_FDFr_EC/:id`, {id: '@id'}, {
-        query: {
-          isArray: true,
-          interceptor: {
-            response: (res) => {
-              const augmentedEline = _.map(res.data, (eline, i) => {
-                //convert latlng value into array for eline.uni1
-                var latlng_val = eline.uni1.latlng;
-                var lat_val = latlng_val.substring(1, latlng_val.indexOf(',') - 1);
-                lat_val = lat_val.trim();
-                var lng_val = latlng_val.substring(latlng_val.indexOf(',') + 1, latlng_val.length - 1);
-                lng_val = lng_val.trim()
-                eline.uni1.latlng = [lat_val, lng_val];
-
-                //convert latlng value into array for eline.uni2
-                latlng_val = eline.uni2.latlng;
-                lat_val = latlng_val.substring(1, latlng_val.indexOf(',') - 1);
-                lat_val = lat_val.trim();
-                lng_val = latlng_val.substring(latlng_val.indexOf(',') + 1, latlng_val.length - 1);
-                lng_val = lng_val.trim()
-                eline.uni2.latlng = [lat_val, lng_val];
-
-                return eline;
-              });
-              return augmentedEline;
-            }
-          }
-        }
-    });
-  });
-})();
-
diff --git a/views/ngXosViews/ecordTopology/src/js/json/bayarea.json b/views/ngXosViews/ecordTopology/src/js/json/bayarea.json
deleted file mode 100644
index 8ee256f..0000000
--- a/views/ngXosViews/ecordTopology/src/js/json/bayarea.json
+++ /dev/null
@@ -1 +0,0 @@
-{"type":"Topology","transform":{"scale":[0.0004337206541371423,0.00032161558393900655],"translate":[-124.80279358329095,36.36000640296134]},"objects":{"bayareaGEO":{"type":"GeometryCollection","geometries":[{"type":"Polygon","arcs":[[0],[1],[2],[3],[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],[33],[34],[35],[36],[37,38,39,40,41,42,43,44],[45],[46],[47,48,49,50,51,52,53,54],[55],[56],[57,58,59,60,61,62,63,64,65,66,67,68],[69],[70,71,72,73,74,75,76,77,78,79,80,-22,81],[82],[83],[84],[85],[86],[87],[88],[89],[90],[91,-63,92,93,94,95,96,97,98,99,100,101,102,-65,103,104,105,106,107,-43,108,-41,109,-39,110],[111],[112],[113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141]]}]}},"arcs":[[[2334,3790],[220,128],[-2554,2271],[16,3810],[8786,-813],[1197,-7628],[-1345,-1558],[-2636,1490],[-270,-168],[-2981,38],[-433,2430]],[[4144,4175],[1,1],[-1,0],[0,-1]],[[4146,4173],[1,0],[0,1],[0,1],[-1,-1],[0,-1]],[[4081,4251],[1,-1],[1,0],[0,1],[0,1],[-1,0],[-1,-1]],[[3212,7135],[1,-1],[1,0],[0,1],[-1,1],[-1,0],[0,-1]],[[3924,4373],[1,0],[1,0],[1,1],[-1,0],[-1,1],[-1,-1],[0,-1]],[[4649,4935],[1,-1],[1,2],[0,1],[-1,0],[-1,-1],[0,-1]],[[3930,4365],[1,-1],[1,0],[0,1],[-1,1],[-2,0],[-1,-1],[1,0],[0,-1],[1,1]],[[3927,4376],[1,-1],[1,0],[1,0],[-1,1],[-1,1],[-1,0],[0,-1]],[[4148,4177],[0,-1],[1,0],[1,2],[0,1],[-1,0],[-1,-1],[0,-1]],[[5370,4995],[0,-1],[1,-2],[3,1],[-3,2],[-1,0]],[[5269,4414],[1,0],[1,1],[-1,1],[0,1],[-1,0],[-1,0],[0,-1],[0,-1],[1,0],[0,-1]],[[2936,7434],[2,-1],[1,1],[0,1],[-2,1],[-2,0],[0,-1],[0,-1],[1,0]],[[4146,4145],[1,0],[1,0],[2,1],[1,1],[-1,1],[-2,-1],[-2,-1],[0,-1]],[[6650,5258],[-1,0],[0,1]],[[6649,5259],[-1,-1],[-1,0],[-1,0],[-1,0],[-1,0],[0,-1],[1,0],[1,0],[1,0],[0,-1],[1,0],[1,1],[1,1]],[[3908,4386],[0,-1],[2,1],[1,0],[0,2],[0,1],[-1,1],[0,1],[-1,-1],[0,-1],[1,-1],[0,-1],[-2,-1]],[[5273,4408],[1,1],[0,1],[0,1],[-1,1],[-1,-1],[-1,0],[0,-1],[-1,0],[0,-1],[1,0],[0,-1],[1,0],[1,0]],[[4168,5814],[1,-1],[1,0],[2,2],[-1,2],[-1,0],[-1,-1],[-1,-1],[0,-1]],[[6558,5347],[-1,0],[0,1]],[[6557,5348],[-1,0],[-1,0],[-1,0],[-1,0]],[[6553,5348],[-1,0]],[[6552,5348],[0,-1],[-1,0]],[[6551,5347],[1,-1],[0,-1]],[[6552,5345],[1,0],[1,0],[0,1],[1,0],[1,0],[1,0],[1,1]],[[6518,5341],[0,1],[-1,1],[0,1],[0,1],[0,1],[-1,1],[0,1],[0,1],[0,1]],[[6516,5350],[-1,0],[0,1],[0,1]],[[6515,5352],[-1,-1],[0,-1],[1,0],[0,-1],[0,-1],[0,-1],[0,-1],[-1,0],[0,-1],[0,-1],[0,-1],[1,-1],[1,0],[0,-1],[1,0],[1,0]],[[6564,5349],[0,-1],[-1,0],[-1,0]],[[6562,5348],[0,-1],[-1,0],[-1,0],[-1,0],[-1,0]],[[6558,5347],[0,-1],[1,0],[0,-1],[1,0],[1,-1],[1,0],[1,-1]],[[6563,5343],[1,1],[0,1],[1,1],[0,1],[0,1],[0,1],[-1,0]],[[5377,4991],[5,-5],[5,4],[-10,1]],[[5601,4793],[5,-6],[5,4],[-10,2]],[[6507,5297],[-1,1],[-2,1],[-1,0],[1,-3],[-1,0],[0,-1],[-1,0],[-2,0],[-1,1],[-1,-1],[-2,0],[0,-1],[1,0],[1,0],[1,0],[1,0],[2,0],[1,-1],[2,0],[2,1],[1,0],[0,1],[-1,2]],[[5685,2329],[-1,1],[0,1],[-1,0],[-1,0],[-1,-1],[1,0],[-2,0],[1,-1],[1,-1],[1,0],[1,0],[0,-1],[-1,0],[0,-1],[1,1],[0,-1],[-1,0],[0,-1],[1,0],[0,-1],[1,0],[0,1],[1,0],[1,0],[1,-2],[1,0],[0,1],[1,0],[-1,1],[0,1],[-1,0],[0,1],[0,1],[-1,0],[-1,0],[-1,1]],[[5484,4560],[4,-3],[2,-1],[3,1],[-3,5],[-2,2],[-3,1],[-1,1],[-3,0],[3,-6]],[[6662,5319],[1,-1],[0,-2],[0,-1],[0,-1],[0,-1]],[[6663,5313],[0,-1],[0,-2]],[[6663,5310],[1,-1],[0,-2],[0,-3]],[[6664,5304],[1,-1]],[[6665,5303],[1,-1],[0,-1],[0,-2]],[[6666,5299],[1,-1],[0,-1],[1,-1]],[[6668,5296],[1,0],[-1,1],[0,1],[0,1],[-1,1],[0,1],[-1,1],[0,1],[-1,1],[0,3],[0,2],[0,2],[0,2],[1,2]],[[6666,5315],[0,3],[-1,1],[0,2],[0,1],[-1,1],[0,-1],[-1,0],[-1,0],[-1,1],[-1,-1],[-1,0],[-1,0],[-1,-1],[-2,0],[0,-1],[1,0],[1,0],[1,0],[1,0],[2,0],[1,-1]],[[4126,4167],[0,-1],[-1,-1],[1,-2],[0,-1],[0,-1],[1,0],[2,0],[0,-1],[-1,-1],[1,-2],[1,-1],[1,0],[0,2],[0,1],[1,0],[2,0],[1,0],[1,1],[0,1],[-1,1],[-1,2],[-2,0],[0,1],[-1,1],[-1,0],[-1,1],[-2,0],[-1,0]],[[5805,4378],[-1,0],[0,1],[-2,2],[-1,-1],[-5,-8],[3,-4],[3,-3],[10,-1],[-11,6],[1,7],[1,-1],[2,0],[2,-1],[-2,3]],[[6674,5341],[0,1]],[[6674,5342],[0,1],[1,0]],[[6675,5343],[1,1],[1,1],[1,0]],[[6678,5345],[1,1],[0,1]],[[6679,5347],[-1,0],[0,1],[-4,2],[-1,1],[-4,6],[0,1]],[[6669,5358],[-1,0],[-1,-1]],[[6667,5357],[0,-1],[-1,0]],[[6666,5356],[1,-1],[0,-1],[1,0],[0,-1],[0,-1],[1,-1],[0,-1],[0,-1],[1,0],[0,-1],[1,0],[0,-1],[0,-1],[0,-1],[1,-1],[0,-1],[1,-1],[0,-1],[-1,0],[0,-1],[0,-1],[-1,0],[1,0],[1,0],[1,0],[1,0],[0,1],[-1,1]],[[6246,3403],[-6,12],[-6,-2],[-2,0],[4,-8],[11,-3],[-1,1]],[[6519,5327],[-1,1],[-1,1],[0,1],[-1,1],[0,1],[0,1],[0,1],[-1,0],[0,1],[-1,0],[0,1],[-1,0],[0,-1],[-1,-1],[1,-1],[1,-1],[0,-1],[0,-1],[-1,0],[0,-1],[-1,0],[-1,0],[0,-1],[0,-1],[0,-1],[0,1],[-1,0],[1,-1],[0,-1],[1,0],[0,-1],[0,-1],[1,0],[-1,-1],[1,0],[1,-1],[1,0],[1,-1],[1,0],[1,0],[1,1],[1,0],[1,0],[1,-1],[1,0],[0,1],[1,0],[0,1],[1,0],[0,1],[-1,0],[-1,1],[-2,1],[-1,1],[-1,1]],[[6649,5281],[1,1],[0,1]],[[6650,5283],[0,1],[1,1]],[[6651,5285],[0,1],[1,2]],[[6652,5288],[0,2],[-2,24]],[[6650,5314],[0,2],[1,0]],[[6651,5316],[1,1]],[[6652,5317],[1,1],[0,1],[-1,-1],[-1,0],[-1,-1],[-1,0],[0,-1],[-1,0],[-1,-1],[1,-1],[0,-1],[0,-1],[-1,0],[-1,-1],[1,-1],[1,0],[0,-1],[0,-1],[0,-1],[0,-1],[1,-1],[0,-1],[0,-1],[0,-1],[0,-2],[1,-1],[0,-1],[0,-1],[0,-1],[0,-1],[-1,-1],[0,-1],[0,-1],[-1,-1],[1,-1],[1,0],[0,-1],[-1,-1],[0,-1],[0,-3],[-1,-1],[0,-1],[-1,-1],[-2,-1],[-1,0],[-1,0],[-1,-1],[-1,-1],[-2,0],[-2,-1],[-1,-1],[-1,-1],[-1,0],[-2,0],[-2,-1],[-1,0],[-1,-1],[1,0]],[[6629,5273],[1,0]],[[6630,5273],[2,1],[1,0],[1,0],[1,0]],[[6635,5274],[1,1],[2,1]],[[6638,5276],[2,1]],[[6640,5277],[1,1],[2,1],[1,0],[1,-1],[1,-2],[1,4],[1,1],[1,0]],[[4893,4830],[-1,1],[0,1],[-1,0],[-1,1],[0,-1],[-1,-1],[0,-1],[1,-1],[0,-1],[0,-1],[-1,-1],[-1,0],[-1,0],[-1,1],[0,1],[0,1],[-1,0],[0,1],[-1,0],[0,-1],[0,-2],[0,-1],[0,-1],[1,-1],[0,-1],[1,0],[1,-1],[1,0],[1,1],[1,0],[0,1],[1,1],[1,-1],[1,0],[1,0],[1,0],[1,0],[1,0],[2,0],[0,-1],[1,0],[1,0],[1,0],[1,-1],[1,0],[1,0],[1,1],[1,1],[1,1],[0,1],[-1,1],[0,1],[-1,1],[-3,0],[-1,-1],[-1,1],[-1,0],[-1,0],[-1,1],[-1,0],[-1,1],[-1,-1],[-1,0],[-1,0]],[[6543,5349],[0,-1],[1,-1]],[[6544,5347],[1,0],[1,-1],[0,-1]],[[6546,5345],[1,0],[0,-1],[-1,-1],[-1,0],[-1,0]],[[6544,5343],[-1,-1]],[[6543,5342],[0,-1],[-1,0]],[[6542,5341],[0,-1],[-1,0],[-1,-1]],[[6540,5339],[0,-1],[-1,0]],[[6539,5338],[1,0],[-1,-1]],[[6539,5337],[0,-1],[0,-1],[0,-1],[-1,0],[0,-1],[1,0],[1,0],[1,0],[0,-1],[1,-1],[1,1],[1,0],[1,0],[1,1],[1,0],[0,1],[1,1],[0,1],[0,1],[1,1],[1,1],[1,0],[0,-1],[1,0],[1,1],[0,1],[0,1],[0,1],[0,1],[0,1],[-1,0],[0,1]],[[6552,5345],[-1,0],[0,1],[0,1]],[[6551,5347],[0,1],[1,0]],[[6553,5348],[0,1],[1,0],[1,0],[-11,1],[-1,-1]],[[6282,3559],[0,7],[-2,6],[-7,-2],[-5,-7],[3,-7],[6,-1],[5,4]],[[5895,4419],[-8,10],[-8,4],[-4,-1],[16,-20],[4,0],[0,7]],[[5637,4792],[0,-4],[-5,1],[-19,2],[9,-5],[10,1],[5,-3],[1,-11],[14,-4],[-15,23]],[[6422,5409],[-2,2],[-2,0],[-2,-2],[-1,0],[-1,0],[-2,-1],[-2,-2],[-2,0],[-1,0],[-1,-1],[-1,-2],[1,0],[0,1],[1,0],[0,-1],[0,-1],[1,0],[1,-1],[0,-2],[2,0],[2,0],[1,-1],[1,0],[1,-1],[3,0],[3,0],[2,0],[1,0],[0,1],[0,1],[1,1],[0,3],[-1,2],[-1,1],[-2,3]],[[4148,4169],[0,2],[-2,1],[-1,-2],[0,-2],[0,-1],[1,-1],[-1,0],[-1,0],[0,-1],[0,-1],[-2,0],[0,-1],[-1,-2],[-1,0],[-2,0],[0,-1],[0,-1],[1,0],[2,-1],[1,1],[1,-1],[1,-2],[1,0],[0,2],[1,0],[1,0],[1,-2],[0,-1],[1,-2],[2,-1],[3,-1],[1,0],[0,3],[1,1],[0,1],[-1,1],[1,0],[1,0],[1,0],[0,1],[-2,2],[0,1],[1,1],[0,1],[-1,1],[0,1],[0,1],[-1,0],[-1,2],[-2,1],[-1,-1],[-2,0],[0,1],[-1,0]],[[6496,5352],[-2,2],[0,1],[-1,2],[-1,1],[-1,1],[-1,0],[-1,-1],[-1,0],[-1,-1],[0,-1],[-1,-1],[1,0],[0,-1],[-1,0],[0,-1],[-1,0],[0,-1],[-1,0],[-1,0],[-1,0],[0,-1],[-1,0],[-1,0],[1,-1],[-1,0],[0,-1],[0,-1],[1,0],[1,0],[0,-1],[0,-1],[0,-1],[1,0],[1,0],[1,1],[1,0],[0,-1],[1,0],[0,-1],[-1,-1],[-1,-1],[-1,-1],[0,-1],[1,0],[1,0],[0,1],[1,1],[1,-1],[1,0],[0,1],[1,-1],[1,0],[1,0],[0,-1],[0,-1],[1,0],[1,0],[1,0],[0,-1],[0,-1],[1,1],[1,1],[1,-1],[1,0],[1,1],[1,0],[1,-1],[1,-1],[1,0],[1,0],[1,1],[1,1],[-1,0],[0,1],[0,1],[-1,0],[-1,0],[0,1],[-1,1],[-1,1],[-1,1],[0,1],[-1,0],[0,1],[-1,0],[0,1],[-1,1],[-1,2],[-1,1]],[[6389,5330],[-4,1],[-4,1],[-1,1],[-1,0],[-2,0],[-2,-1],[-3,-1],[-1,-1],[-2,0],[-1,-1],[-3,0],[-2,0],[-3,1],[-2,-1],[0,-1],[1,-2],[0,-1],[-1,-1],[0,-1],[-1,0],[-2,0],[-1,-1],[0,-1],[0,-1],[2,0],[1,1],[2,-1],[0,-1],[1,0],[0,-1],[1,0],[1,0],[1,0],[3,-1],[2,0],[2,-1],[1,-1],[3,0],[2,0],[3,1],[1,-1],[2,0],[1,-1],[1,-1],[1,0],[1,0],[1,0],[2,0],[2,0],[1,0],[2,-1],[0,-1],[1,0],[1,1],[1,0],[0,1],[1,1],[1,0],[1,1],[1,1],[2,2],[1,1],[1,0],[2,2],[1,0],[1,0],[1,1],[1,0],[-1,0],[0,1],[-2,0],[-2,-1],[-1,0],[-1,0],[-2,1],[-2,0],[-3,2],[-3,1],[-1,1],[-2,1],[-2,2]],[[5615,4571],[-3,3],[-10,4],[-12,-6],[0,-3],[-1,-3],[-1,-4],[-1,-1],[17,-35],[1,-2],[-1,-10],[-1,-2],[11,-10],[1,-1],[2,0],[10,-1],[1,3],[1,6],[0,1],[2,2],[0,1],[-1,3],[4,4],[1,3],[-1,1],[-20,-8],[-7,11],[4,3],[9,5],[1,-2],[1,1],[-1,0],[2,1],[0,1],[-2,-2],[0,1],[2,1],[0,3],[0,1],[4,-1],[0,1],[-4,1],[1,1],[3,-1],[0,1],[-2,1],[-1,0],[0,1],[1,0],[3,-1],[0,1],[-3,2],[0,1],[-2,5],[-1,3],[-4,7],[-2,4],[0,2],[0,-1],[0,1],[1,1],[0,-1],[1,0],[-1,1],[1,0],[1,-2],[1,1],[-3,5],[1,-3],[-1,0],[0,1],[-1,0],[0,-1],[0,-1],[0,1],[-1,0],[1,0],[0,-1],[-1,0],[0,2]],[[5492,4660],[2,5],[3,6],[-4,4],[-5,11],[-1,3],[-4,8],[-14,5],[-3,-6],[-3,-1],[-3,-2],[0,-2],[-1,-2],[1,-2],[-6,-2],[-3,5],[-4,-10],[-2,-8],[-12,-5],[6,-4],[-1,-2],[1,1],[3,-5],[0,-5],[4,-3],[3,1],[7,-5],[5,-1],[8,6],[13,-2],[6,-3],[9,-4],[0,2],[-5,17]],[[6662,5319],[-1,0],[-1,0],[-1,0],[-1,0],[-1,0],[-1,0],[0,-1],[0,-1],[-1,0],[-1,0],[-1,0],[-1,0]],[[6651,5316],[0,-1],[-1,0],[0,-1]],[[6650,5314],[2,-24]],[[6652,5290],[0,-1],[0,-1]],[[6652,5288],[0,-1],[-1,-2]],[[6651,5285],[0,-1],[0,-1],[-1,0]],[[6650,5283],[0,-1]],[[6650,5282],[0,-1],[-1,0]],[[6649,5281],[0,-1],[-1,0],[-1,-1],[0,-1],[0,-1],[0,-1],[0,-1],[1,-1],[0,-1],[1,0],[0,-1],[-1,-1],[-4,7],[-1,0],[-1,0],[-1,-1],[-1,0]],[[6640,5277],[-1,0],[0,-1],[-1,0]],[[6638,5276],[0,-1],[-1,0],[0,-1],[-1,0],[-1,0]],[[6635,5274],[-1,-1],[-1,0],[-1,0],[-2,0]],[[6629,5273],[-1,-1],[-1,0],[-1,0],[-1,0],[-5,1],[-1,0],[0,-1],[-1,-2],[0,-1],[-1,0],[0,-1],[0,-1],[-1,0],[0,-1],[1,-1],[1,0],[1,0],[1,-1],[1,0],[1,0],[1,0],[1,0],[1,0],[-1,0],[-1,0],[-1,0],[-1,0],[-1,0],[-1,0],[-1,0],[-1,1],[-1,0],[0,1],[0,2],[1,1],[0,1],[1,1],[0,1],[0,1],[1,1],[1,0],[1,0],[1,0],[1,0],[1,0],[1,-1],[0,1],[-1,0],[-1,0],[-1,1],[-1,0],[-1,0],[-1,0],[-1,0],[0,-1],[-1,-1],[-1,-1],[-1,-1],[-1,0],[0,-1],[1,-1],[0,-1],[0,-1],[0,-1],[1,-1],[0,-1],[1,0],[1,0],[1,-1],[0,-1],[1,0],[1,0],[1,1],[1,0],[1,-1],[0,-1],[1,0],[2,-2],[1,0],[1,1],[1,-1],[1,0],[0,-1],[1,1],[1,0],[0,1],[1,0],[0,1],[0,1],[1,-1],[1,0],[1,0],[1,-1],[1,0],[1,0],[1,-1],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0]],[[6649,5259],[1,0],[1,0],[1,0],[1,0],[1,0],[0,-1],[1,0],[0,1],[1,0],[0,1],[-7,11],[7,-11],[1,0],[0,-1],[-1,0],[-1,-1],[-1,-1],[-1,0],[-1,0],[-1,1],[-1,0]],[[6650,5258],[0,-1],[1,0],[1,0],[0,-1],[1,0],[1,-1],[1,1],[1,0],[0,2],[1,0],[1,-2],[1,0],[-1,2],[1,0],[0,-2],[1,-1],[0,1],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[2,0],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[2,1],[1,0],[1,-1],[1,-1],[1,0],[13,1],[0,1],[-1,1],[-1,0],[-1,-1],[-1,1],[-1,-1],[-1,0],[-1,0],[-2,0],[-1,0],[-1,0],[10,1],[1,0],[1,0],[1,0],[1,0],[1,1],[7,6],[-1,-1],[0,-1],[-1,-1],[-1,0],[0,-1],[-1,-1],[-1,0],[-1,-1],[-1,0],[-1,-1],[-3,-1],[0,-1],[2,0],[0,-1],[1,1],[1,1],[2,1],[1,0],[1,1],[1,1],[1,1],[1,0],[0,1],[1,0],[1,1],[1,0],[1,0],[-5,6],[-2,2],[-1,2],[-2,2],[-1,1],[-2,1],[-1,1],[-1,1],[-1,0],[-2,1],[-1,0],[-1,0],[-2,1]],[[6687,5281],[-2,0]],[[6685,5281],[-1,0],[-2,0],[-1,0],[-1,1],[-1,0],[-1,0],[-1,1],[-1,0],[0,1],[-1,0],[-1,1],[0,1],[-1,1],[-1,1],[-1,1],[0,1],[-2,0],[0,1],[0,2],[-1,3]],[[6666,5299],[-1,2],[0,1],[0,1]],[[6664,5304],[0,2],[-1,1],[0,1],[0,2]],[[6663,5313],[-1,5],[0,1]],[[6373,5380],[-1,1],[0,1],[-1,1],[0,-1],[-1,-1],[0,-2],[-1,-1],[-2,-1],[0,-1],[1,0],[1,1],[1,0],[0,-1],[1,-1],[1,-1],[0,-1],[2,0],[1,-1],[0,-1],[0,-1],[1,-1],[0,-1],[0,-1],[0,-1],[-2,-2],[0,-1],[-1,0],[1,-1],[1,-1],[0,-1],[0,-1],[0,-1],[-1,-1],[-1,-1],[0,-2],[1,1],[1,0],[1,-2],[2,-1],[1,0],[1,-1],[2,1],[1,0],[1,0],[2,0],[1,2],[3,2],[2,1],[0,1],[1,1],[1,1],[1,2],[2,0],[1,0],[1,-1],[1,0],[2,0],[1,-2],[-1,0],[-1,1],[0,-2],[1,-1],[1,0],[0,-1],[0,-1],[-1,-1],[1,0],[2,-1],[2,-2],[1,-1],[0,-1],[-1,-1],[-1,-1],[-1,-1],[0,-1],[0,-1],[1,-1],[0,-2],[1,-1],[1,-1],[1,-1],[0,-1],[0,1],[0,1],[1,0],[0,1],[0,-1],[0,-3],[-1,-2],[-1,-2],[-2,-2],[0,-1],[0,-1],[1,0],[2,-1],[2,-1],[3,-1],[2,0],[1,1],[1,-1],[1,0],[1,-1],[1,0],[1,1],[1,2],[2,2],[-1,-2],[0,-2],[1,0],[1,-1],[2,0],[2,-1],[1,1],[1,2],[2,0],[4,1],[4,2],[3,2],[3,2],[1,1],[1,0],[0,-1],[2,0],[2,0],[0,1],[-1,1],[-1,1],[-1,1],[0,-1],[1,-1],[-1,0],[-1,0],[0,1],[-1,1],[1,1],[2,2],[2,2],[1,0],[3,1],[1,1],[1,0],[0,1],[1,0],[0,1],[0,1],[0,1],[0,1],[0,1],[1,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[-1,1],[-1,1],[-1,0],[-2,0],[-2,1],[-4,2],[-6,3],[-4,1],[-4,2],[-3,1],[-3,1],[-2,0],[-1,1],[-1,0],[-2,0],[-2,0],[-1,0],[-3,1],[-1,0],[-1,0],[-3,-1],[-2,0],[-2,1],[-1,0],[-3,-1],[-1,-1],[0,1],[-1,0],[-1,0],[0,1],[-1,0],[0,1],[-1,1],[0,-1],[0,-1],[-1,0],[-2,0],[0,-1],[-2,1],[-1,-1],[-1,0],[-1,0],[-2,0],[-1,0],[-1,1],[-1,0],[-1,2],[-2,0],[0,1],[-1,1],[-1,0],[-1,0],[-1,0],[0,-1],[-1,-1],[-2,2],[-1,2],[-1,0],[-1,0],[-2,1]],[[5696,4448],[0,-8],[1,-17],[0,-2],[2,-3],[8,0],[6,-1],[4,-4],[13,0],[5,-9],[3,0],[9,-2],[7,0],[5,-3],[7,-4],[-2,-4],[20,-6],[2,0],[4,-1],[0,-3],[4,3],[2,-3],[1,-1],[5,3],[4,0],[1,-2],[1,-1],[1,2],[2,1],[1,1],[3,2],[0,-1],[0,-5],[3,0],[1,0],[0,-2],[-4,-3],[0,-2],[5,5],[2,1],[5,-2],[0,-13],[24,-14],[18,-9],[16,-8],[29,-13],[3,-1],[1,0],[0,1],[1,0],[3,2],[2,-2],[16,15],[3,3],[0,13],[0,5],[0,4],[0,5],[-5,5],[-1,1],[-1,2],[-5,6],[-1,0],[-2,1],[-8,5],[-4,2],[-5,3],[-12,10],[-9,1],[-6,4],[-2,6],[-1,-1],[-8,2],[2,5],[-5,-9],[-4,3],[3,8],[-6,4],[-2,-14],[-2,1],[0,14],[-2,0],[-1,0],[-4,3],[-2,1],[-1,0],[-1,1],[-1,-1],[-4,-2],[-1,6],[-1,1],[-2,4],[3,-2],[-6,5],[-8,4],[-1,5],[-1,-1],[-3,3],[0,1],[-8,2],[-17,0],[-1,-5],[0,5],[-2,-5],[0,5],[-1,-5],[-1,4],[-1,-4],[0,4],[-7,-3],[-3,-1],[-7,0],[-12,0],[-13,4],[-9,3],[-11,4],[-34,11],[0,-1],[0,-22]],[[6515,5352],[1,0],[0,-1],[0,-1]],[[6516,5350],[1,0],[0,-2],[0,-1],[1,-2],[0,-1],[0,-1],[0,-2]],[[6518,5341],[1,-2],[0,-1],[1,-1],[0,-1],[1,0],[0,-2],[0,-1],[0,-1],[1,-1],[0,-1],[1,0],[2,-1],[2,0],[1,0],[1,1],[1,0],[1,0],[0,1],[1,0],[1,0],[0,-1],[1,0],[1,0],[0,1],[1,0],[-1,0],[-1,0],[0,1],[1,0],[1,1],[0,1],[1,0],[0,1],[1,0],[0,1],[0,1],[1,0]],[[6539,5337],[0,1]],[[6539,5338],[0,1],[1,0]],[[6540,5339],[2,2]],[[6542,5341],[0,1],[1,0]],[[6543,5342],[0,1],[1,0]],[[6544,5343],[1,1],[1,0],[0,1]],[[6546,5345],[-2,2]],[[6544,5347],[-1,0],[0,1]],[[6543,5348],[0,1]],[[6543,5349],[0,1],[1,1],[5,-1],[4,0],[2,0],[1,0],[1,0],[0,-1],[0,-1]],[[6557,5348],[1,0],[1,0],[1,0],[1,0],[1,0]],[[6562,5348],[1,1],[1,0]],[[6564,5349],[1,1],[1,0],[1,1],[1,1],[1,1],[0,1],[0,1],[1,1],[0,1],[1,1],[0,1],[0,1],[1,1],[0,1],[0,1],[1,0],[0,-1],[1,0],[-1,0],[0,-1],[-1,0],[0,-1],[-1,-1],[0,-1],[0,-1],[0,-1],[-1,-1],[0,-1],[-1,-1],[0,-1],[-1,-1],[0,-1],[-1,0],[-4,-7]],[[6563,5343],[0,-1],[0,-1],[0,-1],[0,-1],[1,0],[1,0],[0,-1],[1,0],[1,0],[0,-1],[1,0],[0,1],[1,-1],[1,0],[1,0],[0,-1],[1,0],[0,-1],[1,1],[0,-1],[1,0],[1,0],[0,-1],[0,-1],[0,1],[1,0],[0,1],[1,0],[0,1],[1,1],[0,1],[-1,1],[0,-1],[-1,0],[-1,0],[0,-1],[0,1],[0,1],[0,1],[0,1],[1,0],[0,1],[1,0],[0,1],[1,1],[0,1],[1,0],[0,1],[1,1],[0,1],[1,0],[1,0],[0,-1],[1,-1],[0,-1],[1,0],[0,-1],[-1,1],[0,-1],[0,1],[-1,0],[-1,-1],[-1,0],[0,-1],[-1,-1],[-1,-1],[1,0],[1,0],[0,1],[1,0],[1,0],[1,0],[-1,0],[-1,-1],[-1,0],[-1,0],[0,-1],[-1,0],[0,-1],[1,0],[1,1],[1,0],[1,0],[1,-1],[1,-1],[1,1],[0,-1],[1,0],[0,1],[0,1],[1,0],[1,0],[0,1],[1,0],[1,0],[1,0],[1,0],[0,1],[1,0],[1,-1],[1,1],[1,1],[1,0],[0,1],[1,0],[1,1],[1,0],[0,1],[0,1],[1,0],[1,0],[1,1],[1,0],[1,0],[1,1],[0,1],[1,0],[0,-1],[0,-1],[1,-1],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[0,1],[1,0],[1,0],[0,-1],[0,1],[1,0],[0,1],[1,0],[0,1],[1,0],[1,0],[0,1],[1,0],[1,0],[1,0],[0,1],[1,0],[0,1],[-1,1],[1,0],[1,-1],[-1,0],[0,-1],[1,0],[1,0],[0,-1],[0,-1],[1,0],[0,-1],[1,1],[1,0],[0,1],[1,0],[0,-1],[1,0],[1,0],[1,1],[1,0],[1,0],[0,-1],[1,1],[1,0],[1,0],[1,0],[1,0],[0,1],[1,0],[0,1],[4,3],[1,0],[-4,-3],[3,1],[1,0],[1,1],[1,1],[0,1],[-1,1],[0,-1],[-1,1],[1,0],[1,0],[1,-2],[1,1],[1,0],[1,0],[0,-1],[1,0],[1,1],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[1,1],[0,-1],[1,0],[0,1],[1,-1],[1,0],[0,-1],[1,0],[1,0]],[[6666,5356],[0,1],[1,0]],[[6667,5357],[-1,1],[0,1],[0,1],[-1,1],[-1,1],[1,0],[1,0],[0,-1],[0,-1],[0,-1],[1,-1],[1,0]],[[6668,5358],[1,0]],[[6669,5358],[1,0],[1,-1],[8,-10]],[[6679,5347],[0,-2],[-1,0]],[[6678,5345],[-1,-1],[-1,-1],[-1,0]],[[6675,5343],[-1,-1],[0,-1]],[[6674,5341],[1,0],[1,-1],[0,-1],[1,-1],[0,-1],[0,-1],[0,-1],[0,-1],[0,-1],[-1,0],[-1,0],[-2,-1],[-1,-2],[-3,-9],[-1,0],[1,1],[0,1],[0,2],[1,0],[0,1],[0,1],[1,1],[0,1],[0,2],[0,1],[1,0],[0,1],[-1,-1],[-1,0],[0,-1],[0,-1],[0,-1],[0,-1],[-1,-1],[0,-1],[0,-1],[0,-1],[-1,0],[0,-1],[0,-1],[-1,-1],[0,-1],[0,-2],[0,-2],[-1,-1]],[[6666,5315],[1,-3],[0,-2],[0,-2],[0,-2],[0,-2],[1,-1],[-1,-1],[1,-1],[1,-3],[1,-2],[1,-1],[1,-2],[1,-1],[0,-1],[1,-1],[0,-1],[1,-2],[1,-2],[1,-1],[1,0],[1,-1],[1,0],[2,-1],[2,0],[1,-1]],[[6685,5281],[1,0],[1,0]],[[6687,5281],[2,0],[2,0],[1,0],[2,-1],[1,0],[1,-1],[1,0],[1,-1],[1,-1],[1,-1],[1,-1],[1,-1],[1,-2],[2,-1],[1,-1],[1,-1],[0,-1],[1,1],[0,-1],[0,-1],[1,-1],[1,0],[1,0],[1,0],[1,-1],[1,0],[1,0],[0,1],[1,0],[1,0],[1,0],[1,0],[1,1],[1,0],[1,0],[1,0],[0,1],[1,0],[1,0],[0,1],[1,0],[0,1],[1,0],[1,1],[1,0],[1,0],[1,1],[1,0],[0,-1],[2,0],[1,1],[1,1],[1,0],[1,1],[1,0],[0,1],[-1,-1],[-1,0],[0,-1],[-1,0],[-1,0],[0,-1],[-1,0],[-1,0],[-1,0],[-1,0],[-1,0],[-1,0],[-1,0],[-1,0],[-1,-1],[-1,0],[-1,-1],[-1,0],[-1,-1],[-1,0],[-1,-1],[-1,0],[-2,0],[-1,0],[-1,0],[-1,0],[-1,0],[-1,0],[-1,1],[1,0],[6,-1],[0,1],[1,0],[1,0],[1,0],[1,1],[1,0],[1,1],[1,1],[1,0],[0,1],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[1,1],[1,0],[1,1],[1,0],[0,1],[1,0],[0,1],[1,1],[1,0],[1,1],[1,1],[1,0],[0,1],[1,0],[1,1],[1,0],[1,1],[0,-28],[-5,-2],[-5,-2],[-7,-3],[-2,0],[-6,-2],[-1,0],[-5,-2],[-5,0],[-4,-1],[-7,-1],[-6,-1],[-5,-1],[-4,0],[-4,0],[-5,-1],[-4,0],[-4,0],[-4,0],[-4,1],[-4,0],[-4,0],[-4,1],[-4,0],[-3,1],[-3,1],[-3,0],[-3,1],[-5,1],[-1,1],[-2,0],[-4,1],[-4,2],[-3,1],[-3,1],[-2,1],[-3,2],[-2,1],[-2,1],[-4,2],[-3,1],[-3,2],[-3,1],[-2,1],[-2,1],[-4,1],[-5,2],[-1,0],[-6,2],[-9,2],[-1,0],[-25,3],[-29,-1],[-20,2],[-1,0],[-24,6],[-4,-5],[-10,2],[-1,-1],[-5,-4],[-11,4],[-7,1],[-7,0],[5,4],[9,-1],[6,-1],[0,1],[-2,1],[-13,1],[-3,-1],[-5,0],[1,0],[0,-1],[0,-1],[0,-1],[-4,0],[-4,1],[0,1],[4,1],[-1,1],[-13,-4],[-3,-1],[-12,-3],[-8,-3],[-1,2],[-1,1],[0,-1],[0,-1],[1,-1],[-1,0],[-7,-4],[-2,-2],[-9,-4],[-8,-5],[-3,0],[-7,1],[-1,0],[-1,0],[-20,6],[-7,-2],[-5,3],[0,-1],[-4,-5],[3,-6],[-3,1],[-3,-2],[-19,-7],[-12,-4],[3,-6],[-1,0],[-6,6],[-3,-1],[-4,-2],[-1,-1],[3,-6],[-5,3],[-2,0],[-3,-1],[-2,0],[-1,-1],[-2,0],[-39,-16],[0,-1],[-9,-7],[-3,-3],[-1,-2],[-1,0],[-2,-4],[-2,-1],[-10,-4],[-2,-2],[-5,-5],[-1,-1],[-5,-5],[-8,-1],[-4,0],[-4,-1],[-5,-6],[-2,-1],[-7,-3],[-1,0],[-2,-1],[-5,0],[-11,4],[-5,1],[-4,2],[-17,10],[-3,2],[-6,3],[-1,2],[-11,15],[-1,5],[0,1],[-2,7],[-9,18],[-11,11],[-16,13],[-6,1],[-19,4],[-1,0],[-4,1],[-2,1],[0,2],[-5,1],[0,-2],[-19,8],[-13,1],[-9,0],[0,-5],[-2,0],[-1,0],[-1,0],[0,2],[-19,1],[-14,4],[-9,0],[-3,-1],[-1,-1],[-5,-5],[-10,-9],[-6,-2],[0,-2],[-6,0],[-7,1],[-3,15],[-6,-1],[1,-1],[4,1],[2,-8],[0,-1],[0,-3],[-1,-1],[1,0],[0,-1],[-1,-1],[-2,-2],[-1,-6],[1,-2],[-2,-17],[-3,-1],[1,-2],[-2,-5],[-1,-1],[-11,-4],[-1,2],[-7,-1],[-1,-2],[0,-3],[-1,-2],[-2,1],[1,-3],[0,-2],[0,-1],[-6,-14],[-4,-9],[-7,-15],[-6,-3],[-4,-2],[-7,6],[0,-7],[2,0],[-6,-11],[-5,-3],[-5,-3],[-1,-1],[0,-3],[-2,0],[-6,-10],[-1,-1],[-11,0],[-12,-1],[-1,1],[-1,0],[-4,1],[-2,0],[-1,0],[-4,1],[-1,3],[0,-3],[-1,0],[-2,-1],[-3,-3],[-20,-20],[-4,-2],[-2,-3],[-3,-1],[-7,0],[-19,5],[-8,6],[-12,9],[-13,0],[-12,3],[-4,10],[-7,-1],[-3,-17],[5,-22],[0,-2],[4,-8],[1,1],[7,-6],[3,-11],[-6,-15],[-4,2],[2,-4],[-3,-1],[4,-3],[-9,-16],[-2,5],[-3,-4],[3,-2],[1,-3],[-11,-11],[-25,5],[-1,-2],[0,2],[-5,-15],[0,-9],[-2,-2],[5,-1],[-6,-12],[-16,-3],[-1,-7],[2,-7],[-2,-1],[0,-1],[-4,3],[-7,-1],[1,-3],[8,-6],[-8,-8],[-19,8],[-10,3],[0,3],[1,7],[-4,9],[-2,2],[-4,1],[-9,-3],[-11,7],[-9,2],[-2,0],[-1,0],[-2,-3],[1,-8],[4,-3],[6,-11],[2,-3],[3,-2],[1,0],[6,-8],[3,-6],[-4,-4],[-5,-6],[0,-2],[0,-1],[4,-3],[1,0],[3,2],[15,-10],[3,-13],[-6,-9],[9,-11],[1,-4],[18,-1],[3,-6],[-1,-5],[-18,-14],[0,1],[-4,-3],[-8,11],[-1,0],[12,-17],[1,1],[-3,4],[2,2],[2,-4],[1,1],[-3,3],[19,14],[5,7],[12,-10],[5,-4],[1,-8],[10,-7],[-7,-30],[-8,-8],[1,0],[3,1],[1,1],[2,2],[5,1],[0,-4],[3,0],[1,0],[5,1],[2,4],[1,1],[1,0],[1,0],[0,1],[0,3],[1,0],[0,-1],[1,-3],[0,-1],[-2,-1],[0,-1],[0,-1],[0,-1],[1,0],[0,1],[0,1],[1,1],[1,0],[1,0],[0,1],[0,1],[-1,0],[-1,3],[1,0],[6,-3],[0,-1],[-1,-3],[-1,-1],[-2,-1],[-1,1],[0,1],[-1,0],[0,-1],[0,-1],[1,-1],[1,0],[2,0],[1,1],[1,1],[0,1],[1,3],[1,0],[4,-5],[9,-7],[-3,-3],[5,1],[-3,-2],[9,-2],[3,1],[7,2],[-6,38],[-14,13],[-4,2],[-7,4],[3,4],[6,-1],[12,-12],[2,12],[0,-16],[9,-1],[1,5],[1,-8],[1,-3],[1,-9],[0,-7],[2,-8],[11,-1],[2,0],[0,3],[2,13],[2,-11],[1,11],[6,0],[6,0],[0,-4],[0,-12],[-10,0],[0,-4],[27,3],[7,0],[-2,13],[5,-10],[3,4],[-1,-6],[3,4],[3,-1],[3,-2],[3,2],[1,-2],[6,1],[-4,-3],[13,-4],[4,-7],[-16,10],[19,-14],[0,1],[-2,5],[2,-1],[4,-5],[-1,-3],[-1,0],[-2,3],[-18,-8],[12,-19],[13,13],[3,-3],[6,-4],[8,-15],[-17,-9],[3,-7],[3,-9],[2,-7],[2,-3],[4,-11],[6,-21],[-14,-4],[-2,4],[-4,6],[-13,-5],[8,-14],[1,5],[7,1],[1,-2],[4,-2],[3,-7],[-2,-1],[-3,-1],[-2,0],[-3,-1],[-3,6],[-1,0],[0,-8],[2,1],[-2,-1],[0,-2],[3,-12],[0,-1],[2,4],[0,7],[7,3],[2,4],[11,2],[1,2],[1,-20],[4,11],[2,-4],[7,-34],[-1,-10],[-4,-3],[0,-2],[6,1],[4,-18],[-11,-3],[0,-2],[0,-1],[-3,0],[-15,-3],[0,-2],[27,-1],[4,-10],[0,-2],[5,-10],[-10,4],[0,-8],[-22,-3],[-3,2],[-8,5],[-7,-5],[-8,-11],[-20,-8],[0,-1],[1,-3],[2,0],[20,4],[0,-8],[8,8],[8,1],[9,-3],[0,-6],[-9,0],[-2,0],[-13,-13],[-3,-2],[-4,-9],[-1,-3],[-24,1],[-1,-2],[-19,-17],[3,-6],[6,3],[11,5],[7,5],[3,2],[2,0],[1,-1],[4,-1],[0,-3],[-1,-4],[-3,-10],[-7,-1],[-2,0],[-1,0],[-1,-2],[11,-7],[18,-5],[16,-4],[15,-4],[22,0],[6,2],[0,2],[1,0],[1,-2],[1,2],[2,4],[1,0],[-1,-3],[2,-2],[3,7],[1,0],[0,-2],[2,-1],[6,0],[5,-1],[0,-1],[2,2],[3,-1],[-1,-1],[2,0],[1,0],[5,-3],[3,-3],[3,-1],[0,-1],[2,-1],[1,2],[1,-3],[6,-5],[6,-1],[-1,-2],[10,5],[2,-1],[-2,-1],[-2,-4],[2,1],[-1,-3],[3,1],[-2,-3],[3,1],[5,2],[3,2],[1,-1],[-6,-8],[7,-3],[12,6],[12,-5],[1,0],[2,-1],[7,-9],[2,1],[0,-3],[-1,-1],[2,-3],[-2,-2],[0,-5],[8,-13],[2,-1],[3,-4],[5,-4],[8,-5],[3,-2],[3,-1],[1,0],[12,-15],[1,-6],[3,-13],[6,4],[5,2],[5,3],[2,0],[5,0],[3,-7],[-3,-2],[-4,-4],[2,6],[1,0],[0,4],[-4,2],[-1,-1],[-4,-5],[3,-4],[1,-4],[3,-15],[2,-1],[0,-1],[3,1],[2,2],[3,1],[4,1],[-7,-3],[-5,-4],[-1,-1],[0,-2],[-1,-1],[13,-22],[-3,-2],[-1,2],[-1,1],[-2,1],[0,3],[-1,4],[-2,3],[-3,3],[-4,3],[-3,2],[-1,1],[-1,0],[11,-24],[2,-2],[1,-2],[0,-2],[0,-3],[8,-24],[-2,2],[-1,-1],[-1,1],[-8,21],[-3,7],[-17,19],[-7,-2],[-1,0],[1,4],[-3,0],[-22,2],[-1,0],[-5,0],[-10,1],[-17,1],[-1,-1],[-4,-3],[-3,-2],[-1,-1],[-2,-1],[-2,-2],[-7,-5],[0,-7],[0,-4],[3,-3],[1,0],[1,-1],[0,-2],[0,-1],[1,-1],[27,-37],[-3,1],[-9,2],[-1,0],[-1,0],[0,-1],[-2,-2],[0,-2],[0,-1],[1,0],[13,-13],[8,-2],[66,-65],[7,9],[-2,23],[4,5],[25,8],[11,3],[-2,-2],[-15,-9],[8,-23],[16,3],[-3,15],[1,-3],[5,-23],[1,-1],[-3,-1],[-1,-4],[-7,-1],[-2,-10],[2,-1],[0,1],[1,9],[11,0],[1,-7],[-6,-1],[-5,-1],[15,1],[0,-1],[-3,-12],[-3,-3],[-4,9],[-5,1],[1,-3],[8,-9],[6,2],[6,1],[17,-28],[8,-3],[9,-10],[5,-12],[2,-3],[3,1],[-1,-3],[6,-5],[3,-9],[1,-4],[0,-1],[0,-4],[8,-23],[0,-1],[2,-1],[-3,-1],[8,-28],[1,-11],[1,-5],[1,-19],[1,-11],[0,-7],[3,-16],[3,-21],[-1,0],[-1,-1],[0,-1],[2,1],[0,-1],[0,-2],[1,-2],[1,-1],[1,-2],[0,-3],[2,-2],[0,-1],[0,-1],[0,-2],[0,-2],[0,-3],[1,-3],[0,-1],[1,-3],[1,-1],[-1,-1],[0,-1],[0,-1],[0,-1],[1,0],[0,-1],[-1,0],[0,-1],[0,-1],[1,0],[-1,-1],[0,-2],[1,-1],[1,0],[0,-1],[1,0],[0,-1],[1,0],[-1,-2],[0,-1],[0,-1],[1,-2],[0,-1],[-4,-28],[-1,-4],[-1,-2],[1,-1],[0,-2],[0,-2],[1,0],[0,-1],[0,-1],[1,-1],[0,-1],[0,-1],[0,-1],[0,-2],[0,-1],[1,-2],[0,-2],[0,-1],[0,-2],[0,-2],[1,0],[0,-2],[0,-1],[1,-1],[1,-1],[1,0],[1,0],[0,1],[1,-1],[0,-1],[0,-1],[1,-1],[1,-2],[1,-2],[1,-1],[0,-1],[0,-1],[0,-1],[1,-1],[0,-1],[0,-1],[1,-1],[0,-1],[1,-1],[0,-1],[0,-1],[1,-1],[0,-1],[1,0],[0,-2],[0,-1],[1,-1],[0,-2],[0,-1],[0,-1],[0,-1],[1,-1],[0,-1],[1,0],[1,-1],[0,-1],[1,-1],[1,0],[0,-1],[1,-1],[0,-2],[1,-1],[0,-1],[0,-1],[1,-1],[0,-1],[0,-2],[1,-2],[0,-1],[0,-1],[1,-2],[0,-1],[0,-1],[1,-1],[0,-1],[1,-1],[0,-1],[0,-1],[1,-1],[1,-1],[1,0],[1,0],[1,0],[2,0],[3,6],[19,-53],[22,-53],[4,-31],[0,-3],[-1,-21],[-2,-6],[1,-1],[1,-3],[3,-17],[1,-2],[7,-9],[4,-1],[3,0],[1,0],[33,12],[-1,3],[3,-3],[1,5],[1,5],[3,-1],[6,6],[8,4],[0,-1],[1,-1],[2,-9],[-1,-5]],[[6282,3559],[-4,-5],[-1,-3],[12,-3],[12,-1],[-10,-1],[5,-2],[12,-3],[15,-2],[15,-10],[1,-6],[30,2],[5,0],[9,-7],[5,-15],[2,-16],[8,-11],[5,1],[3,14],[-2,-15],[0,-3],[-7,1],[-11,17],[-5,22],[-10,6],[-2,0],[-36,-3],[-1,0],[9,-41],[-3,-17],[8,-17],[19,6],[3,1],[8,2],[45,-5],[42,6],[16,-2],[13,-10],[18,15],[10,-2],[2,0],[0,-5],[-2,1],[-7,3],[-17,-14],[-5,-2],[-10,1],[11,-5],[26,-6],[3,0],[-1,-2],[0,-1],[-10,1],[-2,0],[-28,11],[-3,-5],[-4,4],[-59,-8],[6,-20],[1,-24],[20,1],[13,-19],[27,-10],[1,-15],[-3,13],[-26,9],[-13,19],[-21,-1],[-4,27],[-9,18],[-4,0],[-9,1],[-19,-18],[-2,-2],[-1,0],[3,-1],[12,-5],[3,-3],[5,-5],[-5,-15],[2,15],[-3,1],[-10,3],[-21,-8],[-8,-5],[-1,6],[-24,-10],[-9,-2],[-8,15],[-14,-4],[-9,3],[-2,-5],[-5,11],[-6,0],[0,-3],[-4,0],[-4,0],[-3,2],[-7,4],[2,-8],[0,-1],[1,-1],[0,-3],[1,-4],[0,-3],[-1,-4],[2,-3],[-2,3],[-1,2],[0,1],[0,2],[0,2],[-1,-1],[0,2],[0,1],[1,5],[-2,2],[0,1],[-1,3],[-2,4],[-10,3],[-11,9],[-2,-4],[-4,-1],[1,-2],[-1,-1],[-1,3],[-9,-1],[5,-11],[-4,2],[-3,8],[1,4],[7,9],[-2,1],[-4,-4],[0,2],[-3,0],[-3,-2],[2,-4],[-2,-2],[-3,0],[0,4],[9,8],[6,-3],[-2,-7],[4,-2],[2,2],[5,6],[1,3],[-1,12],[-8,-4],[-3,-2],[-7,7],[-3,-1],[-3,2],[-2,-1],[-4,5],[-1,1],[-1,2],[-1,1],[0,1],[-4,7],[-7,4],[-3,8],[-1,8],[3,4],[-1,1],[-4,-1],[-2,34],[-3,12],[-5,26],[-12,17],[-15,8],[-43,-23],[-12,7],[-8,5],[-3,1],[-1,0],[-21,18],[-8,24],[-1,6],[-3,3],[-2,-3],[-2,-9],[-12,8],[-2,2],[-14,10],[5,27],[1,0],[-3,7],[-3,7],[-23,7],[-22,-3],[-3,12],[-14,-1],[-1,6],[0,7],[-4,3],[-4,2],[-2,3],[-2,1],[-4,3],[-3,2],[-5,0],[-2,0],[-5,0],[-5,1],[-5,2],[-3,2],[-3,1],[-11,-11],[-2,1],[2,3],[10,10],[2,11],[-11,20],[-1,2],[-7,8],[-12,9],[-9,9],[-2,1],[-2,1],[-6,0],[-15,-8],[-6,-1],[-4,3],[-1,-1],[-4,0],[-2,0],[-1,0],[-1,0],[0,1],[1,6],[0,2],[-1,0],[-2,1],[-2,1],[-2,1],[0,1],[-1,0],[0,1],[-3,1],[-4,1],[-1,0],[-2,-1],[-1,0],[-1,-1],[-1,0],[-3,-1],[-1,0],[-6,-9],[0,-1],[0,-1],[2,-2],[1,-1],[-3,0],[0,-1],[-3,0],[-1,2],[-1,0],[0,1],[-1,-1],[0,1],[-1,0],[-2,1],[0,12],[-13,1],[-6,-2],[-3,4],[-8,7],[-6,8],[-9,11],[0,2],[1,-1],[4,3],[-2,16],[0,2],[-8,-1],[-5,2],[-7,-3],[-20,-9],[-3,-1],[-1,0],[0,16],[-4,-1],[-4,1],[0,-9],[0,-4],[0,-4],[-1,0],[-40,3],[-4,1],[0,1],[4,0],[3,4],[6,0],[0,-5],[31,-1],[0,6],[0,7],[-1,0],[-5,1],[0,-1],[0,-2],[2,-1],[2,0],[-1,-3],[0,-1],[-4,0],[-2,-1],[-3,-1],[-2,2],[-3,-1],[0,-2],[-2,-1],[-1,1],[0,3],[-2,-1],[-1,1],[0,4],[2,1],[4,0],[5,0],[0,2],[0,1],[-16,-1],[-15,0],[-4,0],[-1,0],[-3,0],[-10,11],[2,1],[0,2],[-1,3],[-3,-1],[-5,8],[-4,4],[-5,4],[-7,4],[-5,3],[-3,1],[0,5],[12,22],[3,3],[6,-3],[25,-13],[8,18],[-21,11],[-4,4],[-3,2],[-2,1],[5,15],[2,4],[-1,3],[-5,3],[-2,-6],[-8,4],[-3,-3],[-9,5],[-6,10],[-1,-7],[-12,-5],[-8,5],[-1,8],[7,7],[12,0],[-3,3],[-4,5],[-1,0],[-3,5],[-13,-2],[3,5],[-2,14],[-6,-9],[4,-11],[-7,2],[-2,0],[0,1],[0,1],[1,0],[1,0],[0,1],[-3,-1],[-1,1],[4,1],[-1,1],[-3,-1],[3,2],[0,1],[-4,-2],[0,1],[4,1],[-1,1],[-4,-1],[4,2],[0,1],[-4,-2],[0,1],[3,1],[0,1],[1,0],[1,1],[1,2],[2,3],[0,1],[0,1],[1,2],[-1,0],[-1,0],[0,1],[5,6],[3,0],[3,0],[6,1],[17,0],[2,9],[4,2],[1,2],[-3,6],[2,2],[0,2],[3,0],[3,1],[-1,1],[-1,-1],[-5,6],[-5,5],[0,4],[12,1],[0,5],[0,4],[-17,1],[0,1],[0,2],[0,6],[-11,0],[1,-3],[0,-3],[0,-1],[-4,-3],[2,-1],[-3,-1],[0,4],[-1,2],[0,1],[-6,-1],[-2,1],[-1,-1],[-5,-3],[-1,1],[2,2],[4,2],[0,2],[3,0],[0,3],[-4,0],[1,1],[1,1],[3,1],[6,0],[2,0],[1,1],[0,1],[1,2],[15,-1],[0,2],[0,24],[-15,0],[-2,4],[-4,25],[-1,5],[-8,57],[-1,2],[2,1],[1,1],[3,2],[2,-2],[2,2],[4,-3],[3,5],[8,-1],[6,-1],[5,0],[5,1],[1,1],[0,1],[-1,1],[-2,1],[-1,1],[0,-1],[-1,-2],[-1,-1],[-2,-1],[-2,-1],[0,1],[-2,2],[0,1],[-1,1],[0,1],[1,2],[10,13],[-18,14],[1,5],[-5,5],[0,1],[0,2],[5,-4],[3,-3],[1,-2],[2,-1],[2,1],[0,2],[0,3],[1,1],[2,1],[2,0],[2,0],[2,2],[0,2],[-1,1],[1,0],[2,-2],[1,-1],[-1,-1],[-1,-1],[-2,-2],[-1,-2],[1,-4],[1,-1],[0,-2],[2,-1],[2,-3],[0,-1],[1,-1],[0,-1],[3,0],[1,0],[1,0],[2,0],[0,-1],[2,0],[2,-1],[2,-1],[2,-1],[1,-2],[3,-2],[1,1],[2,0],[1,0],[8,-5],[0,1],[-8,6],[2,4],[9,-6],[1,0],[4,37],[1,6],[-7,5],[-15,17],[-3,-4],[-6,-10],[-5,5],[-7,0],[-1,3],[1,2],[-1,0],[0,1],[0,2],[2,4],[0,1],[-3,2],[3,4],[9,0],[-7,12],[-6,11],[-24,-2],[-1,1],[-7,0],[-4,1],[-1,1],[0,2],[1,0],[4,-2],[7,0],[2,1],[1,2],[7,-1],[5,6],[2,8],[-3,0],[1,1],[0,1],[2,2],[-5,-2],[-1,0],[-1,3],[0,1],[-3,-1],[1,2],[7,0],[0,6],[-1,0],[0,1],[1,2],[-1,0],[-1,-1],[1,1],[0,5],[1,0],[2,0],[0,9],[-1,-1],[1,-6],[-2,0],[0,6],[0,-6],[-1,0],[0,4],[0,3],[-1,5],[-1,0],[1,-5],[-1,0],[-1,5],[0,-5],[-1,0],[0,5],[-1,0],[0,-5],[0,-1],[-1,6],[-1,0],[1,-5],[-1,0],[-1,3],[-4,-1],[-1,1],[2,3],[0,3],[-1,0],[0,1],[2,0],[0,3],[6,0],[0,1],[-4,0],[0,1],[3,0],[0,1],[-1,0],[-1,1],[-2,0],[1,2],[-2,4],[5,-2],[1,2],[-7,2],[-2,7],[1,0],[0,1],[4,0],[8,-4],[-2,9],[-11,-1],[0,2],[5,1],[0,3],[1,7],[-1,2],[-6,-1],[0,2],[7,1],[0,1],[-7,0],[0,1],[7,1],[0,1],[-8,0],[1,1],[7,1],[-1,1],[-7,0],[1,1],[6,0],[0,2],[-6,-1],[0,2],[4,0],[0,1],[0,1],[-4,0],[0,2],[4,0],[0,1],[-5,0],[1,2],[7,1],[-1,5],[-6,-1],[0,2],[5,1],[-1,1],[-3,0],[0,2],[4,1],[-1,1],[-3,-1],[-1,1],[2,1],[2,2],[-2,-1],[-4,-1],[0,1],[0,1],[4,2],[0,1],[-5,-2],[-1,1],[-1,1],[-1,2],[-1,1],[0,1],[-3,4],[0,1],[-1,1],[1,1],[2,2],[-1,2],[-3,-3],[-3,4],[1,1],[1,2],[0,1],[-4,-3],[-1,1],[4,3],[-1,1],[-4,-3],[-1,1],[4,3],[-1,1],[-3,-3],[-1,1],[5,4],[-1,1],[-5,-4],[0,1],[-1,1],[5,4],[-1,1],[-5,-3],[-1,0],[5,4],[-3,4],[-5,-4],[0,2],[5,3],[-1,2],[-5,-4],[-1,1],[5,4],[-1,1],[-5,-4],[-1,1],[5,5],[-1,1],[-4,-4],[-2,2],[3,6],[-1,1],[-3,-4],[-2,2],[3,4],[-1,1],[-3,-5],[-2,1],[2,6],[-1,0],[-2,-5],[-2,0],[0,9],[-1,0],[0,-6],[-3,1],[-2,7],[-1,-1],[2,-6],[-3,1],[-3,7],[-1,-1],[3,-6],[-2,0],[-5,8],[-2,-1],[4,-6],[-5,5],[-2,-1],[4,-3],[-4,1],[1,-1],[-1,0],[-9,7],[-1,0],[0,-1],[1,0],[0,-1],[-1,1],[-2,1],[0,-1],[2,-2],[3,-3],[2,-2],[3,-1],[-1,-1],[-2,0],[0,1],[-1,0],[-4,3],[0,-1],[1,-1],[2,-1],[0,-1],[-2,0],[-1,0],[-1,0],[-1,0],[0,1],[-2,2],[-2,3],[-1,-1],[4,-4],[-4,-3],[-1,-1],[-2,-2],[-1,-1],[-1,1],[-2,0],[0,1],[-1,1],[-1,2],[0,2],[0,1],[0,1],[0,1],[1,1],[2,1],[1,0],[1,0],[0,1],[-2,0],[-1,-1],[-2,0],[-1,-2],[0,-1],[0,-4],[0,1],[-2,1],[-1,0],[1,0],[2,-2],[-3,1],[-4,0],[0,2],[-1,0],[-3,0],[-2,-2],[1,-8],[-1,-1],[-2,0],[-2,4],[-2,0],[-2,2],[-14,-2],[-1,3],[5,1],[1,1],[-1,0],[-6,-1],[1,-4],[0,-1],[-3,-1],[3,1],[0,-2],[-11,-2],[0,3],[8,4],[0,1],[-3,-1],[-2,0],[-3,-1],[-2,0],[-12,-2],[-2,-1],[-22,-5],[-5,3],[-4,3],[0,1],[-6,5],[-3,1],[-10,3],[-1,3],[-2,1],[-2,-1],[-1,-2],[0,-2],[0,-1],[0,-1],[-1,-1],[-1,-4],[0,-5],[-1,-5],[-1,-4],[-2,-5],[-2,-4],[-1,-4],[-1,-6],[-2,-6],[-2,-5],[-2,-4],[-1,-3],[0,-1],[-3,-3],[-6,0],[-1,-2],[-6,-3],[-4,0],[-3,0],[-3,-1],[-2,2],[-2,2],[-3,1],[-2,-1],[-4,-1],[-3,0],[-3,-1],[-2,-2],[-1,-1],[-1,-1],[-1,-3],[-4,-2],[-1,-2],[-2,-1],[-1,1],[-2,-3],[-2,0],[1,-1],[-2,-3],[-1,-4],[-2,-1],[1,-3],[-1,-2],[1,-4],[1,-1],[1,-1],[3,-19],[0,-23],[2,-13],[1,-27],[3,-7],[3,-26],[0,-6],[1,-10],[2,-36],[4,-20],[4,-22],[2,-6],[5,-23],[8,-45],[3,-39],[-1,-23],[-1,-1],[1,-1],[1,-1],[2,-4],[0,-2],[1,-14],[0,-8],[0,-2],[0,-33],[0,-4],[-1,-7],[-3,-37],[-2,-27],[0,-1],[-3,-1],[-2,-1],[3,-3],[0,1],[1,-10],[-1,-1],[-1,-6],[3,-6],[-1,-4],[-2,-6],[-2,-4],[-6,-1],[0,-6],[1,-1],[3,-3],[-4,-14],[-6,-6],[-3,-4],[-5,-1],[-8,5],[-6,1],[-3,1],[2,-2],[0,-3],[-2,-4],[-13,-4],[3,-5],[5,-6],[0,-12],[0,-15],[-2,-18],[-5,-6],[2,-6],[4,-13],[7,-4],[-2,-14],[0,-12],[4,-19],[-3,-19],[-4,-4],[-1,-5],[0,-1],[0,-1],[-3,-8],[0,-1],[0,-3],[0,-2],[0,-2],[-1,-1],[-2,1],[4,-17],[1,-3],[1,-6],[-1,-4],[1,-7],[-2,-5],[3,-8],[3,-7],[8,-17],[0,-1],[1,-1],[2,-2],[9,-12],[16,-22],[-1,-8],[0,-2],[2,-9],[9,-1],[4,-8],[13,5],[0,1],[-12,-5],[-4,9],[-2,12],[8,7],[3,-6],[0,1],[-3,5],[12,4],[1,0],[7,1],[0,-1],[1,-1],[1,0],[1,0],[0,-1],[0,-1],[0,-1],[0,-1],[-1,0],[-1,0],[2,0],[0,1],[0,2],[0,1],[1,0],[2,1],[9,-2],[-2,-3],[5,-2],[3,-4],[-2,-1],[-11,-8],[-14,-5],[1,-1],[14,5],[11,8],[1,1],[5,4],[3,-2],[7,-5],[14,-20],[0,-1],[23,-34],[10,-46],[4,-13],[1,-16],[0,-3],[1,-6],[1,-20],[2,-25],[0,-8],[0,-2],[4,-7],[5,-13],[5,-14],[4,-8],[1,-8],[4,-13],[3,-4],[2,-8],[1,0],[-1,-2],[2,1],[4,-4],[1,-1],[2,0],[-1,-8],[1,-4],[2,-7],[6,-7],[1,-1],[2,-7],[-1,-8],[2,-1],[0,-10],[-2,-1],[7,-13],[2,-1],[6,-9],[3,-1],[-2,-5],[2,-3],[-1,0],[3,-10],[2,-1],[1,1],[1,-3],[2,2],[4,-3],[-2,-4],[4,-4],[1,-1],[0,-1],[0,-1],[1,-1],[-1,-1],[0,-2],[0,-1],[1,-2],[0,-2],[1,-2],[0,-4],[0,-1],[-1,-2],[-1,-1],[1,0],[0,-1],[0,-2],[-1,-1],[0,-1],[0,-1],[2,-1],[1,-1],[0,-1],[0,-1],[0,-1],[-1,-1],[2,-1],[0,-2],[0,-1],[2,0],[1,-1],[1,-1],[1,0],[2,0],[1,-1],[1,0],[2,-2],[2,-2],[1,-2],[1,-2],[1,-3],[0,-3],[0,-1],[0,-1],[1,0],[0,-1],[-1,-1],[0,-2],[0,-1],[-1,-3],[0,-2],[0,-3],[0,-2],[0,-1],[0,-3],[0,-3],[0,-1],[-1,-2],[-1,0],[-1,0],[0,-2],[0,-1],[2,-2],[0,-1],[-1,-1],[0,-1],[0,-1],[0,-1],[1,0],[0,-1],[0,-3],[0,-2],[0,-4],[0,-1],[0,-2],[1,-4],[-1,-3],[0,-3],[0,-1],[0,-2],[0,-3],[-1,-1],[0,-3],[-1,-3],[0,-4],[0,-3],[0,-2],[-1,-2],[0,-5],[-1,-2],[0,-3],[0,-2],[0,-2],[0,-2],[-1,-1],[-1,0],[0,-1],[0,-1],[0,-1],[0,-2],[1,-1],[0,-2],[0,-3],[1,1],[-1,-3],[-1,-3],[0,-2],[0,-2],[0,-1],[0,-2],[-1,-1],[0,-2],[0,-4],[-1,0],[0,-1],[1,0],[-1,-4],[0,-1],[0,-1],[0,-1],[0,-1],[0,-1],[0,-1],[-1,-2],[0,-1],[0,-1],[0,-6],[0,-1],[0,-1],[-1,-4],[0,-2],[-1,-1],[0,-1],[1,-1],[0,-2],[-1,-8],[0,-1],[0,-1],[0,-1],[0,-1],[0,-1],[-1,-1],[1,-1],[0,-5],[-1,-1],[0,-1],[0,-1],[-1,0],[0,-1],[0,-1],[0,-1],[0,-1],[-1,0],[0,-1],[0,-1],[1,-1],[0,-1],[-1,-7],[0,-1],[1,0],[0,-1],[1,0],[-1,0],[-1,0],[0,-1],[0,-7],[-1,-1],[0,-1],[0,-1],[0,-1],[0,-1],[0,-1],[0,-1],[-1,-1],[0,-1],[0,-1],[0,-1],[0,-3],[0,-1],[-1,-1],[1,-1],[-1,-1],[0,-1],[0,-1],[0,-2],[0,-1],[0,-1],[-1,-1],[0,-1],[1,-1],[0,-1],[-1,-1],[0,-1],[0,-1],[0,-1],[0,-1],[-1,-1],[0,-1],[0,-1],[0,-1],[-1,0],[0,-3],[1,0],[0,-1],[-1,-1],[0,-2],[-1,-1],[0,-1],[0,-1],[0,-6],[-3,-12],[0,-1],[0,-1],[0,-1],[1,-1],[0,-1],[-1,-1],[0,1],[-1,0],[-1,1],[0,1],[0,1],[-1,-1],[0,-1],[0,-1],[0,-1],[0,-1],[0,-1],[0,-1],[0,-2],[-1,-2],[0,-1],[1,-1],[0,-1],[-1,-1],[-2,-3],[2,-4],[-1,-1],[-2,0],[0,-1],[1,0],[1,-1],[0,-1],[0,-2],[-2,-4],[1,-1],[0,-1],[0,-1],[-1,-2],[0,-1],[-1,0],[0,-1],[-1,1],[0,-1],[0,-1],[0,-1],[0,-1],[-1,0],[0,-1],[-1,-1],[-1,0],[0,-2],[0,-1],[1,-1],[-1,-1],[0,1],[-1,0],[1,-1],[0,-1],[0,-1],[0,-1],[0,-1],[-1,-1],[-3,-4],[0,-9],[1,-2],[0,-1],[-1,-2],[0,-4],[0,-2],[-1,-2],[1,0],[0,-2],[1,-1],[0,-2],[1,-1],[1,-2],[0,-2],[1,-1],[1,-1],[0,-1],[1,-1],[0,-3],[-1,0],[0,-1],[1,-1],[0,-1],[0,-2],[0,-2],[1,-2],[0,-1],[-1,0],[0,-1],[1,0],[1,0],[1,-1],[1,-2],[1,-2],[0,-1],[1,-3],[1,-1],[1,-1],[1,0],[0,-2],[2,-2],[-1,0],[0,-1],[2,0],[0,-1],[-1,0],[-1,-2],[1,0],[2,0],[1,0],[1,-2],[1,-2],[0,-1],[0,-1],[-3,0],[0,-2],[1,0],[0,-1],[0,-1],[2,0],[1,-1],[0,-3],[-1,0],[0,-1],[1,-1],[1,-1],[1,-1],[0,-2],[1,-2],[0,-2],[-1,-4],[0,-1],[0,-1],[0,-2],[0,-2],[0,-1],[-1,-1],[-1,0],[-1,0],[0,-1],[-1,-1],[1,0],[1,0],[0,-1],[1,0],[1,0],[1,-3],[-1,-1],[-1,-1],[1,0],[-1,-4],[1,0],[0,-1],[1,-1],[0,-1],[1,-1],[0,-1],[0,-3],[0,-1],[2,-1],[1,-1],[1,-1],[0,-1],[0,-1],[-1,0],[0,-1],[0,-1],[1,-1],[1,-1],[-1,-2],[0,-1],[-1,-2],[1,-1],[-1,-1],[0,-3],[0,-3],[0,-3],[0,-1],[0,-4],[0,-1],[0,-1],[0,-1],[0,-1],[1,-1],[1,-2],[-1,-1],[1,-1],[3,-2],[0,-1],[1,0],[1,-1],[2,-1],[5,-3],[2,-1],[1,0],[1,-2],[0,-2],[1,-4],[0,-2],[0,-6],[1,-1],[1,-2],[0,-2],[-1,-2],[1,-1],[1,-1],[0,-1],[0,-1],[1,-1],[1,-1],[2,-2],[0,-1],[-1,-1],[0,-1],[0,-1],[3,0],[0,1],[1,0],[1,0],[1,1],[-1,1],[1,1],[1,1],[1,0],[1,0],[1,0],[0,1],[1,-1],[2,0],[2,0],[1,1],[3,0],[3,-1],[2,-2],[2,0],[2,-1],[2,-1],[0,-1],[1,-1],[0,-1],[1,0],[1,1],[2,0],[1,0],[2,-1],[1,-1],[1,-1],[2,-2],[0,-2],[1,0],[1,0],[0,1],[1,-2],[1,1],[1,-2],[2,-2],[1,-2],[1,0],[0,-1],[-1,-1],[1,0],[0,-1],[1,0],[1,-1],[1,-2],[1,0],[0,-1],[2,-1],[1,-1],[0,-1],[1,0],[1,0],[1,-1],[1,0],[1,-1],[1,0],[0,-1],[0,-1],[0,-1],[1,0],[1,-2],[2,-1],[0,-1],[1,-3],[1,-3],[-1,-1],[2,-1],[0,-1],[1,-2],[2,-5],[0,-2],[1,-2],[1,-1],[0,-1],[0,-2],[0,-2],[1,-3],[1,-4],[0,-1],[0,-1],[0,-1],[1,-1],[-1,-1],[0,-1],[1,-3],[1,-3],[1,-2],[0,-2],[0,-1],[0,-2],[0,-1],[0,-1],[0,-2],[0,-2],[0,-3],[0,-1],[-1,-1],[-1,0],[-1,-1],[2,-3],[0,1],[1,1],[2,-1],[1,0],[1,-1],[3,0],[1,0],[1,0],[0,-1],[1,0],[0,-1],[0,-1],[1,-1],[-1,0],[-1,1],[0,-1],[2,0],[2,-3],[1,0],[0,-1],[1,0],[2,1],[1,0],[1,-1],[0,-1],[0,-1],[-1,0],[0,-1],[0,-1],[1,1],[1,-1],[2,0],[2,1],[2,0],[2,0],[1,1],[2,-1],[1,-1],[1,-1],[1,-2],[1,0],[1,-1],[1,-1],[0,-2],[0,-1],[0,-2],[0,-2],[0,-1],[1,-3],[1,-1],[1,0],[1,-2],[1,-1],[2,-1],[1,-1],[2,-2],[1,-3],[1,-1],[1,0],[0,-1],[1,-1],[0,-2],[0,-1],[1,-2],[-1,-3],[0,-3],[0,-1],[1,0],[0,-1],[0,-2],[0,-3],[0,-1],[-1,-3],[0,-1],[0,-2],[0,-3],[0,-4],[0,-1],[-1,-2],[-1,-5],[0,-2],[-1,-3],[-1,-1],[1,0],[1,-3],[1,0],[-1,-1],[0,-1],[1,-2],[0,-1],[1,-1],[0,-1],[1,0],[0,-1],[1,0],[1,0],[1,0],[2,1],[1,0],[1,0],[1,0],[1,0],[0,-1],[0,1],[1,-1],[1,-1],[1,-1],[1,-2],[1,-1],[1,-1],[1,-1],[0,-1],[1,-4],[0,-1],[1,0],[-1,-1],[1,0],[-1,-1],[1,-1],[1,1],[1,1],[1,1],[0,1],[3,0],[2,2],[0,1],[1,0],[1,1],[1,0],[1,0],[0,-1],[0,1],[1,0],[0,1],[1,0],[1,1],[2,1],[1,1],[2,0],[1,0],[1,-1],[0,1],[0,1],[1,0],[1,1],[1,1],[0,-1],[1,0],[0,1],[1,1],[0,-1],[1,0],[1,0],[1,0],[1,0],[1,0],[0,-1],[-1,-1],[1,0],[1,1],[0,1],[1,1],[0,1],[1,0],[0,1],[2,0],[1,0],[2,0],[2,-1],[2,-1],[3,-1],[1,0],[1,-1],[1,-1],[1,1],[2,-1],[1,-1],[1,-1],[0,-1],[1,0],[1,-1],[1,0],[1,-2],[1,-1],[2,-1],[1,0],[0,-1],[1,0],[1,-1],[2,-2],[1,0],[1,-1],[1,0],[5,-4],[8,-12],[2,2],[1,4],[5,11],[1,3],[-4,7],[0,1],[-5,10],[0,1],[-10,20],[-3,7],[-2,2],[-6,14],[-1,1],[-7,14],[0,1],[-8,16],[-2,4],[-2,4],[-1,3],[-1,1],[-8,70],[0,1],[-2,16],[-2,21],[0,6],[-1,8],[26,0],[10,0],[31,0],[5,1],[5,1],[13,3],[16,3],[6,1],[20,0],[27,0],[2,0],[5,0],[7,1],[0,8],[0,1],[0,1],[0,19],[0,2],[0,1],[0,14],[0,9],[0,9],[0,4],[0,10],[5,0],[6,0],[2,0],[3,0],[1,0],[4,0],[3,0],[2,0],[1,0],[11,0],[1,0],[4,0],[1,0],[2,0],[3,0],[1,0],[2,0],[1,0],[2,0],[2,0],[1,0],[1,0],[2,0],[2,0],[16,0],[2,0],[27,0],[33,0],[1,0],[2,0],[4,1],[5,-1],[2,0],[4,0],[5,0],[15,1],[16,0],[1,0],[5,0],[1,0],[5,0],[0,2],[0,12],[0,8],[1,8],[2,8],[0,1],[0,5],[0,1],[-1,11],[-1,19],[0,1],[0,4],[-1,10],[0,10],[0,4],[0,3],[0,31],[1,37],[0,4],[0,26],[0,2],[0,11],[0,2],[1,-2],[1,-1],[0,-1],[1,0],[1,-1],[0,-1],[1,-2],[0,-1],[1,-2],[2,-4],[0,-4],[-2,-8],[-2,-5],[2,-1],[1,0],[1,0],[1,-1],[1,-1],[1,-1],[3,-6],[3,-6],[1,-1],[11,-6],[1,0],[0,-1],[1,0],[2,-2],[1,-2],[2,-2],[2,-1],[2,-5],[1,-1],[3,-4],[2,-4],[1,0],[10,-7],[4,1],[5,1],[6,-4],[1,-3],[6,-8],[1,-1],[6,-10],[15,-24],[0,-1],[7,-9],[1,-4],[0,-2],[1,-4],[1,-4],[0,-6],[1,0],[10,-4],[1,0],[5,-4],[8,-7],[2,-12],[2,-3],[5,-5],[6,-1],[6,-1],[1,0],[4,2],[2,0],[2,1],[3,0],[1,-1],[1,-2],[1,-2],[0,-2],[3,-2],[1,-1],[2,-1],[2,-2],[1,-2],[6,-5],[7,-9],[3,-6],[2,-5],[1,0],[5,-2],[2,2],[5,6],[3,2],[5,-2],[4,1],[0,-3],[2,-5],[1,-3],[3,-3],[8,-7],[2,-2],[1,-1],[2,-4],[3,-6],[3,-2],[0,-2],[2,-4],[6,-12],[2,-2],[7,-6],[1,0],[3,-2],[1,0],[6,-3],[3,-4],[-3,-5],[1,-4],[-3,-2],[1,-4],[1,-7],[1,-2],[-1,-3],[1,-2],[5,-3],[1,-2],[0,-2],[0,-1],[1,-3],[1,-1],[3,-1],[1,0],[0,-1],[0,-1],[-1,0],[0,1],[-1,-2],[-1,-3],[0,-1],[2,0],[0,-1],[3,1],[1,-1],[0,-1],[0,-1],[-1,-1],[0,-1],[-1,-1],[-2,-1],[-2,-3],[1,-1],[1,-2],[1,-1],[2,-1],[0,-4],[-1,-4],[0,-2],[2,-1],[2,2],[1,-1],[1,2],[1,-1],[1,0],[1,-1],[2,-1],[2,1],[0,1],[1,0],[1,-1],[1,-1],[3,-4],[1,3],[1,1],[0,1],[1,0],[1,-1],[1,-1],[1,-1],[0,-1],[0,-1],[0,-1],[2,-1],[1,-1],[-1,-1],[2,-2],[2,-1],[-1,-2],[4,0],[1,-1],[2,0],[3,-1],[1,1],[2,-1],[2,-1],[0,-1],[0,-1],[0,-1],[1,0],[1,0],[2,1],[1,0],[1,0],[1,0],[1,0],[0,-1],[2,1],[1,0],[0,-1],[1,0],[0,-1],[1,0],[1,0],[1,-1],[0,-2],[0,-2],[1,-2],[1,-3],[0,-1],[0,-1],[3,-6],[1,-5],[2,-1],[6,-8],[1,-2],[1,-1],[0,-2],[0,-1],[0,-4],[1,-1],[0,-1],[1,-3],[1,0],[2,-2],[3,-1],[2,0],[1,0],[2,0],[0,5],[1,0],[3,-2],[0,-2],[1,-4],[1,0],[0,-1],[3,-2],[4,-1],[2,1],[2,-1],[4,0],[1,3],[2,-2],[2,1],[7,0],[2,-1],[2,-1],[1,-2],[2,-2],[2,-5],[4,-4],[3,-4],[5,-5],[1,0],[1,-1],[1,-2],[2,-2],[2,-1],[2,0],[1,-1],[1,-1],[4,-3],[1,-1],[2,-1],[2,-1],[2,-1],[2,0],[1,0],[3,-1],[1,-1],[10,-2],[5,-2],[7,-4],[18,-8],[6,-3],[3,4],[13,-6],[32,-25],[11,-1],[2,-3],[0,-2],[0,-2],[1,-1],[2,-2],[1,1],[1,3],[-1,0],[1,1],[0,1],[0,1],[1,-1],[1,0],[1,-1],[-1,-1],[2,0],[0,1],[1,1],[1,0],[0,-1],[0,-1],[1,-3],[2,2],[2,-1],[1,0],[1,0],[1,1],[1,-1],[0,-1],[0,-1],[2,2],[0,-1],[0,-1],[-1,0],[0,-1],[-1,-1],[1,-1],[1,-1],[1,0],[1,-2],[1,0],[1,1],[0,-2],[0,-1],[1,-1],[2,-1],[1,0],[1,1],[1,-1],[1,2],[3,-3],[-2,-1],[0,-1],[-1,-1],[0,-1],[1,-1],[1,-1],[1,1],[2,0],[1,1],[1,1],[0,-2],[2,3],[1,2],[4,4],[6,-3],[4,-2],[10,-5],[4,-2],[10,-5],[8,2],[5,1],[7,1],[1,1],[2,1],[-2,-7],[0,-2],[-2,-6],[2,0],[2,0],[7,0],[3,-2],[2,-1],[6,1],[1,1],[0,1],[1,0],[1,-1],[1,1],[2,0],[1,0],[1,-1],[2,-1],[1,-1],[1,-2],[4,-1],[0,-3],[1,0],[1,1],[1,0],[0,-2],[1,0],[0,-1],[0,-1],[-1,-1],[0,-1],[0,-1],[2,-1],[1,0],[0,1],[2,0],[1,1],[1,0],[0,-1],[0,-1],[1,-1],[0,-1],[0,-1],[1,0],[0,1],[4,-1],[0,-2],[-1,0],[0,-1],[0,-1],[1,0],[2,-3],[2,3],[2,0],[1,-3],[3,1],[0,-1],[2,0],[1,-1],[1,-1],[1,-1],[-1,-3],[1,-2],[0,-1],[1,0],[2,1],[1,0],[1,-1],[1,1],[1,0],[2,2],[2,-3],[2,0],[1,1],[1,0],[2,-1],[2,1],[1,-1],[2,0],[1,-1],[0,-1],[0,-1],[1,-1],[1,0],[1,-1],[1,-3],[2,-2],[1,-2],[0,-1],[1,-2],[0,-1],[3,-1],[2,-1],[1,-1],[1,-2],[0,-4],[-3,-3],[0,-1],[0,-4],[3,-3],[1,0],[1,0],[2,-2],[3,-1],[2,-2],[0,-1],[1,-1],[1,-1],[1,-2],[0,-2],[-1,-3],[-2,3],[0,-2],[1,-3],[1,-3],[1,-1],[2,-1],[3,-2],[1,0],[1,-2],[2,0],[2,1],[2,0],[1,0],[1,-1],[2,-1],[6,-1],[13,-14],[5,3],[17,-10],[8,-12],[5,-3],[7,-3],[10,-7],[17,-1],[2,-6],[-3,-3],[5,-4],[5,-1],[5,3],[2,3],[4,-2],[1,-3],[3,-7],[8,-15],[7,-11],[3,-9],[4,-3],[12,-21],[2,-1],[2,-1],[7,-5],[20,-12],[0,-1],[-5,1],[-1,-3],[-5,1],[1,6],[-2,1],[-12,-22],[20,-17],[3,6],[9,-9],[2,-1],[0,-1],[7,-3],[-25,-30],[1,-2],[2,-1],[-1,-3],[-1,-2],[-1,-2],[0,-2],[-1,-1],[0,-1],[-2,-1],[-1,-1],[-2,0],[-1,0],[-1,0],[-1,0],[-2,0],[-1,-1],[-1,-2],[1,-2],[-2,0],[-2,-1],[-1,-1],[-4,-1],[5,-3],[1,1],[2,0],[1,0],[3,1],[2,0],[1,0],[1,1],[3,2],[27,14],[2,1],[0,-1],[0,-1],[0,-1],[1,-1],[6,-4],[9,0],[1,-2],[-1,-2],[-1,-3],[1,-3],[2,0],[0,3],[3,-2],[3,-1],[4,-1],[1,-10],[9,0],[4,0],[10,-3],[0,-8],[-3,-4],[1,-3],[0,-2],[-2,-2],[-1,-2],[-1,-2],[0,-3],[-1,-3],[0,-3],[0,-3],[0,-2],[0,-2],[1,-2],[1,-2],[2,-1],[2,-2],[1,-2],[1,-1],[2,-2],[1,-2],[3,-1],[1,0],[3,-1],[1,-1],[1,0],[4,-1],[3,2],[2,-1],[5,-1],[3,2],[9,1],[2,-3],[0,-1],[1,0],[-1,-3],[3,1],[3,-2],[2,0],[3,1],[0,-2],[1,-2],[1,0],[4,-2],[9,2],[3,-2],[1,-2],[1,-7],[3,-5],[-1,-6],[-3,-7],[2,-5],[1,-5],[4,0],[6,-4],[1,0],[2,0],[6,1],[3,-1],[0,-9],[3,0],[-1,-6],[-3,-3],[1,-3],[1,-6],[10,-14],[5,-11],[2,-4],[11,-1],[-2,9],[-1,4],[4,4],[2,1],[0,-1],[2,0],[2,3],[2,1],[12,1],[1,1],[2,3],[10,-2],[5,-7],[-1,5],[-1,2],[0,2],[9,-9],[32,-36],[39,0],[0,-3],[0,-18],[21,0],[0,-3],[-1,-53],[0,-2],[4,-4],[11,-16],[9,10],[4,2],[15,-1],[6,0],[1,13],[4,29],[12,13],[7,3],[4,3],[1,0],[6,3],[11,6],[0,16],[14,17],[16,14],[31,30],[5,9],[0,3],[0,1],[0,11],[3,3],[1,8],[-5,8],[6,3],[2,8],[2,4],[5,1],[9,24],[2,2],[3,4],[22,27],[1,1],[2,2],[37,-15],[1,-1],[2,0],[2,-1],[1,0],[2,-1],[0,-1],[3,-1],[10,4],[-5,12],[6,11],[2,0],[5,1],[3,2],[3,3],[1,0],[1,-3],[5,4],[3,0],[1,0],[1,3],[5,0],[2,-2],[0,-4],[-1,-2],[2,-2],[3,-8],[8,-4],[0,-1],[17,-10],[5,-13],[7,-7],[25,-28],[4,-5],[1,-2],[1,0],[0,1],[5,0],[38,0],[37,0],[0,-1],[4,0],[1,0],[4,0],[4,0],[11,0],[2,0],[4,0],[38,0],[5,0],[1,0],[15,0],[0,1],[0,-1],[13,0],[1,0],[163,2],[108,0],[13,0],[-1,2],[-1,1],[-4,1],[-4,2],[-2,2],[-2,3],[-1,3],[-1,3],[-1,1],[-3,2],[-4,0],[-3,0],[-3,0],[-2,0],[-2,2],[-2,1],[-2,1],[-2,2],[-2,3],[-1,1],[-5,5],[-2,2],[-5,7],[0,3],[-4,4],[-2,3],[-2,2],[-2,3],[-3,5],[-2,4],[-2,7],[0,6],[2,8],[1,4],[1,1],[0,5],[1,2],[0,1],[4,1],[2,3],[0,2],[0,2],[1,2],[0,1],[1,0],[2,1],[10,2],[6,3],[-1,6],[-2,1],[-1,2],[0,1],[0,2],[0,2],[-1,3],[0,3],[-3,1],[-1,1],[2,6],[-1,1],[-2,0],[-1,1],[0,1],[0,1],[1,1],[1,1],[1,1],[2,-1],[1,1],[5,3],[-3,5],[-2,0],[-1,1],[-1,3],[-1,2],[-2,2],[0,3],[-4,5],[-1,0],[-1,1],[0,1],[-1,2],[0,2],[-2,3],[-2,1],[-1,0],[-1,2],[-1,2],[0,1],[-2,1],[-1,3],[-2,3],[-2,3],[-1,3],[0,2],[0,1],[1,1],[0,1],[-1,1],[-1,2],[0,4],[0,2],[-1,2],[-1,3],[0,1],[2,-1],[4,-3],[1,-1],[2,-1],[2,0],[2,1],[1,-1],[3,0],[1,0],[1,0],[2,1],[1,1],[0,1],[1,1],[-1,3],[0,1],[1,0],[5,8],[12,3],[0,1],[1,0],[14,5],[0,1],[0,5],[-1,8],[-2,24],[1,2],[1,2],[1,2],[2,3],[1,1],[-3,3],[3,4],[3,-1],[3,0],[5,0],[3,-2],[5,-2],[1,-1],[2,-1],[2,-1],[1,0],[1,1],[1,1],[0,1],[1,1],[1,1],[0,2],[2,2],[2,2],[0,5],[1,1],[0,1],[1,1],[0,2],[0,1],[-2,4],[-1,1],[0,2],[0,1],[0,1],[-2,3],[0,2],[0,2],[0,1],[0,1],[1,1],[-6,2],[-1,0],[-1,0],[-2,0],[-4,1],[-1,3],[-1,1],[-6,7],[-4,0],[-2,1],[-1,1],[-1,1],[-1,2],[0,3],[-3,11],[-7,7],[-1,0],[-2,0],[-1,1],[0,1],[-1,1],[-1,1],[-1,1],[0,1],[-1,1],[-5,5],[-1,0],[-1,1],[-1,1],[-1,1],[-1,1],[-11,0],[-1,-3],[-1,0],[-2,0],[-1,1],[-2,2],[-1,2],[-3,6],[-1,0],[0,1],[0,1],[1,1],[1,0],[0,1],[1,1],[1,1],[1,3],[0,1],[1,2],[0,1],[2,1],[1,-1],[2,0],[1,0],[1,1],[2,0],[1,0],[11,7],[1,2],[1,1],[1,1],[1,1],[1,0],[1,0],[1,-1],[1,0],[1,7],[-1,5],[0,2],[0,3],[0,2],[0,1],[-1,2],[-1,2],[1,1],[1,1],[2,0],[2,1],[2,0],[5,4],[-1,6],[-2,3],[0,1],[0,2],[1,2],[4,7],[1,2],[1,3],[1,1],[1,1],[3,1],[1,1],[3,8],[0,1],[1,2],[1,1],[4,9],[-3,1],[-1,1],[-2,1],[-2,2],[-1,2],[-1,1],[-1,2],[0,1],[0,1],[0,2],[-1,1],[-2,2],[0,1],[0,1],[0,1],[1,1],[0,1],[0,1],[0,1],[0,1],[-1,1],[-1,1],[-1,1],[-1,1],[-1,2],[0,1],[-2,2],[-2,2],[-1,1],[-3,3],[-3,3],[-4,5],[0,3],[-2,1],[0,1],[-1,4],[-1,2],[0,3],[0,1],[-4,13],[-1,2],[-1,1],[0,1],[-1,2],[0,2],[0,1],[0,1],[1,-1],[0,-1],[1,6],[0,2],[-1,2],[-2,2],[0,1],[1,3],[0,2],[-1,2],[-1,2],[-1,1],[-2,0],[-2,0],[-2,-1],[-4,0],[-1,1],[-2,2],[-1,1],[-3,0],[-2,-2],[-3,0],[-1,-1],[-3,0],[-1,1],[-3,1],[-4,0],[-3,1],[-2,0],[-1,0],[-2,1],[-2,0],[-2,0],[-3,0],[-2,0],[-2,1],[-1,0],[-1,0],[-1,0],[-1,1],[0,1],[0,1],[-3,6],[-2,6],[-3,5],[-3,5],[-3,6],[0,1],[-3,5],[-2,3],[-3,1],[-3,3],[-1,2],[-1,5],[-1,5],[-2,5],[-3,2],[-3,0],[-1,4],[-2,4],[-2,3],[-2,2],[-3,0],[-3,-2],[-1,-2],[-1,-1],[0,-4],[-2,1],[-2,0],[-1,-2],[-1,-2],[-1,-2],[-1,-6],[-3,-2],[-2,-2],[-2,-2],[0,-1],[0,-6],[0,1],[1,-1],[0,-3],[-1,-2],[0,-1],[-1,-1],[0,-1],[-3,0],[-4,-3],[-3,-2],[-3,-6],[2,2],[-1,-1],[-1,-1],[-2,-2],[-2,-1],[-1,-1],[0,1],[-1,0],[-2,1],[-5,6],[-7,-5],[-1,0],[-5,4],[-8,7],[-3,0],[-2,-1],[0,-1],[0,-2],[0,-3],[-5,-1],[-4,-1],[-1,0],[-1,1],[-1,0],[-3,0],[-2,-1],[-4,-3],[-2,1],[-1,1],[-2,0],[-2,-1],[-2,-1],[-2,-1],[-1,0],[-8,13],[-1,3],[-1,0],[-3,0],[-1,-1],[-1,0],[-1,2],[-3,3],[-2,2],[-2,1],[-5,2],[-5,1],[-1,1],[0,2],[-1,2],[-1,3],[-1,2],[-1,1],[-1,1],[-1,1],[-1,1],[-1,3],[-2,2],[-3,2],[-3,2],[-4,1],[-3,2],[-2,1],[-2,3],[-5,-2],[-5,2],[-1,1],[-3,0],[-4,-1],[-1,-1],[-2,-3],[-1,-2],[0,-2],[0,-2],[-1,-1],[-1,-1],[-1,-1],[-3,-1],[-12,-8],[-3,-10],[-1,-2],[-1,0],[-2,0],[-3,-2],[-2,-2],[-2,-5],[-1,-2],[-1,-2],[-2,-3],[-1,0],[-2,0],[-2,1],[-2,-1],[-1,-1],[-1,-3],[-1,-1],[-1,-2],[1,-3],[1,-3],[1,-2],[-1,-2],[-1,-1],[0,-4],[1,-2],[1,-3],[2,-2],[1,-2],[1,-1],[0,-1],[-1,-1],[-1,-1],[0,-2],[0,-2],[-1,-4],[-1,-5],[0,-3],[-2,0],[-1,1],[-2,0],[-1,0],[-3,-1],[-3,0],[-4,-2],[-2,0],[-2,-2],[-1,-3],[0,-3],[-1,0],[-1,0],[-2,1],[-1,1],[-1,1],[-1,1],[-2,2],[-3,1],[-1,0],[-1,-1],[-1,0],[-1,1],[-1,1],[-1,2],[-1,3],[0,4],[-1,2],[0,2],[-2,1],[-1,1],[-2,0],[-2,1],[-1,0],[-1,2],[-1,1],[-1,3],[-1,3],[-1,3],[-1,6],[-1,3],[0,1],[0,7],[0,7],[0,4],[-3,4],[-4,2],[-4,2],[-2,2],[0,1],[0,1],[0,1],[2,0],[2,1],[1,2],[2,1],[0,3],[0,1],[0,2],[-1,1],[-1,1],[0,2],[0,1],[0,1],[1,2],[1,0],[1,4],[1,2],[1,0],[0,2],[0,3],[0,4],[-1,2],[-2,0],[-2,2],[-1,1],[0,2],[0,2],[1,3],[1,3],[1,1],[0,2],[0,3],[0,3],[-1,2],[-1,1],[-1,2],[0,2],[0,2],[0,2],[-1,2],[-1,1],[-2,3],[-1,2],[-2,2],[-2,3],[-1,2],[0,2],[0,2],[0,4],[-1,3],[0,2],[0,3],[-1,4],[0,3],[0,4],[0,4],[0,5],[-1,2],[-1,2],[-2,2],[-1,2],[-5,3],[-1,4],[-1,6],[1,3],[0,1],[0,2],[0,3],[-1,1],[-1,2],[-1,1],[-1,1],[-2,2],[-2,1],[-2,0],[-1,0],[-3,3],[-1,2],[-1,1],[-1,0],[-1,1],[-1,2],[-1,1],[-1,2],[-1,0],[-1,1],[-3,-1],[0,-2],[-3,-1],[-1,3],[-1,0],[0,2],[-1,1],[-1,1],[-1,2],[-1,1],[-2,0],[-3,1],[-1,1],[-1,1],[-5,2],[-1,2],[-3,5],[-1,0],[-1,2],[-2,1],[-1,3],[-1,2],[-1,0],[-2,1],[-1,1],[-1,1],[-1,1],[0,1],[0,1],[1,1],[0,2],[0,1],[1,1],[-2,2],[-1,1],[0,2],[-3,4],[-1,2],[0,1],[0,1],[-1,1],[-1,1],[-1,1],[-1,2],[0,3],[-3,5],[-2,2],[-1,1],[-1,2],[0,4],[0,2],[0,1],[1,3],[-2,2],[1,1],[0,1],[1,3],[0,-1],[1,3],[-1,1],[0,1],[0,1],[-1,3],[-1,2],[0,3],[-2,5],[1,4],[2,2],[1,1],[1,0],[0,4],[0,1],[1,4],[0,3],[0,3],[0,1],[0,2],[0,9],[0,1],[1,4],[0,2],[0,1],[0,5],[0,1],[0,2],[0,1],[-2,4],[-1,0],[-1,1],[0,1],[-2,2],[-2,3],[0,1],[-1,1],[-1,1],[-2,2],[0,1],[1,0],[1,3],[1,1],[5,0],[1,-1],[3,1],[1,2],[0,2],[1,2],[0,1],[0,1],[1,1],[0,1],[1,1],[1,2],[1,0],[1,1],[3,2],[1,1],[0,1],[1,1],[0,1],[-2,11],[14,8],[2,-1],[2,-4],[2,-3],[3,-2],[3,-1],[2,-2],[2,-1],[3,1],[3,2],[1,2],[2,2],[2,1],[1,1],[3,1],[4,1],[3,1],[1,1],[1,0],[1,0],[1,0],[2,0],[-3,-1],[-1,0],[4,-2],[3,0],[0,2],[0,2],[1,8],[9,9],[0,2],[1,1],[0,1],[1,0],[1,1],[2,1],[4,4],[1,0],[1,4],[0,1],[1,0],[2,2],[3,2],[6,5],[3,0],[3,2],[1,2],[-1,2],[0,3],[-1,1],[0,-1],[-1,0],[-1,1],[0,3],[-1,6],[-1,6],[-2,11],[-6,10],[4,2],[0,1],[-2,6],[4,10],[-26,44],[0,1],[0,2],[2,1],[0,1],[-1,3],[-1,1],[0,6],[0,1],[0,2],[3,2],[0,2],[-1,3],[-3,3],[0,2],[0,2],[0,1],[-2,2],[-4,9],[2,6],[0,4],[0,2],[1,1],[1,1],[1,1],[1,1],[1,0],[2,1],[1,0],[0,1],[0,1],[0,2],[1,2],[0,2],[2,1],[1,8],[3,12],[0,1],[0,1],[0,1],[1,0],[0,2],[0,1],[0,1],[1,0],[1,0],[1,1],[1,1],[1,1],[1,2],[1,0],[1,1],[2,1],[1,0],[2,3],[1,2],[2,3],[-1,2],[-1,2],[-1,1],[0,1],[1,1],[-1,1],[0,2],[-1,6],[-3,4],[-1,7],[-4,0],[-1,2],[-5,0],[-6,2],[-11,9],[-17,2],[-2,0],[-3,3],[-3,2],[-3,1],[-3,-2],[-3,-3],[-3,0],[-4,-4],[-1,-1],[-1,-1],[-4,2],[-2,0],[-1,-1],[-2,-1],[-3,-3],[-6,2],[-2,7],[-12,3],[-4,8],[6,9],[-1,18],[-17,28],[-6,-3],[-14,25],[-1,1],[1,3],[1,0],[1,0],[1,0],[1,1],[2,0],[1,1],[1,0],[0,1],[0,1],[0,1],[-4,6],[0,1],[0,2],[0,2],[0,2],[1,3],[2,2],[1,2],[1,2],[2,2],[0,1],[1,1],[1,2],[2,2],[0,1],[2,4],[1,1],[1,0],[0,1],[4,1],[1,2],[0,1],[0,4],[0,1],[-1,5],[-3,11],[2,8],[0,10],[-2,1],[-1,2],[0,4],[-2,2],[-1,0],[-4,-3],[-3,1],[-1,0],[-2,6],[-6,2],[-1,0],[-1,1],[0,2],[-1,5],[0,3],[0,1],[-1,2],[-1,2],[-1,2],[-2,1],[-3,2],[-2,1],[-4,2],[-8,3],[-3,3],[-4,26],[-1,2],[0,2],[1,0],[2,0],[2,-1],[2,0],[2,2],[1,1],[1,1],[1,2],[1,2],[1,1],[1,1],[1,1],[1,1],[1,2],[1,0],[1,1],[4,0],[2,-2],[2,-1],[2,3],[1,2],[1,4],[2,-1],[0,2],[1,1],[1,2],[0,1],[0,2],[-1,2],[1,1],[1,0],[0,1],[0,1],[0,2],[1,2],[1,3],[0,2],[1,1],[0,1],[0,1],[-1,0],[-1,1],[-1,1],[-1,1],[0,1],[-1,1],[-1,1],[-1,1],[-2,1],[-1,1],[-2,3],[-1,1],[-1,2],[-1,2],[-1,0],[-1,1],[-2,0],[-1,1],[-2,1],[-1,1],[-1,0],[-1,3],[0,1],[-1,2],[-1,0],[-2,4],[-8,8],[-19,0],[-6,8],[1,11],[-4,15],[-7,9],[-1,3],[-3,4],[3,3],[3,4],[2,6],[-5,4],[-8,6],[-10,-3],[-18,2],[-13,-2],[-11,7],[-4,2],[-2,-2],[-23,8],[-8,5],[-6,4],[-3,8],[-3,2],[-5,11],[-15,10],[0,24],[0,75],[0,35],[-1,93],[0,3],[0,1],[1,58],[0,2],[0,104],[0,3],[0,103],[0,12],[-1,21],[0,1],[0,1],[0,24],[0,21],[0,11],[0,12],[0,6],[1,9],[0,5],[0,1],[-1,8],[1,31],[0,39],[0,4],[0,4],[0,5],[0,38],[0,30],[0,13],[0,1],[-1,51],[1,0],[-1,0],[1,4],[0,10],[2,1],[1,0],[1,1],[1,1],[-1,2],[0,1],[1,3],[1,2],[1,0],[1,1],[2,0],[1,0],[2,0],[0,2],[-1,1],[-1,1],[-2,1],[-1,2],[0,1],[1,1],[0,1],[2,2],[-2,9],[-2,3],[0,2],[0,3],[1,1],[1,2],[1,1],[1,2],[1,3],[2,2],[1,1],[0,-1],[0,-2],[-1,-2],[0,-2],[2,0],[1,0],[2,1],[1,1],[2,0],[2,1],[2,0],[2,1],[2,2],[0,1],[1,2],[1,2],[0,1],[1,1],[3,2],[1,1],[1,1],[0,2],[0,1],[-1,2],[0,2],[1,0],[1,1],[1,2],[-1,1],[-1,0],[-1,-1],[-1,-1],[-1,0],[0,1],[0,1],[0,1],[1,1],[2,3],[2,1],[1,2],[1,1],[0,2],[-2,1],[0,1],[1,1],[0,1],[2,0],[1,2],[2,1],[1,1],[0,2],[1,0],[0,2],[-1,2],[-1,1],[-1,2],[-2,0],[-2,1],[-1,-1],[0,-1],[1,-1],[-1,-3],[0,-1],[-2,0],[-2,0],[-1,-2],[-1,0],[-1,1],[0,1],[0,2],[0,1],[-1,2],[-1,2],[0,1],[0,2],[0,1],[0,2],[0,2],[0,3],[1,2],[1,2],[1,1],[0,2],[-1,2],[-1,0],[-1,0],[-1,0],[-2,-1],[-2,-2],[-3,-2],[-4,-2],[-3,-1],[-1,1],[-1,3],[0,1],[-1,1],[-1,2],[-1,4],[-2,3],[-1,2],[-1,2],[0,1],[-1,0],[-1,-1],[0,-1],[-1,-2],[0,-3],[-2,-2],[-2,-1],[-1,0],[-1,1],[-2,0],[-2,1],[-1,1],[-1,1],[-1,0],[-1,-1],[-1,-1],[-1,-2],[-2,-2],[-1,-2],[0,-1],[0,-2],[0,-1],[1,-1],[0,-2],[1,-3],[-1,-1],[0,-1],[-1,0],[-1,1],[-1,0],[-1,2],[-1,3],[-2,3],[-1,2],[-1,2],[-1,2],[-1,0],[-1,-1],[-1,-1],[-1,0],[-1,0],[-1,0],[-1,0],[-1,1],[0,1],[0,1],[2,1],[1,1],[1,1],[1,1],[-1,1],[0,2],[-1,1],[-1,0],[-2,0],[-3,0],[-3,-1],[-3,-1],[-2,-1],[-2,-1],[-1,-3],[-2,-2],[-1,-1],[-1,-1],[-2,0],[0,1],[0,1],[-1,1],[0,1],[-1,1],[0,1],[-1,2],[1,0],[0,2],[0,1],[2,1],[2,1],[2,1],[2,1],[2,2],[2,3],[1,2],[0,3],[-1,1],[-1,2],[-1,1],[-3,2],[-1,2],[-2,2],[-1,2],[-1,1],[-2,3],[-1,4],[0,2],[0,3],[-1,2],[1,3],[0,2],[1,3],[1,2],[0,2],[1,2],[1,2],[1,1],[4,5],[2,3],[1,1],[0,2],[1,1],[0,1],[-1,2],[-1,4],[-1,2],[-1,2],[-1,3],[0,1],[0,2],[1,1],[0,1],[1,0],[1,1],[2,1],[2,1],[2,0],[2,1],[1,1],[1,0],[2,1],[2,1],[1,2],[1,2],[1,2],[0,3],[0,2],[0,3],[1,3],[0,4],[0,1],[-1,2],[0,2],[-1,0],[-1,1],[-1,1],[-1,1],[-1,1],[-2,1],[-1,1],[-1,2],[-1,1],[-1,1],[0,2],[0,1],[1,2],[1,2],[2,1],[1,1],[1,0],[1,2],[2,1],[1,1],[2,1],[2,1],[1,1],[1,1],[2,2],[1,1],[0,1],[1,0],[0,2],[0,2],[0,1],[-1,2],[0,1],[-2,1],[-1,1],[-1,3],[-1,3],[-2,3],[0,2],[0,1],[0,1],[1,2],[0,1],[1,1],[1,1],[1,1],[2,1],[3,1],[3,0],[2,1],[3,1],[3,1],[2,1],[2,1],[1,1],[-1,1],[-1,1],[-1,1],[-1,1],[-2,2],[-1,3],[-1,2],[-1,3],[0,3],[1,2],[0,1],[1,2],[1,3],[1,3],[-1,1],[-1,1],[-1,2],[-2,2],[-3,3],[-1,2],[-1,2],[0,3],[0,2],[1,2],[0,2],[1,2],[0,1],[0,1],[-1,2],[-1,2],[-1,2],[-1,2],[0,2],[-1,2],[0,3],[-1,2],[1,2],[1,1],[2,0],[1,0],[2,0],[1,0],[1,0],[0,1],[1,1],[0,1],[-1,1],[-1,1],[-2,1],[-1,0],[-2,-1],[-2,-2],[-1,-1],[-2,-2],[-1,-1],[0,-1],[-1,0],[-1,0],[-1,0],[-2,0],[-1,1],[-1,2],[0,1],[0,2],[0,3],[0,2],[1,2],[0,2],[1,1],[1,1],[0,1],[1,1],[1,1],[1,1],[2,2],[2,2],[0,1],[1,0],[0,2],[-1,1],[-1,1],[-1,1],[-1,1],[-3,0],[-2,0],[-2,-1],[-5,-1],[-4,-2],[-2,0],[-2,0],[-2,1],[-1,1],[0,1],[0,1],[0,1],[1,1],[1,1],[2,1],[2,1],[1,0],[3,1],[3,0],[1,1],[2,0],[2,0],[2,1],[2,1],[1,2],[0,2],[0,1],[0,2],[-1,1],[-2,0],[-3,2],[-3,1],[-3,3],[-3,3],[0,1],[-1,1],[-1,2],[-1,3],[0,2],[0,1],[0,2],[1,4],[0,2],[0,2],[-1,2],[-2,2],[-1,1],[-1,1],[-2,2],[-2,2],[-3,2],[-1,0],[-1,1],[-1,2],[-1,2],[0,1],[0,2],[1,1],[2,0],[1,1],[3,-1],[3,0],[2,-1],[3,1],[0,1],[2,1],[0,1],[0,1],[0,1],[0,1],[-2,2],[-2,1],[-3,0],[-3,1],[-3,0],[-3,1],[-1,1],[-1,1],[-2,1],[0,1],[-1,2],[0,2],[0,3],[1,3],[0,2],[1,2],[0,4],[1,2],[0,3],[2,2],[2,3],[1,3],[2,2],[1,2],[1,3],[0,2],[-1,1],[-1,1],[-1,1],[-2,0],[-1,1],[-1,2],[0,2],[1,2],[1,0],[1,1],[2,0],[3,0],[4,0],[3,0],[1,0],[2,0],[1,0],[1,1],[0,1],[1,2],[1,3],[0,3],[1,2],[-1,1],[-1,1],[-1,0],[-3,1],[-4,0],[-2,-1],[-4,0],[-2,1],[-1,0],[-2,1],[-2,1],[-1,2],[0,1],[-1,2],[0,3],[0,1],[0,1],[0,3],[0,2],[1,2],[2,2],[2,1],[2,2],[3,0],[2,0],[3,0],[3,-1],[4,0],[2,1],[2,0],[1,1],[1,2],[1,1],[0,2],[-2,3],[-3,1],[-2,2],[-3,1],[-2,1],[-1,1],[0,2],[0,2],[0,1],[1,1],[2,1],[1,0],[2,1],[1,0],[3,-1],[2,-1],[3,-1],[3,-2],[2,-1],[3,-2],[3,-1],[2,-1],[2,0],[2,1],[1,1],[0,1],[1,2],[-1,1],[0,2],[-1,2],[-2,3],[-1,2],[-2,2],[-2,1],[-1,2],[-2,2],[-2,3],[-1,1],[-2,3],[0,3],[1,3],[0,3],[0,3],[-2,2],[-1,0],[-1,1],[-1,-1],[-1,-1],[-2,-1],[-2,-1],[-2,-1],[-1,1],[-2,1],[-2,1],[0,2],[0,2],[0,3],[0,3],[1,4],[0,3],[1,4],[0,2],[-1,5],[-2,3],[-2,3],[-3,3],[-2,1],[-3,1],[-3,-1],[-2,-1],[-2,-2],[-2,-1],[-1,-4],[0,-3],[1,-4],[1,-3],[2,-3],[2,-3],[0,-4],[0,-3],[-1,-1],[-2,-1],[-1,-1],[-2,1],[-2,1],[-2,2],[-1,3],[-1,2],[-1,3],[-1,4],[-1,4],[0,6],[1,5],[0,4],[0,5],[1,5],[1,5],[1,5],[0,5],[0,4],[0,4],[-1,4],[-1,5],[0,4],[-1,2],[0,2],[2,3],[3,3],[1,2],[1,3],[1,2],[0,4],[-1,2],[0,2],[0,2],[0,3],[0,2],[2,2],[1,1],[3,1],[3,1],[3,1],[2,1],[4,3],[2,1],[3,3],[1,3],[-1,3],[0,1],[-1,1],[-2,2],[-2,1],[-2,3],[-1,3],[0,2],[-1,5],[0,4],[0,3],[0,6],[-1,2],[0,2],[0,5],[-2,7],[-2,4],[-1,3],[-1,3],[-1,3],[-3,3],[-7,5],[-3,1],[-3,0],[-1,0],[-2,1],[-5,1],[-4,1],[-10,3],[-17,4],[-14,-1],[-20,-1],[-15,-3],[-3,0],[-2,-1],[-1,-2],[-2,-4],[-1,-5],[-2,-6],[-2,-6],[-2,-6],[-3,-5],[-6,-2],[-3,-1],[-6,1],[-5,1],[-6,2],[-4,3],[-3,3],[0,1],[-1,1],[0,1],[-1,0],[-7,4],[-22,13],[-2,0],[-24,-7],[-14,-13],[-6,-23],[0,-2],[0,-2],[1,-2],[1,-4],[0,-3],[1,-3],[1,-4],[0,-4],[0,-4],[0,-3],[1,-4],[0,-4],[0,-4],[0,-3],[0,-4],[0,-1],[0,-1],[-1,-2],[-1,-3],[0,-2],[-1,-3],[-1,-2],[-2,-2],[-2,-3],[-1,-1],[0,-1],[-1,0],[-1,-2],[-2,-1],[0,-1],[-2,-2],[-13,-11],[-1,-1],[-3,-5],[-3,-4],[-3,-4],[-3,-4],[-1,-2],[-1,-1],[-1,-2],[-3,-3],[-2,-2],[-4,-4],[-4,-3],[-3,-2],[-1,0],[-1,-1],[-1,-1],[-2,-1],[-4,-3],[-3,-1],[-4,-2],[-3,-1],[-3,-1],[-3,-1],[-1,0],[-20,-13],[-1,0],[-2,-2],[-1,-2],[-3,-2],[-2,-2],[-5,-5],[-1,0],[-1,-1],[0,-1],[-1,0],[-2,-1],[-2,-2],[-4,-2],[-3,-2],[-4,-1],[-6,-2],[-6,-2],[-5,-1],[-5,-1],[-4,0],[-3,0],[-4,-1],[-3,0],[-2,0],[-5,0],[-4,0],[-5,-1],[-3,-1],[-4,-1],[-3,-1],[-4,-2],[-3,-2],[-3,-1],[-3,-1],[-2,-1],[-4,-2],[-3,-1],[-4,-2],[-2,0],[-1,0],[-2,0],[-4,-1],[-4,0],[-2,0],[-3,0],[-2,0],[-3,0],[-3,0],[-2,0],[-2,0],[-1,0],[-2,1],[-4,1],[-3,1],[-3,2],[-1,0],[-3,2],[-5,1],[-2,1],[-1,0],[-4,0],[-4,-1],[-4,-1],[-4,-1],[-2,-1],[-3,0],[-3,1],[-3,0],[-3,1],[-3,1],[-3,1],[-3,2],[-2,3],[-2,2],[-3,2],[-2,2],[-1,1],[-1,0],[-2,1],[-2,2],[-1,1],[-1,1],[-3,1],[-1,2],[-1,0],[-1,1],[-1,1],[-3,3],[-1,1],[-3,3],[-1,1],[-5,11],[-5,9],[-1,1],[0,1],[-1,0],[-1,2],[-1,4],[-2,4],[-1,5],[-2,7],[-1,5],[0,5],[-2,11],[-1,2],[-11,23],[-9,9],[-6,6],[-1,0],[-1,1],[-18,3],[-1,0],[0,2],[0,4],[1,1],[1,5],[1,0],[2,2],[2,1],[2,1],[3,2],[6,2],[4,1],[5,2],[2,1],[3,1],[5,3],[4,2],[2,2],[2,1],[1,0],[2,-1],[6,-3],[4,-3],[3,-4],[5,-6],[4,-6],[8,-8],[2,-2],[10,-5],[14,-6],[15,-6],[13,-3],[9,-1],[3,1],[3,1],[1,0],[5,2],[8,6],[13,9],[14,9],[9,7],[9,6],[15,10],[12,8],[14,7],[3,3],[12,7],[9,8],[4,2],[2,1],[2,-1],[3,-1],[5,-4],[7,-5],[8,-4],[5,-1],[5,0],[6,2],[6,1],[5,1],[4,0],[5,2],[5,1],[4,3],[3,3],[2,4],[1,3],[1,4],[1,5],[1,6],[0,12],[0,13],[1,11],[1,9],[0,6],[2,6],[2,4],[1,2],[3,4],[5,7],[4,6],[4,6],[3,8],[2,4],[1,2],[2,7],[4,11],[2,5],[1,4],[0,5],[1,6],[1,6],[2,7],[2,6],[2,4],[1,5],[1,4],[0,7],[1,4],[1,4],[1,5],[1,5],[0,6],[0,5],[1,1],[0,1],[1,1],[3,2],[2,1],[2,1],[3,2],[2,3],[1,1],[3,3],[3,4],[1,2],[3,5],[4,6],[3,6],[0,1],[2,1],[2,2],[4,5],[2,4],[1,0],[0,2],[0,2],[1,2],[2,3],[2,3],[1,1],[3,4],[2,0],[4,2],[8,1],[1,1],[3,0],[3,1],[2,1],[2,1],[9,3],[4,3],[2,1],[1,2],[3,5],[4,4],[3,2],[3,1],[2,1],[3,2],[3,2],[2,2],[1,0],[3,2],[1,0],[1,1],[1,0],[1,1],[13,-3],[0,-1],[1,0],[2,0],[3,0],[2,0],[3,1],[3,2],[5,2],[3,1],[3,2],[2,2],[2,3],[2,5],[2,4],[1,5],[1,3],[0,4],[-1,3],[0,4],[1,2],[1,4],[2,5],[2,5],[2,4],[2,4],[2,3],[2,3],[2,5],[3,5],[2,4],[1,3],[0,4],[-1,4],[-1,5],[0,5],[0,6],[0,3],[0,1],[1,3],[0,4],[-1,4],[0,3],[-1,4],[0,3],[1,4],[1,5],[1,5],[0,4],[0,5],[0,4],[0,1],[0,5],[-1,4],[1,2],[0,7],[0,1],[1,2],[1,1],[0,1],[1,2],[0,1],[0,1],[0,2],[0,2],[1,2],[0,2],[0,1],[0,1],[-1,2],[0,1],[0,2],[-1,2],[0,2],[0,2],[-1,3],[0,2],[0,2],[0,1],[-1,2],[0,2],[-1,2],[0,2],[-1,2],[-1,2],[-1,3],[-1,1],[0,2],[0,2],[0,1],[0,1],[1,1],[0,2],[1,1],[0,1],[1,2],[1,2],[1,2],[1,3],[0,1],[1,2],[0,2],[1,3],[0,1],[0,2],[-1,2],[0,2],[-1,2],[-1,1],[0,2],[-1,1],[-1,1],[-2,2],[-2,2],[-1,2],[-1,3],[0,1],[0,1],[1,1],[1,2],[0,1],[1,2],[0,2],[0,1],[0,2],[0,2],[0,1],[0,2],[0,2],[-1,2],[0,2],[-1,3],[-1,3],[0,1],[1,1],[0,1],[0,1],[1,2],[1,1],[1,2],[1,1],[1,1],[1,1],[2,1],[1,2],[1,1],[1,1],[1,2],[0,1],[0,2],[0,2],[0,1],[0,2],[0,1],[1,2],[0,1],[1,1],[2,2],[1,1],[0,1],[0,1],[0,1],[-1,2],[0,1],[-1,1],[0,1],[0,1],[0,1],[0,1],[1,0],[1,1],[1,1],[2,1],[2,2],[1,1],[1,1],[4,2],[-1,0],[-1,0],[-1,0],[-1,0],[-50,0],[-1,0],[-32,0],[-42,1],[-5,0],[-1,0],[-2,0],[-2,0],[-1,0],[-2,0],[-2,0],[-1,0],[-1,0],[-24,0],[-1,0],[-1,0],[-1,0],[-18,0],[-21,1],[-17,0],[-1,0],[-2,0],[-2,0],[0,1],[0,1],[1,43],[0,2],[-1,5],[0,40],[1,32],[0,10],[0,1],[-1,2],[1,25],[0,25],[-1,13],[1,26],[0,46],[0,7],[0,16],[0,21],[0,1],[0,9],[0,14],[0,23],[0,67],[0,19],[0,47],[0,44],[-4,1],[0,22],[0,16],[0,6],[1,10],[-1,1],[1,1],[0,16],[0,12],[0,13],[0,4],[0,11],[1,2],[0,8],[-2,0],[-1,0],[-1,-1],[-2,0],[-2,1],[-1,1],[-1,0],[-1,0],[-1,0],[-2,0],[-1,2],[-2,2],[0,1],[-1,0],[-1,0],[0,1],[0,1],[-1,1],[0,1],[-1,0],[-1,0],[0,3],[0,1],[-1,1],[0,1],[-1,-1],[-1,0],[-1,0],[-1,2],[0,2],[0,1],[-1,2],[-1,2],[-1,2],[-1,0],[-1,0],[0,-1],[-1,1],[-1,0],[-1,0],[-1,1],[0,2],[0,1],[0,1],[-1,1],[-2,1],[-2,1],[-1,-1],[-2,0],[-21,-8],[-6,3],[-6,0],[-1,0],[-3,0],[-1,1],[-1,0],[-4,0],[-4,4],[-1,0],[-1,1],[-6,0],[-2,0],[-4,-5],[-5,-6],[-2,-1],[-4,-4],[-2,-2],[-1,-1],[-3,-1],[-1,0],[0,-1],[-1,0],[-1,-1],[-2,-1],[-2,0],[-1,0],[-7,-2],[-2,0],[-4,-1],[-4,-1],[-3,-2],[-1,-1],[-2,-2],[-4,-3],[-3,-2],[-2,-1],[-2,0],[-2,1],[-1,0],[-2,3],[-1,3],[0,10],[-6,5],[-12,-7],[-1,0],[-5,0],[-9,-9],[-2,-11],[-1,-2],[-5,0],[-23,13],[-1,1],[-6,-1],[-5,0],[-3,0],[-2,-1],[-1,0],[-2,0],[-3,0],[-3,0],[-2,0],[-2,0],[-1,-1],[-2,0],[-2,-1],[-3,-1],[-1,0],[-2,0],[-2,1],[-4,2],[-7,3],[-5,1],[-2,1],[-1,1],[-4,1],[-3,1],[-2,0],[-4,0],[-3,0],[-2,0],[-2,1],[-2,0],[-2,1],[-2,1],[-6,5],[-3,2],[-1,1],[-2,1],[-3,2],[-4,1],[-5,2],[-2,1],[-1,0],[-1,0],[-1,1],[-3,1],[-2,1],[-2,0],[-1,0],[-2,0],[-1,0],[-2,0],[-3,0],[-1,0],[-1,1],[-1,1],[-2,1],[-3,1],[-6,3],[-2,0],[-1,0],[-2,0],[-3,-1],[-2,-5],[-8,0],[-9,6],[-2,0],[-2,0],[-3,-1],[-2,-1],[-12,0],[-2,0],[-2,1],[-2,2],[-3,0],[-3,0],[-1,-1],[-2,0],[-4,-3],[-1,0],[0,-1],[-1,-1],[-2,-1],[0,-2],[-2,-2],[-1,-2],[-3,-3],[-1,-1],[-2,-1],[-1,0],[-4,0],[-2,0],[-2,-1],[-3,-1],[-2,0],[-2,-1],[-4,-2],[-8,-4],[-4,-1],[-1,-1],[-1,0],[-1,0],[-2,0],[-3,0],[-1,0],[-5,0],[-6,0],[-5,1],[-2,0],[-1,0],[-2,-1],[-1,0],[-2,0],[-1,0],[-1,1],[-2,-1],[-2,0],[-2,1],[-2,0],[-2,0],[-3,1],[-2,0],[-3,1],[-4,2],[-1,1],[-3,1],[-2,2],[-1,1],[-2,0],[-1,0],[-2,0],[-1,0],[-2,0],[-1,1],[-3,0],[-1,1],[-1,-1],[-2,0],[-1,-1],[-1,-1],[0,-1],[-2,-3],[0,-2],[-1,-2],[-1,-2],[-2,-2],[0,-1],[-1,-1],[-3,-2],[-5,-2],[-4,-1],[-2,-1],[-3,-1],[-1,0],[-1,0],[-1,-1],[-2,-1],[-1,0],[0,-1],[-2,-2],[-1,0],[-2,-1],[-2,-1],[-3,-1],[-1,0],[-1,0],[-1,0],[-2,0],[-1,0],[-2,-1],[-1,0],[-2,-1],[-1,-1],[-1,-2],[-2,-2],[-1,0],[-2,-1],[-1,-1],[-2,-1],[-1,-1],[-1,-2],[-1,-1],[0,-1],[0,-1],[0,-1],[0,-2],[0,-1],[-1,-2],[-2,-1],[-2,-1],[-2,-1],[-1,0],[-2,0],[-1,-1],[-1,-2],[-1,-1],[-1,-2],[-1,-3],[0,-1],[0,-1],[0,-1],[0,-1],[0,-2],[0,-3],[0,-1],[-1,-1],[-1,0],[-1,-2],[-2,-1],[-1,0],[-1,0],[-3,-2],[-3,-1],[2,-2],[0,-2],[-1,-1],[-1,0],[-1,0],[-2,0],[-1,0],[-1,0],[-1,-1],[0,-1],[-1,-1],[-1,-2],[-1,-2],[0,-1],[-1,-1],[-1,0],[-1,-1],[-1,-1],[-1,-1],[-2,-1],[-3,-1],[-1,0],[-1,0],[-2,0],[-1,0],[-2,0],[-1,-1],[-1,-1],[0,-2],[-2,-2],[-2,-1],[-1,-2],[0,-1],[0,-2],[-1,-1],[-1,-2],[-2,-1],[-2,-1],[0,-1],[-3,-2],[-1,-1],[-1,0],[-2,0],[-2,-1],[-1,0],[-4,-4],[-4,-4],[-1,0],[-3,-3],[-2,-3],[-2,-2],[-12,2],[-3,2],[-4,0],[-4,2],[-3,3],[-4,2],[-4,1],[-3,2],[-9,5],[-5,5],[-6,5],[-3,6],[-2,3],[-1,3],[-1,2],[-1,2],[0,1],[0,1],[-1,2],[-1,1],[0,2],[-1,1],[-3,2],[-2,2],[-1,1],[-2,1],[-2,2],[-1,2],[-1,1],[-2,2],[-1,1],[-4,4],[-2,1],[-1,1],[-2,2],[-2,3],[-3,4],[-3,4],[-2,2],[-1,1],[-2,0],[-1,0],[-1,-2],[-1,-1],[-2,-1],[-2,-1],[-2,-1],[-1,0],[-1,0],[-1,0],[-3,-1],[-2,0],[-2,-1],[-2,-1],[-3,-1],[-2,0],[-3,-1],[-2,0],[-2,-1],[-2,0],[-2,0],[-3,1],[-3,0],[-4,1],[-3,-1],[-2,0],[-1,1],[-1,2],[-3,0],[-5,-1],[-7,0],[-1,0],[-1,0],[-4,4],[-2,0],[-1,0],[-1,0],[-1,-4],[-1,-2],[-2,-1],[-1,-1],[-1,-1],[-2,0],[-1,0],[-2,0],[-1,0],[-2,-1],[-1,1],[0,1],[-1,0],[-1,0],[-2,0],[-2,0],[-3,1],[-2,-1],[0,1],[0,2],[-1,1],[0,2],[-1,2],[-1,2],[-1,2],[-1,1],[-1,2],[-8,10],[-1,2],[1,3],[0,1],[-2,2],[-2,0],[-1,1],[-1,1],[0,2],[0,2],[-1,2],[-1,1],[0,2],[0,2],[0,3],[0,2],[2,0],[0,1],[1,2],[-1,2],[-1,1],[-1,2],[-1,2],[-2,0],[-1,1],[-1,2],[0,1],[0,1],[-1,2],[1,2],[1,2],[0,1],[1,2],[0,1],[0,1],[0,2],[-1,3],[0,2],[-1,2],[-1,3],[-1,1],[0,2],[-1,3],[0,2],[-1,3],[-1,3],[-1,3],[0,3],[-1,4],[0,4],[-1,2],[0,2],[-2,4],[0,2],[0,2],[-1,3],[-1,2],[0,2],[0,3],[-1,2],[0,2],[0,2],[-1,2],[-1,1],[0,2],[-1,1],[-1,2],[-7,32],[-1,0],[0,3],[-1,2],[0,3],[-1,2],[-1,1],[-1,1],[0,1],[0,3],[-1,3],[0,2],[-1,1],[-1,1],[0,2],[-1,3],[0,2],[1,2],[1,1],[1,1],[0,2],[-1,0],[-1,5],[0,1],[0,2],[-1,1],[0,1],[-1,2],[0,1],[-1,3],[0,2],[-1,0],[0,1],[-1,1],[-1,1],[-2,2],[-2,3],[0,3],[-2,3],[0,1],[0,1],[0,2],[1,2],[0,2],[0,1],[-1,2],[-3,5],[-1,3],[0,1],[0,2],[-1,0],[-1,3],[0,2],[-1,2],[1,2],[-1,1],[-1,2],[-1,2],[-1,3],[-1,2],[-1,2],[0,2],[-1,3],[-1,0],[-2,-1],[-2,0],[-1,0],[0,2],[-1,1],[-4,5],[-1,2],[0,1],[0,2],[-1,2],[0,2],[0,1],[0,1],[-1,0],[-1,2],[-1,2],[-1,1],[0,1],[0,1],[-1,1],[0,1],[-4,4],[-1,2],[0,1],[-1,0],[-1,1],[-1,2],[-1,1],[0,2],[0,1],[1,1],[0,2],[0,1],[0,1],[0,1],[-1,0],[-1,0],[-2,0],[-1,-1],[-1,-1],[-1,-1],[-2,-3],[-2,-1],[-1,0],[-2,0],[-1,-1],[-1,0],[-1,-2],[-3,-3],[-1,-2],[0,-1],[-1,-2],[-1,0],[-1,0],[-1,0],[-1,0],[-2,-1],[-1,-1],[-1,0],[-4,-3],[-1,0],[-1,0],[-2,3],[-2,2],[0,1],[0,1],[0,1],[0,5],[0,1],[0,1],[0,1],[0,2],[0,1],[0,1],[0,1],[-1,1],[0,2],[-1,1],[-1,2],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[-1,2],[-1,2],[0,1],[1,0],[1,1],[3,0],[1,1],[2,2],[1,1],[1,0],[2,0],[3,1],[2,2],[1,0],[1,1],[1,2],[0,2],[1,2],[1,1],[0,1],[0,1],[-2,2],[-1,1],[-1,1],[-1,1],[0,2],[-1,2],[-1,0],[-4,4],[0,1],[-1,2],[0,2],[1,1],[0,1],[1,0],[1,1],[2,1],[2,1],[2,1],[0,1],[0,1],[-1,1],[-1,1],[0,2],[0,1],[0,3],[0,1],[0,1],[-1,1],[0,1],[-2,2],[-1,2],[-1,1],[0,2],[-2,6],[-1,2],[-1,1],[0,2],[-1,1],[-1,2],[-1,2],[-1,0],[-1,1],[-2,1],[-4,2],[-3,2],[-2,2],[-1,0],[-3,2],[-1,0],[-1,0],[-1,-1],[-1,-1],[-1,0],[-2,0],[-1,1],[-2,-1],[-1,-1],[-1,0],[-1,1],[-1,0],[-1,0],[0,-2],[-1,-1],[-1,0],[-3,3],[-3,3],[-2,1],[-1,1],[-1,2],[-1,1],[-1,1],[-3,3],[-1,1],[-2,1],[-1,1],[-1,1],[0,1],[-1,1],[-1,2],[0,1],[-1,2],[-1,1],[-1,2],[-1,1],[-1,1],[-2,1],[-1,1],[-1,0],[0,2],[-1,1],[-2,1],[0,1],[-1,0],[-1,1],[0,2],[-1,3],[-1,2],[0,1],[0,1],[-1,2],[-1,2],[-2,3],[-1,2],[-2,2],[-1,3],[-1,1],[0,1],[1,1],[0,1],[0,1],[1,1],[1,0],[2,2],[1,1],[1,1],[1,3],[0,1],[1,3],[0,3],[-1,1],[0,2],[-2,2],[0,1],[-1,1],[0,1],[-1,1],[-1,0],[0,2],[0,1],[0,1],[0,1],[0,1],[0,1],[0,1],[-1,0],[-2,2],[0,1],[0,2],[-1,1],[-1,2],[-2,2],[-1,1],[-1,1],[-3,2],[-1,2],[0,1],[0,1],[0,2],[-1,1],[-1,0],[-2,-2],[-1,0],[-2,0],[-1,1],[-1,0],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-2],[1,-1],[-1,-1],[-1,-1],[-2,-1],[-2,0],[-1,1],[-2,2],[-2,1],[-2,1],[-1,0],[-2,0],[-2,0],[-1,1],[-1,1],[-2,1],[0,1],[-6,12],[3,14],[-5,15],[-7,35],[6,1],[1,0],[0,1],[0,1],[1,1],[-1,1],[0,1],[-1,1],[0,2],[-1,1],[-1,1],[1,2],[-2,2],[0,2],[1,2],[0,1],[-2,0],[-2,1],[-1,3],[-1,2],[-2,1],[1,2],[-3,2],[0,2],[1,2],[0,1],[-1,1],[-1,4],[-1,2],[-1,1],[-4,4],[0,1],[-1,1],[1,1],[0,1],[1,1],[0,1],[-1,1],[-2,0],[0,1],[-1,0],[0,1],[0,3],[0,1],[-1,0],[-1,0],[-3,5],[-1,1],[-1,0],[-1,0],[-2,2],[-1,1],[0,-1],[-2,0],[-1,0],[-1,1],[-1,7],[-1,3],[-2,3],[-1,3],[-1,1],[-2,1],[-3,2],[-1,1],[0,1],[-1,2],[-1,4],[-3,6],[-1,2],[-1,2],[-1,4],[1,2],[0,3],[-2,2],[-1,7],[0,3],[-1,3],[1,4],[-2,10],[-2,7],[0,6],[0,3],[-2,4],[-1,4],[0,2],[-1,5],[-1,3],[-1,4],[0,4],[-1,3],[-2,5],[-2,4],[-1,2],[-2,1],[-1,1],[-1,0],[0,2],[0,2],[0,2],[1,2],[0,2],[0,1],[-2,1],[-2,2],[-1,1],[0,2],[1,2],[-1,2],[-2,3],[-3,4],[-3,3],[-1,2],[-2,6],[-1,6],[-6,3],[-2,5],[-1,4],[-4,8],[-3,7],[-2,5],[0,6],[-1,3],[-2,8],[-2,3],[0,4],[-5,10],[-6,8],[-2,6],[-1,6],[-3,8],[-3,8],[-1,7],[-2,4],[0,3],[-2,3],[-1,3],[-4,-2],[-6,-1],[-5,-1],[-3,0],[-5,2],[-3,0],[-4,0],[-2,1],[-1,1],[-1,2],[0,2],[1,2],[-1,1],[-3,0],[-3,-1],[-4,-3],[-3,0],[-4,-1],[-3,-2],[-6,-1],[-3,-1],[-5,5],[-6,9],[-7,6],[-2,1],[-5,-1],[-3,-3],[-4,-6],[-1,-2],[-3,0],[-4,0],[-4,4],[-2,0],[-7,-4],[-5,-1],[-4,1],[-3,-3],[-1,-3],[-1,-2],[-3,-2],[-2,-3],[-3,-4],[-2,-2],[-3,-1],[-4,1],[-6,3],[-4,3],[-6,4],[-8,4],[-5,4],[-5,4],[-5,2],[-6,3],[-4,3],[-1,4],[-4,4],[-4,3],[-6,0],[-6,4],[-3,3],[-4,3],[0,4],[-4,4],[-1,2],[-2,1],[-2,1],[-2,1],[-1,2],[-2,4],[-1,3],[-2,4],[-1,3],[-1,3],[-1,2],[-2,2],[-1,0],[-19,-25],[-1,-1],[3,-4],[3,-5],[44,-59],[20,-52],[-14,-47],[-42,6],[-13,-21],[-11,-20],[-9,-15],[5,-1],[2,-29],[14,-11],[-29,-15],[-32,-56],[-16,-27],[-63,-112],[-39,-12],[-61,-19],[-24,-7],[-10,-3],[-7,-2],[-86,-27],[-4,-1],[-10,-4],[-5,-1],[-48,-15],[-2,0],[-31,-10],[-50,-16],[-1,2],[1,2],[1,3],[0,3],[1,1],[0,2],[1,1],[1,3],[0,4],[-2,5],[-3,4],[-2,3],[-3,4],[-4,2],[-2,4],[-2,2],[0,4],[-1,3],[0,2],[0,1],[-4,2],[-3,3],[-2,2],[-1,2],[-3,3],[0,2],[1,2],[1,3],[0,2],[0,2],[1,1],[2,2],[-3,1],[-3,3],[-1,4],[-1,3],[-4,3],[-3,3],[-1,1],[0,2],[0,1],[-1,1],[0,3],[1,2],[1,1],[-3,0],[0,2],[-1,2],[-2,2],[0,3],[-1,2],[0,1],[-2,1],[-2,-1],[-3,0],[-2,1],[-1,0],[-1,0],[-3,0],[-3,1],[-4,-2],[-3,-1],[-4,0],[-2,1],[-2,-1],[-4,-1],[-1,1],[-1,2],[-3,2],[-3,-2],[-3,3],[-5,2],[-3,-3],[-4,-4],[-4,1],[-4,2],[-2,3],[-5,-1],[-3,-1],[-5,1],[-2,2],[-2,3],[-1,0],[-7,3],[-6,1],[-4,1],[-2,4],[-2,2],[-2,0],[-2,0],[0,4],[-1,4],[-2,4],[-1,4],[-1,3],[3,3],[-1,3],[-2,3],[-1,4],[-2,5],[-2,2],[-2,3],[1,2],[-1,3],[0,2],[-1,1],[-6,5],[-4,1],[-4,2],[-4,2],[-1,0],[-3,-1],[-2,8],[1,3],[-2,2],[0,5],[1,4],[1,4],[-2,3],[-1,3],[0,1],[2,2],[1,2],[0,1],[1,2],[2,2],[2,2],[0,3],[1,2],[0,2],[-1,2],[-1,0],[-2,0],[-1,1],[-2,2],[0,1],[-1,2],[-1,0],[-1,0],[-1,1],[-1,0],[-1,1],[-1,0],[-2,1],[-1,0],[-1,0],[-1,0],[-1,3],[-2,0],[-2,1],[-1,0],[-2,1],[0,2],[-1,3],[-1,3],[-1,2],[-1,0],[-3,-1],[-2,0],[0,1],[0,1],[1,3],[1,2],[-1,2],[0,2],[0,2],[0,2],[1,3],[1,1],[0,1],[0,1],[-1,0],[-1,0],[-1,0],[-1,2],[0,2],[-1,0],[-1,0],[-2,2],[-2,3],[-2,0],[-1,0],[0,1],[0,2],[0,5],[-1,1],[-1,1],[0,2],[0,1],[-1,2],[-2,0],[-1,0],[-2,0],[-2,0],[-2,2],[-1,1],[-1,1],[0,2],[-1,1],[0,1],[-2,3],[0,2],[1,0],[-2,2],[0,2],[0,1],[-1,1],[1,1],[2,1],[0,1],[-2,1],[0,1],[-1,1],[0,2],[0,1],[-2,1],[-1,1],[0,2],[-2,0],[0,2],[-1,1],[-2,0],[-3,1],[-2,0],[-1,1],[-1,2],[-1,2],[-1,2],[-1,2],[-2,2],[-2,1],[-1,0],[0,1],[-1,2],[-3,1],[0,1],[1,2],[0,2],[0,1],[1,1],[-1,1],[-1,1],[1,2],[-1,3],[2,0],[0,1],[2,5],[0,1],[-1,1],[0,1],[0,1],[0,3],[1,2],[0,1],[0,1],[0,1],[-1,1],[1,1],[0,1],[1,1],[0,2],[-1,1],[0,2],[-1,2],[-1,2],[0,2],[-1,2],[-1,2],[-1,1],[-2,0],[-1,1],[-2,0],[-1,1],[-3,1],[-4,2],[-4,2],[-3,2],[-3,2],[-3,2],[0,3],[-1,3],[-2,2],[-3,2],[-3,2],[-2,2],[-3,1],[-1,1],[0,1],[2,1],[0,1],[0,1],[0,1],[-2,2],[-2,0],[-2,1],[-1,1],[-1,2],[-1,2],[-1,2],[0,2],[1,2],[0,1],[-2,0],[-4,1],[0,1],[-1,3],[-1,0],[-2,0],[-2,0],[-2,1],[-1,3],[-1,2],[-2,1],[-1,2],[-2,2],[-2,3],[0,1],[-2,1],[-2,1],[-1,0],[-2,0],[-1,1],[-2,0],[-1,0],[-1,0],[-3,0],[-1,1],[-1,1],[-2,2],[-2,2],[-1,2],[-1,1],[-3,-1],[-1,1],[-2,3],[-2,3],[0,3],[-1,2],[-1,1],[-2,1],[-1,2],[0,1],[-1,1],[1,2],[-2,1],[0,1],[1,1],[1,2],[-1,2],[-1,1],[-1,0],[-2,1],[-1,1],[-2,-1],[-1,-1],[0,-1],[0,-1],[0,-2],[-1,0],[0,-1],[-1,-1],[-2,0],[-1,0],[-1,0],[-1,-1],[-1,0],[-2,0],[-1,0],[-2,0],[-2,0],[-2,-2],[0,2],[-2,0],[-1,-1],[-2,1],[-1,2],[-1,1],[-3,0],[-1,1],[-2,1],[0,1],[0,2],[0,2],[1,2],[1,2],[-1,3],[-1,2],[-2,1],[-3,1],[-3,0],[-2,1],[-3,1],[-2,1],[2,3],[1,3],[1,1],[0,3],[0,1],[-1,2],[0,1],[-1,3],[-1,-1],[-1,-1],[-1,-1],[-2,0],[-1,1],[-2,1],[-1,2],[-8,0],[-6,0],[-6,0],[-6,0],[-6,0],[-2,0],[-8,0],[-6,0],[-6,0],[-7,0],[-9,0],[-10,0],[-6,0],[-6,0],[-4,0],[-3,0],[-4,0],[-5,0],[-4,0],[-3,0],[-4,0],[-2,0],[-2,0],[-3,0],[-5,1],[-8,0],[-3,0],[-7,-1],[-1,0],[-8,0],[-9,0],[-3,0],[-6,0],[-6,1],[-9,0],[-8,-1],[-8,0],[-5,0],[-2,1],[-8,-1],[-6,1],[-10,0],[-2,0],[-7,0],[-7,0],[-6,0],[-5,0],[-2,0],[-2,0],[-2,0],[-2,0],[-6,-1],[-4,1],[-3,0],[-7,0],[-8,1],[-1,0],[-1,0],[-5,0],[-6,0],[-5,1],[-1,0],[-6,-1],[-7,1],[-10,0],[-1,0],[-5,0],[-6,0],[-5,0],[-1,0],[-4,1],[-7,0],[-1,0],[-4,0],[-5,-1],[-5,0],[-6,0],[-5,0],[-4,0],[-2,0],[-5,0],[-5,0],[-9,0],[-4,0],[-5,0],[-6,1],[-8,1],[-9,2],[-2,0],[-5,0],[-8,1],[-2,0],[-3,0],[-4,0],[-2,0],[-3,0],[-10,-1],[-19,0],[-14,0],[-15,0],[-13,-1],[-8,0],[-6,0],[-6,0],[-9,1],[-6,0],[-8,0],[0,-8],[0,-5],[0,-3],[-1,-28],[-24,1],[-18,0],[-6,1],[-22,1],[-15,1],[-18,-1],[-5,0],[-19,0],[0,-44],[0,-1],[0,-19],[0,-30],[-12,-1],[-1,0],[-42,0],[-3,0],[-16,0],[-19,0],[-60,0],[-14,0],[-13,0],[-29,0],[-11,0],[-3,0],[-13,-1],[-11,0],[-17,0],[-17,0],[-24,0],[-7,0],[-12,-1],[-11,-2],[-2,0],[-14,0],[-14,-1],[-119,-1],[-1,0],[-8,0],[-42,-1],[0,-44],[0,-3],[0,-20],[1,-9],[0,-16],[-19,1],[-19,-1],[-2,0],[-45,-1],[-2,0],[-3,0],[-9,0],[-46,0],[-5,0],[-9,0],[-16,1],[-34,1],[-23,2],[-8,0],[-13,1],[-4,0],[-30,1],[-2,0],[-6,0],[-2,0],[-1,0],[-4,-1],[0,-1],[-1,-1],[0,-1],[0,-1],[0,-1],[1,-2],[-1,-4],[0,-2],[-1,-1],[-1,0],[-2,1],[-2,1],[-8,0],[-3,-1],[-1,-1],[-1,-2],[0,-2],[-2,-5],[-1,-2],[0,-4],[-1,-3],[-1,-1],[-1,-1],[-1,0],[-1,1],[-2,1],[-1,1],[-2,0],[-1,0],[-2,1],[-1,-1],[-2,0],[-1,-1],[-1,-2],[0,-2],[-1,-3],[-1,-1],[0,-2],[-1,-4],[0,-2],[0,-4],[-1,-3],[-1,-2],[0,-2],[-1,-1],[-2,-1],[-2,0],[-1,1],[-2,2],[-2,4],[-5,6],[-4,2],[-3,3],[-3,4],[-3,4],[-3,3],[-1,2],[-1,0],[0,-1],[-1,0],[0,-1],[2,-3],[2,-2],[1,-7],[1,-4],[0,-6],[-1,-3],[-1,-1],[0,-1],[1,-1],[2,-1],[1,0],[2,-1],[1,-1],[1,-1],[1,-1],[2,1],[1,-1],[0,-2],[0,-1],[1,-1],[0,-1],[0,-1],[0,-1],[0,-1],[2,-1],[0,-1],[1,-1],[-1,-1],[-2,0],[0,-1],[-2,-1],[0,-1],[1,0],[1,-1],[0,-1],[2,-2],[0,-1],[1,-1],[0,-2],[0,-1],[1,-1],[1,0],[2,1],[2,0],[1,0],[1,-1],[1,-2],[0,-1],[3,-1],[3,-3],[0,-1],[1,-1],[0,-1],[0,-1],[1,0],[0,-2],[2,-1],[0,-1],[1,-1],[1,-1],[1,-1],[-1,-1],[4,-1],[1,-1],[-1,0],[-1,-1],[0,-1],[1,-1],[4,0],[1,-2],[1,-1],[3,-1],[1,0],[0,1],[0,1],[2,1],[4,0],[1,-1],[2,0],[0,-1],[1,-1],[3,0],[2,-1],[1,-1],[0,-1],[1,-1],[3,0],[1,-1],[1,0],[1,0],[1,0],[0,-1],[1,-2],[1,0],[2,0],[2,0],[2,-1],[1,0],[0,-1],[2,0],[1,-1],[1,-1],[2,0],[2,-2],[0,-1],[-1,-1],[2,-1],[1,-2],[1,-1],[1,-4],[1,-1],[0,-2],[1,-2],[1,-2],[1,-1],[2,-1],[2,1],[3,-2],[1,-1],[1,-2],[0,-1],[0,-2],[3,-2],[0,-2],[1,0],[1,1],[1,-1],[1,1],[1,0],[1,-1],[1,-2],[2,-1],[1,-1],[0,-1],[0,-1],[2,0],[1,-1],[1,-1],[1,-1],[0,-1],[1,0],[0,-1],[2,-2],[2,-1],[1,0],[2,1],[0,1],[2,0],[1,0],[2,0],[0,-2],[-1,-1],[1,-1],[2,0],[2,0],[1,0],[0,-1],[0,-1],[1,-1],[1,0],[1,-1],[1,0],[2,1],[0,-1],[1,0],[1,-1],[0,-1],[1,0],[1,1],[1,-1],[0,-1],[0,-1],[0,-1],[3,0],[2,-1],[2,-1],[0,-1],[0,-1],[-1,0],[3,-3],[1,-1],[0,-2],[1,-1],[1,0],[0,-1],[1,0],[0,-1],[1,-1],[2,0],[2,-1],[1,-1],[0,-2],[1,-1],[0,-1],[1,-1],[0,-3],[-1,0],[1,-1],[0,-1],[1,-2],[1,0],[1,-1],[2,-1],[0,-1],[0,-2],[-1,0],[-1,-1],[0,-1],[2,0],[2,0],[0,-1],[-1,-1],[0,-1],[0,-1],[2,-1],[2,-1],[0,1],[1,0],[1,-1],[-1,-1],[0,-1],[1,0],[0,-1],[2,1],[0,-1],[-1,0],[0,-1],[2,-1],[1,-1],[0,-1],[1,0],[0,1],[0,1],[1,0],[2,0],[1,0],[0,-2],[1,0],[2,-1],[-1,-1],[0,-1],[-1,0],[-1,0],[0,-1],[1,-2],[0,-1],[2,0],[3,0],[1,0],[2,-2],[1,0],[1,-2],[1,0],[0,-2],[0,-2],[0,-1],[1,0],[1,-1],[1,-1],[0,-2],[0,-3],[0,-1],[-1,-1],[0,-1],[0,-1],[1,0],[2,0],[0,-1],[2,-2],[0,-1],[1,0],[1,0],[0,-1],[0,-2],[1,-1],[-1,-1],[-1,-1],[1,-2],[1,0],[1,1],[2,-1],[2,-1],[1,-1],[1,0],[1,-1],[1,-6],[0,-7],[1,-6],[-1,-1],[-1,-1],[-1,0],[-4,0],[-1,0],[0,-1],[1,-2],[1,0],[2,0],[1,-1],[0,-1],[1,-1],[1,0],[1,1],[1,0],[0,-1],[-1,-1],[0,-1],[0,-1],[-1,-1],[0,-1],[1,-1],[2,0],[0,1],[1,0],[0,3],[1,1],[1,-1],[0,-2],[-1,-1],[0,-1],[1,0],[1,0],[1,0],[1,0],[0,-1],[-1,-1],[0,-1],[0,-1],[0,-1],[1,0],[0,1],[0,1],[1,0],[1,1],[1,1],[0,-1],[0,-1],[1,0],[1,0],[0,-2],[0,-1],[1,0],[1,0],[1,0],[1,0],[0,-2],[1,-2],[1,0],[1,1],[0,-1],[1,-1],[4,0],[2,-1],[2,0],[0,-2],[0,-1],[0,-1],[0,-2],[2,0],[1,-2],[1,-1],[0,-2],[1,-1],[2,0],[1,-1],[-1,0],[0,-1],[1,-1],[0,-2],[1,0],[1,-1],[1,-1],[-2,-1],[0,-1],[-2,0],[0,-1],[1,-1],[1,-1],[2,0],[-1,-2],[1,0],[1,-2],[2,0],[1,-1],[2,-2],[1,-2],[3,-3],[0,-1],[2,0],[0,-1],[0,-1],[1,-1],[0,-2],[0,-1],[0,-1],[1,0],[0,-2],[-1,0],[0,-1],[0,-1],[1,0],[1,0],[0,-1],[1,-2],[1,-1],[4,-3],[0,-1],[0,-1],[0,-1],[-2,0],[-1,-1],[-1,-2],[-1,0],[-1,0],[0,-1],[1,-1],[1,-1],[0,-2],[4,0],[0,-1],[1,-1],[0,-1],[1,0],[1,-1],[1,-1],[-1,-1],[0,-1],[1,0],[1,0],[1,-1],[1,0],[0,-1],[0,-1],[0,-1],[-1,0],[0,-1],[4,-8],[0,-1],[3,-2],[1,0],[0,-1],[-2,-1],[0,-1],[0,-1],[0,-1],[2,0],[1,-1],[1,0],[-1,-2],[1,0],[0,-1],[2,0],[1,-1],[1,0],[0,-2],[2,-1],[0,-1],[1,-1],[2,-1],[3,-3],[0,-1],[0,-3],[0,-1],[-1,0],[-3,-1],[0,-1],[0,-1],[2,-1],[3,-1],[3,-2],[1,0],[1,0],[1,-1],[1,-2],[2,-2],[0,-1],[2,-4],[1,0],[1,-3],[0,-2],[0,-2],[-1,0],[-1,1],[-3,2],[-1,-1],[0,-1],[0,-1],[1,-1],[0,-2],[3,-2],[1,0],[1,-1],[0,-1],[1,-1],[0,1],[1,1],[1,0],[-1,-3],[-1,0],[0,-1],[3,-1],[2,0],[0,-1],[1,-2],[1,0],[0,-1],[1,-1],[3,1],[1,-1],[0,-1],[1,0],[0,-1],[0,-1],[1,0],[0,-2],[0,-1],[1,-1],[-1,-2],[1,0],[1,-1],[1,0],[1,-1],[0,-1],[1,-1],[0,-2],[3,-1],[0,-1],[1,-1],[0,-1],[1,-1],[0,-1],[0,-1],[1,-1],[2,-2],[1,0],[1,-1],[0,-1],[-1,-1],[1,-1],[2,0],[2,-2],[2,-1],[3,-1],[1,0],[1,-2],[1,0],[5,-1],[2,-4],[0,-1],[0,-1],[-1,-1],[0,-1],[-2,-2],[0,-1],[0,-1],[0,-1],[2,-1],[1,-2],[-1,-1],[-1,-1],[-1,0],[-1,0],[-1,0],[-1,1],[-1,0],[0,-1],[-3,0],[-3,-3],[1,-1],[-1,-1],[1,-1],[1,1],[0,-1],[2,-2],[0,-1],[-1,-1],[2,-2],[2,-2],[1,0],[0,1],[1,0],[1,-1],[3,-3],[0,-1],[-1,0],[1,-1],[2,0],[2,-1],[1,0],[1,0],[2,-2],[1,-1],[1,1],[1,-1],[1,0],[1,0],[0,-1],[-1,0],[0,-2],[1,-1],[1,-1],[0,-1],[0,-1],[-1,-1],[1,-1],[1,-2],[1,0],[0,1],[2,0],[0,-1],[2,0],[1,0],[1,0],[0,1],[2,2],[1,0],[1,0],[1,0],[1,0],[1,1],[1,0],[1,-2],[1,0],[2,-3],[2,1],[0,1],[1,-1],[2,-1],[0,-1],[0,-3],[0,-1],[2,-2],[2,-1],[2,-3],[2,-2],[1,-1],[-1,-1],[0,-1],[2,-2],[4,-2],[0,-1],[-1,-2],[0,-1],[3,-3],[0,-1],[1,0],[0,-1],[-1,0],[-2,-1],[0,-1],[1,-1],[2,0],[1,-1],[0,-1],[1,-1],[2,-1],[0,-1],[0,-2],[1,0],[0,-2],[1,-1],[1,0],[3,-1],[3,-1],[2,0],[0,-1],[0,-2],[-1,-1],[-2,0],[-2,0],[-1,1],[-2,-1],[0,-1],[0,-1],[-1,-3],[-1,-1],[0,-2],[-1,-2],[0,-3],[0,-2],[1,-1],[0,-1],[1,-1],[0,-2],[1,-1],[0,-1],[-1,0],[0,-1],[1,0],[1,-1],[0,-1],[-1,-1],[-1,0],[0,-1],[-1,-1],[-1,-1],[1,0],[0,-1],[2,0],[1,0],[0,-1],[0,-2],[1,-1],[1,1],[2,-1],[2,0],[1,-1],[0,-1],[-1,0],[-1,-1],[1,-2],[1,-1],[0,-1],[1,-1],[0,-1],[1,-1],[0,-2],[1,-1],[1,-2],[1,0],[1,-1],[1,0],[1,1],[1,1],[1,1],[1,0],[0,1],[0,2],[1,0],[2,-1],[1,-2],[-1,-1],[0,-1],[3,0],[3,-4],[1,0],[2,-2],[3,0],[1,0],[0,-2],[0,-2],[0,-2],[1,-1],[0,-1],[-2,-1],[2,-1],[1,0],[1,0],[1,-1],[2,0],[2,0],[1,-1],[2,-1],[1,0],[2,1],[0,-2],[1,-2],[2,0],[1,0],[2,-1],[0,-1],[3,0],[1,-2],[1,0],[2,-1],[1,0],[1,0],[1,0],[0,-2],[1,0],[9,-13],[1,-2],[1,0],[-1,-2],[1,-1],[0,-2],[1,-1],[1,-1],[1,-2],[0,-2],[0,-1],[1,0],[1,-1],[1,2],[1,0],[3,-2],[-1,-1],[1,0],[1,0],[1,-1],[1,0],[2,0],[1,1],[1,0],[1,0],[1,-1],[-1,-2],[0,-1],[-2,-1],[0,-1],[1,0],[0,-1],[-1,-1],[0,-1],[1,0],[1,0],[1,-2],[2,-1],[2,0],[1,0],[2,0],[1,-1],[2,-2],[1,-1],[0,-1],[1,0],[1,0],[1,-2],[1,0],[1,-1],[2,-1],[1,1],[1,1],[0,1],[1,0],[0,-1],[0,-2],[1,0],[2,0],[0,-2],[1,0],[1,1],[1,0],[0,-1],[3,-3],[0,-1],[0,-1],[1,-2],[1,0],[1,-1],[0,-1],[0,-1],[0,-1],[2,-1],[2,1],[1,0],[1,0],[1,0],[1,0],[1,-1],[0,-2],[0,-1],[0,-2],[1,0],[0,-2],[-1,-1],[0,-2],[1,-1],[0,-1],[0,-1],[0,-1],[1,0],[21,-19],[1,-1],[4,-2],[2,0],[1,-1],[1,0],[2,0],[1,-2],[0,-1],[-1,0],[-1,-1],[0,-1],[0,-1],[3,-1],[0,-1],[1,-1],[0,-1],[1,-1],[2,0],[0,-2],[1,0],[1,0],[2,-1],[1,-2],[2,1],[0,-1],[1,-1],[0,-1],[0,-1],[-1,-1],[1,-1],[0,-1],[0,-1],[1,0],[2,0],[1,0],[1,0],[3,-1],[2,-2],[0,-3],[0,-1],[-3,-5],[0,-1],[1,-1],[1,-1],[3,0],[0,-1],[2,0],[1,-1],[0,-2],[2,-1],[1,0],[0,-1],[2,0],[1,1],[0,1],[15,0],[0,-1],[3,-1],[1,0],[0,-2],[2,-1],[0,1],[3,2],[1,0],[2,0],[1,-1],[1,-1],[1,1],[1,0],[2,-2],[0,-1],[0,-2],[0,-2],[0,-1],[0,-1],[0,-1],[1,-1],[2,0],[3,0],[1,-1],[1,-1],[1,-1],[0,-2],[-1,-3],[-1,0],[0,-1],[1,-1],[1,0],[1,0],[1,0],[1,-1],[2,0],[4,-1],[1,-2],[3,-1],[2,-2],[1,-1],[3,-2],[2,-1],[4,-1],[2,0],[3,0],[3,1],[2,0],[2,0],[2,-2],[3,-3],[3,-1],[2,-2],[3,-2],[2,0],[6,-1],[2,-1],[2,-1],[4,-2],[3,-2],[2,-3],[1,-2],[1,-1],[9,-3],[3,-2],[4,-1],[3,-4],[3,-2],[4,-3],[6,-4],[1,-1],[2,-1],[2,-1],[1,-1],[1,-2],[0,-2],[1,-1],[5,-2],[2,-1],[1,-1],[1,-2],[1,-1],[1,0],[3,-1],[2,-3],[2,-2],[2,-3],[2,-1],[3,0],[2,-1],[1,-1],[1,-1],[0,-1],[-1,-1],[0,-1],[1,-1],[2,1],[2,-1],[2,0],[1,0],[4,-4],[1,-1],[0,-1],[1,-4],[0,-2],[0,-1],[0,-1],[-1,0],[0,1],[-1,-1],[0,-1],[1,0],[2,0],[1,-1],[1,-1],[0,-1],[-2,-1],[0,-2],[1,-1],[1,0],[1,-1],[2,2],[1,0],[1,0],[1,1],[3,-2],[1,0],[1,-3],[1,-1],[3,-1],[0,-2],[-1,-2],[0,-1],[2,-1],[2,0],[3,1],[2,-1],[1,0],[1,-2],[0,-2],[0,-1],[-1,0],[-1,0],[-1,-1],[0,-2],[0,-3],[1,0],[1,0],[1,0],[0,1],[0,2],[0,1],[1,0],[1,-1],[1,-1],[2,0],[1,-1],[2,-3],[3,-1],[3,0],[0,-1],[1,0],[-2,-3],[-1,-1],[0,-1],[2,0],[1,2],[1,0],[1,-1],[1,-1],[1,-1],[1,-1],[-1,-1],[-2,0],[0,-1],[0,-1],[0,-1],[2,0],[0,1],[3,0],[2,0],[1,0],[3,-1],[1,-1],[2,-1],[5,-1],[4,-2],[2,-1],[2,-2],[2,-2],[3,-4],[3,-1],[0,-2],[1,0],[-1,-1],[1,-2],[1,-2],[1,-2],[2,-7],[0,-6],[1,-4],[0,-2],[0,-1],[-1,-1],[-1,-1],[-1,0],[-1,-3],[0,-2],[1,-1],[1,0],[1,1],[2,2],[2,2],[1,0],[1,-1],[1,-1],[1,-2],[1,-3],[1,-2],[0,-1],[0,-1],[2,-9],[0,-3],[0,-3],[2,-2],[0,-2],[0,-1],[-1,-1],[-1,-1],[-1,0],[1,-1],[2,-1],[1,0],[1,0],[1,0],[1,-2],[1,0],[1,1],[1,0],[1,-1],[1,-1],[1,-4],[0,-2],[1,-2],[0,-3],[0,-1],[2,-3],[0,-2],[0,-1],[1,-1],[1,-1],[0,-1],[0,-1],[3,0],[3,-2],[3,-1],[2,0],[2,-1],[0,-3],[0,-1],[2,-3],[5,-2],[2,-2],[0,-1],[0,-1],[2,-1],[0,-1],[3,-4],[0,-1],[2,-2],[0,-3],[2,-3],[1,-1],[1,-2],[0,-1],[0,-3],[0,-1],[1,0],[1,-1],[0,-1],[0,-2],[2,-2],[0,-1],[-1,-1],[0,-1],[1,-1],[0,-5],[1,-4],[1,-2],[2,-5],[0,-2],[1,-2],[-1,-5],[1,-4],[-1,0],[-2,0],[1,-1],[1,-1],[1,0],[0,-1],[-1,-1],[0,-2],[0,-1],[2,0],[0,-2],[1,-1],[3,0],[1,1],[0,1],[0,1],[-1,2],[1,0],[0,1],[1,-1],[1,1],[1,0],[1,-3],[2,0],[1,0],[3,-3],[1,-2],[1,0],[1,-1],[5,-3],[0,-2],[1,-1],[0,-2],[0,-3],[1,-2],[1,-3],[0,-1],[0,-1],[0,-1],[1,-1],[0,-1],[1,-2],[1,-2],[1,-3],[1,-2],[1,-3],[1,-4],[0,-4],[0,-1],[0,-1],[0,-1],[1,-1],[1,-1],[2,0],[1,-1],[1,-1],[1,-1],[0,-1],[0,-1],[-1,-2],[0,-2],[2,-1],[2,-3],[2,-3],[1,-1],[1,-1],[1,-1],[1,-3],[2,-1],[3,-10],[0,-1],[3,-4],[1,-2],[2,-5],[0,-1],[1,-4],[1,-3],[1,-1],[0,-2],[0,-1],[1,-1],[1,-5],[0,-5],[0,-3],[-1,-3],[1,-2],[0,-2],[-1,-3],[0,-6],[0,-11],[0,-9],[-1,-8],[0,-4],[0,-4],[0,-7],[-1,-3],[-1,-2],[0,-3],[-2,-4],[-1,-3],[0,-1],[-1,-4],[-2,-6],[-1,-2],[0,-2],[-2,-5],[-2,-3],[-2,-2],[-1,0],[-1,0],[-1,1],[-2,1],[-1,1],[-1,0],[-1,-1],[2,-4],[0,-1],[0,-1],[2,-2],[4,-2],[1,-2],[1,-2],[4,-7],[1,-1],[1,0],[1,2],[2,1],[1,0],[1,-2],[0,-1],[0,-1],[-2,-2],[-1,-3],[1,-1],[1,-3],[1,-3],[0,-1],[2,-3],[2,-2],[0,-2],[0,-1],[0,-1],[1,-1],[1,-3],[1,-1],[2,-2],[0,-2],[0,-3],[1,-1],[0,-2],[0,-1],[0,-1],[0,-1],[2,-2],[1,0],[1,0],[1,0],[0,-1],[1,-3],[2,-4],[2,0],[1,-1],[1,-1],[1,-1],[1,0],[1,-1],[1,0],[1,0],[1,1],[1,1],[0,1],[2,0],[3,-1],[1,0],[1,1],[1,1],[2,4],[-1,2],[1,1],[1,1],[0,1],[-1,1],[-3,3],[-1,2],[-2,1],[-2,0],[-2,-1],[-1,1],[-1,1],[0,3],[0,3],[0,2],[-3,6],[-4,5],[-1,2],[0,2],[0,1],[2,1],[6,2],[1,2],[1,0],[1,1],[-1,3],[-1,2],[0,1],[1,2],[4,6],[1,1],[0,1],[-1,4],[0,6],[0,6],[0,3],[-1,2],[-1,1],[-3,3],[-2,2],[0,1],[0,2],[-2,8],[-1,2],[-1,2],[0,3],[1,2],[2,3],[1,1],[1,0],[2,-1],[1,-2],[2,-1],[2,-1],[1,0],[1,0],[1,-1],[1,-2],[1,0],[1,0],[0,2],[1,0],[2,0],[0,-1],[-2,-1],[-1,-1],[1,-1],[1,0],[1,0],[2,3],[1,-1],[1,-2],[3,-5],[2,-3],[2,-3],[2,-2],[0,-1],[3,-2],[1,0],[3,-3],[3,-3],[2,-3],[0,-2],[1,-1],[2,-4],[1,-1],[0,-1],[-1,0],[-1,0],[-1,-1],[-1,-6],[0,-3],[1,-2],[2,-4],[1,0],[2,-1],[0,-2],[-2,-2],[-1,-1],[-5,1],[-5,-1],[-3,0],[-2,-1],[-1,0],[-1,1],[-1,0],[-3,1],[-2,0],[-2,0],[-3,-3],[-1,-1],[0,-1],[2,-2],[0,-1],[-1,-1],[-1,-1],[-2,0],[-1,-1],[-1,-2],[-2,-2],[-1,-2],[-1,-3],[-1,-2],[0,-3],[1,-3],[1,-2],[1,0],[1,0],[1,1],[-1,2],[1,4],[2,5],[2,3],[3,2],[2,2],[2,1],[3,1],[4,2],[4,1],[5,0],[5,0],[8,-1],[12,-3],[7,-3],[2,-1],[3,0],[1,-1],[4,-5],[4,-2],[4,-3],[3,-3],[2,-3],[4,-2],[2,-1],[2,-2],[1,-1],[2,-2],[2,-2],[3,-4],[2,-1],[2,-2],[2,-4],[3,-3],[2,-1],[2,0],[1,-1],[3,-4],[2,-2],[1,-2],[1,-2],[0,-19],[43,-118],[35,0],[0,-1],[0,-1],[-1,-2],[0,-2],[-1,-3],[0,-4],[0,-5],[-1,-4],[-1,-3],[-1,-5],[-1,-5],[0,-1],[-2,-3],[-1,-4],[-3,-5],[-1,-2],[0,-3],[2,-3],[1,0],[1,0],[9,1],[6,-1],[3,-2],[1,1],[0,1],[0,1],[0,3],[0,2],[0,1],[1,0],[1,-1],[1,1],[1,1],[1,0],[1,-1],[1,-1],[1,-2],[1,0],[0,2],[0,1],[0,1],[0,3],[1,0],[1,0],[3,-2],[2,-2],[1,-1],[2,-2],[0,-1],[1,0],[0,-2],[2,-2],[2,-4],[0,-2],[-1,-4],[-1,-2],[0,-4],[0,-1],[3,-5],[0,-4],[-1,-2],[-1,-4],[-2,-4],[0,-1],[0,-4],[-1,-3],[1,0],[0,-3],[0,-2],[1,-3],[1,-1],[2,1],[3,2],[1,1],[1,2],[1,2],[1,2],[3,3],[0,1],[-1,1],[0,1],[-1,1],[-1,0],[1,1],[1,0],[1,-1],[2,0],[4,2],[3,-2],[3,0],[2,-2],[2,-1],[1,-1],[1,-3],[3,-3],[1,-1],[4,-4],[1,-2],[1,-2],[0,-4],[3,-2],[1,-1],[1,2],[3,0],[1,1],[0,1],[2,1],[1,1],[0,2],[1,1],[3,2],[1,1],[0,1],[0,3],[1,2],[4,3],[1,2],[1,2],[5,5],[1,0],[-1,-1],[-2,-8],[-1,-3],[-2,-3],[-2,-9],[1,-8],[-1,-3],[0,-4],[1,-6],[-1,-1],[1,-3],[1,0],[1,-1],[1,-1],[0,-1],[1,-2],[3,-6],[1,-1],[1,-3],[0,-1],[2,-2],[0,-1],[-1,0],[1,-2],[0,-4],[0,-2],[1,-1],[1,-1],[0,-2],[1,-2],[2,-3],[0,-2],[1,-1],[0,-2],[1,-3],[0,-2],[2,-2],[1,-1],[3,-1],[4,-2],[0,-1],[0,-1],[1,-1],[0,-2],[0,-1],[0,-1],[1,-2],[1,-2],[0,-1],[0,-1],[1,-2],[3,-2],[1,-1],[-1,-3],[1,-3],[2,-3],[0,-2],[1,0],[3,-4],[1,-2],[2,-4],[0,-1],[1,-2],[1,-1],[2,0],[1,0],[0,-2],[0,-1],[1,-2],[0,-4],[0,-2],[1,-2],[1,-1],[0,-1],[0,-2],[1,-3],[1,-2],[2,-2],[0,-1],[0,-4],[1,-2],[1,0],[2,-1],[1,-1],[1,-2],[0,-1],[5,-2],[2,-1],[1,-1],[1,0],[0,-2],[-1,-6],[0,-2],[3,-5],[1,-3],[1,-3],[3,-4],[2,-3],[3,-2],[2,-3],[0,-1],[-1,-2],[0,-1],[2,-2],[1,-2],[1,-1],[3,0],[3,0],[1,-1],[1,-1],[2,-7],[1,-3],[3,-4],[2,-1],[1,-1],[1,0],[2,0],[1,0],[4,-3],[3,-2],[1,-1],[3,-1],[0,-1],[1,-1],[0,-1],[1,-1],[0,-3],[-1,-3],[0,-1],[1,-2],[1,-2],[1,-1],[0,-4],[0,-2],[1,-1],[6,-8],[1,-1],[3,-2],[2,-2],[1,0],[2,-1],[3,-3],[0,-1],[0,-6],[1,0],[0,-1],[0,-2],[0,-1],[-1,-5],[-1,-1],[-3,-5],[0,-1],[0,-2],[0,-1],[1,-1],[7,-5],[1,-2],[1,0],[1,1],[0,1],[0,1],[-1,2],[-1,2],[3,-2],[1,-2],[0,-1],[-2,-2],[0,-1],[1,0],[2,0],[0,-1],[0,-1],[5,2],[2,1],[3,-1],[1,-2],[1,-1],[1,-1],[2,-2],[3,-3],[0,-2],[-1,-1],[-1,-1],[0,-1],[-1,-5],[-1,-3],[0,-2],[0,-1],[1,-2],[2,-3],[3,-2],[1,-1],[1,0],[1,2],[5,4],[3,0],[2,-1],[0,1],[1,0],[2,0],[1,0],[1,-1],[1,-1],[0,-4],[1,-1],[0,-1],[-1,-1],[0,-1],[1,0],[0,1],[1,1],[1,0],[0,-1],[3,-3],[2,-4],[2,-4],[2,-2],[4,-5],[4,-3],[7,-11],[0,-1],[2,-1],[1,-1],[1,-2],[1,0],[1,-2],[1,-1],[3,-1],[1,-1],[0,-2],[0,-1],[0,-1],[-1,0],[-1,2],[-1,0],[0,-3],[-1,-2],[0,-2],[1,-2],[-1,-1],[-1,-1],[-1,1],[-1,0],[-1,1],[-3,0],[0,1],[-1,1],[-2,2],[0,2],[-1,1],[-1,1],[-1,0],[0,-1],[2,-3],[1,-2],[1,-2],[3,-5],[0,-1],[-1,0],[-4,4],[-1,4],[-1,2],[-1,0],[-1,-1],[0,-2],[2,-3],[0,-2],[1,-3],[-1,1],[-2,2],[-1,3],[-5,5],[-1,0],[-1,0],[-1,-1],[0,-1],[1,-1],[4,-8],[0,-2],[1,-2],[1,-3],[0,-1],[-1,0],[-3,4],[0,1],[-1,1],[-3,3],[-3,5],[-3,5],[-1,1],[-2,2],[0,1],[-2,2],[-4,0],[-1,1],[-1,1],[-2,4],[-2,2],[0,1],[-2,1],[-3,2],[-3,3],[-1,2],[0,3],[-1,1],[0,1],[-2,1],[-1,1],[-3,4],[-2,2],[0,1],[-3,3],[-1,2],[-1,1],[0,2],[-1,1],[-3,2],[-3,3],[-2,1],[-1,4],[-3,3],[-4,3],[-1,2],[-1,2],[-1,3],[-3,3],[-1,1],[-2,0],[-2,2],[0,2],[-1,3],[-1,1],[-2,1],[0,1],[-2,2],[-2,1],[-2,1],[-1,1],[-1,0],[-1,1],[0,2],[0,1],[-3,2],[-2,3],[-2,1],[-3,5],[0,1],[-2,2],[-2,0],[-2,1],[-2,0],[1,3],[0,2],[-1,3],[-1,2],[-1,0],[-1,1],[-2,1],[-1,0],[-2,1],[0,1],[-1,1],[-1,1],[0,5],[-2,2],[-3,4],[-2,1],[-2,1],[-3,0],[-3,0],[0,1],[-2,3],[-1,1],[0,2],[-1,2],[-3,2],[0,3],[2,3],[1,2],[-2,3],[-1,3],[-1,1],[-3,2],[-1,1],[0,1],[-1,2],[-4,1],[-1,1],[1,2],[-1,1],[-2,2],[-1,0],[-1,1],[-1,0],[-1,0],[0,2],[0,1],[2,4],[0,2],[-1,1],[0,1],[-1,0],[-1,1],[-3,1],[0,4],[-2,1],[-1,1],[-2,1],[-3,0],[-2,0],[-1,0],[-1,1],[2,2],[4,3],[2,4],[1,2],[0,1],[0,1],[-1,2],[0,1],[-1,1],[-1,1],[-2,3],[-1,1],[-1,1],[-4,0],[-1,0],[0,1],[-1,1],[-6,2],[0,3],[-1,1],[1,4],[0,1],[0,1],[0,2],[-2,2],[-2,2],[-1,2],[-2,4],[-2,2],[-3,0],[-1,1],[0,2],[-1,0],[0,2],[0,1],[-1,4],[-1,0],[-2,1],[-1,1],[0,1],[-1,2],[1,1],[0,1],[1,2],[0,1],[-2,2],[-1,0],[-4,1],[-2,1],[0,1],[-1,2],[0,4],[-1,1],[-1,2],[-1,1],[-3,1],[-1,1],[0,2],[-1,1],[0,2],[1,2],[0,1],[0,3],[-4,7],[0,1],[1,2],[0,1],[-4,-2],[-1,0],[-3,2],[-1,3],[0,1],[-2,0],[-2,2],[-1,1],[1,2],[-1,1],[-1,1],[-2,2],[-2,1],[-2,0],[-1,1],[0,1],[0,1],[-2,1],[-2,2],[-2,0],[-1,0],[-2,0],[-2,-1],[-1,-1],[-3,0],[-1,0],[-2,0],[-1,0],[-1,1],[-3,5],[0,1],[3,1],[1,-2],[2,0],[3,1],[1,1],[0,1],[-1,1],[-1,1],[0,1],[0,1],[2,0],[1,0],[1,1],[1,4],[0,1],[-1,2],[0,3],[0,1],[-3,3],[-1,1],[-3,1],[-2,-2],[-3,0],[0,1],[2,0],[0,3],[1,2],[0,1],[0,1],[-1,1],[-2,1],[-1,1],[-3,1],[-2,0],[-2,0],[-1,2],[-1,0],[0,1],[-2,1],[-1,1],[-1,1],[-3,0],[-1,1],[-1,1],[-1,3],[-1,1],[-1,1],[-1,1],[0,1],[-1,4],[-3,3],[0,2],[-1,1],[-3,4],[-1,2],[-2,1],[0,1],[-3,4],[0,1],[-2,2],[0,1],[-1,1],[-1,1],[-2,2],[-1,1],[0,3],[-1,2],[-1,2],[-1,1],[-1,1],[-2,1],[-5,4],[-4,3],[-2,2],[-1,2],[0,2],[-1,1],[-1,2],[-3,2],[-3,3],[0,1],[-1,3],[0,2],[-1,2],[0,1],[-1,1],[-4,2],[-1,1],[0,1],[-1,2],[0,1],[-2,0],[-2,2],[0,1],[-1,1],[-1,1],[-2,-1],[-3,1],[-1,1],[-2,1],[0,1],[-1,1],[-2,0],[-1,0],[-2,2],[0,1],[-1,2],[-1,0],[-1,-1],[0,-3],[0,-1],[0,-1],[2,-2],[0,-3],[2,0],[1,-3],[0,-1],[-1,-2],[1,0],[2,-2],[1,-2],[0,-4],[-1,0],[0,-1],[1,0],[1,-1],[2,-3],[2,-2],[2,-1],[0,-1],[0,-2],[0,-1],[1,1],[1,0],[1,-1],[0,-2],[0,-2],[1,-1],[1,-1],[-2,-1],[1,-1],[1,0],[2,0],[0,-1],[0,-3],[2,-2],[2,0],[1,-1],[1,0],[2,-2],[0,-1],[2,-1],[0,-2],[1,-2],[0,-1],[0,-1],[0,-2],[0,-1],[0,-2],[-1,-1],[0,-1],[1,0],[0,-7],[0,-2],[1,-1],[0,-2],[1,-1],[-1,-1],[1,-2],[2,-1],[0,-1],[1,0],[1,-1],[1,-1],[1,-1],[4,-6],[0,-2],[1,-2],[2,0],[1,-1],[5,-5],[0,-1],[1,0],[1,-3],[0,-3],[1,-2],[2,-2],[0,-1],[2,-1],[1,0],[1,-1],[0,-2],[1,-1],[0,-1],[1,-3],[1,-2],[1,-4],[1,-7],[0,-8],[0,-2],[0,-3],[0,-2],[1,-1],[0,-1],[0,-11],[0,-4],[-1,-3],[-2,-3],[0,1],[-1,0],[-1,-1],[0,-1],[-1,-3],[3,2],[1,0],[1,-1],[0,-1],[3,-2],[0,-1],[2,0],[1,-2],[2,-1],[1,0],[1,-2],[2,0],[3,-2],[8,-4],[2,-3],[1,-1],[1,-1],[1,-1],[0,-2],[1,-3],[0,-3],[1,-2],[-1,-5],[0,-1],[-2,0],[-1,0],[0,-1],[1,-2],[1,1],[3,0],[0,-1],[1,-1],[1,0],[-1,-4],[1,0],[0,-2],[-1,-2],[0,-2],[1,-1],[1,-3],[1,-1],[2,-2],[1,-1],[0,-4],[0,-2],[0,-1],[0,-5],[0,-1],[0,-6],[0,-1],[1,-6],[0,-2],[1,-1],[0,-1],[-1,-1],[-1,-3],[0,-5],[-1,-2],[0,-4],[0,-5],[-1,-9],[-2,-2],[0,-4],[-1,-7],[0,-2],[-1,-5],[-1,-4],[0,-2],[-1,-2],[-1,-3],[0,-2],[0,-1],[-1,-2],[0,-4],[-2,-5],[-1,-3],[0,-2],[-2,-2],[0,-3],[-1,-2],[-1,-5],[-2,-6],[0,-5],[-2,-5],[-1,-2],[-2,-9],[-2,-5],[0,-4],[0,-2],[-3,-5],[-1,-5],[0,-2],[-2,-5],[-1,-4],[-1,-2],[-2,-4],[0,-1],[0,-1],[0,-3],[0,-1],[-2,-1],[0,-1],[-1,-3],[-1,-4],[-1,-3],[-2,-4],[0,-5],[-2,-4],[-1,-2],[-1,-3],[-1,-4],[-3,-11],[-2,-4],[-1,-6],[-2,-3],[0,-1],[0,-5],[-1,-3],[-4,-8],[-1,-2],[-1,-6],[-2,-3],[0,-1],[0,-4],[-2,-4],[-3,-6],[0,-5],[-2,-3],[-1,-3],[-1,-4],[0,-3],[-3,-5],[-2,-7],[-3,-7],[-1,-2],[0,-3],[-2,-4],[-2,-6],[-3,-8],[0,-2],[-2,-4],[-1,-4],[-3,-8],[-1,-2],[-2,-4],[0,-3],[-2,-5],[-1,-3],[0,-2],[-2,-4],[-2,-2],[0,-2],[-1,-6],[-2,-5],[-3,-6],[0,-1],[-1,-4],[0,-2],[-4,-7],[0,-1],[-2,-6],[-3,-9],[-4,-10],[-2,-3],[-1,-4],[-2,-6],[-1,-4],[-1,-2],[0,-2],[-2,-5],[-1,-2],[-1,-2],[-2,-4],[-2,-4],[-1,-3],[-1,-3],[-2,-4],[-1,-2],[-2,-2],[-2,0],[-1,0],[0,-2],[-1,-1],[-1,-1],[-1,-1],[0,-1],[-2,-1],[-2,1],[-1,1],[-2,0],[-2,1],[-1,0],[-2,-3],[0,-1],[0,-1],[-1,0],[-1,-1],[-1,-3],[-2,-1],[-1,-3],[0,-1],[0,-1],[1,0],[2,-1],[0,1],[0,1],[1,0],[1,-1],[1,0],[0,1],[1,0],[2,-1],[2,0],[1,-1],[1,-1],[1,0],[1,0],[0,1],[1,-1],[1,-1],[0,1],[2,0],[0,-1],[1,0],[1,0],[1,0],[1,0],[0,1],[1,1],[1,0],[1,1],[2,2],[0,-1],[1,-2],[1,1],[0,1],[1,0],[1,0],[2,1],[4,0],[0,-1],[3,-1],[0,-1],[0,-1],[0,-1],[1,-2],[1,0],[1,0],[3,-1],[0,1],[2,-1],[1,1],[3,0],[1,1],[0,1],[1,0],[1,-1],[1,0],[0,1],[1,0],[1,0],[1,1],[3,0],[2,0],[1,-1],[0,-2],[1,-1],[1,0],[2,1],[0,2],[1,1],[2,1],[1,0],[2,1],[1,0],[1,-1],[2,-1],[1,-1],[2,-1],[2,0],[0,-1],[0,-2],[1,-1],[1,0],[1,0],[0,2],[2,1],[0,-1],[1,0],[1,1],[2,-1],[0,-1],[2,0],[1,1],[1,0],[2,-1],[1,0],[0,1],[2,0],[2,0],[3,0],[1,-1],[2,0],[0,-1],[1,1],[3,0],[1,-1],[0,-1],[1,-1],[-1,-1],[0,-1],[1,-1],[1,-1],[3,0],[4,1],[4,-1],[3,0],[1,-1],[0,-1],[1,0],[1,1],[1,0],[1,1],[1,0],[-1,1],[-1,1],[-1,0],[-1,3],[-1,1],[-1,2],[-1,1],[0,2],[-4,-1],[-2,0],[-2,2],[-1,0],[-2,0],[-1,0],[-1,0],[-3,2],[-3,0],[-3,3],[-2,2],[-1,1],[-2,0],[-1,1],[-2,0],[-3,2],[-3,0],[-1,1],[0,4],[0,2],[0,1],[-1,2],[-1,2],[1,3],[0,2],[0,2],[1,6],[2,5],[2,6],[5,8],[1,3],[7,12],[4,5],[2,3],[2,3],[5,5],[4,3],[5,5],[7,5],[2,1],[2,3],[11,5],[16,5],[9,2],[7,1],[3,0],[3,1],[1,0],[1,0],[0,1],[1,2],[1,1],[1,1],[3,0],[1,1],[1,1],[0,1],[0,2],[0,1],[-1,1],[-2,1],[-4,0],[-1,-1],[1,0],[1,-2],[-1,-1],[-1,0],[-1,1],[-1,0],[0,1],[0,1],[-1,3],[-1,1],[-3,7],[-1,1],[-2,1],[-2,4],[-5,6],[-3,6],[-1,2],[-1,2],[-2,0],[-1,1],[-1,0],[-1,1],[-3,3],[-6,4],[-2,-1],[-1,0],[-1,0],[-1,3],[0,1],[-1,1],[-1,1],[-1,2],[0,1],[-3,1],[-1,1],[-2,1],[-1,1],[1,1],[2,-1],[1,0],[0,1],[-2,3],[-4,2],[-2,0],[-1,1],[0,1],[-1,1],[0,1],[1,1],[1,0],[3,-3],[2,-1],[2,0],[2,-3],[3,-1],[3,-4],[1,-1],[1,-2],[1,0],[2,0],[4,-3],[4,-2],[2,-3],[1,-1],[1,0],[2,4],[0,7],[1,6],[-1,1],[-2,3],[-1,2],[0,1],[-2,5],[-1,0],[-3,1],[-5,3],[-3,4],[-5,2],[0,1],[0,1],[1,0],[2,3],[1,2],[0,1],[-1,2],[-1,2],[-1,1],[0,2],[0,3],[0,1],[0,2],[1,1],[0,1],[2,1],[1,1],[1,1],[0,1],[-2,2],[0,1],[0,1],[0,1],[0,2],[0,1],[0,2],[0,1],[-1,0],[1,3],[0,1],[-1,1],[-1,1],[0,2],[0,4],[0,1],[2,0],[2,-2],[-1,-1],[-1,-1],[0,-1],[1,-1],[3,0],[0,-1],[0,-2],[0,-1],[1,-3],[0,-1],[-1,-1],[0,-1],[0,-1],[3,-3],[0,-1],[0,-3],[0,-3],[-1,-3],[0,-3],[0,-2],[-1,-1],[0,-2],[1,-2],[1,-2],[0,-2],[0,-1],[-1,-1],[-1,-2],[-1,-1],[3,-3],[0,-1],[1,0],[2,0],[1,-1],[2,0],[1,1],[2,0],[3,1],[1,0],[3,-1],[1,0],[2,1],[1,-1],[1,0],[0,3],[0,1],[1,1],[4,2],[1,1],[0,2],[0,1],[0,3],[-1,2],[0,1],[0,1],[1,2],[1,5],[2,6],[1,1],[1,0],[0,4],[0,8],[0,4],[0,1],[-2,2],[0,1],[2,4],[1,1],[1,2],[3,2],[1,1],[0,3],[1,2],[0,1],[-1,0],[-2,1],[0,1],[4,4],[1,4],[2,1],[0,1],[0,2],[-1,3],[-1,3],[1,1],[1,1],[6,2],[0,2],[1,0],[1,0],[1,1],[4,0],[1,0],[0,-1],[-4,-4],[-1,-2],[-1,-3],[0,-3],[-1,-2],[-1,-1],[-3,-2],[-1,-2],[-2,0],[-1,0],[-1,-1],[1,-2],[1,-1],[4,-2],[1,-1],[0,-2],[1,-1],[1,-4],[-1,-1],[-3,-5],[-2,-4],[-2,-7],[0,-1],[1,-2],[2,-2],[1,-1],[0,-4],[-1,-2],[0,-1],[-1,-2],[0,-1],[3,-2],[0,-1],[0,-3],[0,-1],[-2,-3],[0,-1],[1,-1],[0,-4],[1,-1],[6,-4],[3,-1],[1,2],[1,0],[2,1],[0,1],[2,4],[0,1],[1,3],[5,8],[1,6],[0,4],[0,1],[-1,3],[0,1],[1,2],[1,1],[1,-3],[0,-2],[1,-1],[0,-1],[0,-1],[0,-2],[0,-1],[1,-1],[4,-2],[2,-2],[2,-1],[3,-2],[0,-1],[-5,-2],[-3,-2],[-2,-3],[-1,-1],[0,-2],[0,-2],[1,-1],[3,-1],[0,-1],[-1,-2],[-2,-1],[-2,-2],[-1,0],[0,-1],[1,-3],[0,-1],[-1,-2],[-1,0],[-3,0],[-1,0],[-2,-4],[-9,-5],[-1,-2],[-2,-1],[-2,0],[-1,-2],[-2,-1],[-1,0],[-2,-4],[-1,-4],[0,-2],[-2,-7],[-1,-3],[-2,-2],[-1,-5],[0,-1],[1,-2],[1,-2],[3,-3],[1,-1],[2,0],[1,-1],[4,-4],[0,-1],[-2,-6],[-1,-2],[0,-1],[1,-2],[0,-5],[2,-2],[1,-1],[1,0],[1,0],[1,0],[2,0],[3,0],[1,2],[1,0],[4,-4],[1,-2],[0,-1],[1,-1],[1,-1],[7,0],[3,0],[0,1],[1,1],[1,3],[0,6],[1,1],[0,1],[2,-9],[0,-1],[1,-1],[1,0],[1,-1],[1,0],[2,0],[1,0],[1,2],[1,1],[1,4],[0,3],[0,3],[-1,2],[0,3],[-1,1],[1,1],[1,2],[0,1],[0,3],[3,3],[0,2],[3,4],[0,1],[0,3],[0,5],[0,1],[0,2],[0,1],[0,2],[1,2],[0,4],[1,0],[1,0],[0,-2],[1,-2],[1,-2],[6,-6],[0,-2],[0,-1],[-2,-1],[0,-1],[0,-1],[-2,-3],[1,-1],[1,-1],[3,-1],[1,-1],[0,-1],[1,-2],[0,-2],[-4,-4],[0,-1],[0,-3],[0,-1],[-1,-1],[-1,-5],[-2,-3],[-2,-3],[0,-1],[1,-2],[0,-1],[1,-1],[2,-2],[3,0],[3,-1],[6,-2],[9,-1],[2,1],[2,1],[1,1],[2,2],[2,2],[5,1],[1,-3],[0,-2],[1,-3],[1,-1],[2,0],[0,-1],[1,-1],[2,-2],[1,-5],[-1,0],[-1,1],[0,2],[-1,1],[-1,1],[-4,-1],[-2,0],[-4,2],[-4,0],[-2,-1],[-1,0],[0,1],[-3,0],[-3,0],[-2,0],[-2,0],[-2,-2],[-2,0],[-2,0],[-5,0],[-2,2],[-1,1],[-3,1],[-2,0],[-1,-1],[-1,-2],[-1,0],[-2,-1],[-1,1],[-1,0],[-1,1],[-1,0],[-3,1],[-1,0],[-1,-1],[-1,0],[-2,-1],[-6,0],[-1,1],[0,-1],[0,-1],[-1,0],[-4,0],[-3,1],[-3,0],[-2,1],[-7,8],[-4,4],[-1,0],[-1,0],[0,-2],[2,-6],[2,-3],[2,-2],[2,-2],[1,0],[3,-1],[3,0],[3,1],[2,0],[6,-1],[2,-1],[6,1],[15,-1],[17,-1],[7,-1],[9,-1],[2,0],[13,-3],[9,-2],[5,-1],[2,-1],[10,-4],[4,-2],[12,-5],[3,-1],[6,-3],[7,-3],[4,-2],[4,-2],[5,-2],[4,-3],[4,-3],[6,-4],[3,-2],[2,-3],[6,-4],[4,-3],[2,-1],[1,0],[1,-2],[1,0],[2,-1],[3,-2],[0,-1],[2,-2],[1,-1],[2,0],[2,-1],[1,-2],[1,0],[3,-3],[2,-2],[2,-1],[4,-3],[3,-3],[3,-3],[3,-4],[1,-1],[1,-2],[0,-1],[0,-2],[3,1],[1,0],[1,1],[1,0],[3,-2],[2,-2],[4,-3],[2,-1],[3,-6],[2,-2],[1,-4],[0,-2],[1,0],[3,-5],[1,-1],[0,-2],[2,-1],[2,-5],[1,-1],[1,-1],[1,-1],[1,-2],[0,-2],[1,-1],[4,2],[1,1],[3,-2],[2,-2],[2,-2],[2,-2],[4,-3],[1,-2],[4,-2],[2,-2],[3,-4],[2,-2],[1,-2],[3,-3],[1,-3],[3,-4],[2,-4],[3,-5],[3,-6],[1,-1],[3,-9],[5,-13],[5,-9],[2,-7],[0,-2],[1,-3],[1,-2],[1,-1],[0,-5],[1,-5],[0,-2],[-1,-2],[0,-3],[1,-2],[0,-1],[1,0],[2,-1],[4,2],[2,0],[4,-1],[0,-1],[1,-1],[2,-2],[1,-4],[0,-1],[-1,-2],[-1,-2],[0,-1],[1,0],[1,-1],[1,1],[2,2],[1,0],[3,0],[3,0],[2,-1],[1,-1],[1,-2],[1,-1],[2,-3],[1,0],[0,-1],[1,-2],[1,-2],[1,-3],[1,-3],[1,-1],[2,-1],[4,-2],[2,0],[2,0],[2,-1],[3,-1],[3,-1],[6,0],[2,-1],[2,-2],[2,-1],[1,-2],[1,-1],[2,-3],[1,-1],[2,-1],[1,-2],[2,-1],[2,-1],[2,0],[1,0],[0,-1],[1,0],[2,-1],[3,-2],[3,-2],[3,-2],[1,-1],[4,-3],[3,-2],[2,-1],[-8,-9],[-3,-3],[8,-16],[7,-20],[1,-7],[2,-13],[6,-13],[9,-5],[12,-5],[11,-1],[3,14],[2,-1],[1,1],[2,-1],[1,-1],[1,-1],[1,0],[1,-1],[0,-1],[1,-1],[0,-2],[1,-1],[1,-1],[0,-1],[3,-3],[5,-4],[6,-3],[5,-1],[3,1],[2,1],[0,1],[1,0],[0,3],[0,1],[0,1],[0,1],[2,3],[1,1],[3,3],[2,1],[1,0],[1,1],[3,3],[2,2],[2,1],[3,1],[2,1],[4,3],[2,2],[1,1],[2,0],[1,1],[4,2],[2,1],[1,0],[1,2],[1,0],[0,1],[0,1],[0,2],[0,1],[0,1],[0,1],[1,1],[0,1],[0,2],[0,1],[0,1],[-1,0],[-1,0],[-1,1],[-2,0],[-1,0],[0,1],[0,1],[-1,2],[-1,1],[-1,1],[0,1],[-1,1],[-1,1],[-1,2],[-1,3],[-1,1],[0,1],[0,1],[0,1],[0,1],[0,4],[0,2],[1,1],[0,1],[-2,2],[0,1],[0,1],[1,1],[0,2],[1,1],[-1,0],[0,1],[-1,0],[-1,0],[0,-1],[-1,0],[-1,0],[0,1],[0,1],[0,1],[0,1],[-1,1],[-1,-1],[-1,-1],[-1,0],[-1,0],[-1,0],[-2,2],[-1,1],[-1,2],[-1,2],[0,1],[-1,2],[-2,6],[1,1],[-1,2],[-1,5],[-1,0],[-1,0],[0,1],[-2,2],[0,2],[-1,2],[0,1],[0,1],[1,1],[0,1],[1,0],[1,0],[1,0],[1,0],[0,-1],[1,0],[1,-1],[1,-1],[1,0],[1,0],[2,0],[1,0],[1,0],[2,-1],[0,-1],[1,0],[1,0],[1,0],[1,0],[0,-1],[2,0],[0,-1],[0,-1],[-1,0],[0,-1],[-1,-1],[1,-1],[1,0],[2,-1],[1,0],[1,0],[1,0],[1,0],[2,0],[1,0],[1,0],[1,0],[1,-1],[1,0],[1,0],[0,-1],[1,0],[0,-1],[0,-1],[0,-1],[0,-1],[-1,-1],[1,0],[0,-1],[1,-1],[1,-1],[0,-1],[1,-1],[1,0],[0,-1],[0,-1],[1,-1],[1,-1],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[1,0],[1,-1],[1,0],[1,-1],[0,-1],[1,-2],[1,-2],[0,-1],[1,-1],[1,-1],[1,-1],[1,-1],[1,-1],[1,0],[0,-1],[0,-1],[0,-1],[0,-1],[1,-1],[1,-1],[0,-1],[1,0],[2,-1],[1,-1],[1,0],[1,-1],[1,0],[1,1],[3,-2],[3,-4],[2,-1],[0,-2],[0,-1],[1,-3],[1,-1],[1,-1],[1,0],[1,-2],[1,0],[1,-1],[2,-2],[1,0],[2,-1],[2,0],[0,-1],[1,-1],[0,-1],[1,-1],[2,0],[1,0],[1,0],[1,0],[1,-2],[1,-1],[1,0],[1,-1],[1,0],[1,-2],[2,-2],[1,-1],[1,-1],[1,1],[1,0],[1,-1],[1,0],[1,-1],[1,-1],[1,-3],[0,-1],[1,-1],[1,-1],[1,-1],[1,-1],[1,0],[0,-1],[0,-1],[-1,0],[-3,2],[-2,1],[-1,0],[-1,1],[-2,1],[0,1],[0,1],[2,0],[1,2],[-1,1],[-1,0],[0,-1],[-1,-1],[-1,-1],[-1,-1],[-1,0],[-3,2],[-3,2],[-4,1],[-2,2],[-4,1],[-4,1],[-2,1],[-4,1],[-6,1],[-3,1],[-1,0],[-1,0],[-1,0],[-4,0],[-4,1],[-4,-2],[-4,-2],[-4,-1],[0,1],[-3,1],[-3,2],[-3,1],[-2,0],[0,-1],[0,-1],[1,-2],[2,-2],[3,-2],[3,-1],[5,-1],[5,0],[2,-1],[5,1],[2,0],[3,-1],[6,1],[3,0],[2,0],[2,-1],[3,-1],[3,-1],[4,-1],[3,-1],[2,-1],[2,-1],[2,-1],[2,-1],[1,-1],[5,-1],[1,-1],[1,-1],[1,0],[1,0],[0,-1],[1,-1],[2,-1],[1,0],[1,-1],[1,0],[1,-1],[2,-1],[1,-1],[0,-1],[1,0],[1,-1],[2,-1],[1,-1],[2,-1],[3,-2],[1,-2],[1,-1],[1,-1],[3,-2],[2,-3],[1,-1],[1,-1],[3,-3],[1,-1],[1,-1],[0,-1],[0,-1],[1,0],[0,-1],[1,0],[0,-1],[1,-1],[1,0],[0,-1],[0,-1],[0,-1],[0,-1],[1,-1],[1,-2],[1,-1],[1,-1],[2,-2],[1,-1],[1,-1],[1,0],[1,-1],[1,-1],[0,-3],[-3,-2],[-1,-1],[0,-1],[0,-2],[0,-1],[-1,-1],[0,-1],[1,-1],[1,-1],[1,0],[1,-1],[1,-1],[1,-1],[1,0],[1,0],[0,1],[1,0],[1,-1],[0,1],[1,0],[1,0],[2,-1],[1,-1],[1,-2],[1,0],[1,-1],[1,0],[0,-1],[-1,-2],[1,0],[2,-2],[2,-1],[3,-1],[1,1],[1,0],[2,0],[2,1],[2,1],[1,1],[2,0],[1,-1],[0,-1],[1,0],[1,0],[1,0],[1,0],[3,-2],[2,0],[3,-1],[3,-1],[1,-1],[1,-1],[1,0],[2,-1],[3,2],[3,-2],[6,-7],[5,-6],[7,-10],[8,-9],[0,-1],[4,-7],[0,-2],[8,-4],[1,-3],[5,-3],[1,-2],[1,0],[3,5],[2,0],[2,1],[7,-2],[4,-9],[9,-5],[-1,-3],[6,-1],[3,2],[11,-6],[-1,-2],[2,-4],[0,-2],[2,-2],[0,-2],[4,0],[-2,-7],[2,-2],[6,-2],[2,-2],[-1,-5],[3,-1],[2,1],[1,-3],[2,1],[1,-2],[1,-3],[4,-12],[0,-6],[21,-8],[6,-4],[8,-15],[-4,-5],[10,-10],[3,-16],[2,-1],[2,0],[2,-1],[0,3],[-2,5],[-2,5],[5,6],[3,0],[0,2],[1,2],[2,0],[0,2],[1,3],[1,3],[10,1],[2,0],[2,0],[2,-2],[1,2],[10,-3],[2,1],[13,-5],[0,-3],[2,-1],[1,-2],[2,0],[1,-1],[3,3],[0,-2],[4,-4],[2,1],[-2,5],[2,2],[6,0],[2,0],[1,1],[1,2],[2,1],[1,3],[2,1],[1,1],[1,1],[1,3],[11,-1],[6,1],[2,-3],[3,1],[1,0],[4,-2],[1,0],[0,1],[2,0],[-2,8],[1,7],[2,3],[2,0],[-1,3],[-2,3],[9,2],[1,-5],[3,0],[1,5],[1,5],[0,5],[-8,15],[-2,3],[2,1],[-1,2],[-3,2],[-1,2],[0,1],[-1,6],[-3,0],[0,1],[0,3],[0,5],[0,4],[5,15],[-1,4],[1,2],[0,1],[2,0],[-1,2],[-2,1],[-4,-2],[-1,-1],[-2,0],[-6,4],[1,1],[-1,0],[-1,1],[-2,-2],[-1,1],[-2,2],[0,1],[0,1],[-1,2],[-2,1],[-1,-1],[-2,1],[1,1],[-1,0],[-2,0],[-1,0],[-2,-1],[1,1],[0,2],[2,1],[0,2],[-3,0],[-3,0],[-3,-1],[-6,5],[-5,6],[0,4],[1,4],[-2,-1],[-3,3],[-2,1],[-1,0],[-1,1],[-2,0],[-1,-1],[-1,1],[-1,0],[-1,2],[-3,2],[0,1],[0,1],[0,1],[0,1],[-1,0],[0,1],[-1,0],[0,1],[-1,0],[0,1],[0,-1],[-1,0],[1,0],[0,-1],[1,0],[0,-1],[0,-1],[0,-1],[-1,0],[-1,1],[0,1],[-1,1],[-1,0],[-1,2],[-3,2],[-1,1],[-2,2],[-3,2],[-2,5],[-1,1],[0,1],[-3,6],[-6,3],[-3,0],[-1,1],[-2,3],[-2,0],[-1,2],[-5,9],[2,11],[-6,1],[0,2],[0,1],[3,-1],[-3,8],[0,6],[3,-4],[1,-4],[0,-2],[2,-2],[1,-1],[-1,-1],[6,-7],[0,1],[1,1],[-2,2],[4,5],[1,-1],[0,-5],[-2,-4],[-1,1],[-1,-1],[3,-6],[3,-4],[1,-1],[1,0],[2,-1],[7,9],[5,-2],[2,-5],[-4,-4],[0,-1],[-1,-1],[5,-5],[3,3],[8,-2],[2,-3],[1,-1],[-1,-3],[4,-2],[10,-8],[1,0],[1,-1],[0,6],[-2,4],[-1,4],[0,3],[0,3],[0,4],[0,5],[-2,5],[-2,4],[-2,5],[-3,1],[-1,0],[-1,-2],[2,-3],[2,-1],[1,-3],[2,-3],[0,-6],[1,-2],[0,-2],[0,-1],[-2,0],[-1,1],[-2,1],[0,1],[0,1],[2,5],[-2,4],[-5,5],[0,2],[-1,2],[2,5],[-2,6],[2,3],[-1,-6],[5,10],[-1,2],[0,1],[1,0],[3,0],[3,-4],[0,-3],[-1,-1],[-3,6],[-2,2],[4,-10],[1,-1],[1,0],[13,-2],[14,3],[7,-9],[7,-5],[4,-3],[3,-2],[1,-1],[8,-10],[3,-4],[1,-1],[3,-7],[-3,-4],[-3,-7],[2,-7],[0,-3],[7,-14],[1,-3],[1,0],[12,-11],[1,-1],[10,-7],[2,-1],[0,8],[0,1],[-5,5],[-5,6],[-1,11],[8,5],[0,-2],[2,-3],[1,-1],[1,-1],[1,-1],[1,0],[2,0],[-1,1],[0,1],[-1,2],[2,1],[1,1],[2,-1],[3,-1],[1,-3],[1,3],[3,-2],[3,1],[2,4],[1,3],[5,3],[4,1],[3,2],[0,3],[-2,5],[2,3],[5,4],[6,-3],[1,7],[-1,2],[-2,0],[-3,5],[-1,1],[-2,-1],[-3,5],[-2,0],[-1,6],[-5,9],[-6,10],[-7,-2],[-1,2],[-7,-2],[-5,1],[-4,3],[-1,1],[-1,1],[0,1],[-1,0],[-2,4],[-9,1],[-1,1],[-5,6],[0,1],[0,3],[0,3],[-3,-1],[2,3],[-4,-4],[-1,1],[-1,1],[-1,2],[-1,2],[-3,2],[-2,2],[-2,1],[-3,3],[0,4],[0,1],[0,4],[4,-2],[6,0],[-7,3],[-1,2],[-3,8],[5,-9],[1,0],[0,1],[-1,7],[4,-9],[1,1],[-3,11],[-1,7],[-1,-1],[-1,0],[1,-4],[-2,4],[-1,0],[-1,-1],[1,-4],[-2,4],[-1,-1],[1,-5],[-2,5],[-1,4],[9,2],[-1,3],[-10,-4],[-4,5],[-2,1],[-2,3],[-1,1],[-1,0],[-1,1],[-1,1],[-1,1],[-2,1],[-1,3],[-1,-1],[-5,-1],[-14,2],[-5,7],[-1,-3],[-3,8],[-2,1],[-1,0],[-7,10],[0,9],[-1,0],[-3,26],[5,5],[0,1],[1,0],[2,1],[6,-3],[3,-6],[10,-4],[0,3],[3,-4],[6,-2],[1,-1],[2,3],[3,6],[4,3],[4,-1],[1,0],[1,4],[6,1],[3,1],[3,0],[2,0],[-2,1],[-2,0],[-2,3],[-1,2],[-1,1],[7,2],[8,2],[0,-1],[1,1],[-1,2],[-1,0],[1,-1],[-8,-3],[-7,-2],[-1,2],[-4,3],[-1,1],[-2,-1],[-1,1],[-2,-1],[-1,1],[-1,1],[-2,1],[0,2],[-1,2],[0,3],[-1,3],[-1,5],[-2,10],[-4,7],[-3,9],[3,1],[0,11],[0,1],[0,2],[-4,2],[-8,4],[1,8],[-4,2],[-4,-2],[-2,-1],[-1,-1],[-1,-3],[0,2],[-1,-1],[-2,-1],[-3,-1],[-3,-1],[-5,-3],[-3,-1],[-2,0],[-2,1],[2,0],[0,1],[-1,1],[0,2],[5,0],[0,-2],[-1,-2],[2,2],[1,1],[0,1],[1,-1],[0,1],[3,1],[4,2],[0,1],[1,0],[2,0],[0,1],[4,2],[6,3],[1,0],[1,0],[1,0],[0,-1],[1,-1],[0,-1],[4,-2],[5,2],[9,1],[1,0],[5,0],[1,2],[1,1],[7,0],[5,1],[3,0],[-1,4],[0,1],[-1,0],[-2,0],[-3,3],[-1,0],[-1,0],[-1,0],[0,1],[0,1],[1,0],[2,-1],[1,0],[4,-2],[3,2],[1,0],[0,1],[1,0],[1,0],[0,-1],[1,0],[-1,3],[-1,2],[2,5],[-1,3],[7,12],[11,6],[2,-2],[23,-16],[22,20],[-2,10],[-2,4],[-5,9],[-2,-1],[-9,13],[0,1],[-1,1],[-10,8],[0,1],[-1,2],[-2,6],[-1,3],[-1,-1],[-2,-2],[-5,6],[-6,-3],[-7,5],[-6,5],[-9,0],[-9,6],[-17,18],[-9,2],[-7,2],[-11,1],[-2,0],[-2,1],[0,1],[2,1],[2,1],[4,2],[3,12],[-4,19],[0,6],[-2,2],[1,1],[2,3],[-2,5],[3,0],[5,20],[6,24],[2,1],[3,1],[-3,7],[-3,-2],[-1,1],[1,3],[1,0],[2,-1],[1,13],[1,5],[2,7],[1,0],[2,0],[0,2],[5,15],[4,9],[2,4],[4,11],[-8,62],[-3,5],[-6,2],[0,1],[2,2],[0,5],[1,2],[-1,2],[0,6],[0,1],[2,10],[0,5],[0,1],[-13,12],[-1,0],[-8,3],[-2,1],[-3,1],[-3,1],[3,3],[1,-1],[1,-1],[3,-1],[2,0],[3,-1],[3,0],[2,0],[3,-1],[2,-1],[2,-1],[1,7],[4,2],[4,1],[4,2],[4,2],[4,1],[3,1],[3,1],[2,0],[5,1],[3,1],[6,1],[5,1],[6,0],[4,1],[2,0],[3,1],[2,0],[3,1],[2,0],[3,1],[4,1],[2,1],[2,1],[1,1],[2,1],[1,1],[1,0],[1,0],[0,1],[1,0],[1,-1],[1,0],[0,-1],[1,-1],[0,-1],[1,0],[1,0],[0,-1],[-1,0],[0,-1],[0,-1],[0,-1],[1,-1],[0,-1],[0,-1],[0,-1],[0,1],[1,0],[0,1],[1,0],[1,0],[1,0],[1,1],[1,0],[1,0],[0,-1],[1,0],[1,0],[0,-1],[1,0],[1,0],[1,0],[0,-1],[1,0],[1,0],[1,0],[1,-1],[1,0],[1,0],[1,1],[1,1],[1,1],[1,0],[0,1],[1,0],[1,0],[1,1],[1,0],[1,0],[0,1],[0,1],[1,0],[1,1],[0,1],[0,1],[1,0],[0,1],[0,1],[1,1],[1,0],[1,0],[1,0],[1,1],[0,1],[1,0],[1,0],[1,1],[0,-1],[1,0],[1,1],[1,0],[0,1],[0,1],[1,0],[1,0],[0,1],[1,0],[0,1],[1,0],[0,1],[1,0],[0,1],[1,0],[1,0],[0,1],[1,0],[0,1],[1,0],[0,1],[0,1],[1,0],[0,1],[0,1],[0,2],[2,0],[1,0],[1,1],[1,0],[1,0],[1,1],[1,0],[1,0],[0,1],[1,0],[0,1],[1,1],[1,0],[1,0],[1,1],[1,0],[0,1],[0,1],[1,1],[0,1],[1,0],[0,2],[0,1],[1,-1],[1,1],[0,1],[1,-1],[1,0],[1,2],[1,1],[2,2],[1,0],[2,2],[1,1],[1,1],[1,1],[0,1],[1,0],[1,1],[1,1],[1,1],[2,1],[0,1],[1,1],[1,1],[1,1],[1,0],[0,1],[1,1],[1,0],[0,1],[1,1],[0,1],[0,1],[0,1],[1,0],[0,1],[1,1],[0,1],[1,1],[1,0],[0,1],[1,1],[0,2],[1,0],[1,3],[0,2],[1,3],[1,1],[0,2],[0,2],[1,1],[0,1],[1,2],[0,1],[0,1],[1,0],[0,1],[0,1],[0,1],[0,2],[-2,2],[1,1],[0,1],[-1,1],[0,1],[0,1],[-1,2],[-1,0],[0,1],[0,1],[-2,2],[-1,4],[-1,4],[0,2],[0,5],[0,2],[3,3],[0,-1],[0,-9],[2,0],[6,-10],[115,-52],[15,-10],[33,-24],[49,-36],[7,-9],[16,-16],[-2,-3],[15,-16],[18,-33],[9,-11],[4,-8],[3,-5],[9,-6],[9,-10],[7,-11],[1,-10],[-3,-3],[0,-2],[2,0],[26,5],[6,12],[6,0],[4,-7],[9,19],[2,-2],[1,-1],[-4,6],[-17,30],[-13,17],[-4,5],[-13,19],[-2,4],[-3,3],[-6,10],[-7,12],[-1,0],[-3,5],[1,0],[-1,0],[-3,6],[9,0],[-12,19],[-4,-2],[4,2],[12,7],[-1,-11],[6,1],[-3,-3],[7,-13],[0,-4],[0,-1],[-5,-2],[0,-1],[1,-1],[5,3],[1,0],[5,-2],[5,-18],[11,-19],[5,-4],[23,-31],[4,2],[2,-9],[0,-9],[2,2],[2,-6],[-2,-1],[1,-4],[5,0],[0,-1],[4,-3],[2,-1],[0,-1],[5,-8],[-2,-3],[0,-1],[1,-2],[-1,-1],[-3,-2],[3,2],[1,1],[3,-3],[7,-8],[6,-3],[4,-3],[1,-3],[1,-2],[5,-2],[4,-1],[1,-1],[11,1],[2,1],[12,2],[2,3],[0,1],[3,2],[1,-4],[0,-1],[-1,-1],[1,0],[6,-1],[2,3],[2,1],[2,2],[4,-1],[1,-2],[1,-2],[2,-2],[1,-4],[4,1],[0,-5],[2,-4],[9,-4],[3,0],[3,-1],[2,4],[6,28],[6,2],[6,-7],[6,-8],[0,-3],[3,-4],[1,0],[4,-5],[0,-1],[1,0],[5,-1],[0,-2],[1,1],[3,-2],[0,-2],[1,-3],[-2,-1],[1,-3],[3,-1],[1,0],[0,-1],[1,-2],[4,-1],[2,0],[3,-2],[-2,-2],[0,-1],[2,-1],[4,-2],[2,2],[6,-2],[1,-3],[-1,-3],[0,-1],[2,-2],[3,-2],[0,-2],[1,-1],[1,-3],[-1,-3],[-1,-2],[-1,-4],[0,-2],[-8,0],[0,-2],[6,-1],[4,-2],[2,1],[2,-1],[2,1],[2,0],[0,1],[0,1],[0,1],[-1,1],[0,1],[0,1],[0,1],[1,2],[1,-1],[2,0],[1,2],[9,-5],[0,-2],[-1,-1],[-1,-1],[-1,-1],[-2,0],[-2,0],[-3,0],[0,-1],[9,-1],[13,-1],[14,0],[10,2],[1,0],[2,0],[11,4],[1,0],[2,3],[4,7],[6,21],[1,6],[5,8],[7,13],[39,49],[24,26],[20,22],[8,8],[12,14],[3,4],[1,0],[4,3],[3,4],[2,3],[3,3],[1,4],[2,7],[0,4],[0,1],[-1,0],[0,1],[1,0],[1,3],[0,8],[0,4],[3,6],[-1,11],[0,1],[3,0],[1,2],[2,2],[0,3],[0,1],[0,1],[1,0],[1,1],[-1,1],[0,1],[1,1],[-1,0],[0,1],[1,1],[0,1],[0,2],[0,1],[0,1],[0,1],[0,1],[0,1],[-1,1],[0,1],[0,1],[0,1],[0,1],[0,1],[-1,1],[0,1],[9,6],[2,-2],[2,-2],[1,-2],[1,0],[2,-1],[1,0],[1,0],[1,0],[2,0],[1,1],[1,1],[3,0],[2,1],[1,0],[2,0],[1,0],[1,0],[0,-1],[3,0],[2,-1],[2,-1],[2,-1],[1,-1],[1,0],[1,0],[0,1],[1,0],[0,1],[-1,2],[0,1],[1,1],[0,1],[2,1],[5,1],[3,0],[1,0],[1,0],[2,0],[1,0],[3,-1],[2,-1],[2,0],[2,0],[1,0],[2,1],[2,1],[2,1],[2,0],[1,0],[1,0],[2,-1],[2,0],[3,-1],[1,-1],[2,-1],[1,-1],[2,1],[2,0],[1,0],[1,-1],[2,0],[2,-1],[1,1],[2,0],[2,0],[1,0],[1,0],[10,3],[4,0],[3,1],[3,0],[4,3],[2,1],[1,1],[4,0],[2,-2],[5,-5],[2,-2],[1,-3],[2,-2],[6,-8],[3,-3],[4,-5],[2,-5],[0,-1],[1,-2],[1,-2],[1,-3],[1,-3],[1,-3],[1,-2],[1,-1],[5,-16],[1,-1],[0,-1],[-1,-1],[0,-1],[-1,0],[-1,-1],[0,-1],[-1,0],[-1,-1],[-1,0],[-1,0],[-1,0],[-1,0],[-1,-1],[1,0],[0,-1],[-1,0],[0,1],[-1,0],[-1,-1],[-1,0],[-1,0],[0,-1],[-1,-1],[-1,0],[-1,-1],[-1,0],[0,-1],[-1,-1],[0,-1],[-1,0],[-1,0],[-1,-1],[0,-1],[-1,0],[1,-1],[1,0],[1,-1],[1,0],[1,0],[1,-1],[-1,-1],[0,-1],[0,-1],[1,0],[0,-1],[-1,0],[0,-1],[-1,0],[-1,-1],[0,-1],[-1,0],[-1,-1],[-1,0],[-1,0],[0,-1],[1,-1],[-1,0],[0,2],[-2,0],[-2,0],[-3,-1],[-2,0],[-2,0],[-1,1],[-1,0],[0,-2],[-1,-2],[-2,0],[-5,-1],[-4,0],[-3,2],[-3,0],[3,-2],[-2,0],[-2,-1],[-2,0],[-1,-2],[-3,0],[-1,-2],[-2,-1],[-2,-1],[0,1],[-1,1],[-2,-1],[-1,0],[-1,-1],[-2,-1],[-2,-2],[1,-2],[1,-2],[1,-2],[2,-4],[-1,-2],[-1,-2],[4,-3],[3,-2],[2,-2],[1,-2],[1,-1],[2,-1],[2,-1],[0,-1],[0,-1],[1,0],[1,0],[1,0],[1,-2],[1,0],[1,0],[1,-2],[3,0],[1,-1],[2,-1],[3,-2],[2,0],[17,-9],[1,-1],[1,0],[0,-1],[1,0],[0,1],[1,0],[1,1],[1,0],[1,1],[1,0],[3,-1],[2,0],[2,-1],[2,0],[1,-1],[2,0],[1,-1],[2,-3],[1,-1],[0,-1],[1,0],[1,-1],[0,-1],[0,-1],[0,-1],[1,-1],[0,-1],[-1,0],[0,-1],[1,-1],[0,-2],[1,-1],[0,-1],[2,-1],[1,-1],[1,-1],[1,0],[1,1],[1,0],[0,1],[1,0],[0,1],[0,1],[0,1],[0,1],[0,1],[-1,0],[-1,-1],[-1,0],[0,-1],[-1,0],[-1,0],[-1,0],[-1,0],[-1,0],[0,1],[0,1],[0,-1],[1,0],[1,0],[1,0],[1,0],[1,0],[1,1],[1,0],[1,1],[1,0],[1,0]]]}
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/src/js/main.js b/views/ngXosViews/ecordTopology/src/js/main.js
deleted file mode 100644
index 010bff1..0000000
--- a/views/ngXosViews/ecordTopology/src/js/main.js
+++ /dev/null
@@ -1,73 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.ecordTopology', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers',
-  'ui.checkbox'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('ecord-topo', {
-    url: '/',
-    template: '<ecord-topo></ecord-topo>'
-  })
-  .state('eline-create', {
-    url: '/eline',
-    template: '<eline-form></eline-form>'
-  })
-  .state('eline-details', {
-    url: '/eline/:id',
-    template: '<eline-details></eline-details>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.constant('cordIcons', {
-  cordLogo: `M92.5,62.3l-33,33,2.5,2.5c4.1,4.1,7.4,3.6,11.2-.1L95.9,75l-4.5-4.5,4.7-4.7-3.6-3.6Zm2.6,7L98.4,66l3.3,3.3-3.3,3.3-3.3-3.3ZM94.5,60l4.9-4.9,4.9,4.9-4.9,4.9ZM36.2,36.1L18.6,53.8c-7.8,7.8-5.8,17.4-2.4,22l-2.2-2.2c-10.6-10.6-11.2-20,0-31.2L28.2,28.1L31.3,25l8,8-3.1,3.1ZM55.5,55.4l3.6-3.6L66.9,44l-8-8l-2.5,2.5-5.2,5.2l-3.6,3.6L33.2,61.6C22,72.7,22.5,82.2,33.2,92.8L35.4,95c-3.4-4.5-5.4-14.1,2.4-22L55.5,55.4ZM50.7,21.7l-8-8L35,21.2l8,8,7.6-7.6ZM62.8,9.6L55.4,17l-8-8,7.4-7.4,8,8Zm0.7,18.3-7.6,7.6-8-8,7.6-7.6,8,8Zm26.1-6.6-8.1,8.1-8-8,8.1-8.1,8,8ZM79.3,31.5l-7.4,7.4-8-8,7.4-7.4,8,8ZM45.7,45.6L54.3,37l-8-8-8.6,8.6L23.4,51.8C12.2,63,12.8,72.4,23.4,83l2.2,2.2c-3.4-4.5-5.4-14.1,2.4-22ZM34.9,80.7l20.6,20.5c2,2,4.6,4.1,7.9,3.2-2.9,2.9-8.9,1.7-11.9-1.3L35.1,86.8,35,86.6H34.9l-0.8-.8a15,15,0,0,1,.1-1.9,14.7,14.7,0,0,1,.7-3.2Zm-0.6,7.4a21.3,21.3,0,0,0,5.9,11.7l5.7,5.7c3,3,9,4.1,11.9,1.3-3.3.9-5.9-1.2-7.9-3.2L34.3,88.1Zm3.5-12.4a16.6,16.6,0,0,0-2.3,3.6L57,100.8c3,3,9,4.1,11.9,1.3-3.3.9-5.9-1.2-7.9-3.2Z`,
-  service: `M2.16,10.77l2.7-.44a0.36,0.36,0,0,0,.21-0.2c0.24-.55.47-1.1,0.69-1.65a0.42,0.42,0,0,0,0-.33c-0.5-.74-1-1.47-1.52-2.18L5.94,4.22,8.07,5.75a0.37,0.37,0,0,0,.44,0C9,5.55,9.52,5.36,10,5.16a0.36,0.36,0,0,0,.27-0.32c0.13-.87.28-1.74,0.42-2.64l0.23,0c0.66,0,1.32,0,2,0a0.25,0.25,0,0,1,.3.26c0.13,0.81.28,1.62,0.41,2.44a0.34,0.34,0,0,0,.26.3c0.52,0.2,1,.41,1.54.64a0.34,0.34,0,0,0,.4,0l1.93-1.4L18,4.22,19.76,6c-0.49.7-1,1.43-1.52,2.16a0.4,0.4,0,0,0,0,.47c0.23,0.49.43,1,.62,1.49a0.36,0.36,0,0,0,.32.27l2.66,0.43v2.45l-1.63.29c-0.36.06-.72,0.11-1.07,0.19a0.43,0.43,0,0,0-.26.22c-0.23.53-.43,1.07-0.67,1.6a0.31,0.31,0,0,0,0,.37l1.4,1.94,0.17,0.24-1.74,1.74c-0.69-.48-1.41-1-2.13-1.5a0.43,0.43,0,0,0-.52,0,13.34,13.34,0,0,1-1.43.6,0.4,0.4,0,0,0-.32.35c-0.14.86-.3,1.72-0.46,2.59H10.73c-0.14-.85-0.29-1.7-0.42-2.55A0.43,0.43,0,0,0,10,18.88c-0.5-.18-1-0.39-1.46-0.61a0.36,0.36,0,0,0-.42,0c-0.73.52-1.46,1-2.17,1.52L4.16,18.08l0.37-.52c0.39-.55.78-1.1,1.19-1.65a0.31,0.31,0,0,0,0-.37C5.52,15,5.3,14.5,5.09,14A0.34,0.34,0,0,0,4.8,13.7l-2.64-.46V10.77ZM15.43,12A3.45,3.45,0,1,0,12,15.48,3.46,3.46,0,0,0,15.43,12Z`
-})
-.directive('ecordTopo', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/ecord-topo.tpl.html',
-    controller: function(Eline, $location){
-
-      // retrieving user list
-      Eline.query().$promise
-      .then((elines) => {
-        this.elines = elines;
-      })
-      .catch((e) => {
-        throw new Error(e);
-      });
-
-      this.selectEline = (eline) => {
-        $location.path(`/eline/${eline.id}`)
-      }
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/src/js/service-map.directive.js b/views/ngXosViews/ecordTopology/src/js/service-map.directive.js
deleted file mode 100644
index 376bbd3..0000000
--- a/views/ngXosViews/ecordTopology/src/js/service-map.directive.js
+++ /dev/null
@@ -1,240 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/28/16.
- */
-
-(function () {
-  'use strict';
-  angular.module('xos.ecordTopology')
-  .directive('serviceMap', function(){
-    return {
-      restrict: 'E',
-      scope: {
-        unis: '=',
-        services: '='
-      },
-      bindToController: true,
-      controllerAs: 'vm',
-      template: '',
-      controller: function($element, $scope, $rootScope, $timeout, $log, cordIcons){
-        const el = $element[0];
-        const layout = d3.layout.tree();
-        let duration = 500;
-        let margin = 40;
-
-        // count the mas depth of an object
-        const depthOf = (obj) => {
-          var depth = 0;
-          if (obj.children) {
-            obj.children.forEach(function (d) {
-              var tmpDepth = depthOf(d);
-              if (tmpDepth > depth) {
-                depth = tmpDepth
-              }
-            })
-          }
-          return 1 + depth
-        };
-
-        // create svg elements
-        const svg = d3.select(el)
-          .append('svg')
-          .style('width', `${el.clientWidth}px`)
-          .style('height', `${el.clientHeight}px`)
-
-        var diagonal = d3.svg.diagonal()
-          .projection(function(d) { return [d.y, d.x]; });
-
-        let i = 0;
-        const update = (tree) => {
-
-          let maxDepth = depthOf(tree);
-
-          layout
-            .size([el.clientHeight, el.clientWidth]);
-
-          var nodes = layout.nodes(tree);
-          var links = layout.links(nodes);
-
-          const step = ((el.clientWidth - margin) / (maxDepth - 1));
-          // Normalize for fixed-depth.
-          nodes.forEach(function(d, i) {
-            if(i === 0){
-              d.y = margin;
-            }
-            else{
-              d.y = d.depth * step;
-            }
-          });
-
-          // Update the nodes…
-          var node = svg.selectAll('g.node')
-            .data(nodes, (d) =>  {
-              return d.id || (d.id = ++i)
-            });
-
-
-          // Enter any new nodes at the parent's previous position.
-          var nodeEnter = node.enter().append('g')
-            .attr({
-              'class': d => `node ${d.type}`,
-              id: d => d.id
-            })
-            .attr('transform', () => `translate(${el.clientWidth / 2}, 50)`);
-
-          nodeEnter.append('rect')
-            .attr({
-              class: d => d.type,
-              width: 24,
-              height: 24,
-              x: -12,
-              y: -12
-            });
-
-          // unis
-          nodeEnter.filter('.uni')
-            .append('path')
-            .attr({
-              d: cordIcons.cordLogo,
-              transform: 'translate(-10, -10),scale(0.18)'
-            });
-
-          // services
-          nodeEnter.filter('.service')
-            .append('path')
-            .attr({
-              d: cordIcons.service,
-              transform: 'translate(-12, -12)'
-            });
-
-          nodeEnter.append('text')
-            .attr({
-              'text-anchor': 'middle',
-              x: 0,
-              y: 25
-            })
-            .text(d => {
-              return d.name
-            });
-
-          // Transition exiting nodes to the parent's new position.
-          var nodeExit = node.exit().transition()
-            .duration(duration)
-            .remove();
-
-          nodeExit.select('circle')
-            .attr('r', 1e-6);
-
-          nodeExit.select('text')
-            .style('fill-opacity', 1e-6);
-
-          var nodeUpdate = node.transition()
-            .duration(duration)
-            .attr('transform', (d) => `translate(${d.y},${d.x})`);
-
-          // Update the links…
-          var link = svg.selectAll('path.link')
-            .data(links, function(d) { return d.target.id; });
-
-          // Enter any new links at the parent's previous position.
-          link.enter().insert('path', 'g')
-            .attr('class', 'link')
-            .attr('d', function(d) {
-              var o = {x: d.source.x, y: d.source.y};
-              return diagonal({source: o, target: o});
-            });
-
-          // Transition links to their new position.
-          link.transition()
-            .duration(duration)
-            .attr('d', diagonal);
-
-          // Transition exiting nodes to the parent's new position.
-          link.exit().transition()
-            .duration(duration)
-            .attr('d', function(d) {
-              var o = {x: d.source.x, y: d.source.y};
-              return diagonal({source: o, target: o});
-            })
-            .remove();
-
-          // Stash the old positions for transition.
-          nodes.forEach(function(d) {
-            d.x0 = d.x;
-            d.y0 = d.y;
-          });
-        };
-
-        // format uni in the tree layout shape
-        this.formatUni = (unis) => {
-          return unis.reduce((list, item, i) => {
-            list.push({
-              name: item.scaEthFppUniN.name,
-              children: [],
-              id: `uni-${i}`
-            });
-            return list;
-          }, [])
-          return unis;
-        }
-
-        // add active services
-        this.addServices = (services, unis) => {
-
-          let list = [unis[0], ...services, unis[1]];
-
-
-          const addChildR = (base, list) => {
-
-            if(list.length === 0){
-              return [];
-            }
-
-            let el = list.shift();
-
-            let n = {
-              name: el.name || el.label,
-              type: el.name ? 'uni':'service',
-              children: addChildR(el, list),
-              id: el.id
-            };
-
-            return [n];
-          };
-
-          let tree = addChildR({}, list);
-
-          return tree[0];
-        };
-
-        $scope.$watch(() => this.services, (s) => {
-          if(s && this.unis){
-            update(this.addServices(s, this.formatUni(this.unis)))
-          }
-        }, true)
-      }
-    };
-  });
-})();
-
diff --git a/views/ngXosViews/ecordTopology/src/js/uni.service.js b/views/ngXosViews/ecordTopology/src/js/uni.service.js
deleted file mode 100644
index c660e1d..0000000
--- a/views/ngXosViews/ecordTopology/src/js/uni.service.js
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/27/16.
- */
-
-(function () {
-  'use strict';
-
-  angular.module('xos.ecordTopology')
-    .service('Uni', ($resource, _) => {
-      return $resource(`/api/service/metronetworkservice/SCA_ETH_FPP_UNI_N/:id`, {id: '@id'}, {
-        query: {
-          isArray: true,
-          interceptor: {
-            response: (res) => {
-              const augmentedUnis = _.map(res.data, (uni, i) => {
-                var latlng_val = uni.latlng;
-                var lat_val = latlng_val.substring(1, latlng_val.indexOf(',') - 1);
-                lat_val = lat_val.trim();
-                var lng_val = latlng_val.substring(latlng_val.indexOf(',') + 1, latlng_val.length - 1);
-                lng_val = lng_val.trim()
-
-                uni.latlng = [lat_val, lng_val];
-                return uni;
-              });
-              return augmentedUnis;
-            }
-          }
-        }
-      });
-    });
-})();
-
diff --git a/views/ngXosViews/ecordTopology/src/sass/elan-map.scss b/views/ngXosViews/ecordTopology/src/sass/elan-map.scss
deleted file mode 100644
index 231444b..0000000
--- a/views/ngXosViews/ecordTopology/src/sass/elan-map.scss
+++ /dev/null
@@ -1,85 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-@import './vars.scss';
-
-elan-map {
-  display: block;
-  width: 100%;
-  height: 380px;
-  position: relative;
-
-  svg{
-    position: absolute;
-    top: 0;
-    left: 0;
-  }
-
-  circle.elan,
-  rect.elan {
-    stroke: $brand-info;
-    stroke-width: 2;
-    fill: #fff;
-  }
-
-  circle.elan,
-  circle.uni {
-    cursor: pointer;
-  }
-
-  .node.uni {
-
-    circle.uni,
-    rect.uni {
-      stroke: $cord-red;
-      stroke-width: 2;
-      fill: #fff;
-    }
-    path {
-      fill: darken($cord-red, 20%);
-    }
-  }
-
-  line {
-    stroke: $cord-red;
-    stroke-width: 1;
-  }
-
-  #map {
-    background: #EFEBE2;
-  }
-
-  .subunit {
-    fill: #B7DAFF;
-    stroke: white;
-    stroke-width: 1px;
-  }
-
-  .subunit._10{
-    fill: transparent;
-    stroke: transparent;
-  }
-
-  .exterior-boundary {
-    fill: none;
-    stroke: black;
-    stroke-linejoin: round;
-    stroke-width: 1px;
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/src/sass/eline-details.scss b/views/ngXosViews/ecordTopology/src/sass/eline-details.scss
deleted file mode 100644
index 923e3d2..0000000
--- a/views/ngXosViews/ecordTopology/src/sass/eline-details.scss
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-@import '../../../../style/sass/bootstrap/bootstrap/_variables.scss';
-
-.service-container{
-  .btn {
-    font-size: $font-size-small;
-  }
-}
-
-.sla {
-  input.input-sm {
-    max-width: 60px;
-    text-align: right;
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/src/sass/main.scss b/views/ngXosViews/ecordTopology/src/sass/main.scss
deleted file mode 100644
index 41e7492..0000000
--- a/views/ngXosViews/ecordTopology/src/sass/main.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-@import '../../../../style/sass/bootstrap/_bootstrap.scss';
-
-@import "./elan-map.scss";
-@import "./eline-details.scss";
-@import "./service-map.scss";
-
-
-#xosEcordTopology {
-  .btn-primary-border {
-    @include button-variant($btn-primary-bg, $btn-primary-color, $btn-primary-border);
-  }
-}
diff --git a/views/ngXosViews/ecordTopology/src/sass/service-map.scss b/views/ngXosViews/ecordTopology/src/sass/service-map.scss
deleted file mode 100644
index 4e66b47..0000000
--- a/views/ngXosViews/ecordTopology/src/sass/service-map.scss
+++ /dev/null
@@ -1,59 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-@import './vars.scss';
-
-service-map {
-  width: 100%;
-  height: 100px;
-  display: block;
-
-  .node rect {
-    fill: #fff;
-    stroke-width: 2px;
-  }
-
-  .node.uni {
-    rect {
-      stroke: $cord-red;
-    }
-    path {
-      fill: darken($cord-red, 20%);
-    }
-  }
-
-  .node.service{
-    rect {
-      stroke: $brand-primary;
-    }
-    path {
-      fill: darken($brand-primary, 20%);
-    }
-  }
-
-  .node text {
-    font: 12px sans-serif;
-  }
-
-  .link {
-    fill: none;
-    stroke: #ccc;
-    stroke-width: 1;
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/src/sass/vars.scss b/views/ngXosViews/ecordTopology/src/sass/vars.scss
deleted file mode 100644
index 16f4a86..0000000
--- a/views/ngXosViews/ecordTopology/src/sass/vars.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-$cord-red: #CE5650;
-
-/*$brand-primary: $cord-red;*/
-$panel-border-radius: 0;
-$border-radius-large: 2px;
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/src/templates/ecord-topo.tpl.html b/views/ngXosViews/ecordTopology/src/templates/ecord-topo.tpl.html
deleted file mode 100644
index 393b6e6..0000000
--- a/views/ngXosViews/ecordTopology/src/templates/ecord-topo.tpl.html
+++ /dev/null
@@ -1,80 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row" ng-show="vm.elines.length == 0">
-    <div class="col-xs-10 col-xs-offset-1 text-center">
-        <div class="jumbotron" style="margin-top: 100px">
-            <div class="row">
-                <div class="col-sm-4">
-                    <img ng-src="{{'/imgs/'+user.image+'.jpg'}}" class="img-responsive img-rounded">
-                </div>
-                <div class="col-sm-8">
-                    <h1>Hello, {{currentUser.name}}</h1>
-                    <p style="padding-top: 20px">
-                        Looks like you have not yet created any E-LINE!
-                    </p>
-                    <div style="margin-top: 60px">
-                        <a class="btn btn-success btn-lg" href="#/eline" role="button">Start now</a>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-<div class="row" ng-show="vm.elines.length > 0">
-    <div class="col-sm-6">
-        <div class="panel panel-primary animate-vertical" ng-hide="vm.elines.length == 0">
-            <div class="panel-heading">
-                <h3 class="panel-title">E-LINES</h3>
-            </div>
-            <div class="panel-body">
-                <elan-map elan="vm.elines"></elan-map>
-            </div>
-        </div>
-    </div>
-    <div class="col-sm-6 eline-list">
-        <div class="panel panel-primary table-container" ng-show="vm.elines.length >
-        0">
-            <!-- <pre>{{elans | json}}</pre> -->
-            <table class="table">
-                <thead>
-                <tr>
-                    <th>E-LINE</th>
-                    <th>Unis</th>
-                </tr>
-                </thead>
-                <tbody>
-                <tr ng-repeat="eline in vm.elines | orderBy:'id'" ng-click="vm.selectEline(eline)">
-                    <td>{{eline.sid}}</td>
-                    <td>
-                <span> - </span>
-                  {{eline.uni1.location}}
-                     {{eline.uni1.pid}}
-                </span>
-                <span> - </span>
-                  {{eline.uni2.location}}
-                     {{eline.uni2.pid}}
-                </span>
-                    </td>
-                </tr>
-                </tbody>
-            </table>
-        </div>
-        <a class="btn btn-success btn-lg btn-block" href="#/eline" role="button">Create a new E-LINE!</a>
-    </div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/src/templates/eline-details.tpl.html b/views/ngXosViews/ecordTopology/src/templates/eline-details.tpl.html
deleted file mode 100644
index 3ab1786..0000000
--- a/views/ngXosViews/ecordTopology/src/templates/eline-details.tpl.html
+++ /dev/null
@@ -1,140 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="home" class="container-fluid">
-    <div class="row">
-        <div class="col-sm-6">
-            <div class="panel panel-primary">
-                <div class="panel-heading">
-                    <h3 class="panel-title">E-LINE MAP</h3>
-                </div>
-                <div class="panel-body">
-                    <elan-map ng-hide="!vm.eline" elan="[vm.eline]"></elan-map>
-                </div>
-            </div>
-            <div class="panel panel-primary">
-                <div class="panel-heading">
-                    <h3 class="panel-title">E-LINE SERVICES</h3>
-                </div>
-                <div class="panel-body">
-                    <service-map ng-if="vm.eline" unis="vm.eline.SCA_ETH_Flow_Points" services="vm.activeServices"></service-map>
-                </div>
-            </div>
-        </div>
-        <div class="col-sm-6">
-            <div class="panel panel-primary service-container">
-                <div class="panel-heading">
-                    <h3 class="panel-title">Add a service:</h3>
-                </div>
-                <div class="panel-body">
-                    <div class="row" ng-repeat="(k,v) in vm.availableServices">
-                        <div class="col-xs-12">
-                            <label>{{k | uppercase}}</label>
-                        </div>
-                        <div class="col-xs-{{12/v.length}}" ng-repeat="service in v">
-                            <a ng-click="vm.toggleService(service)" class="btn btn-block"
-                               ng-class="{'btn-primary-border': !vm.isServiceActive(service), 'btn-primary': vm.isServiceActive(service)}">{{service.label}}</a>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <div class="row">
-                <div class="col-sm-6">
-                    <div class="panel panel-primary animate-vertical" ng-hide="!vm.eline.SCA_ETH_Flow_Points[0]">
-                        <div class="panel-heading">
-                            <h3 class="panel-title">{{vm.eline.SCA_ETH_Flow_Points[0].scaEthFppUniN.name}}</h3>
-                        </div>
-                        <div class="panel-body">
-                            <div class="row">
-                                <div class="col-sm-12">
-                                    <div class="input-group">
-                                        <span class="input-group-addon">CIR</span>
-                                        <input b-to-mb ng-model="vm.eline.SCA_ETH_Flow_Points[0].scaEthFppUniN.interfaceCfgIngressBwp.bwpCfgCir" ng-value="'10'" class="form-control" type="number" required>
-                                        <span class="input-group-addon">Gb</span>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="row">
-                                <div class="col-sm-12">
-                                    <div class="input-group">
-                                        <span class="input-group-addon">EIR</span>
-                                        <input b-to-mb ng-model="vm.eline.SCA_ETH_Flow_Points[0].scaEthFppUniN.interfaceCfgIngressBwp.bwpCfgEir" ng-value="'30'" class="form-control" type="number" required>
-                                        <span class="input-group-addon">Gb</span>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="col-sm-6">
-                    <div class="panel panel-primary animate-vertical" ng-hide="!vm.eline.SCA_ETH_Flow_Points[1]">
-                        <div class="panel-heading">
-                            <h3 class="panel-title">{{vm.eline.SCA_ETH_Flow_Points[1].scaEthFppUniN.name}}</h3>
-                        </div>
-                        <div class="panel-body">
-                            <div class="row">
-                                <div class="col-sm-12">
-                                    <div class="input-group">
-                                        <span class="input-group-addon">CIR</span>
-                                        <input b-to-mb ng-model="vm.eline.SCA_ETH_Flow_Points[1].scaEthFppUniN.interfaceCfgIngressBwp.bwpCfgCir" ng-value="'10'" class="form-control" type="number" required>
-                                        <span class="input-group-addon">Gb</span>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="row">
-                                <div class="col-sm-12">
-                                    <div class="input-group">
-                                        <span class="input-group-addon">EIR</span>
-                                        <input b-to-mb ng-model="vm.eline.SCA_ETH_Flow_Points[1].scaEthFppUniN.interfaceCfgIngressBwp.bwpCfgEir" ng-value="'30'" class="form-control" type="number" required>
-                                        <span class="input-group-addon">Gb</span>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <div class="panel panel-primary table-container sla">
-                <table class="table">
-                    <thead>
-                    <tr>
-                        <th>SLA</th>
-                        <th>Value</th>
-                        <th>Unit</th>
-                    </tr>
-                    </thead>
-                    <tbody>
-                    <tr ng-repeat="sla in  vm.slas">
-                        <td>{{sla.name}}</td>
-                        <td class="text-right">
-                            <input class="form-control input-sm" type="text" ng-model="sla.default"></input>
-                        </td>
-                        <td>{{sla.unit}}</td>
-                    </tr>
-                    </tbody>
-                </table>
-            </div>
-            <div class="row">
-                <div class="col-xs-12">
-                    <div ng-show="!saved"ng-click="vm.saveEline()" class="btn btn-success btn-block btn-lg">Save</div>
-                    <div ng-show="saved"class="form-success btn-blockanimate-fade">Done</div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/ecordTopology/src/templates/eline-form.tpl.html b/views/ngXosViews/ecordTopology/src/templates/eline-form.tpl.html
deleted file mode 100644
index 3defbc3..0000000
--- a/views/ngXosViews/ecordTopology/src/templates/eline-form.tpl.html
+++ /dev/null
@@ -1,132 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- ELINE CREATION POINT TO POINT -->
-<div class="container-fluid eline-form">
-    <div class="row">
-        <div class="col-xs-10 col-xs-offset-1">
-            <div class="panel panel-primary animate-vertical">
-                <div class="panel-heading">
-                    <h3 class="panel-title">Create E-LINE</h3>
-                </div>
-                <form name="vm.eline" ng-submit="vm.createEline(vm.el, vm.eline)">
-                    <div class="panel-body">
-                        <div class="row">
-                            <div class="col-xs-12">
-                                <label>Name:</label>
-                                <input type="text" class="form-control input-lg" ng-model="vm.el.evcCfgidentifier" required></div>
-                        </div>
-                        <div class="row">
-                            <div class="col-xs-6">
-                                <label>Start:</label>
-                                <div class="alert alert-danger animate-vertical" ng-hide="!vm.formErrors.startError">
-                                    {{vm.formErrors.startError}}
-                                </div>
-                                <!--<pre>{{vm.startUnis | json}}</pre>-->
-                                <div class="row uni-repeat" ng-repeat="u in vm.startUnis">
-                                    <div class="col-xs-2">
-                                        <checkbox largest
-                                                  ng-class="{'btn-primary': !u.alreadySelected, 'btn-danger': u.alreadySelected === true}"
-                                                  ng-model="u.selected"
-                                                  ng-change="vm.selectUni(u, 'start')"
-                                                  required
-                                        ></checkbox>
-                                    </div>
-                                    <div class="col-xs-5">
-
-                                        <b>{{u.name || u.interfaceCfgIdentifier}}</b>
-
-                                    </div>
-                                    <div class="col-xs-5">
-                                        {{u.location}}
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="col-xs-6">
-                                <label>End:</label>
-                                <div class="alert alert-danger animate-vertical" ng-hide="!vm.formErrors.endError">
-                                    {{vm.formErrors.endError}}
-                                </div>
-                                <div class="row uni-repeat" ng-repeat="u in vm.endUnis">
-                                    <div class="col-xs-2">
-                                        <checkbox largest
-                                                  ng-class="{'btn-primary': !u.alreadySelected, 'btn-danger': u.alreadySelected === true}"
-                                                  ng-model="u.selected"
-                                                  ng-change="vm.selectUni(u, 'end')"
-                                                  required
-                                        ></checkbox>
-                                    </div>
-                                    <div class="col-xs-5">
-                                        <b>{{u.name || u.interfaceCfgIdentifier}}</b>
-                                    </div>
-                                    <div class="col-xs-5">
-                                        {{u.location}}
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="panel-footer text-right">
-                        <button ng-hide="vm.eline.$saved" type="submit" class="btn btn-success btn-lg animate-fade">Save</button>
-                        <div ng-hide="!vm.eline.$saved" class="form-success animate-fade">Done</div>
-                    </div>
-                </form>
-            </div>
-        </div>
-    </div>
-</div>
-
-<!-- MULTIPLE POINT CREATION -->
-<div class="container-fluid eline-form" ng-if="vm.currentUser.userId === 2">
-    <div class="row">
-        <div class="col-xs-10 col-xs-offset-1">
-            <div class="panel panel-primary animate-vertical">
-                <div class="panel-heading">
-                    <h3 class="panel-title">Create Infrastructure</h3>
-                </div>
-                <form name="vm.infrastructure" ng-submit="vm.createInfrastructure(vm.infrastructureUnis)">
-                    <div class="panel-body">
-                        <div class="row">
-                            <div class="col-sm-6 infrastructureUnis" ng-repeat="u in vm.infrastructureUnis">
-                                <div class="row uni-repeat">
-                                    <div class="col-xs-2">
-                                        <checkbox largest
-                                                  class="btn-primary"
-                                                  ng-model="u.selected"
-                                                  required
-                                        ></checkbox>
-                                    </div>
-                                    <div class="col-xs-5">
-                                        <b>{{u.name}}</b>
-                                    </div>
-                                    <div class="col-xs-5">
-                                        {{u.location}}
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="panel-footer text-right">
-                        <button ng-hide="vm.eline.$saved" type="submit" class="btn btn-success btn-lg animate-fade">Save</button>
-                        <div ng-hide="!vm.eline.$saved" class="form-success animate-fade">Done</div>
-                    </div>
-                </form>
-            </div>
-        </div>
-    </div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/.bowerrc b/views/ngXosViews/globalXos/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/globalXos/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/.eslintrc b/views/ngXosViews/globalXos/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/globalXos/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/.gitignore b/views/ngXosViews/globalXos/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/globalXos/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/README.md b/views/ngXosViews/globalXos/README.md
deleted file mode 100644
index b8044ad..0000000
--- a/views/ngXosViews/globalXos/README.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Global XOS View
-
-To onboard this view, use:
-```
-# You can use this recipe to load the dashboard in the system:
-GlobalXos:
-  type: tosca.nodes.DashboardView
-  properties:
-    url: template:xosGlobalXos
-
-# And this recipe to activate the dashboard for a user:
-padmin@vicci.org:
-  type: tosca.nodes.User
-  properties:
-    no-create: true
-    no-delete: true
-  requirements:
-    - globalXos_dashboard:
-        node: GlobalXos
-        relationship: tosca.relationships.UsesDashboard
-```
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/bower.json b/views/ngXosViews/globalXos/bower.json
deleted file mode 100644
index 1f7c07a..0000000
--- a/views/ngXosViews/globalXos/bower.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
-  "name": "xos-globalXos",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The globalXos view",
-  "license": "Apache-2.0",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "angular-bootstrap": "~2.2.0"
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/globalXos/gulp/build.js b/views/ngXosViews/globalXos/gulp/build.js
deleted file mode 100644
index a3c7b05..0000000
--- a/views/ngXosViews/globalXos/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.globalXos')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosGlobalXos.html',
-        options.static + 'css/xosGlobalXos.css',
-        options.static + 'images/globalXos-icon.png',
-        options.static + 'images/globalXos-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosGlobalXos.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/globalXos-icon.png`, `${options.icon}/globalXos-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosGlobalXos.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.globalXos',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosGlobalXosVendor.js',
-            options.static + 'js/xosGlobalXos.js',
-            options.static + 'css/xosGlobalXos.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosGlobalXos.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosGlobalXosVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['GlobalXos'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosGlobalXos'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/globalXos-icon.png`) &&
-      fs.existsSync(`${options.icon}/globalXos-icon-active.png`)
-    ){
-      dashboardJson['GlobalXos'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['globalXos_dashboard'] = {
-      node: 'GlobalXos',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/gulp/server.js b/views/ngXosViews/globalXos/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosViews/globalXos/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/globalXos/gulpfile.js b/views/ngXosViews/globalXos/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/globalXos/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/globalXos/karma.conf.js b/views/ngXosViews/globalXos/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/globalXos/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/globalXos/mock-cfg.json b/views/ngXosViews/globalXos/mock-cfg.json
deleted file mode 100644
index d48ce51..0000000
--- a/views/ngXosViews/globalXos/mock-cfg.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "endpoints": [
-    {
-      "url": "controllers",
-      "base": "api/core/",
-      "methods": ["GET"]
-    },
-    {
-      "url": "slices",
-      "base": "api/core/",
-      "methods": ["GET"]
-    }
-  ]
-}
diff --git a/views/ngXosViews/globalXos/mocks/controllers.json b/views/ngXosViews/globalXos/mocks/controllers.json
deleted file mode 100644
index 16afd85..0000000
--- a/views/ngXosViews/globalXos/mocks/controllers.json
+++ /dev/null
@@ -1,38 +0,0 @@
-[
-    {
-        "humanReadableName": "CloudLab OpenStack Juno",
-        "id": 1,
-        "name": "CloudLab",
-        "backend_type": "OpenStack",
-        "version": "Juno",
-        "auth_url": "http://sample/v2",
-        "admin_user": "admin",
-        "admin_password": "adminpassword",
-        "admin_tenant": "admin",
-        "domain": "Default"
-    },
-    {
-        "humanReadableName": "Local XOS 1",
-        "id": 1,
-        "name": "Local XOS 1",
-        "backend_type": "XOS",
-        "version": "1.0",
-        "auth_url": "http://xos.dev:9999/",
-        "admin_user": "padmin@vicci.org",
-        "admin_password": "letmein",
-        "admin_tenant": "admin",
-        "domain": "Default"
-    },
-    {
-        "humanReadableName": "Local XOS 2",
-        "id": 2,
-        "name": "Local XOS 2",
-        "backend_type": "XOS",
-        "version": "1.0",
-        "auth_url": "http://c220g2-011001.wisc.cloudlab.us:9999/",
-        "admin_user": "padmin@vicci.org",
-        "admin_password": "letmein",
-        "admin_tenant": "admin",
-        "domain": "Default"
-    }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/mocks/slices.json b/views/ngXosViews/globalXos/mocks/slices.json
deleted file mode 100644
index a314e2a..0000000
--- a/views/ngXosViews/globalXos/mocks/slices.json
+++ /dev/null
@@ -1,35 +0,0 @@
-[
-  {
-    "humanReadableName": "arizona_test",
-    "id": 1,
-    "created": "2016-10-21T08:29:16.204941Z",
-    "updated": "2016-10-26T12:37:32.146751Z",
-    "enacted": null,
-    "policed": null,
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "arizona_test",
-    "enabled": true,
-    "omf_friendly": false,
-    "description": "",
-    "slice_url": "",
-    "site": 1,
-    "max_instances": 10,
-    "service": null,
-    "network": null,
-    "exposed_ports": null,
-    "serviceClass": 1,
-    "creator": 1,
-    "default_flavor": null,
-    "default_image": null,
-    "default_node": null,
-    "mount_data_sets": "GenBank",
-    "default_isolation": "vm",
-    "networks": []
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/package.json b/views/ngXosViews/globalXos/package.json
deleted file mode 100644
index 167ea52..0000000
--- a/views/ngXosViews/globalXos/package.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "name": "xos-globalXos",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "mock": "easy-mocker -c mock-cfg.json -d mocks/",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.3.1",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/globalXos/spec/sample.test.js b/views/ngXosViews/globalXos/spec/sample.test.js
deleted file mode 100644
index f2436c6..0000000
--- a/views/ngXosViews/globalXos/spec/sample.test.js
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The User List', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.globalXos'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('/api/core/users/?no_hyperlinks=1').respond([
-      {
-        email: 'matteo.scandolo@gmail.com',
-        firstname: 'Matteo',
-        lastname: 'Scandolo' 
-      }
-    ]);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<users-list></users-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  it('should load 1 users', () => {
-    httpBackend.flush();
-    expect(isolatedScope.users.length).toBe(1);
-    expect(isolatedScope.users[0].email).toEqual('matteo.scandolo@gmail.com');
-    expect(isolatedScope.users[0].firstname).toEqual('Matteo');
-    expect(isolatedScope.users[0].lastname).toEqual('Scandolo');
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/src/css/dev.css b/views/ngXosViews/globalXos/src/css/dev.css
deleted file mode 100644
index e41be01..0000000
--- a/views/ngXosViews/globalXos/src/css/dev.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
diff --git a/views/ngXosViews/globalXos/src/css/main.css b/views/ngXosViews/globalXos/src/css/main.css
deleted file mode 100644
index 66f2d12..0000000
--- a/views/ngXosViews/globalXos/src/css/main.css
+++ /dev/null
@@ -1,25 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosGlobalXos ui-view,
-#xosGlobalXos xos-list {
-  display: block; }
-
-#xosGlobalXos .well.active {
-  background: #337ab7;
-  color: #fff; }
diff --git a/views/ngXosViews/globalXos/src/icons/README.md b/views/ngXosViews/globalXos/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/globalXos/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/src/index.html b/views/ngXosViews/globalXos/src/index.html
deleted file mode 100644
index 55b0d48..0000000
--- a/views/ngXosViews/globalXos/src/index.html
+++ /dev/null
@@ -1,56 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.globalXos" id="xosGlobalXos" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-bootstrap/ui-bootstrap-tpls.js"></script>
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/rest.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/src/js/main.js b/views/ngXosViews/globalXos/src/js/main.js
deleted file mode 100644
index 5cf11f6..0000000
--- a/views/ngXosViews/globalXos/src/js/main.js
+++ /dev/null
@@ -1,535 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.globalXos', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers',
-  'ui.bootstrap.modal',
-  'ui.bootstrap.tpls'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('xos-list', {
-    url: '/',
-    template: '<xos-list></xos-list>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.value('LXOS', [])
-.directive('xosList', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/xos-list.tpl.html',
-    controller: function($window, $q, _, Controllers, LXOS, LocalAuth, LocalSlices, LocalUsers, $uibModal, Slices){
-      const self = this;
-      $q.all([
-        Controllers.query({backend_type: 'CORD'}).$promise,
-        Slices.query().$promise
-      ])
-      .then(res => {
-        [this.xoss, this.gSlices] = res;
-      });
-
-      this.openLocally = (itemKind) => {
-        return (item) => {
-          $window.open(`${item.xos.auth_url}admin/core/${itemKind}/${item.id}`, '_blank');
-        }
-      };
-
-      const getGlobalInstances = (item) => {
-        $uibModal.open({
-          animation: true,
-          size: 'lg',
-          templateUrl: 'listInstances.html',
-          controllerAs: 'vm',
-          resolve: {
-            slice: function () {
-              return {
-                name: item.name,
-                xos: {
-                  name: 'G-XOS'
-                }
-              };
-            }
-          },
-          controller: function($uibModalInstance, slice, LocalInstances, LocalSlices) {
-            this.slice = slice;
-
-            this.config = {
-              columns: [
-                {
-                  label: 'Name',
-                  prop: 'name',
-                }
-              ],
-              actions: [
-                {
-                  label: 'Add Instance',
-                  icon: 'remove',
-                  color: 'red',
-                  cb: (item) => {
-                    console.log(item);
-                    LocalInstances.deleteFromLocal(item)
-                    .then(() => {
-                      _.remove(this.instances, i => i.id === item.id);
-                    });
-                  }
-                }
-              ]
-            };
-
-            LocalSlices.queryFromAll(self.xoss).$promise
-            .then(slices => {
-              // keep only the slice that match the name
-              this.slicesId = slices
-                .filter(s => s.name.indexOf(this.slice.name) > -1)
-                .reduce((o, s) => {
-                  o[s.xos.id] = s.id;
-                  return o;
-                }, {});
-              return LocalInstances.queryFromAll(self.xoss).$promise;
-            })
-            .then(instances => {
-              this.instances = instances.filter(i => this.slicesId[i.xos.id] === i.slice);
-            })
-            .catch(e => {
-              this.instances = [];
-            });
-
-            this.close = () => {
-              $uibModalInstance.dismiss('cancel');
-            }
-          }
-        })
-      };
-
-      const createGlobalInstance = (item) => {
-        $uibModal.open({
-          animation: true,
-          size: 'lg',
-          templateUrl: 'addInstance.html',
-          controller: function($scope, $q, $uibModalInstance, slice, LocalInstances, LocalAuth){
-            this.slice = slice;
-
-            this.model = {
-              // isolation: 'vm'
-            };
-
-            let xos;
-
-            Controllers.query({backend_type: 'CORD'}).$promise
-            .then((xos) => {
-              this.xoss = xos;
-              this.config.fields['xos'].options = _.map(xos, item => {
-                return {id: item.id, label: item.name}
-              });
-            });
-
-            $scope.$watch(() => this.model.xos, () => {
-              if(!this.model.xos){
-                return;
-              }
-              xos = _.find(this.xoss, {id: this.model.xos});
-              LocalInstances.getLocalInfo(xos)
-              .then((res) => {
-                [
-                  this.config.fields['deployment'].options,
-                  this.config.fields['image'].options,
-                  this.config.fields['flavor'].options,
-                  this.config.fields['node'].options
-                ] = res;
-                return $q.all([
-                  LocalSlices.getLocalByName(xos, this.slice.name),
-                  LocalAuth.getUserByName(xos, xos.admin_user)
-                ]);
-              })
-              .then((res) => {
-                console.log('aaaa: ', res);
-                [this.localSlice, this.user] = res;
-              });
-            });
-
-
-            this.config = {
-              formName: 'instanceForm',
-              order: ['xos', 'name'],
-              excludedFields: ['xos', 'slice'],
-              actions: [
-                {
-                  label: 'Save',
-                  icon: 'ok',
-                  cb: (instance) => {
-                    instance.xos = xos;
-                    instance.slice = this.localSlice.id;
-                    instance.creator = this.user.id;
-                    LocalInstances.createOnLocal(instance)
-                    .then(res => {
-                      slice.instance_total = slice.instance_total + 1;
-                      $uibModalInstance.close();
-                    });
-                  },
-                  class: 'success'
-                },
-                {
-                  label: 'Cancel',
-                  icon: 'remove',
-                  cb: () => {
-                    $uibModalInstance.dismiss('cancel');
-                  },
-                  class: 'warning'
-                }
-              ],
-              fields: {
-                xos: {
-                  type: 'select',
-                  validators: {
-                    required: true
-                  }
-                },
-                name: {
-                  type: 'text',
-                  validators: {
-                    required: true
-                  }
-                },
-                deployment: {
-                  type: 'select',
-                  validators: {
-                    required: true
-                  }
-                },
-                node: {
-                  type: 'select',
-                  validators: {
-                    required: true
-                  }
-                },
-                image: {
-                  type: 'select',
-                  validators: {
-                    required: true,
-                  }
-                },
-                flavor: {
-                  type: 'select',
-                  validators: {
-                    required: true,
-                  }
-                },
-                isolation: {
-                  type: 'select',
-                  options: [
-                    {id: 'vm', label: 'VM'},
-                    {id: 'container', label: 'Container'},
-                    {id: 'container_vm', label: 'Container in VM'}
-                  ],
-                  validators: {
-                    required: true,
-                  }
-                },
-              }
-            };
-          },
-          controllerAs: 'vm',
-          resolve: {
-            slice: function () {
-              return item;
-            }
-          }
-        });
-      };
-
-      const baseSliceCols = [
-        {
-          label: 'Name',
-          prop: 'name',
-        },
-        // {
-        //   label: 'Mount Data Sets',
-        //   prop: 'mount_data_sets'
-        // }
-      ];
-
-      const lXosSliceCols = [
-        {
-          label: 'Max Instances',
-          prop: 'max_instances'
-        },
-        {
-          label: 'Instances',
-          prop: 'instance_total'
-        },
-        {
-          label: 'L-XOS',
-          type: 'custom',
-          formatter: item => item.xos.name
-        }
-      ];
-
-      this.gSliceTableCgf = {
-        columns: baseSliceCols,
-        filter: 'field',
-        order: true,
-        actions: [
-          {
-            label: 'Get Instances',
-            icon: 'search',
-            cb: getGlobalInstances
-          },
-          {
-            label: 'Add Instances',
-            icon: 'plus',
-            cb: createGlobalInstance
-          },
-        ]
-      };
-
-      this.sliceTableCfg = {
-        columns: baseSliceCols.concat(lXosSliceCols),
-        actions: [
-          {
-            label: 'open locally',
-            icon: 'open',
-            cb: this.openLocally('slice')
-          },
-          {
-            label: 'Get Instances',
-            icon: 'search',
-            cb: (item) => {
-              $uibModal.open({
-                animation: true,
-                size: 'lg',
-                templateUrl: 'listInstances.html',
-                controllerAs: 'vm',
-                resolve: {
-                  slice: function () {
-                    return item;
-                  }
-                },
-                controller: function($uibModalInstance, slice, LocalInstances) {
-                  this.slice = slice;
-
-                  this.config = {
-                    columns: [
-                      {
-                        label: 'Name',
-                        prop: 'name',
-                      },
-                      {
-                        label: 'deployment',
-                        prop: 'deployment',
-                      },
-                    ]
-                  };
-
-                  LocalInstances.getFromLocal(slice.xos)
-                  .then(instances => {
-                    this.instances = instances.filter(i => i.slice === slice.id);
-                  });
-
-                  this.close = () => {
-                    $uibModalInstance.dismiss('cancel');
-                  }
-                }
-              })
-            }
-          },
-          {
-            label: 'Add Instance',
-            icon: 'plus',
-            cb: (item) => {
-              $uibModal.open({
-                animation: true,
-                size: 'lg',
-                templateUrl: 'addInstance.html',
-                controller: function($uibModalInstance, slice, LocalInstances){
-                  this.slice = slice;
-
-                  this.model = {};
-                  console.log(slice);
-                  LocalInstances.getLocalInfo(slice.xos)
-                  .then((res) => {
-                    [
-                      this.config.fields['deployment'].options,
-                      this.config.fields['image'].options,
-                      this.config.fields['flavor'].options,
-                      this.config.fields['node'].options
-                    ] = res;
-                  });
-
-                  this.config = {
-                    formName: 'instanceForm',
-                    excludedFields: ['xos', 'slice'],
-                    actions: [
-                      {
-                        label: 'Save',
-                        icon: 'ok',
-                        cb: (instance) => {
-                          instance.xos = slice.xos;
-                          instance.slice = slice.id;
-                          instance.creator = this.user.id;
-                          LocalInstances.createOnLocal(instance)
-                          .then(res => {
-                            slice.instance_total = slice.instance_total + 1;
-                            $uibModalInstance.close();
-                          });
-                        },
-                        class: 'success'
-                      },
-                      {
-                        label: 'Cancel',
-                        icon: 'remove',
-                        cb: () => {
-                          $uibModalInstance.dismiss('cancel');
-                        },
-                        class: 'warning'
-                      }
-                    ],
-                    fields: {
-                      name: {
-                        type: 'text',
-                        validators: {
-                          required: true
-                        }
-                      },
-                      deployment: {
-                        type: 'select',
-                        validators: {
-                          required: true
-                        }
-                      },
-                      node: {
-                        type: 'select',
-                        validators: {
-                          required: true
-                        }
-                      },
-                      image: {
-                        type: 'select',
-                        validators: {
-                          required: true,
-                        }
-                      },
-                      flavor: {
-                        type: 'select',
-                        validators: {
-                          required: true,
-                        }
-                      },
-                      isolation: {
-                        type: 'select',
-                        options: [
-                          {id: 'vm', label: 'VM'},
-                          {id: 'container', label: 'Container'},
-                          {id: 'container_vm', label: 'Container in VM'}
-                        ],
-                        validators: {
-                          required: true,
-                        }
-                      },
-                    }
-                  };
-                },
-                controllerAs: 'vm',
-                resolve: {
-                  slice: function () {
-                    return item;
-                  }
-                }
-              });
-            }
-          }
-        ],
-        filter: 'field',
-        order: true
-      };
-
-      this.usersTableCfg = {
-        columns: [
-          {
-            label: 'Name',
-            type: 'custom',
-            formatter: item => `${item.firstname} ${item.lastname}`
-          },
-          {
-            label: 'E-Mail',
-            prop: 'email'
-          },
-          {
-            label: 'User Name',
-            prop: 'username'
-          },
-          {
-            label: 'Time Zone',
-            prop: 'timezone'
-          },
-          {
-            label: 'L-XOS',
-            type: 'custom',
-            formatter: item => item.xos.name
-          }
-        ],
-        actions: [
-          {
-            label: 'open locally',
-            icon: 'open',
-            cb: this.openLocally('user')
-          }
-        ],
-        filter: 'field',
-        order: true
-      };
-
-      this.toggleXos = (xos) => {
-        if(_.findIndex(LXOS, {id: xos.id}) > -1){
-          xos.active = false;
-          _.remove(LXOS, {id: xos.id});
-        }
-        else{
-          xos.active = true;
-          LXOS.push(xos);
-        }
-
-        // authenticate on L-XOS
-        LocalAuth.login()
-        .then(() => {
-          // fetch slices
-          return $q.all([
-            LocalSlices.queryFromAll().$promise,
-            LocalUsers.queryFromAll().$promise,
-          ]);
-        })
-        .then(res => {
-          [this.localSlices, this.localUsers] = res;
-        })
-        .catch(e => {
-          console.log(e);
-        });
-      }
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/src/js/rest.js b/views/ngXosViews/globalXos/src/js/rest.js
deleted file mode 100644
index 910d8b5..0000000
--- a/views/ngXosViews/globalXos/src/js/rest.js
+++ /dev/null
@@ -1,347 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 10/20/16.
- */
-
-(function () {
-  'use strict';
-  angular.module('xos.globalXos')
-  .service('Controllers', function($resource){
-    return $resource('/api/core/controllers/:id', {id: '@id'});
-  })
-  .service('GXOS', function($q, $resource, _, LXOS){
-    this.attachXosToItem = (items, target = LXOS) => {
-      return _.map(items, (lxos, i) => {
-        let currentXos = target[i];
-        return _.map(lxos, (item) => {
-          item.xos = currentXos;
-          return item;
-        });
-      })
-    };
-
-    this.buildQueryEndpoint = (baseUrl, target = LXOS) => {
-      return () => {
-        const d = $q.defer();
-
-        // store generated $resource for each L-XOS
-        let r = [];
-
-        let p = [];
-        _.forEach(target, (xos, i) => {
-          let resource = $resource(`${xos.auth_url}${baseUrl}`, {id: '@id'}, {
-            query: {
-              isArray: true,
-              headers: {
-                Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
-              }
-            }
-          });
-          r.push(resource);
-          p.push(r[i].query().$promise);
-        });
-
-        $q.all(p)
-        .then(res => {
-          res = this.attachXosToItem(res, target);
-          d.resolve(_.flatten(res));
-        })
-        .catch(d.reject);
-
-        return {$promise: d.promise};
-      };
-    };
-
-    // TODO evaluate
-    this.buildLocalResource = (baseUrl, xos) => {
-      const headers = {
-        Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
-      };
-      const resource = $resource(`${xos.auth_url}${baseUrl}`, {id: '@id'}, {
-        query: {
-          isArray: true,
-          headers: headers
-        }
-      });
-      return resource;
-    }
-  })
-  .service('LocalAuth', function ($q, $http, _, LXOS) {
-    const baseUrl = `api/utility/login/`;
-    this.login = () => {
-      const d = $q.defer();
-
-      let p = [];
-      _.forEach(LXOS, (xos, i) => {
-        let loginRequest = $http.post(`${xos.auth_url}${baseUrl}`, {username: xos.admin_user, password: xos.admin_password});
-        p.push(loginRequest);
-      });
-
-      $q.all(p)
-      .then(auths => {
-        _.forEach(auths, (auth, i) => {
-          LXOS[i].xoscsrftoken = auth.data.xoscsrftoken;
-          LXOS[i].xossessionid = auth.data.xossessionid;
-          LXOS[i].user = JSON.parse(auth.data.user);
-        });
-        d.resolve();
-      })
-      .catch(e => {
-        d.reject(e);
-      });
-
-      return d.promise;
-    };
-
-    this.getUserByName = (xos, username) => {
-      const d = $q.defer();
-      console.log(username);
-      $http.get(`${xos.auth_url}api/core/users/`, {
-        params: {
-          username: username
-        },
-        headers: {
-          Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
-        }
-      })
-      .then((res) => {
-        d.resolve(res.data[0]);
-      })
-      .catch(e => {
-        d.reject(e);
-      });
-
-      return d.promise;
-    }
-  })
-  .service('LocalSlices', function($q, $http, GXOS){
-    const baseUrl = `api/utility/slicesplus/`;
-
-    // TODO build a global resource
-    this.queryFromAll = (targets) => {
-      return GXOS.buildQueryEndpoint(baseUrl, targets)();
-    };
-
-    this.getLocalByName = (xos, sliceName) => {
-      const d = $q.defer();
-
-      $http.get(`${xos.auth_url}${baseUrl}`, {
-        // params: params,
-        headers: {
-          Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
-        }
-      })
-      .then((res) => {
-        const slice = _.filter(res.data, (s) => {
-          return s.name.indexOf(sliceName) > -1;
-        });
-        d.resolve(slice[0]);
-      })
-      .catch(e => {
-        d.reject(e);
-      });
-
-      return d.promise;
-    };
-  })
-  .service('LocalUsers', function(GXOS){
-    const baseUrl = `api/core/users/`;
-
-    // TODO build a global resource
-    this.queryFromAll = GXOS.buildQueryEndpoint(baseUrl);
-  })
-  .service('LocalInstances', function($q, $http, GXOS, LocalDeployments, LocalImages, LocalFlavor, LocalNode){
-    const baseUrl = `api/core/instances/`;
-
-    // NOTE Evaluate to dinamically create a resource targeted to a L-XOS
-
-    this.queryFromAll = (targets) => {
-      return GXOS.buildQueryEndpoint(baseUrl, targets)();
-    };
-    this.createOnLocal = (instance) => {
-      const d = $q.defer();
-      const xos = instance.xos;
-      delete instance.xos;
-      $http.post(`${xos.auth_url}${baseUrl}`, instance, {
-        headers: {
-          Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
-        }
-      })
-      .then((inst) => {
-        d.resolve(inst);
-      })
-      .catch(e => {
-        d.reject(e);
-      });
-
-      return d.promise;
-    };
-
-    this.getFromLocal = (xos, params) => {
-      const d = $q.defer();
-      $http.get(`${xos.auth_url}${baseUrl}`, {
-        params: params,
-        headers: {
-          Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
-        }
-      })
-        .then((inst) => {
-          d.resolve(inst.data);
-        })
-        .catch(e => {
-          d.reject(e);
-        });
-
-      return d.promise;
-    };
-
-    this.deleteFromLocal = (instance) => {
-      console.log('deleteFromLocal');
-      const d = $q.defer();
-      $http.delete(`${instance.xos.auth_url}${baseUrl}${instance.id}/`, {
-        headers: {
-          Authorization: `Basic ${btoa(instance.xos.admin_user + ':' + instance.xos.admin_password)}`
-        }
-      })
-        .then((inst) => {
-          d.resolve(inst.data);
-        })
-        .catch(e => {
-          d.reject(e);
-        });
-
-      return d.promise;
-    };
-
-    this.getLocalInfo = (xos) => {
-      const d = $q.defer();
-      $q.all([
-        LocalDeployments.queryFromLocal(xos),
-        LocalImages.queryFromLocal(xos),
-        LocalFlavor.queryFromLocal(xos),
-        LocalNode.queryFromLocal(xos)
-      ])
-        .then((res) => {
-          res = _.map(res, collection => {
-            return _.map(collection, item => {
-              return {id: item.id, label: item.name}
-            });
-          });
-          d.resolve(res);
-        })
-        .catch(d.reject);
-      return d.promise;
-    };
-
-  })
-  .service('LocalDeployments', function($q, $http){
-
-    const baseUrl = `api/core/deployments/`;
-
-    this.queryFromLocal = (xos) => {
-      const d = $q.defer();
-
-      $http.get(`${xos.auth_url}${baseUrl}`, {
-        headers: {
-          Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
-        }
-      })
-      .then((res) => {
-        d.resolve(res.data);
-      })
-      .catch(e => {
-        d.reject(e);
-      });
-
-      return d.promise;
-    }
-  })
-  .service('LocalImages', function($q, $http){
-
-    const baseUrl = `api/core/images/`;
-
-    this.queryFromLocal = (xos) => {
-      const d = $q.defer();
-
-      $http.get(`${xos.auth_url}${baseUrl}`, {
-        headers: {
-          Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
-        }
-      })
-      .then((res) => {
-        d.resolve(res.data);
-      })
-      .catch(e => {
-        d.reject(e);
-      });
-
-      return d.promise;
-    }
-  })
-  .service('LocalFlavor', function($q, $http){
-
-    const baseUrl = `api/core/flavors/`;
-
-    this.queryFromLocal = (xos) => {
-      const d = $q.defer();
-
-      $http.get(`${xos.auth_url}${baseUrl}`, {
-        headers: {
-          Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
-        }
-      })
-        .then((res) => {
-          d.resolve(res.data);
-        })
-        .catch(e => {
-          d.reject(e);
-        });
-
-      return d.promise;
-    }
-  })
-  .service('LocalNode', function($q, $http){
-
-    const baseUrl = `api/core/nodes/`;
-
-    this.queryFromLocal = (xos) => {
-      const d = $q.defer();
-
-      $http.get(`${xos.auth_url}${baseUrl}`, {
-        headers: {
-          Authorization: `Basic ${btoa(xos.admin_user + ':' + xos.admin_password)}`
-        }
-      })
-        .then((res) => {
-          d.resolve(res.data);
-        })
-        .catch(e => {
-          d.reject(e);
-        });
-
-      return d.promise;
-    }
-  });
-})();
-
diff --git a/views/ngXosViews/globalXos/src/sass/main.scss b/views/ngXosViews/globalXos/src/sass/main.scss
deleted file mode 100644
index 5b61c64..0000000
--- a/views/ngXosViews/globalXos/src/sass/main.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xosGlobalXos {
-  ui-view,
-  xos-list{
-    display: block;
-  }
-
-  .well.active{
-    background: $brand-primary;
-    color: #fff;
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/globalXos/src/templates/xos-list.tpl.html b/views/ngXosViews/globalXos/src/templates/xos-list.tpl.html
deleted file mode 100644
index d543d71..0000000
--- a/views/ngXosViews/globalXos/src/templates/xos-list.tpl.html
+++ /dev/null
@@ -1,90 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="container">
-  <div class="row">
-    <h2>Select XOS to synch:</h2>
-  </div>
-  <div class="row">
-    <div class="col-xs-12">
-      <h2>G-XOS Slices:</h2>
-    </div>
-    <div class="col-xs-12">
-      <xos-table
-              config="vm.gSliceTableCgf"
-              data="vm.gSlices">
-      </xos-table>
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-xs-12">
-      <h2>Get L-XOS details:</h2>
-    </div>
-    <div
-      ng-repeat="xos in vm.xoss"
-      class="col-sm-2">
-      <div
-        class="well"
-        ng-class="{active: xos.active}"
-        ng-click="vm.toggleXos(xos)">
-          {{xos.humanReadableName || xos.name}}
-      </div>
-    </div>
-  </div>
-  <div class="row" ng-if="vm.localSlices.length > 0">
-    <div class="col-xs-12">
-      <h2>L-XOS Slices:</h2>
-    </div>
-    <div class="col-xs-12">
-      <xos-table
-        config="vm.sliceTableCfg"
-        data="vm.localSlices">
-      </xos-table>
-    </div>
-  </div>
-  <div class="row" ng-if="vm.localSlices.length > 0">
-    <div class="col-xs-12">
-      <h2>L-XOS Users:</h2>
-    </div>
-    <div class="col-xs-12">
-      <xos-table
-        config="vm.usersTableCfg"
-        data="vm.localUsers">
-      </xos-table>
-    </div>
-  </div>
-</div>
-<script type="text/ng-template" id="addInstance.html">
-  <div class="modal-header">
-      <h3 class="modal-title" id="modal-title">Add Instance to {{vm.slice.name}} on {{vm.slice.xos.name}}</h3>
-  </div>
-  <div class="modal-body" id="modal-body">
-    <xos-form ng-model="vm.model" config="vm.config"></xos-form>
-  </div>
-</script>
-<script type="text/ng-template" id="listInstances.html">
-  <div class="modal-header">
-    <h3 class="modal-title" id="modal-title">Get Instances from {{vm.slice.name}} on {{vm.slice.xos.name}}</h3>
-  </div>
-  <div class="modal-body" id="modal-body">
-    <xos-table data="vm.instances" config="vm.config"></xos-table>
-  </div>
-  <div class="modal-footer">
-    <a ng-click="vm.close()" class="btn btn-warning">Close</a>
-  </div>
-</script>
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/.bowerrc b/views/ngXosViews/hpc/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/hpc/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/.eslintrc b/views/ngXosViews/hpc/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/hpc/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/.gitignore b/views/ngXosViews/hpc/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/hpc/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/bower.json b/views/ngXosViews/hpc/bower.json
deleted file mode 100644
index 6538353..0000000
--- a/views/ngXosViews/hpc/bower.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "xos-hpc",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The hpc view",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/hpc/gulp/build.js b/views/ngXosViews/hpc/gulp/build.js
deleted file mode 100644
index 5bc12bc..0000000
--- a/views/ngXosViews/hpc/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.hpc')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosHpc.html',
-        options.static + 'css/xosHpc.css',
-        options.static + 'images/hpc-icon.png',
-        options.static + 'images/hpc-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosHpc.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/hpc-icon.png`, `${options.icon}/hpc-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosHpc.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.hpc',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosHpcVendor.js',
-            options.static + 'js/xosHpc.js',
-            options.static + 'css/xosHpc.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosHpc.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosHpcVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['Hpc'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosHpc'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/hpc-icon.png`) &&
-      fs.existsSync(`${options.icon}/hpc-icon-active.png`)
-    ){
-      dashboardJson['Hpc'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['hpc_dashboard'] = {
-      node: 'Hpc',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/gulp/server.js b/views/ngXosViews/hpc/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosViews/hpc/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/hpc/gulpfile.js b/views/ngXosViews/hpc/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/hpc/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/hpc/karma.conf.js b/views/ngXosViews/hpc/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/hpc/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/hpc/package.json b/views/ngXosViews/hpc/package.json
deleted file mode 100644
index 96b985c..0000000
--- a/views/ngXosViews/hpc/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-hpc",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/hpc/spec/sample.test.js b/views/ngXosViews/hpc/spec/sample.test.js
deleted file mode 100644
index de3ce99..0000000
--- a/views/ngXosViews/hpc/spec/sample.test.js
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The Hpc View', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.hpc'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    httpBackend = $httpBackend;
-    httpBackend.whenGET('/xoslib/hpcview?no_hyperlinks=1').respond(200, []);
-    scope = $rootScope.$new();
-    element = angular.element('<hpcs-list></hpcs-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  it('should define 2 tables', () => {
-    expect(isolatedScope.routerConfig).toBeDefined();
-    expect(isolatedScope.cacheConfig).toBeDefined();
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/src/css/dev.css b/views/ngXosViews/hpc/src/css/dev.css
deleted file mode 100644
index a8b57f4..0000000
--- a/views/ngXosViews/hpc/src/css/dev.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosHpc{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/src/css/main.css b/views/ngXosViews/hpc/src/css/main.css
deleted file mode 100644
index f7b93e4..0000000
--- a/views/ngXosViews/hpc/src/css/main.css
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosHpc .btn.btn-reload {
-  margin-top: 20px; }
diff --git a/views/ngXosViews/hpc/src/icons/README.md b/views/ngXosViews/hpc/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/hpc/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/src/index.html b/views/ngXosViews/hpc/src/index.html
deleted file mode 100644
index 70c2f74..0000000
--- a/views/ngXosViews/hpc/src/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.hpc" id="xosHpc" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/src/js/main.js b/views/ngXosViews/hpc/src/js/main.js
deleted file mode 100644
index cb4c1f8..0000000
--- a/views/ngXosViews/hpc/src/js/main.js
+++ /dev/null
@@ -1,152 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.hpc', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('hpc-list', {
-    url: '/',
-    template: '<hpcs-list></hpcs-list>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.service('Hpc', function($q, $http){
-  this.query = (params) => {
-    const d = $q.defer();
-
-    $http.get('/xoslib/hpcview', {params: params})
-      .then((res) => {
-        d.resolve(res.data);
-      })
-      .catch(d.reject);
-
-    return {$promise: d.promise};
-  };
-})
-.directive('hpcsList', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/hpc-list.tpl.html',
-    controller: function(Hpc){
-
-      const secondsToHms = d => {
-        d = Number(d);
-        var h = Math.floor(d / 3600);
-        var m = Math.floor(d % 3600 / 60);
-        var s = Math.floor(d % 3600 % 60);
-        return ((h > 0 ? h + 'h ' + (m < 10 ? '0' :'') :'') + m + 'm ' + (s < 10 ? '0' :'') + s + 's');
-      };
-
-      const toDuration = (property) => {
-        return (item) => {
-          if(!angular.isNumber(item[property])){
-            return item[property]
-          }
-          return secondsToHms(item[property]);
-        }
-      };
-
-      this.routerConfig = {
-        filter: 'field',
-        order: true,
-        columns: [
-          {
-            label: 'Name',
-            prop: 'name'
-          },
-          {
-            label: 'Ip Address',
-            prop: 'ip'
-          },
-          {
-            label: 'Record Checker',
-            prop: 'watcher.DNS.msg'
-          },
-          {
-            label: 'Name Servers',
-            prop: 'nameservers',
-            type: 'array'
-          },
-          {
-            label: 'Dns Demux Config Age',
-            prop: 'dnsdemux_config_age',
-            type: 'custom',
-            formatter: toDuration('dnsdemux_config_age')
-          },
-          {
-            label: 'Dns Redir Config Age',
-            prop: 'dnsredir_config_age',
-            type: 'custom',
-            formatter: toDuration('dnsredir_config_age')
-          }
-        ]
-      };
-
-      this.cacheConfig = {
-        filter: 'field',
-        order: true,
-        columns: [
-          {
-            label: 'Name',
-            prop: 'name'
-          },
-          {
-            label: 'Prober',
-            prop: 'watcher.HPC-hb.msg'
-          },
-          {
-            label: 'Fetcher',
-            prop: 'watcher.HPC-fetch.msg'
-          },
-          {
-            label: 'Config Age',
-            prop: 'config_age',
-            type: 'custom',
-            formatter: toDuration('config_age')
-          }
-        ]
-      };
-
-
-      this.fetch = () => {
-        Hpc.query().$promise
-        .then((hpcs) => {
-          this.routers = hpcs[0].dnsdemux;
-          this.caches = hpcs[0].hpc;
-        })
-        .catch((e) => {
-          throw new Error(e);
-        });
-      };
-
-      this.fetch();
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/src/sass/main.scss b/views/ngXosViews/hpc/src/sass/main.scss
deleted file mode 100644
index f79d675..0000000
--- a/views/ngXosViews/hpc/src/sass/main.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xosHpc {
-  .btn.btn-reload {
-    margin-top: $line-height-computed;
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/src/templates/hpc-list.tpl.html b/views/ngXosViews/hpc/src/templates/hpc-list.tpl.html
deleted file mode 100644
index 72cf48b..0000000
--- a/views/ngXosViews/hpc/src/templates/hpc-list.tpl.html
+++ /dev/null
@@ -1,46 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="container-fluid">
-    <div class="row">
-        <div class="col-xs-10">
-            <h1>Request Routers</h1>
-        </div>
-        <div class="col-xs-2 text-right">
-            <a href="" ng-click="vm.fetch()" class="btn btn-primary btn-reload">
-                <i class="glyphicon glyphicon-refresh"></i>
-                Refresh
-            </a>
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-xs-12">
-            <xos-table config="vm.routerConfig" data="vm.routers"></xos-table>
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-xs-12">
-            <h1>HyperCache</h1>
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-xs-12">
-            <xos-table config="vm.cacheConfig" data="vm.caches"></xos-table>
-        </div>
-    </div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/hpc/src/templates/users-list.tpl.html b/views/ngXosViews/hpc/src/templates/users-list.tpl.html
deleted file mode 100644
index 6d26747..0000000
--- a/views/ngXosViews/hpc/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.users"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/.bowerrc b/views/ngXosViews/mcord-slicing/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/mcord-slicing/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/.eslintrc b/views/ngXosViews/mcord-slicing/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/mcord-slicing/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/.gitignore b/views/ngXosViews/mcord-slicing/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/mcord-slicing/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/bower.json b/views/ngXosViews/mcord-slicing/bower.json
deleted file mode 100644
index 8f0a0c9..0000000
--- a/views/ngXosViews/mcord-slicing/bower.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "name": "xos-mcord-slicing",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The mcord-slicing view",
-  "license": "Apache-2.0",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "graphlib": "~2.1.1"
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.5.8",
-    "angular": "1.5.8",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.5.8",
-    "angular-animate": "1.5.8",
-    "angular-resource": "1.5.8",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#9422c38b214229fa6afdf0eea7862ccb6ff53dd7"
-  },
-  "resolutions": {
-    "angular": "1.5.8",
-    "angular-cookies": "~1.5.8",
-    "angular-animate": "~1.5.8",
-    "angular-resource": "~1.5.8"
-  }
-}
diff --git a/views/ngXosViews/mcord-slicing/gulp/build.js b/views/ngXosViews/mcord-slicing/gulp/build.js
deleted file mode 100644
index 5cc5fe8..0000000
--- a/views/ngXosViews/mcord-slicing/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.mcord-slicing')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosMcord-slicing.html',
-        options.static + 'css/xosMcord-slicing.css',
-        options.static + 'images/mcord-slicing-icon.png',
-        options.static + 'images/mcord-slicing-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosMcord-slicing.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/mcord-slicing-icon.png`, `${options.icon}/mcord-slicing-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosMcord-slicing.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.mcord-slicing',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosMcord-slicingVendor.js',
-            options.static + 'js/xosMcord-slicing.js',
-            options.static + 'css/xosMcord-slicing.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosMcord-slicing.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosMcord-slicingVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['Mcord-slicing'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosMcord-slicing'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/mcord-slicing-icon.png`) &&
-      fs.existsSync(`${options.icon}/mcord-slicing-icon-active.png`)
-    ){
-      dashboardJson['Mcord-slicing'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['mcord-slicing_dashboard'] = {
-      node: 'Mcord-slicing',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/gulp/server.js b/views/ngXosViews/mcord-slicing/gulp/server.js
deleted file mode 100644
index 785f016..0000000
--- a/views/ngXosViews/mcord-slicing/gulp/server.js
+++ /dev/null
@@ -1,194 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-proxy.on('proxyRes', function (proxyRes, req, res) {
-  // console.log(JSON.stringify(res, true, 2));
-  // console.log(Object.keys(res), res.output);
-  // console.log(JSON.stringify(proxyRes, true, 2));
-  // console.log('RAW Response from the target', JSON.stringify(proxyRes.headers, true, 2));
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/mcord-slicing/gulpfile.js b/views/ngXosViews/mcord-slicing/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/mcord-slicing/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/mcord-slicing/karma.conf.js b/views/ngXosViews/mcord-slicing/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/mcord-slicing/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/mcord-slicing/mock-cfg.json b/views/ngXosViews/mcord-slicing/mock-cfg.json
deleted file mode 100644
index 9361822..0000000
--- a/views/ngXosViews/mcord-slicing/mock-cfg.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-  "endpoints": [
-    {
-      "url": "topology",
-      "base": "api/service/mcord_slicing_ui/",
-      "methods": ["GET"]
-    },
-    {
-      "url": "slicing/nodes",
-      "base": "api/service/mcord_slicing_ui/topology/",
-      "methods": ["POST"]
-    },
-    {
-      "url": "slicing/links",
-      "base": "api/service/mcord_slicing_ui/topology/",
-      "methods": ["POST"]
-    }
-  ]
-}
diff --git a/views/ngXosViews/mcord-slicing/mocks/topology.json b/views/ngXosViews/mcord-slicing/mocks/topology.json
deleted file mode 100644
index fda4566..0000000
--- a/views/ngXosViews/mcord-slicing/mocks/topology.json
+++ /dev/null
@@ -1,91 +0,0 @@
-{
-    "nodes": [
-        {"id": 1, "name": "vRouter", "type": "upstream", "model_id": 1, "plane": "data"},
-
-
-
-
-
-        {"id": 21, "name": "ran-ru-1", "type": "ran-ru", "model_id": 1, "plane": "data"},
-        {"id": 22, "name": "ran-cu-1", "type": "ran-cu", "model_id": 1, "plane": "data"},
-        {"id": 23, "name": "sgw-1", "type": "sgw", "model_id": 1, "plane": "data"},
-        {"id": 24, "name": "pgw-1", "type": "pgw", "model_id": 1, "plane": "data"},
-
-        {"id": 25, "name": "ran-ru-1", "type": "ran-ru", "model_id": 1, "plane": "control", "model": {"DlSchedType": "RR", "DlAllocRBRate": 30, "UlSchedType": "RR", "UlAllocRBRate": 30}},
-        {"id": 26, "name": "ran-cu-1", "type": "ran-cu", "model_id": 1, "plane": "control", "model": {"AdmissionControl": 0,"HandHover": 10}},
-        {"id": 27, "name": "sgw-1", "type": "sgw", "model_id": 1, "plane": "control"},
-        {"id": 28, "name": "pgw-1", "type": "pgw", "model_id": 1, "plane": "control", "model": {"brand": "Quortus"}},
-        {"id": 29, "name": "mme-1", "type": "mme", "model_id": 1, "plane": "control"},
-
-        {"id": 210, "name": "profile-1", "type": "profile", "model_id": 1, "plane": "data", "model": {"start": "2016-01-01T08:00:00.000Z", "end": "2016-12-01T08:00:00.000Z"}},
-        {"id": 220, "name": "profile-2", "type": "profile", "model_id": 1, "plane": "data", "model": {"start": "2016-01-01T08:00:00.000Z", "end": "2016-12-01T08:00:00.000Z"}},
-
-        {"id": 211, "name": "Michelle", "type": "ue", "model_id": 1, "plane": "data", "model": {"id": 123}},
-        {"id": 212, "name": "ue-2", "type": "ue", "model_id": 1, "plane": "data", "model": {"id": 456}},
-        {"id": 221, "name": "ue-3", "type": "ue", "model_id": 1, "plane": "data", "model": {"id": 789}},
-
-
-
-
-        {"id": 31, "name": "ran-ru-2", "type": "ran-ru", "model_id": 1, "plane": "data"},
-        {"id": 32, "name": "ran-cu-2", "type": "ran-cu", "model_id": 1, "plane": "data"},
-        {"id": 33, "name": "sgw-2", "type": "sgw", "model_id": 1, "plane": "data"},
-        {"id": 34, "name": "pgw-2", "type": "pgw", "model_id": 1, "plane": "data"},
-
-        {"id": 35, "name": "ran-ru-2", "type": "ran-ru", "model_id": 1, "plane": "control", "model": {"DlSchedType": "RR", "DlAllocRBRate": 30, "UlSchedType": "RR", "UlAllocRBRate": 30}},
-        {"id": 36, "name": "ran-cu-2", "type": "ran-cu", "model_id": 1, "plane": "control", "model": {"AdmissionControl": 1,"HandHover": 10}},
-        {"id": 37, "name": "sgw-2", "type": "sgw", "model_id": 1, "plane": "control"},
-        {"id": 38, "name": "pgw-2", "type": "pgw", "model_id": 1, "plane": "control", "model": {"brand": "Radysis"}},
-        {"id": 39, "name": "mme-2", "type": "mme", "model_id": 1, "plane": "control"},
-
-        {"id": 310, "name": "profile-3", "type": "profile", "model_id": 1, "plane": "data", "model": {"start": "2016-01-01T08:00:00.000Z", "end": "2016-12-01T08:00:00.000Z"}},
-
-        {"id": 311, "name": "ue-4", "type": "ue", "model_id": 1, "plane": "data", "model": {"id": 321}},
-        {"id": 312, "name": "ue-5", "type": "ue", "model_id": 1, "plane": "data", "model": {"id": 654}}
-    ],
-    "links": [
-        {"id": 1, "source": 24, "target": 1, "plane": "data"},
-
-        {"id": 2, "source": 21, "target": 22, "plane": "data"},
-        {"id": 3, "source": 22, "target": 23, "plane": "data"},
-        {"id": 4, "source": 23, "target": 24, "plane": "data"},
-
-        {"id": 5, "source": 21, "target": 25, "plane": "control"},
-        {"id": 6, "source": 22, "target": 26, "plane": "control"},
-        {"id": 7, "source": 23, "target": 27, "plane": "control"},
-        {"id": 8, "source": 24, "target": 28, "plane": "control"},
-        {"id": 9, "source": 25, "target": 26, "plane": "control"},
-        {"id": 10, "source": 26, "target": 29, "plane": "control"},
-        {"id": 11, "source": 27, "target": 28, "plane": "control"},
-        {"id": 12, "source": 27, "target": 29, "plane": "control"},
-
-        {"id": 13, "source": 210, "target": 21, "plane": "data"},
-        {"id": 14, "source": 220, "target": 21, "plane": "data"},
-
-        {"id": 15, "source": 211, "target": 210, "plane": "data"},
-        {"id": 16, "source": 212, "target": 210, "plane": "data"},
-        {"id": 17, "source": 221, "target": 220, "plane": "data"},
-
-
-
-        {"id": 18, "source": 34, "target": 1, "plane": "data"},
-
-        {"id": 19, "source": 31, "target": 32, "plane": "data"},
-        {"id": 20, "source": 32, "target": 33, "plane": "data"},
-        {"id": 21, "source": 33, "target": 34, "plane": "data"},
-
-        {"id": 22, "source": 31, "target": 35, "plane": "control"},
-        {"id": 23, "source": 32, "target": 36, "plane": "control"},
-        {"id": 24, "source": 33, "target": 37, "plane": "control"},
-        {"id": 25, "source": 34, "target": 38, "plane": "control"},
-        {"id": 26, "source": 35, "target": 36, "plane": "control"},
-        {"id": 27, "source": 36, "target": 39, "plane": "control"},
-        {"id": 28, "source": 37, "target": 38, "plane": "control"},
-        {"id": 29, "source": 37, "target": 39, "plane": "control"},
-
-        {"id": 30, "source": 310, "target": 31, "plane": "data"},
-
-        {"id": 31, "source": 311, "target": 310, "plane": "data"},
-        {"id": 32, "source": 312, "target": 310, "plane": "data"}
-    ]
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/package.json b/views/ngXosViews/mcord-slicing/package.json
deleted file mode 100644
index fcea3a3..0000000
--- a/views/ngXosViews/mcord-slicing/package.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-  "name": "xos-mcord-slicing",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/",
-    "mock": "easy-mocker -c mock-cfg.json -d mocks/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.3.1",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/mcord-slicing/spec/sample.test.js b/views/ngXosViews/mcord-slicing/spec/sample.test.js
deleted file mode 100644
index 69950e7..0000000
--- a/views/ngXosViews/mcord-slicing/spec/sample.test.js
+++ /dev/null
@@ -1,53 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The MCORD Slicing Topology', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.mcord-slicing'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('api/service/mcord_slicing_ui/topology/?no_hyperlinks=1').respond([
-      {
-        email: 'matteo.scandolo@gmail.com',
-        firstname: 'Matteo',
-        lastname: 'Scandolo'
-      }
-    ]);
-
-    scope = $rootScope.$new();
-    element = angular.element('<slicing-topo></slicing-topo>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  xit('should create 1 svg', () => {
-    httpBackend.flush();
-    let svg = $(element).find('svg');
-    expect(svg.length).toBe(1);
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/src/css/dev.css b/views/ngXosViews/mcord-slicing/src/css/dev.css
deleted file mode 100644
index 7a9a2d5..0000000
--- a/views/ngXosViews/mcord-slicing/src/css/dev.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/*#xosMcord-slicing{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-}*/
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/src/css/main.css b/views/ngXosViews/mcord-slicing/src/css/main.css
deleted file mode 100644
index 684282e..0000000
--- a/views/ngXosViews/mcord-slicing/src/css/main.css
+++ /dev/null
@@ -1,86 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosMcord-slicing,
-#xosMcord-slicing > [ui-view],
-slicing-topo {
-  width: 100%;
-  height: 100%; }
-
-slicing-topo {
-  display: block; }
-
-#xosMcord-slicing {
-  /* Icons */
-  /*drag line*/
-  /*form styling*/ }
-  #xosMcord-slicing .node {
-    stroke: #337ab7;
-    fill: white; }
-  #xosMcord-slicing .node,
-  #xosMcord-slicing .node + text {
-    cursor: pointer; }
-  #xosMcord-slicing text {
-    pointer-events: none;
-    -webkit-user-select: none;
-    /* Chrome all / Safari all */
-    -moz-user-select: none;
-    /* Firefox all */
-    -ms-user-select: none;
-    /* IE 10+ */
-    user-select: none; }
-  #xosMcord-slicing .node.control {
-    stroke-dasharray: 5;
-    stroke: #d9534f; }
-  #xosMcord-slicing .node.button {
-    stroke-dasharray: 5;
-    stroke: #5bc0de;
-    fill: #daf1f8; }
-  #xosMcord-slicing .node.selected {
-    stroke-width: 5px;
-    stroke-dasharray: 5; }
-  #xosMcord-slicing .node ~ .icon {
-    stroke: #337ab7;
-    fill: #337ab7; }
-  #xosMcord-slicing .node.control ~ .icon {
-    stroke: #d9534f;
-    fill: #d9534f; }
-  #xosMcord-slicing .link {
-    stroke: #286090;
-    stroke-width: 2px;
-    cursor: pointer; }
-  #xosMcord-slicing .link.control {
-    stroke-dasharray: 5;
-    stroke: #d9534f; }
-  #xosMcord-slicing .link.selected {
-    stroke-width: 5px;
-    stroke-dasharray: 5; }
-  #xosMcord-slicing .dragline {
-    stroke-dasharray: 5;
-    stroke: #286090;
-    stroke-width: 2px; }
-  #xosMcord-slicing .dragline.hidden {
-    stroke-width: 0; }
-  #xosMcord-slicing div.element-form {
-    position: absolute;
-    border: 1px solid #5bc0de;
-    padding: 10px;
-    background: #fff; }
-  #xosMcord-slicing .form-line {
-    stroke: #31b0d5;
-    stroke-width: 1px; }
diff --git a/views/ngXosViews/mcord-slicing/src/icons/README.md b/views/ngXosViews/mcord-slicing/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/mcord-slicing/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/src/index.html b/views/ngXosViews/mcord-slicing/src/index.html
deleted file mode 100644
index 8351485..0000000
--- a/views/ngXosViews/mcord-slicing/src/index.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.mcord-slicing" id="xosMcord-slicing" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/graphlib/dist/graphlib.core.js"></script>
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<script src="vendor/angular-drag-and-drop-lists/angular-drag-and-drop-lists.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/slicing-topo.directive.js"></script>
-<script src="/.tmp/graph.service.js"></script>
-<script src="/.tmp/form.service.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/src/js/form.service.js b/views/ngXosViews/mcord-slicing/src/js/form.service.js
deleted file mode 100644
index 862ca42..0000000
--- a/views/ngXosViews/mcord-slicing/src/js/form.service.js
+++ /dev/null
@@ -1,196 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 9/29/16.
- */
-
-(function () {
-  'use strict';
-  angular.module('xos.mcord-slicing')
-  .service('FormHandler', function(LabelFormatter, XosFormHelpers){
-    const self = this;
-    const t = d3.transition()
-      .duration(500);
-
-    // draw a form nearby the node
-    this.drawForm = (node, linkGroup, formGroup) => {
-
-      // create an svg to draw a line from the node to the form
-      const line = linkGroup
-        .append('line')
-        .attr({
-          class: 'form-line',
-          id: `form-line-${node.type}-${node.id}`,
-          x1: node.x + 10,
-          y1: node.y,
-          x2: node.x + 10,
-          y2: node.y + 40,
-          opacity: 0,
-        });
-
-      line.transition(t)
-        .attr({
-          opacity: 1
-        });
-
-      // form container
-      const form = formGroup
-        .append('div')
-        .attr({
-          class: 'element-form',
-          id: `form-${node.type}-${node.id}`,
-        })
-        .style({
-          opacity: 0
-        });
-
-      const formEl = form
-        .append('form');
-
-      // cicle trough props (to be defined from rest)
-      this.addFormfields(node, formEl);
-
-      const buttonRow = formEl
-        .append('div')
-        .attr({
-          class: 'row'
-        });
-
-      buttonRow
-        .append('div')
-        .attr({
-          class: 'col-xs-6'
-        })
-        .append('a')
-        .attr({
-          class: 'btn btn-danger',
-          'data-parent-node-type': node.type,
-          'data-parent-node-id': node.id
-        })
-        .text('Close')
-        .on('click', function(){
-          self.removeForm(
-            d3.select(this).attr('data-parent-node-type'),
-            d3.select(this).attr('data-parent-node-id'),
-            linkGroup,
-            formGroup
-          );
-        });
-
-      buttonRow
-        .append('div')
-        .attr({
-          class: 'col-xs-6'
-        })
-        .append('button')
-        .attr({
-          type: 'button',
-          class: 'btn btn-success'
-        })
-        .text('Save')
-        .on('click', function(){
-          $(`#form-${node.type}-${node.id} input`).each(function(){
-            let input = $(this); // This is the jquery object of the input, do what you will
-            let val = input.val();
-            let name = input.attr('name');
-            console.log(name, val);
-          });
-        });
-
-      form.transition(t)
-        .style({
-          opacity: 1,
-          top: `${node.y + 95}px`,
-          left: `${node.x}px`
-        });
-    };
-
-    this.removeForm = (nodeType, nodeId, linkGroup, formGroup) => {
-      this.removeFormByParentNode({type: nodeType, id: nodeId}, linkGroup, formGroup);
-    };
-
-    // remove a form starting form his parent node
-    this.removeFormByParentNode = (node, linkGroup, formGroup) => {
-      // remove form
-      formGroup.selectAll(`#form-${node.type}-${node.id}`)
-        .transition(t)
-        .style({
-          opacity: 0
-        })
-        .remove();
-      // remove link
-      linkGroup.selectAll(`#form-line-${node.type}-${node.id}`)
-        .transition(t)
-        .attr({
-          opacity: 0
-        })
-        .remove();
-    };
-
-    this.getFieldValue = (val, fieldType) => {
-      if(fieldType === 'date'){
-        val = new Date(val);
-        val = `${val.getFullYear()}-${('0' + val.getMonth() + 1).slice(-2)}-${('0' + val.getDate()).slice(-2)}`
-      }
-      return val || '';
-    };
-
-    this.addFormField = (fieldName, fieldValue, formEl) => {
-      let fieldType = XosFormHelpers._getFieldFormat(fieldValue);
-      formEl
-        .append('div')
-        .attr({
-          class: 'row'
-        })
-        .append('div')
-        .attr({
-          class: 'col-xs-12'
-        })
-        .append('label')
-        .text(fieldName ? LabelFormatter.format(fieldName ) : 'test')
-        .append('input')
-        .attr({
-          type: fieldType,
-          name: fieldName,
-          value: this.getFieldValue(fieldValue, fieldType),
-          class: 'form-control'
-        });
-    };
-
-    this.addFormfields = (node, formEl) => {
-
-      this.addFormField('name', node.name, formEl);
-      // tmp check
-      if(!node.model){
-        return this.addFormField(null, null, formEl);
-      }
-
-      // create a list of fields to be printed
-      const fields = Object.keys(node.model);
-      _.forEach(fields, f => {
-        this.addFormField(f, node.model[f], formEl);
-      });
-    };
-  });
-})();
-
diff --git a/views/ngXosViews/mcord-slicing/src/js/graph.service.js b/views/ngXosViews/mcord-slicing/src/js/graph.service.js
deleted file mode 100644
index 02bf79f..0000000
--- a/views/ngXosViews/mcord-slicing/src/js/graph.service.js
+++ /dev/null
@@ -1,409 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.mcord-slicing')
-  .service('SliceGraph', function(_, NodePositioner){
-    const g = new graphlib.Graph();
-
-    /**
-    * @ngdoc method
-    * @name xos.mcord-slicing.SliceGraph#buildGraph
-    * @methodOf xos.mcord-slicing.SliceGraph
-    * @description
-    * buildGraph
-    * @param {object} data An object in the for of {nodes: [], links: []} describing the graph
-    * @returns {null}
-    **/
-    this.buildGraph = (data) => {
-      _.forEach(data.nodes, n => g.setNode(n.id, n));
-      _.forEach(data.links, n => g.setEdge(n.source, n.target, n));
-    };
-
-    this.getLinks = () => {
-      return g.edges().map(e => {
-        return {
-          source: g.node(e.v),
-          target: g.node(e.w),
-          data: g.edge(e)
-        }
-      });
-    }
-
-    this.getGraph = () => g;
-
-    // find the successor of a node
-    this.getNodeSuccessors = (node) => {
-      return _.map(g.successors(node.id), n => {
-        return g.node(n);
-      })
-    };
-
-    this.getNodePredecessors = (node) => {
-      return _.map(g.predecessors(node.id), n => {
-        return g.node(n);
-      });
-    };
-
-    // get data plane successors of a node
-    this.getNodeDataPlaneSuccessors = (node) => {
-      return _.filter(this.getNodeSuccessors(node), n => {
-        return n.plane === 'data';
-      });
-    };
-
-    // find the end of the graph toward upstream
-    this.getUpstreamSinks = (el) => {
-      const sinks =  _.reduce(g.sinks(), (sinks, node, i) => {
-        let n = g.node(node);
-        if(n.type === 'upstream'){
-          sinks.push(n);
-        }
-        return sinks;
-      }, []);
-
-      return _.map(sinks, (s, i) => {
-        s.position = {
-          top: 0,
-          bottom: el.clientHeight,
-          total: sinks.length,
-          index: i + 1
-        };
-        return s;
-      })
-    };
-
-    this.positionGraph = (el) => {
-      // get root node
-      let nodes = this.getUpstreamSinks(el);
-
-      // find children, recursively
-      let children = [];
-      _.forEach(nodes, (n, i) => {
-        children = children.concat(this.findPredecessor(n));
-      });
-      nodes = nodes.concat(children);
-
-      // calculate the position for all nodes
-      nodes = _.map(nodes, r => {
-        return NodePositioner.getDataPlaneNodePos(r, el);
-      });
-
-      return nodes;
-    };
-
-    // this iterate on all the nodes, and add position information
-    this.findPredecessor = (node) => {
-      let preds = g.predecessors(node.id);
-
-      // saving predecessor information
-      preds = preds.map((p, i) => {
-        p = g.node(p);
-        const parentAvailableSpace = (node.position.bottom - node.position.top) / node.position.total;
-        const parentY = NodePositioner.getVpos(node);
-        p.position = {
-          top: parentY - (parentAvailableSpace / 2),
-          bottom: (parentY + (parentAvailableSpace / 2)),
-          total: preds.length,
-          index: i + 1
-        };
-        return p;
-      });
-
-      //recurse
-      const predsChild = _.reduce(preds, (list, p) => {
-        return list.concat(this.findPredecessor(p));
-      }, []);
-
-      return preds.concat(predsChild);
-    };
-
-    this.getGraphLinks = (nodes) => {
-      const links = [];
-      _.forEach(nodes, n => {
-        const edges = g.inEdges(n.id);
-        _.forEach(edges, e => {
-          links.push({
-            source: g.node(e.v),
-            target: g.node(e.w),
-            data: g.edge(e)
-          });
-        });
-      });
-      return links;
-    };
-
-    this.getDataPlaneForSlice = (ranRu, sliceId) => {
-      // hardcoded, likely to be improved
-      const ranCu = g.node(g.successors(ranRu.id)[0]);
-      const sgw = g.node(g.successors(ranCu.id)[0]);
-      const pgw = g.node(g.successors(sgw.id)[0]);
-
-      // augmenting nodes with sliceId
-      ranRu.sliceId = sliceId;
-      ranCu.sliceId = sliceId;
-      sgw.sliceId = sliceId;
-      pgw.sliceId = sliceId;
-      return [ranRu, ranCu, sgw, pgw];
-    };
-
-    this.getControlPlaneForSlice = (dataPlane, sliceId) => {
-      return _.reduce(dataPlane, (cp_nodes, dp_node) => {
-        // NOTE: looks that all the time the cplane version of the node is successors number 1, we may need to check
-        let cp_node = g.node(g.successors(dp_node.id)[1]);
-
-        // position relative to their data-plane node
-        cp_node = NodePositioner.getControlPlaneNodePos(cp_node, dp_node);
-        cp_node.sliceId = sliceId;
-        // hardcoded
-        // if control plane node is a sgw, there is an MME attached
-        if(cp_node.type === 'sgw'){
-          let mme = g.node(g.successors(cp_node.id)[1]);
-          // position relative to their data-plane node
-          mme = NodePositioner.getControlPlaneNodePos(mme, cp_node);
-          mme.sliceId = sliceId;
-          cp_nodes.push(mme);
-        }
-
-        return cp_nodes.concat(cp_node);
-      }, []);
-    };
-
-    this.activeSlices = [];
-    // this.usedSlicesId = [];
-    this.getSliceDetail= (node) => {
-      if(node.sliceId && this.activeSlices.indexOf(node.sliceId) > -1){
-        // the slice is already active, return an empty set
-        return [[], []];
-      }
-
-      // let sliceId;
-      // if (node.sliceId){
-      //   sliceId = node.sliceId;
-      // }
-      // else{
-        const sliceId = _.min(this.activeSlices) ? _.min(this.activeSlices) + 1 : 1;
-      // }
-      this.activeSlices.push(sliceId);
-      // this.usedSlicesId.push(sliceId);
-
-      // getting the beginning of the slice
-      const ranRu = (function getRanRu(n) {
-        if(n.type === 'ran-ru'){
-          return n;
-        }
-        // we assume that in the slice node have only one predecessor
-        const pred = g.predecessors(n.id);
-        return getRanRu(g.node(pred[0]));
-      })(node);
-
-      // get data plane nodes for this slice (need them to get the corresponding control plane)
-      const dp_nodes = this.getDataPlaneForSlice(ranRu, sliceId);
-      // get control plane nodes for this slice
-      const cp_nodes = this.getControlPlaneForSlice(dp_nodes, sliceId);
-
-      const links = this.getGraphLinks(cp_nodes);
-
-      // add a close button
-      let closeButton = {
-        name: 'Close',
-        id: `close-button-${sliceId}`,
-        type: 'button',
-        sliceId: sliceId
-      };
-      closeButton = NodePositioner.getControlPlaneNodePos(closeButton, cp_nodes[3]);
-      cp_nodes.push(closeButton);
-
-      return [cp_nodes, links];
-    };
-
-    this.removeActiveSlice = sliceId => {
-      // nodes are remove from the d3 nodes identified by id
-      this.activeSlices.splice(this.activeSlices.indexOf(sliceId), 1);
-    };
-
-  })
-  .service('NodePositioner', function(_, sliceElOrder){
-
-    let el;
-
-    this.storeEl = (_el) => {
-      el = _el;
-    };
-
-    this.getHpos = (node, el) => {
-      let elPos = sliceElOrder.indexOf(node.type) + 1;
-
-      // hardcoded
-      if(node.type === 'mme'){
-        elPos = sliceElOrder.indexOf('sgw') + 1
-      }
-      if(node.type === 'button'){
-        elPos = sliceElOrder.indexOf('pgw') + 1
-      }
-      let x = (el.clientWidth / (sliceElOrder.length + 1)) * elPos;
-      return x;
-    };
-
-    this.getVpos = (node) => {
-      // calculate the available space to distribute items
-      const availableSpace = node.position.bottom - node.position.top;
-
-      // calculate the distance between each item
-      const step = availableSpace / (node.position.total + 1);
-
-      // vertical position
-      const y = (step * node.position.index) + node.position.top;
-      return y;
-    };
-
-    // for nodes that are part of the data plane
-    this.getDataPlaneNodePos = (node) => {
-      const x = this.getHpos(node, el);
-      const y = this.getVpos(node);
-      node.x = x;
-      node.y = y;
-      node.transform = `translate(${x}, ${y})`;
-      node.fixed = true;
-      return node;
-    };
-
-    // control element nodes are positioned relatively to their corresponding data plane node
-    this.getControlPlaneNodePos = (cp_node, dp_node) => {
-      const x = this.getHpos(cp_node, el);
-      const y = dp_node.y - 75;
-      cp_node.x = x;
-      cp_node.y = y;
-      cp_node.transform = `translate(${x}, ${y})`;
-      cp_node.fixed = true;
-      return cp_node;
-    };
-
-  })
-  .value('sliceElOrder', [
-    'ue',
-    'profile',
-    'ran-ru',
-    'ran-cu',
-    'sgw',
-    'pgw',
-    'upstream'
-  ])
-  .constant('mCordSlicingIcons', {
-    mobile: `M26.1,0c0.5,0.2,1.1,0.4,1.6,0.7C28.7,1.4,29,2.4,29,3.5c0,0.2,0,0.4,0,0.6c0,14,0,28.1,0,42.1c0,1-0.2,1.8-0.9,2.6
-  c-0.4,0.5-0.9,0.8-1.5,1c-0.2,0.1-0.3,0.1-0.5,0.2c-7.7,0-15.5,0-23.2,0c-0.5-0.2-1.1-0.4-1.5-0.7c-1-0.7-1.4-1.7-1.4-2.9
-  c0-3.8,0-7.6,0-11.4C0,24.5,0,14.1,0,3.8c0-1,0.2-1.8,0.9-2.6c0.4-0.5,0.9-0.8,1.5-1C2.6,0.1,2.7,0.1,2.9,0C10.6,0,18.4,0,26.1,0z
-   M26.7,43.7c0-12.8,0-25.6,0-38.3c-8.1,0-16.2,0-24.3,0c0,12.8,0,25.6,0,38.3C10.5,43.7,18.6,43.7,26.7,43.7z M16.2,46.6
-  c0-0.9-0.8-1.7-1.7-1.7c-0.9,0-1.7,0.8-1.7,1.7c0,0.9,0.8,1.7,1.7,1.7C15.5,48.3,16.2,47.5,16.2,46.6z M14.5,3.3c0.8,0,1.5,0,2.3,0
-  c0.4,0,0.8,0,1.2,0c0.3,0,0.4-0.1,0.5-0.4c0-0.3-0.2-0.4-0.4-0.4c-0.1,0-0.2,0-0.2,0c-2.2,0-4.4,0-6.6,0c-0.1,0-0.3,0-0.4,0.1
-  c-0.1,0.1-0.3,0.3-0.3,0.4c0,0.1,0.2,0.3,0.3,0.4c0.1,0.1,0.2,0,0.4,0C12.3,3.3,13.4,3.3,14.5,3.3z`,
-    profile: `M29,24.4c-0.6,0.2-1.2,0.3-1.8,0.5c-0.2,0-0.2,0.1-0.2,0.3c0,0.9,0.1,1.8,0,2.7c-0.1,0.8-0.7,1.4-1.6,1.4
-    c-0.8,0-1.4-0.7-1.5-1.5c0-0.4,0.1-0.9,0.1-1.3c0-4.5-3.3-8.5-7.8-9.3c-5.1-0.9-9.9,2.2-11.1,7.1C3.8,29.7,7.3,35,12.7,36
-    c0.9,0.2,1.8,0.2,2.7,0.1c0.8-0.1,1.5,0.3,1.7,1.1c0.2,0.8-0.1,1.5-0.9,1.8c-0.3,0.1-0.7,0.2-1,0.2c-0.8,0-1.5,0-2.4,0
-    c-0.2,0.6-0.3,1.3-0.5,1.9c0,0,0,0-0.1,0c-0.1,0-0.2-0.1-0.3-0.1c-0.9-0.3-1.9-0.5-2.8-0.8c0.2-0.6,0.3-1.2,0.5-1.8
-    c0.1-0.2,0-0.3-0.2-0.3c-0.4-0.2-0.8-0.4-1.2-0.6c-0.5-0.3-0.9-0.6-1.4-0.9c-0.5,0.5-0.9,1-1.4,1.4c-0.8-0.8-1.6-1.6-2.4-2.4
-    c0.5-0.5,1-0.9,1.4-1.4c-0.5-0.9-1-1.8-1.5-2.7c-0.1-0.1-0.2-0.1-0.3-0.1c-0.6,0.2-1.2,0.3-1.8,0.5c-0.1-0.5-0.2-0.9-0.4-1.4
-    C0.2,30,0,29.4-0.2,28.8c0,0,0,0,0-0.1c0.6-0.2,1.2-0.3,1.8-0.5c0.2,0,0.2-0.1,0.2-0.3c0-0.9,0-1.9,0-2.8c0-0.2,0-0.2-0.2-0.3
-    c-0.6-0.2-1.2-0.3-1.8-0.5c0,0,0,0,0-0.1c0-0.1,0.1-0.2,0.1-0.3c0.3-0.9,0.5-1.9,0.8-2.8c0.6,0.2,1.2,0.3,1.8,0.5
-    c0.2,0.1,0.3,0,0.3-0.2c0.5-0.8,1-1.6,1.4-2.5c0,0,0.1-0.1,0.1-0.2c-0.5-0.5-1-0.9-1.4-1.4c0.8-0.8,1.6-1.6,2.4-2.4
-    c0.5,0.5,0.9,1,1.3,1.4c0.9-0.5,1.8-1,2.7-1.5c0.1,0,0.1-0.2,0.1-0.3c-0.1-0.6-0.3-1.2-0.5-1.8c0.4-0.1,0.8-0.2,1.1-0.3
-    c0.7-0.2,1.4-0.4,2-0.6c0,0,0,0,0.1,0c0.2,0.6,0.3,1.2,0.5,1.8c0,0.2,0.1,0.2,0.3,0.2c0.9,0,1.9,0,2.8,0c0.2,0,0.2,0,0.3-0.2
-    c0.2-0.6,0.3-1.2,0.5-1.8c0,0,0,0,0.1,0c0.1,0,0.2,0.1,0.3,0.1c0.9,0.3,1.9,0.5,2.8,0.8c-0.2,0.6-0.3,1.2-0.5,1.8
-    c-0.1,0.2,0,0.3,0.2,0.3c0.6,0.3,1.2,0.6,1.7,0.9c0.3,0.2,0.6,0.4,0.9,0.6c0.5-0.5,1-1,1.4-1.4c0.8,0.8,1.6,1.6,2.4,2.4
-    c-0.5,0.5-1,0.9-1.4,1.4c0.5,0.9,1,1.8,1.5,2.7c0.1,0.1,0.2,0.1,0.3,0.1c0.6-0.2,1.2-0.3,1.8-0.5c0.1,0.4,0.2,0.8,0.3,1.1
-    C28.7,23,28.9,23.7,29,24.4C29,24.4,29,24.4,29,24.4z
-    M13.6,20.4c1.2-0.1,2.3-0.4,3.4,0c0.7,0.3,1.3,0.7,1.8,1.4c0.5,0.7,1.1,1.4,1.6,2.2c0.8,1.1,0.9,2.4,0.3,3.7
-    c-0.1,0.3-0.4,0.6-0.3,0.8c0,0.2,0.4,0.4,0.6,0.6c1.7,1.7,3.3,3.3,5,5c1.5,1.6,0.8,4.2-1.4,4.7c-1,0.2-1.9-0.1-2.7-0.8
-    c-1.6-1.6-3.1-3.1-4.7-4.7c-0.2-0.2-0.5-0.5-0.7-0.7c-0.1-0.2-0.3-0.2-0.5-0.1c-0.8,0.1-1.5,0.3-2.3,0.4c-1.3,0.1-2.4-0.3-3.2-1.3
-    c-0.6-0.8-1.3-1.6-1.8-2.5c-0.7-1-0.8-2.1-0.5-3.2c0.2-0.6,0.5-1.3,0.8-1.9C9,24,9.1,24,9.2,24.1c1,1.4,2.1,2.8,3.1,4.2
-    c0.4,0.5,0.6,0.6,1.2,0.4c0.5-0.2,1.1-0.3,1.6-0.5c0.4-0.1,0.7-0.3,0.9-0.7c0.3-0.5,0.7-1,1-1.5c0.3-0.4,0.3-0.7,0-1.1
-    c-1.1-1.4-2.1-2.9-3.2-4.3C13.7,20.6,13.7,20.6,13.6,20.4z`,
-    rru: `M18.4,44.2c-2.6,0-5.1,0-7.8,0c0.6-4.7,1.2-9.4,1.9-14c0.4-2.7,0.9-5.5,1.3-8.2c0.1-0.5-0.2-1.1-0.5-1.4
-    c-0.8-0.9-1-2-0.1-2.7c0.6-0.4,1.9-0.5,2.5-0.1c1,0.6,0.8,1.7,0.2,2.7c-0.4,0.6-0.6,1.5-0.5,2.2c1,7,2,13.9,3,20.9
-    C18.4,43.7,18.4,43.9,18.4,44.2z
-    M9.4,7.3c-8.5,4.5-9.5,13.8-5,19.6c1,1.2,2.3,2.3,3.6,3.2c0.9,0.6,1.3,1.2,0.5,2.1c-4.7-1.7-8.4-7-8.6-12.5
-    c-0.2-6,3.2-11.5,8.8-13.8C9,6.3,9.2,6.8,9.4,7.3z
-    M20.3,5.9c5,1.8,8.7,7.2,8.7,12.9c0,6-3.4,11.4-8.5,13.3c-0.5-0.9-0.4-1.5,0.6-2.1c8.5-5.5,8.3-16.8-0.3-22.1
-    c-0.5-0.3-0.8-1.1-1.1-1.6C19.9,6.2,20.1,6.1,20.3,5.9z
-    M9.4,28.9c-3.6-2-5.7-5-5.8-9.2C3.3,15,5.5,11.5,9.6,9.2c0.7,0.9,0.7,1.5-0.3,2.2c-5.5,4.2-5.5,11-0.2,15.4
-    c0.5,0.4,0.6,1.2,0.9,1.8C9.8,28.7,9.6,28.8,9.4,28.9z
-    M19.3,28.5c0.2-0.6,0.3-1.4,0.8-1.8c5.4-4.7,5.2-11.4-0.6-15.6c-0.1-0.1-0.3-0.2-0.5-0.4c0.1-0.5,0.3-1,0.4-1.6
-    c4,2.2,6.2,5.4,6.2,9.8c0.1,4.4-2,7.6-5.7,9.9C19.7,28.7,19.5,28.6,19.3,28.5z
-    M10.2,25.3c-4.6-3.3-4.4-10,0.9-12.4c-0.3,0.7-0.4,1.5-0.9,2.1c-2.1,2.5-2.1,5.4,0,8.1c0.4,0.5,0.4,1.3,0.6,2
-    C10.6,25.2,10.4,25.3,10.2,25.3z
-    M18.4,25c0.2-0.7,0.3-1.6,0.8-2.2c1.8-2.6,1.7-5.4-0.4-7.8c-0.8-1-0.8-1-0.2-2.3c4.6,2.9,4.8,9.1,0.4,12.4
-    C18.8,25.2,18.6,25.1,18.4,25z`,
-    rcu: `M0,35.7c0.1-0.4,0.3-0.8,0.7-0.9c0.2-0.1,0.5-0.2,0.8-0.2c2.9,0,5.8,0,8.7,0c0.1,0,0.2,0,0.4,0c0.2,0,0.2-0.1,0.2-0.2
-    c0-0.2,0-0.4,0-0.6c0.1-0.4,0.4-0.7,0.8-0.8c0.1,0,0.2,0,0.3,0c1.7,0,3.4,0,5.1,0c0.8,0,1.2,0.4,1.2,1.2c0,0.5,0,0.4,0.4,0.4
-    c2.9,0,5.8,0,8.7,0c0.9,0,1.5,0.2,1.8,1.1c0,0.2,0,0.3,0,0.5c-0.3,0.8-0.9,1.1-1.7,1.1c-2.9,0-5.8,0-8.6,0c-0.4,0-0.4,0-0.4,0.4
-    c0,0.1,0,0.1,0,0.2c0,0.6-0.4,1-1,1c-1.8,0-3.6,0-5.4,0c-0.4,0-0.7-0.1-0.8-0.5c-0.1-0.2-0.1-0.5-0.2-0.8c0-0.3,0-0.3-0.3-0.3
-    c-3,0-6,0-9,0c-0.4,0-0.7-0.1-1-0.3c-0.3-0.2-0.4-0.5-0.5-0.8C0,36,0,35.9,0,35.7z M14.5,35c-0.5,0-1,0-1.5,0c-0.1,0-0.2,0-0.2,0.2
-    c0,0.5,0,1,0,1.5c0,0.2,0,0.2,0.2,0.2c1,0,2,0,3,0c0.1,0,0.2,0,0.2-0.2c0-0.5,0-1,0-1.4c0-0.2-0.1-0.2-0.2-0.2
-    C15.5,35,15,35,14.5,35z
-    M14.5,31.4c-4,0-8.1,0-12.1,0c-0.5,0-0.9-0.1-1.2-0.5C1,30.7,1,30.4,0.9,30.2c0-0.1,0-0.2,0-0.3c0-5.7,0-11.5,0-17.2
-    c0-0.3,0.1-0.6,0.2-0.9c0.2-0.4,0.6-0.6,1-0.6c0.1,0,0.2,0,0.3,0c8.1,0,16.2,0,24.3,0c0.5,0,0.9,0.1,1.2,0.5
-    c0.1,0.2,0.2,0.4,0.3,0.7c0,0.1,0,0.2,0,0.3c0,5.8,0,11.6,0,17.3c0,0.3-0.1,0.7-0.3,1c-0.3,0.4-0.7,0.5-1.2,0.5c-2.7,0-5.4,0-8.2,0
-    C17.2,31.4,15.9,31.4,14.5,31.4z M4.4,20.6c6.8,0,13.5,0,20.3,0c0-0.1,0-0.2,0-0.2c0-1.6,0-3.3,0-4.9c0-0.2-0.1-0.3-0.3-0.3
-    c-6.6,0-13.1,0-19.7,0c-0.2,0-0.3,0.1-0.3,0.3c0,1.6,0,3.2,0,4.9C4.4,20.5,4.4,20.5,4.4,20.6z M4.4,27.3c6.8,0,13.5,0,20.2,0
-    c0-1.8,0-3.6,0-5.4c-6.8,0-13.5,0-20.2,0C4.4,23.7,4.4,25.5,4.4,27.3z
-    M23.3,16.6c0,0.1,0,0.2,0,0.2c0,0.7,0,1.5,0,2.2c0,0.2-0.1,0.3-0.3,0.3c-3.3,0-6.7,0-10,0c-2.3,0-4.7,0-7,0
-    c-0.2,0-0.3,0-0.3-0.3c0-0.7,0-1.5,0-2.2c0-0.1,0-0.2,0-0.2C11.6,16.6,17.4,16.6,23.3,16.6z M7.7,18.6c0-0.4,0-0.8,0-1.2
-    c0,0-0.1-0.1-0.1-0.1c-0.4,0-0.8,0-1.2,0c0,0.5,0,0.9,0,1.3C6.9,18.6,7.3,18.6,7.7,18.6z M8.4,17.3c0,0.5,0,0.9,0,1.3
-    c0.4,0,0.9,0,1.3,0c0-0.4,0-0.8,0-1.2c0,0-0.1-0.1-0.1-0.1C9.2,17.3,8.8,17.3,8.4,17.3z M10.4,18.6c0.5,0,0.9,0,1.3,0
-    c0-0.4,0-0.9,0-1.3c-0.4,0-0.8,0-1.2,0c0,0-0.1,0.1-0.1,0.1C10.4,17.8,10.4,18.2,10.4,18.6z
-    M14.5,23.2c2.8,0,5.7,0,8.5,0c0.3,0,0.3,0,0.3,0.3c0,0.7,0,1.4,0,2.1c0,0.2-0.1,0.3-0.3,0.3c-4.6,0-9.2,0-13.7,0
-    c-1.1,0-2.2,0-3.3,0c-0.2,0-0.3-0.1-0.3-0.3c0-0.7,0-1.5,0-2.2c0-0.2,0.1-0.3,0.3-0.3C8.8,23.2,11.7,23.2,14.5,23.2z M6.4,25.2
-    c0.4,0,0.8,0,1.2,0c0.1,0,0.1-0.1,0.1-0.1c0-0.3,0-0.7,0-1c0,0-0.1-0.1-0.1-0.1c-0.4,0-0.8,0-1.2,0C6.4,24.4,6.4,24.8,6.4,25.2z
-     M8.4,25.2c0.4,0,0.8,0,1.2,0c0,0,0.1-0.1,0.1-0.2c0-0.2,0-0.5,0-0.7c0-0.5,0.1-0.4-0.4-0.4c-0.3,0-0.6,0-0.9,0
-    C8.4,24.4,8.4,24.8,8.4,25.2z M11.7,23.9c-0.4,0-0.8,0-1.2,0c0,0-0.1,0.1-0.1,0.1c0,0.4,0,0.8,0,1.2c0.5,0,0.9,0,1.3,0
-    C11.7,24.8,11.7,24.4,11.7,23.9z`,
-    sgw: `M24.2,11.6c0.5,0.2,0.7,0.6,0.9,1.1c1.3,4.8,2.6,9.5,3.9,14.3c0,0.2,0.1,0.3,0.1,0.5c0,1.8,0,3.6,0,5.4
-    c0,0.9-0.4,1.4-1.4,1.4c-4.1,0-8.1,0-12.2,0c-0.1,0-0.2,0-0.4,0c0,1,0,1.9,0,2.9c0.1,0,0.2,0,0.4,0c3.1,0,6.1,0,9.2,0
-    c0.1,0,0.2,0,0.4,0c0.3,0,0.5,0.3,0.5,0.5c0,0.3-0.2,0.5-0.5,0.6c-0.1,0-0.2,0-0.3,0c-6.8,0-13.7,0-20.5,0c-0.5,0-0.8-0.2-0.8-0.6
-    c0-0.4,0.3-0.6,0.8-0.6c3.1,0,6.2,0,9.3,0c0.1,0,0.2,0,0.4,0c0-1,0-1.9,0-2.9c-0.1,0-0.2,0-0.4,0c-4,0-8.1,0-12.1,0
-    c-0.7,0-1.2-0.2-1.5-0.9c0-2.1,0-4.2,0-6.2c0.1-0.2,0.1-0.3,0.2-0.5C1.4,22,2.7,17.4,4,12.7c0.1-0.5,0.4-0.9,0.9-1.1
-    C11.3,11.6,17.7,11.6,24.2,11.6z M23.9,12.8c-6.2,0-12.5,0-18.7,0C4,17.3,2.7,21.7,1.5,26.1c8.7,0,17.3,0,26,0
-    C26.3,21.7,25.1,17.2,23.9,12.8z M1.2,27.3c0,2,0,3.9,0,5.8c8.9,0,17.8,0,26.7,0c0-1.9,0-3.9,0-5.8C19,27.3,10.1,27.3,1.2,27.3z
-    M12.7,21.1c0.1,0.4,0.2,0.7,0.3,0.8c0.3,0.3,0.8,0.5,1.5,0.5c0.4,0,0.8,0,1-0.1c0.5-0.2,0.7-0.5,0.7-1
-      c0-0.3-0.1-0.5-0.4-0.6c-0.2-0.1-0.6-0.3-1.1-0.4l-0.9-0.2c-0.9-0.2-1.5-0.4-1.8-0.6c-0.6-0.4-0.8-1-0.8-1.8
-      c0-0.7,0.3-1.4,0.8-1.8c0.5-0.5,1.3-0.7,2.4-0.7c0.9,0,1.6,0.2,2.3,0.7c0.6,0.5,0.9,1.1,1,2H16c0-0.5-0.3-0.8-0.7-1.1
-      c-0.3-0.1-0.6-0.2-1-0.2c-0.5,0-0.8,0.1-1.1,0.3c-0.3,0.2-0.4,0.4-0.4,0.8c0,0.3,0.1,0.5,0.4,0.7c0.2,0.1,0.5,0.2,1.1,0.3l1.4,0.3
-      c0.6,0.1,1.1,0.3,1.4,0.6c0.5,0.4,0.7,1,0.7,1.7c0,0.8-0.3,1.4-0.9,1.9c-0.6,0.5-1.4,0.7-2.5,0.7c-1.1,0-1.9-0.2-2.6-0.7
-      c-0.6-0.5-0.9-1.2-0.9-2H12.7z`,
-    pgw: `M24.2,11.6c0.5,0.2,0.7,0.6,0.9,1.1c1.3,4.8,2.6,9.5,3.9,14.3c0,0.2,0.1,0.3,0.1,0.5c0,1.8,0,3.6,0,5.4
-    c0,0.9-0.4,1.4-1.4,1.4c-4.1,0-8.1,0-12.2,0c-0.1,0-0.2,0-0.4,0c0,1,0,1.9,0,2.9c0.1,0,0.2,0,0.4,0c3.1,0,6.1,0,9.2,0
-    c0.1,0,0.2,0,0.4,0c0.3,0,0.5,0.3,0.5,0.5c0,0.3-0.2,0.5-0.5,0.6c-0.1,0-0.2,0-0.3,0c-6.8,0-13.7,0-20.5,0c-0.5,0-0.8-0.2-0.8-0.6
-    c0-0.4,0.3-0.6,0.8-0.6c3.1,0,6.2,0,9.3,0c0.1,0,0.2,0,0.4,0c0-1,0-1.9,0-2.9c-0.1,0-0.2,0-0.4,0c-4,0-8.1,0-12.1,0
-    c-0.7,0-1.2-0.2-1.5-0.9c0-2.1,0-4.2,0-6.2c0.1-0.2,0.1-0.3,0.2-0.5C1.4,22,2.7,17.4,4,12.7c0.1-0.5,0.4-0.9,0.9-1.1
-    C11.3,11.6,17.7,11.6,24.2,11.6z M23.9,12.8c-6.2,0-12.5,0-18.7,0C4,17.3,2.7,21.7,1.5,26.1c8.7,0,17.3,0,26,0
-    C26.3,21.7,25.1,17.2,23.9,12.8z M1.2,27.3c0,2,0,3.9,0,5.8c8.9,0,17.8,0,26.7,0c0-1.9,0-3.9,0-5.8C19,27.3,10.1,27.3,1.2,27.3zM17,20.1c-0.5,0.4-1.2,0.6-2.2,0.6H13v3.1h-1.8v-8.7H15c0.9,0,1.5,0.2,2.1,0.7c0.5,0.4,0.8,1.1,0.8,2.1
-      C17.8,18.9,17.6,19.6,17,20.1z M15.7,16.9c-0.2-0.2-0.6-0.3-1-0.3H13v2.6h1.6c0.4,0,0.7-0.1,1-0.3c0.2-0.2,0.3-0.5,0.3-1
-      C16,17.4,15.9,17.1,15.7,16.9z`,
-    mme: `M7.9,37.9C8.5,37,9,36.1,9.5,35.2c0.6,0.2,1.2,0.5,1.8,0.6c6.4,1.9,13-2,14.4-8.6c1.3-6.2-2.9-12.4-9.2-13.4
-    c-3.7-0.6-6.9,0.4-9.7,2.8c-0.1,0.1-0.1,0.1-0.2,0.2c0,0,0,0.1-0.1,0.1c0.8,0.8,1.6,1.6,2.5,2.5C5.9,20,3,20.5,0,21.1
-    c0.5-3,1.1-5.9,1.6-8.9c0.8,0.8,1.6,1.7,2.5,2.5c1.2-1.1,2.4-2,3.8-2.6c5.3-2.4,10.5-2.2,15.3,1.3c3.5,2.5,5.4,6,5.8,10.4
-    c0.6,6.8-3.6,13.1-10.2,15.1C15.2,40,11.6,39.7,8.2,38C8.1,38,8,37.9,7.9,37.9z
-    M21.8,27.9c-3.1,0-6.1,0-9.2,0c0-3.3,0-6.6,0-10c0.9,0,1.9,0,2.8,0c0,2.4,0,4.7,0,7.1c2.1,0,4.2,0,6.4,0
-    C21.8,26,21.8,26.9,21.8,27.9z
-    M3.5,34.4c0.9-0.6,1.7-1.2,2.6-1.8c0.5,0.5,1.1,1,1.6,1.5c-0.5,0.9-1,1.8-1.6,2.7C5.1,36.1,4.3,35.3,3.5,34.4z
-    M0.8,29.7c1.1-0.3,2.1-0.5,3.1-0.8c0.3,0.7,0.6,1.3,1,2c-0.8,0.6-1.7,1.2-2.6,1.9C1.7,31.7,1.2,30.7,0.8,29.7z
-    M3.2,24.7c0.1,0.7,0.1,1.4,0.2,2.1c-1,0.3-2,0.5-3.1,0.8c-0.1-1-0.2-1.9-0.2-2.9C1.1,24.7,2.2,24.7,3.2,24.7z`
-  });
-})();
diff --git a/views/ngXosViews/mcord-slicing/src/js/main.js b/views/ngXosViews/mcord-slicing/src/js/main.js
deleted file mode 100644
index 4b0f37d..0000000
--- a/views/ngXosViews/mcord-slicing/src/js/main.js
+++ /dev/null
@@ -1,111 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.mcord-slicing', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('slicing-topo', {
-    url: '/',
-    template: '<slicing-topo></slicing-topo>'
-  })
-  .state('node-links', {
-    url: '/data',
-    template: '<node-links></node-links>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.service('McordSlicingTopo', function($http, $q){
-  this.query = () => {
-    const d = $q.defer();
-
-    $http.get('api/service/mcord_slicing_ui/topology/')
-    .then((res) => {
-      let data;
-      if (res.data.hasOwnProperty('nodes')){
-        data = res.data;
-      }
-      else {
-        // INVESTIGATE why proxy change resposne
-        data = {
-          nodes: res.data[0],
-          links: res.data[1]
-        };
-      }
-      d.resolve(data);
-    })
-    .catch((e) => {
-      d.reject(e);
-    });
-
-    return {$promise: d.promise};
-  };
-})
-.directive('nodeLinks', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/node-links.tpl.html',
-    controller: function(McordSlicingTopo){
-
-      this.tableConfig = {
-        columns: [
-          {
-            label: 'Id',
-            prop: 'id'
-          },
-          {
-            label: 'Name',
-            prop: 'name'
-          },
-          {
-            label: 'Type',
-            prop: 'type'
-          },
-          {
-            label: 'Plane',
-            prop: 'plane'
-          },
-          {
-            label: 'Model Id',
-            prop: 'model_id'
-          }
-        ]
-      };
-      
-      // retrieving user list
-      McordSlicingTopo.query().$promise
-      .then((users) => {
-        this.users = users.nodes;
-      })
-      .catch((e) => {
-        throw new Error(e);
-      });
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/src/js/slicing-topo.directive.js b/views/ngXosViews/mcord-slicing/src/js/slicing-topo.directive.js
deleted file mode 100644
index 07f85ca..0000000
--- a/views/ngXosViews/mcord-slicing/src/js/slicing-topo.directive.js
+++ /dev/null
@@ -1,586 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.mcord-slicing')
-  .directive('slicingTopo', function(){
-    return {
-      restrict: 'E',
-      scope: {},
-      bindToController: true,
-      controllerAs: 'vm',
-      templateUrl: 'templates/slicing-topo.tpl.html',
-      controller: function($element, SliceGraph, McordSlicingTopo, _, NodePositioner, FormHandler, mCordSlicingIcons){
-
-        let svg;
-        let nodes, links;
-        let nodeGroup, linkGroup, formGroup;
-        let dragLine, dragStartNode, dragEndNode, selectedLink;
-        let selectedNode, nodeSiblings;
-
-        var t = d3.transition()
-          .duration(500);
-
-        this.activeSlices = [];
-
-        const resetDragInfo = () => {
-          // reset drag nodes
-          dragStartNode = null;
-          dragEndNode = null;
-
-          // hide dragLine
-          dragLine
-            .classed('hidden', true);
-        };
-
-        McordSlicingTopo.query().$promise
-        .then((topology) => {
-          NodePositioner.storeEl($element[0]);
-          handleSvg($element[0]);
-          SliceGraph.buildGraph(topology);
-          _nodes = SliceGraph.positionGraph($element[0]);
-          _links = SliceGraph.getGraphLinks(_nodes);
-          drawGraph();
-        })
-        .catch((e) => {
-          throw new Error(e);
-        });
-
-        const handleSvg = (el) => {
-          this.el = el;
-          d3.select(el).select('svg').remove();
-
-          svg = d3.select(el)
-          .append('svg')
-          .style('width', `${el.clientWidth}px`)
-          .style('height', `${el.clientHeight}px`);
-
-          linkGroup = svg.append('g')
-            .attr({
-              class: 'link-group'
-            });
-
-          nodeGroup = svg.append('g')
-            .attr({
-              class: 'node-group'
-            });
-
-          formGroup = d3.select(el)
-            .append('div')
-            .attr({
-              class: 'form-container'
-            });
-
-          // line displayed when dragging nodes
-          dragLine = svg.append('svg:path')
-            .attr('class', 'dragline hidden')
-            .attr('d', 'M0,0L0,0');
-        };
-
-        const tick = () => {
-
-          // svg.selectAll('.node')
-          // .attr({
-          //   y: (n) => {
-          //     console.log(n.y);
-          //     return n.y;
-          //   }
-          // });
-
-          svg.selectAll('.link')
-            .attr('x1', d => d.source.x)
-            .attr('y1', d => d.source.y)
-            .attr('x2', d => d.target.x)
-            .attr('y2', d => d.target.y);
-        };
-
-        // prepare the data to show all slices
-        let _nodes = [];
-        let _links = [];
-
-        // attach slice details
-        const attachSliceDetails = n => {
-          let [newNodes, newLinks] = SliceGraph.getSliceDetail(n);
-          _nodes = _nodes.concat(newNodes);
-          _links = _links.concat(newLinks);
-          drawGraph();
-        };
-
-        // remove slice detail
-        const removeSliceDetails = sliceId => {
-
-          SliceGraph.removeActiveSlice(sliceId);
-
-          // if the selected node is part of the slice I'm closing
-          // deselect the node
-          if(selectedNode && selectedNode.sliceId === sliceId){
-            selectedNode = null;
-            nodeSiblings = null;
-          }
-
-          // remove control plane nodes related to this slice
-          _nodes = _.filter(_nodes, n => {
-            if(n.sliceId === sliceId && (n.plane === 'control' || n.type === 'button')){
-              // if I remove the node check that there is no form attached
-              FormHandler.removeFormByParentNode(n, linkGroup, formGroup);
-              return false;
-            }
-            return true;
-          });
-
-          // remove sliceId from data plane element
-          _nodes = _.map(_nodes, n => {
-            if(n.sliceId === sliceId){
-              delete n.sliceId;
-            }
-            return n;
-          });
-
-          // remove control plane links related to this slice
-          _links = _.filter(_links, l => {
-            if(_.findIndex(_nodes, {id: l.data.source}) === -1){
-              return false;
-            }
-            if(_.findIndex(_nodes, {id: l.data.target}) === -1){
-              return false;
-            }
-            return true;
-          });
-          drawGraph();
-        };
-
-        const deleteLink = linkId => {
-          // TODO
-          // [ ] delete from graphlib
-          // [ ] delete from backend
-          console.log(_links);
-          _.remove(_links, (l) => {
-            return l.data.id === linkId;
-          });
-          console.log(_links);
-          drawGraph();
-        };
-
-        const expandNode = (n) => {
-          console.log('exp', n);
-          resetDragInfo();
-          const sliceComponents = ['ran-ru', 'ran-cu', 'pgw', 'sgw'];
-          if(sliceComponents.indexOf(n.type) > -1 && n.plane === 'data' && !n.sliceId){
-            attachSliceDetails(n);
-          }
-          else if (n.type === 'button'){
-            removeSliceDetails(n.sliceId);
-          }
-          else if (!n.formAttached && n.model){
-            n.formAttached = true;
-            FormHandler.drawForm(n, linkGroup, formGroup);
-          }
-          else if (n.formAttached){
-            n.formAttached = false;
-            FormHandler.removeFormByParentNode(n, linkGroup, formGroup);
-          }
-        };
-
-        const selectNextNode = () => {
-          if(!selectedNode){
-            selectedNode = _nodes[0];
-            selectedNode.selected = true;
-          }
-          else {
-            // TODO if no sliceId check only data plane successors
-            nodeSiblings = SliceGraph.getNodeSuccessors(selectedNode);
-
-            if(nodeSiblings.length === 0){
-              return;
-            };
-            // reset current selected node
-            selectedNode.selected = false;
-            // find next node
-            let nextNodeId = _.findIndex(_nodes, {id: nodeSiblings[0].id});
-            selectedNode = _nodes[nextNodeId];
-            selectedNode.selected = true;
-
-            // NOTE I need to update sibling with successor of the parent
-            // to enable vertical navigation
-            let parents = SliceGraph.getNodeSuccessors(selectedNode);
-            if(parents.lenght > 0){
-              nodeSiblings = SliceGraph.getNodePredecessors(parents[0]);
-            }
-            else {
-              nodeSiblings = null;
-            }
-          }
-          drawGraph();
-        };
-
-        const selectPrevNode = () => {
-          if(!selectedNode){
-            selectedNode = _nodes[0];
-            selectedNode.selected = true;
-          }
-          else {
-            nodeSiblings = SliceGraph.getNodePredecessors(selectedNode);
-
-            if(nodeSiblings.length === 0){
-              return;
-            };
-            // reset current selected node
-            selectedNode.selected = false;
-            // find next node
-            let prev = _.findIndex(_nodes, {id: nodeSiblings[0].id});
-
-            if(prev < 0){
-              prev = _nodes.length - 1;
-            }
-            selectedNode = _nodes[prev];
-            selectedNode.selected = true;
-          }
-          drawGraph();
-        };
-
-        const sortByY = (a, b) => {
-          if (a.y < b.y)
-            return 1;
-          if (a.y > b.y)
-            return -1;
-          return 0;
-        };
-
-        const getSameTypeNodes = (selectedNode) => {
-          return _.filter(_nodes, n => {
-            if(selectedNode.type === 'pgw' && n.type === 'button'){
-              return true;
-            }
-            if(selectedNode.type === 'button' && n.type === 'pgw'){
-              return true;
-            }
-            if (selectedNode.type === 'sgw' && n.type === 'mme'){
-              return true;
-            }
-            if (selectedNode.type === 'mme' && n.type === 'sgw'){
-              return true;
-            }
-            return n.type === selectedNode.type;
-          }).sort(sortByY);
-        };
-
-        const selectNextSibling = () => {
-          if(!selectedNode){
-            selectedNode = _nodes[0];
-            selectedNode.selected = true;
-          }
-          else {
-            // reset current selected node
-            selectedNode.selected = false;
-
-            // find next node
-            let sameTypeNodes = getSameTypeNodes(selectedNode);
-
-            let nextSiblingId = _.findIndex(sameTypeNodes, {id: selectedNode.id}) + 1;
-            if(nextSiblingId === sameTypeNodes.length){
-              nextSiblingId = 0;
-            }
-            let nextNodeId = _.findIndex(_nodes, {id: sameTypeNodes[nextSiblingId].id});
-            selectedNode = _nodes[nextNodeId];
-            selectedNode.selected = true;
-          }
-          drawGraph();
-        };
-
-        const selectPrevSibling = () => {
-          if(!selectedNode){
-            selectedNode = _nodes[0];
-            selectedNode.selected = true;
-          }
-          else {
-            // reset current selected node
-            selectedNode.selected = false;
-
-            // find next node
-            let sameTypeNodes = getSameTypeNodes(selectedNode);
-
-            let nextSiblingId = _.findIndex(sameTypeNodes, {id: selectedNode.id}) - 1;
-            if(nextSiblingId < 0){
-              nextSiblingId = sameTypeNodes.length - 1;
-            }
-            let nextNodeId = _.findIndex(_nodes, {id: sameTypeNodes[nextSiblingId].id});
-            selectedNode = _nodes[nextNodeId];
-            selectedNode.selected = true;
-          }
-          drawGraph();
-        };
-
-        const drawGraph = () => {
-
-          // svg.selectAll('.node-container').remove();
-          // svg.selectAll('.link-container').remove();
-
-          var force = d3.layout.force()
-            .nodes(_nodes)
-            .links(_links)
-            .charge(-1060)
-            .gravity(0.1)
-            .linkDistance(200)
-            .size([this.el.clientWidth, this.el.clientHeight])
-            .on('tick', tick)
-            .start();
-
-          links = linkGroup.selectAll('.link-container')
-            .data(_links, d => d.data.id)
-            .enter()
-            .insert('g')
-            .attr({
-              class: 'link-container',
-              opacity: 0
-            });
-
-          links
-            .transition(t)
-            .attr({
-              opacity: 1
-            });
-
-          links.insert('line')
-            .attr('class', d => `link ${d.data.plane}`)
-            .on('click', function(link ){
-              selectedLink = link;
-
-              // deselect all other links
-              d3.selectAll('.link').classed('selected', false);
-
-              d3.select(this).classed('selected', true);
-            });
-
-          nodes = nodeGroup.selectAll('.node')
-            .data(_nodes, d => d.id)
-            .attr({
-              class: d => `node ${d.plane} ${d.type} ${d.selected ? 'selected': ''}`,
-            });
-
-          nodes
-            .enter()
-            .append('g')
-            .attr({
-              class: 'node-container',
-              transform: d => d.transform,
-              opacity: 0
-            });
-
-          nodes.transition(t)
-            .attr({
-              opacity: 1
-            });
-
-          nodes.append('rect')
-            .attr({
-              class: d => `node ${d.plane} ${d.type} ${d.selected ? 'selected': ''}`,
-              width: 100,
-              height: 50,
-              x: -50,
-              y: -25
-            });
-
-          nodes.append('text')
-            .attr({
-              'text-anchor': 'left',
-              'alignment-baseline': 'middle',
-              x: -20
-            })
-            .text(d => `${d.name}`);
-
-          nodes.on('click', (n) => {
-            expandNode(n);
-          });
-
-          // draw icons
-          const ues = nodes.filter(n => n.type === 'ue');
-          ues.append('path')
-          .attr({
-            d: mCordSlicingIcons.mobile,
-            class: 'icon',
-            transform: `translate(-40, -12.5), scale(0.5)`
-          });
-
-          const profiles = nodes.filter(n => n.type === 'profile');
-          profiles.append('path')
-          .attr({
-            d: mCordSlicingIcons.profile,
-            class: 'icon',
-            transform: `translate(-40, -12.5), scale(0.5)`
-          });
-
-          const rru = nodes.filter(n => n.type === 'ran-ru');
-          rru.append('path')
-          .attr({
-            d: mCordSlicingIcons.rru,
-            class: 'icon',
-            transform: `translate(-40, -12.5), scale(0.5)`
-          });
-
-          const rcu = nodes.filter(n => n.type === 'ran-cu');
-          rcu.append('path')
-          .attr({
-            d: mCordSlicingIcons.rcu,
-            class: 'icon',
-            transform: `translate(-40, -12.5), scale(0.5)`
-          });
-
-          const sgw = nodes.filter(n => n.type === 'sgw');
-          sgw.append('path')
-          .attr({
-            d: mCordSlicingIcons.sgw,
-            class: 'icon',
-            transform: `translate(-40, -12.5), scale(0.5)`
-          });
-
-          const pgw = nodes.filter(n => n.type === 'pgw');
-          pgw.append('path')
-          .attr({
-            d: mCordSlicingIcons.pgw,
-            class: 'icon',
-            transform: `translate(-40, -12.5), scale(0.5)`
-          });
-
-          const mme = nodes.filter(n => n.type === 'mme');
-          mme.append('path')
-          .attr({
-            d: mCordSlicingIcons.mme,
-            class: 'icon',
-            transform: `translate(-40, -12.5), scale(0.5)`
-          });
-
-          nodes
-            .on('mousedown', (n) => {
-              // save a reference to dragStart
-              dragStartNode = n;
-
-              dragLine
-                .classed('hidden', false)
-                .attr('d', 'M' + dragStartNode.x + ',' + dragStartNode.y + 'L' + dragStartNode.x + ',' + dragStartNode.y);
-            })
-            .on('mouseover', (n) => {
-              if(dragStartNode){
-                dragEndNode = n;
-              }
-            });
-
-          svg
-            .on('mousemove', function(){
-              if(!dragStartNode){
-                return;
-              }
-              dragLine.attr('d', 'M' + dragStartNode.x + ',' + dragStartNode.y + 'L' + d3.mouse(this)[0] + ',' + d3.mouse(this)[1]);
-            })
-            .on('mouseup', () => {
-              if(!dragStartNode || !dragEndNode){
-                resetDragInfo();
-                return;
-              }
-
-              // TODO
-              // [X] check that I can connect the two nodes
-              // [X] check link direction
-              // [ ] save the new link in the BE
-
-              // check that I can connect the 2 nodes
-              const successorType = SliceGraph.getNodeDataPlaneSuccessors(dragStartNode)[0].type;
-              if(dragEndNode.type !== successorType){
-                resetDragInfo();
-                return;
-              }
-
-              // create the link
-              _links.push({
-                source: dragStartNode,
-                target: dragEndNode,
-                data: {
-                  id: `${dragStartNode.id}.${dragEndNode.id}`,
-                  source: dragStartNode.id,
-                  target: dragEndNode.id
-                }
-              });
-
-              // update the graph
-              // TODO recalculate graph positions
-              drawGraph();
-
-              resetDragInfo();
-            });
-
-          // remove exiting nodes
-          svg.selectAll('.node-container')
-            .data(_nodes, d => d.id)
-            .exit()
-            .transition(t)
-            .attr({
-              opacity: 0
-            })
-            .remove();
-
-          // remove exiting links
-          svg.selectAll('.link-container')
-            .data(_links, d => d.data.id)
-            .exit()
-            .transition(t)
-            .attr({
-              opacity: 0
-            })
-            .remove();
-        };
-
-        d3.select('body')
-          .on('keydown', function(){
-            // console.log(d3.event.code);
-            if(d3.event.code === 'Backspace' && selectedLink){
-              // delete link
-              deleteLink(selectedLink.data.id);
-            }
-            if(d3.event.code === 'Enter' && selectedNode){
-              d3.event.preventDefault();
-              expandNode(selectedNode);
-            }
-            if(d3.event.code === 'Escape' && selectedNode){
-              selectedNode.selected = false;
-              selectedNode = null;
-              nodeSiblings = null;
-              drawGraph();
-            }
-            if(d3.event.code === 'ArrowRight'){
-              d3.event.preventDefault();
-              selectNextNode();
-            }
-            if(d3.event.code === 'ArrowLeft'){
-              d3.event.preventDefault();
-              selectPrevNode();
-            }
-            if(d3.event.code === 'ArrowUp'){
-              d3.event.preventDefault();
-              selectNextSibling();
-            }
-            if(d3.event.code === 'ArrowDown'){
-              d3.event.preventDefault();
-              selectPrevSibling();
-            }
-
-          });
-      }
-    }
-  });
-})();
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/src/sass/main.scss b/views/ngXosViews/mcord-slicing/src/sass/main.scss
deleted file mode 100644
index 573bf46..0000000
--- a/views/ngXosViews/mcord-slicing/src/sass/main.scss
+++ /dev/null
@@ -1,117 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xosMcord-slicing,
-#xosMcord-slicing > [ui-view],
-slicing-topo {
-  width: 100%;
-  height: 100%;
-}
-
-slicing-topo {
-  display: block;
-}
-
-#xosMcord-slicing {
-  .node {
-    stroke: $brand-primary;
-    fill: white;
-  }
-
-  .node,
-  .node + text {
-    cursor: pointer;
-  }
-
-  text {
-    pointer-events: none;
-    -webkit-user-select: none;  /* Chrome all / Safari all */
-    -moz-user-select: none;     /* Firefox all */
-    -ms-user-select: none;      /* IE 10+ */
-    user-select: none;
-  }
-
-  .node.control {
-    stroke-dasharray: 5;
-    stroke: $brand-danger;
-  }
-
-  .node.button {
-    stroke-dasharray: 5;
-    stroke: $brand-info;
-    fill: lighten($brand-info, 30)
-  }
-
-  .node.selected{
-    stroke-width: 5px;
-    stroke-dasharray: 5;
-  }
-
-  /* Icons */
-  .node ~ .icon {
-    stroke: $brand-primary;
-    fill: $brand-primary;
-  }
-
-  .node.control ~ .icon {
-    stroke: $brand-danger;
-    fill: $brand-danger;
-  }
-
-  .link {
-    stroke: darken($brand-primary, 10);
-    stroke-width: 2px;
-    cursor: pointer;
-  }
-
-  .link.control {
-    stroke-dasharray: 5;
-    stroke: $brand-danger;
-  }
-
-  .link.selected {
-    stroke-width: 5px;
-    stroke-dasharray: 5;
-  }
-
-  /*drag line*/
-  .dragline {
-    stroke-dasharray: 5;
-    stroke: darken($brand-primary, 10);
-    stroke-width: 2px;
-  }
-
-  .dragline.hidden {
-    stroke-width: 0;
-  }
-
-  /*form styling*/
-  div.element-form {
-    position: absolute;
-    border: 1px solid $brand-info;
-    padding: 10px;
-    background: #fff;
-  }
-
-  .form-line {
-    stroke: darken($brand-info, 10);
-    stroke-width: 1px;
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/src/templates/node-links.tpl.html b/views/ngXosViews/mcord-slicing/src/templates/node-links.tpl.html
deleted file mode 100644
index c5333cb..0000000
--- a/views/ngXosViews/mcord-slicing/src/templates/node-links.tpl.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row">
-  <div class="col-sm-12">
-    <xos-table config="vm.tableConfig" data="vm.users"></xos-table>
-  </div>
-  <div class="col-sm-12"></div>
-</div>
\ No newline at end of file
diff --git a/views/ngXosViews/mcord-slicing/src/templates/slicing-topo.tpl.html b/views/ngXosViews/mcord-slicing/src/templates/slicing-topo.tpl.html
deleted file mode 100644
index 28cbf46..0000000
--- a/views/ngXosViews/mcord-slicing/src/templates/slicing-topo.tpl.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
diff --git a/views/ngXosViews/mcordTopology/.bowerrc b/views/ngXosViews/mcordTopology/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/mcordTopology/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/.eslintrc b/views/ngXosViews/mcordTopology/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/mcordTopology/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/.gitignore b/views/ngXosViews/mcordTopology/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/mcordTopology/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/bower.json b/views/ngXosViews/mcordTopology/bower.json
deleted file mode 100644
index c647403..0000000
--- a/views/ngXosViews/mcordTopology/bower.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "xos-mcordTopology",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The mcordTopology view",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/mcordTopology/gulp/build.js b/views/ngXosViews/mcordTopology/gulp/build.js
deleted file mode 100644
index 6a5057e..0000000
--- a/views/ngXosViews/mcordTopology/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.mcordTopology')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosMcordTopology.html',
-        options.static + 'css/xosMcordTopology.css',
-        options.static + 'images/mcordTopology-icon.png',
-        options.static + 'images/mcordTopology-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosMcordTopology.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/mcordTopology-icon.png`, `${options.icon}/mcordTopology-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosMcordTopology.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.mcordTopology',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosMcordTopologyVendor.js',
-            options.static + 'js/xosMcordTopology.js',
-            options.static + 'css/xosMcordTopology.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosMcordTopology.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosMcordTopologyVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['McordTopology'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosMcordTopology'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/mcordTopology-icon.png`) &&
-      fs.existsSync(`${options.icon}/mcordTopology-icon-active.png`)
-    ){
-      dashboardJson['McordTopology'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['mcordTopology_dashboard'] = {
-      node: 'McordTopology',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/gulp/server.js b/views/ngXosViews/mcordTopology/gulp/server.js
deleted file mode 100644
index d31c115..0000000
--- a/views/ngXosViews/mcordTopology/gulp/server.js
+++ /dev/null
@@ -1,191 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else if(req.url.indexOf('/videoLocal.txt') !== -1){
-            let a = (Math.random() * 10).toString();
-            res.end(a)
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/mcordTopology/gulpfile.js b/views/ngXosViews/mcordTopology/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/mcordTopology/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/mcordTopology/karma.conf.js b/views/ngXosViews/mcordTopology/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/mcordTopology/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/mcordTopology/mocks/data/instances.json b/views/ngXosViews/mcordTopology/mocks/data/instances.json
deleted file mode 100644
index 0f86876..0000000
--- a/views/ngXosViews/mcordTopology/mocks/data/instances.json
+++ /dev/null
@@ -1,29 +0,0 @@
-[
-  {
-    "id": 1,
-    "humanReadableName": "BBU_service_instance-1",
-    "instance_id": "instance-00000001", 
-    "instance_uuid": "42b75cb7-7205-4a68-9100-b2c1e3ea69b5", 
-    "name": "BBU_service_instance-1", 
-    "instance_name": "mysite_BBU-1", 
-    "ip": "130.127.133.91"
-  },
-  {
-    "id": 2,
-    "humanReadableName": "BBU_service_instance-2",
-    "instance_id": "instance-00000002", 
-    "instance_uuid": "42b75cb7-7205-4a68-9200-b2c2e3ea69b5", 
-    "name": "BBU_service_instance-2", 
-    "instance_name": "mysite_BBU-2", 
-    "ip": "130.127.133.92"
-  },
-  {
-    "id": 5,
-    "humanReadableName": "vsg_service_instance-4",
-    "instance_id": "instance-00000004", 
-    "instance_uuid": "44b75cb7-7405-4a68-9400-b4c4e3ea69b5", 
-    "name": "vsg_service_instance-4", 
-    "instance_name": "mysite_vsg-4", 
-    "ip": "130.127.133.94"
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/mocks/mcord.conf.json b/views/ngXosViews/mcordTopology/mocks/mcord.conf.json
deleted file mode 100644
index 7246775..0000000
--- a/views/ngXosViews/mcordTopology/mocks/mcord.conf.json
+++ /dev/null
@@ -1,8 +0,0 @@
-[
-  {
-    "url": "instances",
-    "base": "xos/",
-    "methods": ["GET", "POST"],
-    "param": "id"
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/package.json b/views/ngXosViews/mcordTopology/package.json
deleted file mode 100644
index 060811d..0000000
--- a/views/ngXosViews/mcordTopology/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-mcordTopology",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/mcordTopology/spec/sample.test.js b/views/ngXosViews/mcordTopology/spec/sample.test.js
deleted file mode 100644
index 93a9fea..0000000
--- a/views/ngXosViews/mcordTopology/spec/sample.test.js
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The User List', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.mcordTopology'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('/xos/users/?no_hyperlinks=1').respond([
-      {
-        email: 'teo@onlab.us',
-        firstname: 'Matteo',
-        lastname: 'Scandolo' 
-      }
-    ]);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<users-list></users-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  xit('should load 1 users', () => {
-    httpBackend.flush();
-    expect(isolatedScope.users.length).toBe(1);
-    expect(isolatedScope.users[0].email).toEqual('teo@onlab.us');
-    expect(isolatedScope.users[0].firstname).toEqual('Matteo');
-    expect(isolatedScope.users[0].lastname).toEqual('Scandolo');
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/css/dev.css b/views/ngXosViews/mcordTopology/src/css/dev.css
deleted file mode 100644
index a40165e..0000000
--- a/views/ngXosViews/mcordTopology/src/css/dev.css
+++ /dev/null
@@ -1,25 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosMcordTopology{
-  position: absolute;
-  /*top: 100px;
-  left: 200px;*/
-  width: 100%;
-  height: 100%;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/css/main.css b/views/ngXosViews/mcordTopology/src/css/main.css
deleted file mode 100644
index e41be01..0000000
--- a/views/ngXosViews/mcordTopology/src/css/main.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
diff --git a/views/ngXosViews/mcordTopology/src/css/mcord.css b/views/ngXosViews/mcordTopology/src/css/mcord.css
deleted file mode 100644
index ba28d41..0000000
--- a/views/ngXosViews/mcordTopology/src/css/mcord.css
+++ /dev/null
@@ -1,99 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosMcordTopology {
-  height: 700px;
-}
-
-[ui-view],
-m-cord-topology{
-  width: 100%;
-  height: 100%;
-  display: block;
-}
-
-line {
-  stroke: blue;
-  /*stroke-width: 1;*/
-}
-
-line.big{
-  stroke-width: 2;
-}
-
-circle,
-rect {
-  fill: #fff;
-  stroke-width: 1; 
-}
-
-.fabric {
-  stroke: none;
-  fill: #123456;
-  fill-rule: evenodd;
-}
-
-.fabric-container {
-  fill: transparent;
-  stroke: #000;
-  stroke-width: 1;
-}
-
-.bbu {
-  stroke: black;
-  fill: #FF7F0E;
-}
-
-.rru {
-  stroke: #000;
-  fill: #FFBB78;
-}
-
-.rru.antenna {
-  stroke: #000;
-  fill: brown;
-}
-
-.rru-shadow {
-  fill: #FFBB78;
-  opacity: .4
-}
-
-.MME, .SGW, .PGW, .Vid {
-  fill: purple;
-  stroke: #000;
-}
-
-rect.MME,
-rect.SGW,
-rect.PGW,
-rect.bbu,
-rect.Vid {
-  fill: #fff;
-  stroke: #fff;
-}
-
-.bbu text, 
-.MME text,
-.SGW text,
-.PGW text, 
-.Vid text {
-  font-size: 10px;
-  stroke-width: 0;
-  fill: #000;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/icons/README.md b/views/ngXosViews/mcordTopology/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/mcordTopology/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/index.html b/views/ngXosViews/mcordTopology/src/index.html
deleted file mode 100644
index d9fea44..0000000
--- a/views/ngXosViews/mcordTopology/src/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower --><!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/css/mcord.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.mcordTopology" id="xosMcordTopology" class="container-fluid">
-    <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower --><!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/static.data.js"></script>
-<script src="/.tmp/node_drawer.js"></script>
-<!-- endinject -->
diff --git a/views/ngXosViews/mcordTopology/src/js/main.js b/views/ngXosViews/mcordTopology/src/js/main.js
deleted file mode 100644
index d37acd7..0000000
--- a/views/ngXosViews/mcordTopology/src/js/main.js
+++ /dev/null
@@ -1,372 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.mcordTopology', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('topology', {
-    url: '/',
-    template: '<m-cord-topology></m-cord-topology>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.factory('_', $window => $window._)
-.service('Traffic', function($http, $q){
-  this.get = () => {
-    var deferred = $q.defer();
-    $http.get('videoLocal.txt')
-    .then(res => {
-      deferred.resolve(res.data);
-    })
-    .catch(e => {
-      console.log(e);
-      deferred.resolve(Math.random() * 10)
-    });
-    return deferred.promise;
-  }
-})
-.directive('mCordTopology', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    template: '',
-    controller: function($element, $interval, $rootScope, _, $http, TopologyElements, NodeDrawer, Traffic){
-
-      const el = $element[0];
-
-      let nodes = [];
-      let links = [];
-      let traffic = 0;
-      let linkWidth = 1;
-      let trafficCorrection = 5;
-
-      const filterBBU = (instances) => {
-        return _.filter(instances, i => i.name.indexOf("bbu") >= 0);
-      };
-
-      const filterOthers = (instances) => {
-        return TopologyElements.fakedInstance;
-      };
-
-      // retrieving instances list
-      const getData = () => {
-
-        d3.select('svg')
-          .style('width', `${el.clientWidth}px`)
-          .style('height', `${el.clientHeight}px`);
-
-        nodes = TopologyElements.nodes;
-        links = TopologyElements.links;
-
-        Traffic.get()
-        .then((newTraffic) => {
-
-          // calculating link size
-          // it should change between 1 and 10
-          if(!traffic){
-            linkWidth = 2;
-          }
-          else if(newTraffic === traffic){
-            linkWidth = linkWidth;
-          }
-          else{
-            let delta = newTraffic - traffic;
-
-            if(delta > 0){
-              linkWidth = linkWidth + (delta / trafficCorrection);
-            }
-            else{
-              linkWidth = linkWidth - ((delta * -1) / trafficCorrection);
-            }
-
-          }
-
-          if(linkWidth < 0.2){
-            linkWidth = 0.2
-          };
-
-          traffic = newTraffic;
-
-          return $http.get('/api/core/xos/instances');
-          // return XosApi.Instance_List_GET()
-        })
-        .then((instances) => {
-
-          addBbuNodes(filterBBU(instances.data));
-          addOtherNodes(filterOthers(instances.data));
-
-          draw(svg, nodes, links);
-        })
-        .catch((e) => {
-          throw new Error(e);
-        });
-      };
-
-      const force = d3.layout.force();
-
-      // create svg elements
-      const svg = d3.select(el)
-        .append('svg')
-        .style('width', `${el.clientWidth}px`)
-        .style('height', `${el.clientHeight}px`);
-
-      const linkContainer = svg.append('g')
-        .attr({
-          class: 'link-container'
-        });
-
-      const nodeContainer = svg.append('g')
-        .attr({
-          class: 'node-container'
-        });
-
-      // replace human readable ids with d3 ids
-      // NOTE now ids are not manatined on update...
-      const buildLinks = (links, nodes) => {
-        return links.map((l) => {
-
-          console.log(_.find);
-          let source = _.findIndex(nodes, {id: l.source});
-          let target = _.findIndex(nodes, {id: l.target});
-          // console.log(`link-${source}-${target}`, source, target);
-          return {
-            source: source,
-            target: target,
-            value: 1,
-            id: `link-${source}-${target}`,
-            type: l.source.indexOf('fabric') >= 0 ? 'big':'small'
-          };
-
-        });
-      };
-
-      // find fabric nodes and center horizontally
-      const positionFabricNodes = (nodes) => {
-        return _.map(nodes, n => {
-          if(n.type !== 'fabric'){
-            return n;
-          }
-
-          n.x = n.x * hStep;
-          n.y = n.y * vStep;
-
-          return n;
-        });
-      };
-
-      const addBbuNodes = (instances) => {
-
-        // calculate bbu hStep
-        let bbuHStep = ((el.clientWidth / 2) / (instances.length + 1));
-
-        // create nodes
-        let bbuNodes = instances.map((n, i) => {
-          return {
-            type: 'bbu',
-            name: n.name,
-            id: `bbu-${n.id}`,
-            fixed: true,
-            y: vStep * 3,
-            x: bbuHStep * (i + 1)
-          };
-        });
-
-        // create links
-        let bbuLinks = bbuNodes.map(n => {
-          return {
-            source: n.id,
-            target: 'fabric4'
-          };
-        });
-
-        // fake RRU nodes and links
-        instances.forEach((n, i) => {
-          bbuNodes.push({
-            type: 'rru',
-            name: 'rru',
-            id: `rru-${n.id}`,
-            fixed: true,
-            y: vStep * 4,
-            x: bbuHStep * (i + 1)
-          });
-
-          bbuLinks.push({
-            source: `rru-${n.id}`,
-            target: `bbu-${n.id}`
-          });
-        })
-
-        nodes = nodes.concat(bbuNodes);
-
-
-        links = links.concat(bbuLinks);
-      };
-
-      // add MME, PGW, SGW nodes
-      const addOtherNodes = (instances) => {
-        let hStep = ((el.clientWidth / 2) / (instances.length + 1));
-
-        // create nodes
-        let otherNodes = instances.map((n, i) => {
-          return {
-            type: n.name.substring(0, 3),
-            name: n.name,
-            id: `${n.name.substring(0, 3)}-${n.id}`,
-            fixed: true,
-            y: vStep * 3,
-            x: (el.clientWidth / 2) + (hStep * (i + 1))
-          };
-        });
-
-        // create links
-        let otherLinks = otherNodes.map(n => {
-          return {
-            source: n.id,
-            target: 'fabric4'
-          };
-        });
-
-
-        nodes = nodes.concat(otherNodes);
-        links = links.concat(otherLinks);
-      }
-
-      let hStep, vStep;
-
-      hStep = el.clientWidth / 3;
-      vStep = el.clientHeight / 5;
-
-      const draw = (svg, nodes, links) => {
-
-        hStep = el.clientWidth / 3;
-        vStep = el.clientHeight / 5;
-
-        links = buildLinks(links, nodes);
-
-        nodes = positionFabricNodes(nodes);
-
-        console.log(nodes);
-        // start force layout
-        force
-          .nodes(nodes)
-          .links(links)
-          .size([el.clientWidth, el.clientHeight])
-          .charge(-20)
-          .chargeDistance(200)
-          .linkDistance(80)
-          .linkStrength(0.1)
-          .start();
-
-
-        const linkContainer = d3.select('.link-container');
-        const nodeContainer = d3.select('.node-container');
-
-        NodeDrawer.drawFabricBox(nodeContainer, hStep, vStep);
-
-        // draw links
-        var link = linkContainer.selectAll('.link')
-          .data(links, d => d.id);
-        
-        link.enter().append('line')
-          .attr({
-            class: d => `link ${d.type}`,
-            'stroke-width': linkWidth,
-            id: d => d.id,
-            opacity: 0
-          })
-          .transition()
-          .duration(1000)
-          .attr({
-            opacity: 1
-          });
-
-        link
-          .transition()
-          .duration(1000)
-          .attr({
-            'stroke-width': linkWidth,
-            opacity: 1
-          });
-
-        link.exit()
-        .remove();
-
-        //draw nodes
-        var node = nodeContainer.selectAll('.node')
-          .data(nodes, d => {
-            return d.id
-          });
-        
-        // append a group for any new node
-        var enter = node.enter()
-          .append('g', d => d.interfaceCfgIdentifier)
-          .attr({
-            class: d => `${d.type} node`,
-            transform: d => `translate(${d.x}, ${d.y})`
-          });
-
-        // draw nodes
-        NodeDrawer.drawBbus(enter.filter('.bbu'))
-        NodeDrawer.drawRrus(enter.filter('.rru'))
-        NodeDrawer.drawFabric(enter.filter('.fabric'))
-        NodeDrawer.drawOthers(enter.filter(d => {
-          console.log(d.type);
-          return (
-            d.type  === 'MME' ||
-            d.type === 'SGW' ||
-            d.type === 'PGW' ||
-            d.type === 'Vid'
-          )
-        }));
-
-        // remove nodes
-        var exit = node.exit();
-
-        NodeDrawer.removeElements(exit);
-
-        force.on('tick', function() {
-          link
-            .attr('x1', d => d.source.x )
-            .attr('y1', d => d.source.y )
-            .attr('x2', d => d.target.x )
-            .attr('y2', d => d.target.y );
-
-          node.attr('transform', (d) => `translate(${d.x},${d.y})`);
-        });
-      };
-      
-      // $interval(() => {
-      //   getData();
-      // }, 3000);
-      getData();
-
-      
-    }
-  };
-});
diff --git a/views/ngXosViews/mcordTopology/src/js/node_drawer.js b/views/ngXosViews/mcordTopology/src/js/node_drawer.js
deleted file mode 100644
index 5394da4..0000000
--- a/views/ngXosViews/mcordTopology/src/js/node_drawer.js
+++ /dev/null
@@ -1,231 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.mcordTopology')
-.service('NodeDrawer', function(TopologyElements){
-
-  const duration = 500;
-
-  let isFabricDrawed = false;
-
-  this.drawFabricBox = (svg, hStep, vStep) => {
-
-    if(isFabricDrawed){
-      return;
-    }
-
-    let fabric = svg.append('g')
-    .attr({
-      transform: `translate(${hStep - 25}, ${vStep - 25})`
-    });
-
-    fabric.append('rect')
-      .attr({
-        width: hStep + 50,
-        height: vStep + 50,
-        class: 'fabric-container'
-      });
-
-    // fabric.append('text')
-    // .text('Fabric')
-    // .attr({
-    //   'text-anchor': 'middle',
-    //   x: ((hStep + 50) / 2),
-    //   y: -10
-    // });
-
-    isFabricDrawed = true;
-  };
-
-  this.drawBbus = (nodes) => {
-
-    nodes.append('rect')
-      .attr({
-        class: d => d.type,
-        width: 30,
-        height: 30,
-        x: -15,
-        y: -15,
-        opacity: 0
-      })
-      .transition()
-      .duration(duration)
-      .attr({
-        r: 15,
-        opacity: 1
-      });
-
-    nodes
-      .append('path')
-      .attr({
-        class: d => `${d.type} antenna`,
-        opacity: 0,
-        d: () => TopologyElements.icons.bbu,
-        transform: `translate(-18, -18)`
-      })
-      .transition()
-      .duration(duration)
-      .attr({
-        opacity: 1
-      });
-
-    nodes.append('text')
-    .attr({
-      'text-anchor': 'start',
-      y: 25,
-      x: 5,
-      opacity: 0
-    })
-    .text(d => `BBU ${d.name.substr(d.name.length - 1, 1)}`)
-    .transition()
-    .duration(duration * 2)
-    .attr({
-      opacity: 1
-    });
-  };
-
-  this.drawRrus = (nodes) => {
-
-    nodes.append('circle')
-      .attr({
-        class: d => `${d.type}-shadow`,
-        r: 0,
-        opacity: 0
-      })
-      .transition()
-      .duration(duration * 2)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        r: 40,
-        opacity: 1
-      });
-
-    nodes
-      .append('path')
-      .attr({
-        class: d => `${d.type} antenna`,
-        opacity: 0,
-        d: () => TopologyElements.icons.rru,
-        transform: `translate(-18, -18)`
-      })
-      .transition()
-      .duration(duration)
-      .attr({
-        opacity: 1
-      });
-  
-    // nodes.append('circle')
-    //   .attr({
-    //     class: d => d.type,
-    //     r: 0,
-    //     opacity: 0
-    //   })
-    //   .transition()
-    //   .duration(duration)
-    //   // .delay((d, i) => i * (duration / 2))
-    //   .attr({
-    //     r: 10,
-    //     opacity: 1
-    //   });
-  };
-
-  this.drawFabric = (nodes) => {
-    nodes
-      .append('rect')
-      .attr({
-        width: 30,
-        height: 30,
-        x: -15,
-        y: -15
-      });
-
-    nodes
-      .append('path')
-      .attr({
-        class: d => d.type,
-        opacity: 0,
-        d: () => TopologyElements.icons.switch,
-        transform: `translate(-22, -22), scale(0.4)`
-      })
-      .transition()
-      .duration(duration)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        opacity: 1
-      });
-  };
-
-  this.drawOthers = (nodes) => {
-    nodes.append('rect')
-      .attr({
-        class: d => d.type,
-        width: 30,
-        height: 30,
-        x: -15,
-        y: -15,
-        opacity: 0
-      })
-      .transition()
-      .duration(duration)
-      .attr({
-        r: 15,
-        opacity: 1
-      });
-
-    nodes
-      .append('path')
-      .attr({
-        class: d => `${d.type} antenna`,
-        opacity: 0,
-        d: () => TopologyElements.icons.bbu,
-        transform: `translate(-18, -18)`
-      })
-      .transition()
-      .duration(duration)
-      .attr({
-        opacity: 1
-      });
-
-    nodes.append('text')
-    .attr({
-      'text-anchor': 'start',
-      y: 25,
-      x: -12,
-      opacity: 0
-    })
-    .text(d => d.name.toUpperCase())
-    .transition()
-    .duration(duration * 2)
-    .attr({
-      opacity: 1
-    });
-
-  };
-
-  this.removeElements = (nodes) => {
-    nodes
-    .transition()
-    .duration(duration)
-    .attr({
-      opacity: 0
-    })
-    .remove();
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/js/static.data.js b/views/ngXosViews/mcordTopology/src/js/static.data.js
deleted file mode 100644
index 3978965..0000000
--- a/views/ngXosViews/mcordTopology/src/js/static.data.js
+++ /dev/null
@@ -1,103 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.mcordTopology')
-.constant('TopologyElements', {
-  nodes: [
-    // {
-    //   id: 'fabric1',
-    //   type: 'fabric',
-    //   name: 'fabric1',
-    //   fixed: true,
-    //   x: 1,
-    //   y: 1
-    // },
-    // {
-    //   id: 'fabric2',
-    //   type: 'fabric',
-    //   name: 'fabric2',
-    //   fixed: true,
-    //   x: 1,
-    //   y: 2
-    // },
-    // {
-    //   id: 'fabric3',
-    //   type: 'fabric',
-    //   name: 'fabric3',
-    //   fixed: true,
-    //   x: 2,
-    //   y: 1
-    // },
-    {
-      id: 'fabric4',
-      type: 'fabric',
-      name: 'fabric4',
-      fixed: true,
-      x: 1.5,
-      y: 1.5
-    }
-  ],
-  links: [
-    // {
-    //   source: 'fabric1',
-    //   target: 'fabric2'
-    // },
-    // {
-    //   source: 'fabric1',
-    //   target: 'fabric4'
-    // },
-    // {
-    //   source: 'fabric3',
-    //   target: 'fabric4'
-    // },
-    // {
-    //   source: 'fabric3',
-    //   target: 'fabric2'
-    // }
-  ],
-  fakedInstance: [
-    {
-      humanReadableName: 'MME',
-      name: 'MME'
-    },
-    {
-      humanReadableName: 'PGW',
-      name: 'PGW'
-    },
-    {
-      humanReadableName: 'SGW',
-      name: 'SGW'
-    },
-    {
-      humanReadableName: 'Video Server',
-      name: 'Video Server'
-    }
-  ],
-  icons: {
-    bbu: `M11.08,4.66H24.76l6.81,6.82H4.23Z M4.24,18.34V13.21H31.6v5.13H4.24Zm25.64-1.72V14.94H28.19v1.69h1.68Zm-13.65-1.7v1.69h1.69V14.93H16.22Zm-3.42,0v1.69h1.68V14.93H12.8Zm-3.42,0v1.69h1.68V14.93H9.38ZM6,14.93v1.69H7.64V14.93H6Z M32.8,33.23H3V11.42l0,0c1.17-1.16,2.54-2.5,3.87-3.8S9.59,5,10.72,3.87l0,0H25.08l0,0C26.25,5,27.6,6.32,28.9,7.61s2.68,2.63,3.83,3.78l0,0v0.06ZM3.3,33H32.53l0-21.43C31.36,10.39,30,9.07,28.71,7.8S26.09,5.22,25,4.1H10.86C9.75,5.21,8.41,6.52,7.12,7.77s-2.67,2.61-3.83,3.76V33Z M4.24,25.18V20.05H31.6v5.13H4.24Zm24-1.73h1.68V21.78H28.19v1.67Zm-12,0H17.9V21.78H16.21v1.68Zm-1.73-1.68H12.81v1.67h1.68V21.78Zm-3.43,1.68V21.78H9.38v1.69h1.68ZM6,23.46H7.64V21.78H6v1.68Z M31.6,26.89V32H4.24V26.89H31.6Zm-3.4,1.72V30.3h1.68V28.61H28.19Zm-10.28,0H16.22V30.3h1.68V28.62Zm-3.43,1.69V28.62H12.8v1.69h1.68Zm-3.42,0V28.62H9.38v1.69h1.68ZM7.65,28.62H6v1.67H7.65V28.62Z`,
-    // bbu: `M15,100a5,5,0,0,1-5-5v-65a5,5,0,0,1,5-5h80a5,5,0,0,1,5,5v65a5,5,0,0,1-5,5zM14,22.5l11-11a10,3,0,0,1,10-2h40a10,3,0,0,1,10,2l11,11zM16,35a5,5,0,0,1,10,0a5,5,0,0,1-10,0z`,
-    switch: `M10,20a10,10,0,0,1,10-10h70a10,10,0,0,1,10,10v70a10,10,
-            0,0,1-10,10h-70a10,10,0,0,1-10-10zM60,26l12,0,0-8,18,13-18,13,0
-            -8-12,0zM60,60l12,0,0-8,18,13-18,13,0-8-12,0zM50,40l-12,0,0-8
-            -18,13,18,13,0-8,12,0zM50,74l-12,0,0-8-18,13,18,13,0-8,12,0z`,
-    // rru: `M85,71.2c-8.9,10.5-29.6,8.7-45.3-3.5C23.9,55.4,19.8,37,28.6,26.5C29.9,38.6,71.5,69.9,85,71.2z M92.7,76.2M16.2,15 M69.5,100.7v-4c0-1.4-1.2-2.2-2.6-2.2H19.3c-1.4,0-2.8,0.7-2.8,2.2v3.9c0,0.7,0.8,1,1.5,1h50.3C69,101.5,69.5,101.3,69.5,100.7z M77.3,7.5l0,3.7c9,0.1,16.3,7.1,16.2,15.7l3.9,0C97.5,16.3,88.5,7.6,77.3,7.5z M77.6,14.7l0,2.5c5.3,0,9.7,4.2,9.6,9.3l2.6,0C89.9,20,84.4,14.7,77.6,14.7z M82.3,22.2c-1.3-1.2-2.9-1.9-4.7-1.9l0,1.2c1.4,0,2.8,0.6,3.8,1.5c1,1,1.6,2.3,1.6,3.7l1.3,0C84.3,25.1,83.6,23.4,82.3,22.2z M38.9,69.5l-5.1,23h16.5l-2.5-17.2C44.1,73.3,38.9,69.5,38.9,69.5zM58.1,54.1c13.7,10.1,26.5,16.8,29.2,13.7c2.7-3.1-5.6-13-19.3-24.4 M62.9,34.2 M62,37.9C47.7,27.3,33.7,20,31,23.1c-2.7,3.2,7,14.2,20.6,26 M73.9,25.7c-2.9,0.1-5.2,2.3-5.1,4.8c0,0.7,0.2,1.4,0.6,2l0,0L53.8,49.7l3.3,2.5L72.7,35l-0.4-0.3c0.6,0.2,1.3,0.3,1.9,0.3c2.9-0.1,5.2-2.3,5.1-4.9C79.3,27.6,76.8,25.6,73.9,25.7z`,
-    rru: `M18.11,11a2.25,2.25,0,0,1,2.13,1.53A2.2,2.2,0,0,1,19.52,15a0.74,0.74,0,0,0-.3.61A7.49,7.49,0,0,0,20,19.35c2,4.55,3.94,9.13,5.89,13.7a1.14,1.14,0,0,1-.59,1.64A1.11,1.11,0,0,1,23.86,34q-0.53-1.2-1-2.41a0.38,0.38,0,0,0-.41-0.28H13.78a0.36,0.36,0,0,0-.39.26q-0.51,1.24-1.06,2.47a1.11,1.11,0,0,1-1.14.67,1.07,1.07,0,0,1-1-.89,1.47,1.47,0,0,1,.1-0.75q2.84-6.66,5.7-13.32a4.06,4.06,0,0,1,.18-0.42A6.39,6.39,0,0,0,17,15.53,0.58,0.58,0,0,0,16.74,15,2.21,2.21,0,0,1,16,12.5,2.26,2.26,0,0,1,18.11,11ZM21.74,29.1c-0.32-.74-0.61-1.43-0.92-2.12a0.35,0.35,0,0,0-.27-0.14H15.66a0.33,0.33,0,0,0-.26.11c-0.32.7-.62,1.41-0.93,2.15h7.26Zm-5.31-4.55h3.37L18.1,20.63Z M2.23,13.56A16,16,0,0,1,6.76,2.16a1.68,1.68,0,0,1,.8-0.46,1.06,1.06,0,0,1,1.18.59,1.16,1.16,0,0,1-.23,1.37A14.48,14.48,0,0,0,6.19,6.77a13.57,13.57,0,0,0,1.9,15.59l0.46,0.49a1.16,1.16,0,1,1-1.68,1.59,15.6,15.6,0,0,1-4.41-8.64C2.32,14.95,2.28,14.07,2.23,13.56Z M34,13.84a15.51,15.51,0,0,1-4.54,10.52,1.19,1.19,0,0,1-1.65.18,1.17,1.17,0,0,1,0-1.77,13.81,13.81,0,0,0,2.79-4.1,13.6,13.6,0,0,0-2.7-14.91A1.8,1.8,0,0,1,27.41,3,1.08,1.08,0,0,1,28,1.8,1.15,1.15,0,0,1,29.38,2a15.59,15.59,0,0,1,2.51,3.28A16.47,16.47,0,0,1,34,13.84Z M10.93,21.6A1.33,1.33,0,0,1,9.87,21a11.06,11.06,0,0,1-2.8-5.27A11.22,11.22,0,0,1,9.8,5.51l0.27-.28a1.16,1.16,0,1,1,1.64,1.63,8.62,8.62,0,0,0-2.06,3.22A8.87,8.87,0,0,0,11.18,19c0.18,0.23.4,0.44,0.59,0.66A1.13,1.13,0,0,1,11.95,21,1.08,1.08,0,0,1,10.93,21.6Z M29.47,13.57a11.11,11.11,0,0,1-3.27,7.64,1.18,1.18,0,0,1-1.51.21,1.13,1.13,0,0,1-.43-1.4,2.06,2.06,0,0,1,.39-0.54,8.85,8.85,0,0,0,2.49-5.89A9,9,0,0,0,24.64,7a1.85,1.85,0,0,1-.44-0.85A1,1,0,0,1,24.82,5a1.07,1.07,0,0,1,1.3.21,20.11,20.11,0,0,1,1.79,2.31A11.09,11.09,0,0,1,29.47,13.57Z M11.3,13.18a6.73,6.73,0,0,1,2-4.73,1.15,1.15,0,0,1,1.45-.2,1.12,1.12,0,0,1,.49,1.32,1.58,1.58,0,0,1-.33.53,4.49,4.49,0,0,0,0,6.26,1.16,1.16,0,1,1-1.7,1.57A6.81,6.81,0,0,1,11.3,13.18Z M24.94,13.14A6.9,6.9,0,0,1,23,18a1.16,1.16,0,1,1-1.7-1.58,4.5,4.5,0,0,0,0-6.29A1.16,1.16,0,1,1,23,8.5,6.75,6.75,0,0,1,24.94,13.14Z`
-  }
-})
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/sass/main.scss b/views/ngXosViews/mcordTopology/src/sass/main.scss
deleted file mode 100644
index fcc6e8f..0000000
--- a/views/ngXosViews/mcordTopology/src/sass/main.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xosMcordTopology {
-  
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/templates/users-list.tpl.html b/views/ngXosViews/mcordTopology/src/templates/users-list.tpl.html
deleted file mode 100644
index 1e4b5be..0000000
--- a/views/ngXosViews/mcordTopology/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row">
-  <div class="col-xs-12">
-    <h1>Users List</h1>
-    <p>This is only an example view.</p>
-  </div>
-</div>
-<div class="row">
-  <div class="col-xs-4">Email</div>
-  <div class="col-xs-4">First Name</div>
-  <div class="col-xs-4">Last Name</div>
-</div>  
-<div class="row" ng-repeat="user in vm.users">
-  <div class="col-xs-4">{{user.email}}</div>
-  <div class="col-xs-4">{{user.firstname}}</div>
-  <div class="col-xs-4">{{user.lastname}}</div>
-</div>  
\ No newline at end of file
diff --git a/views/ngXosViews/openVPNDashboard/.bowerrc b/views/ngXosViews/openVPNDashboard/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/openVPNDashboard/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/openVPNDashboard/.eslintrc b/views/ngXosViews/openVPNDashboard/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/openVPNDashboard/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/openVPNDashboard/.gitignore b/views/ngXosViews/openVPNDashboard/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/openVPNDashboard/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/openVPNDashboard/bower.json b/views/ngXosViews/openVPNDashboard/bower.json
deleted file mode 100644
index 33cdb88..0000000
--- a/views/ngXosViews/openVPNDashboard/bower.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "xos-openVPNDashboard",
-  "version": "0.0.0",
-  "authors": [
-    "Jeremy Mowery <jermowery@email.arizona.edu>"
-  ],
-  "description": "The openVPNDashboard view",
-  "license": "Apache-2.0",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {},
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0",
-    "Blob.js": "eligrey/Blob.js"
-  }
-}
diff --git a/views/ngXosViews/openVPNDashboard/gulp/build.js b/views/ngXosViews/openVPNDashboard/gulp/build.js
deleted file mode 100644
index 8c1a72b..0000000
--- a/views/ngXosViews/openVPNDashboard/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.openVPNDashboard')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosOpenVPNDashboard.html',
-        options.static + 'css/xosOpenVPNDashboard.css',
-        options.static + 'images/openVPNDashboard-icon.png',
-        options.static + 'images/openVPNDashboard-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosOpenVPNDashboard.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/openVPNDashboard-icon.png`, `${options.icon}/openVPNDashboard-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosOpenVPNDashboard.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.openVPNDashboard',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosOpenVPNDashboardVendor.js',
-            options.static + 'js/xosOpenVPNDashboard.js',
-            options.static + 'css/xosOpenVPNDashboard.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosOpenVPNDashboard.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosOpenVPNDashboardVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['OpenVPNDashboard'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosOpenVPNDashboard'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/openVPNDashboard-icon.png`) &&
-      fs.existsSync(`${options.icon}/openVPNDashboard-icon-active.png`)
-    ){
-      dashboardJson['OpenVPNDashboard'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['openVPNDashboard_dashboard'] = {
-      node: 'OpenVPNDashboard',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/openVPNDashboard/gulp/server.js b/views/ngXosViews/openVPNDashboard/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosViews/openVPNDashboard/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/openVPNDashboard/gulpfile.js b/views/ngXosViews/openVPNDashboard/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/openVPNDashboard/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/openVPNDashboard/karma.conf.js b/views/ngXosViews/openVPNDashboard/karma.conf.js
deleted file mode 100644
index 92a9ef0..0000000
--- a/views/ngXosViews/openVPNDashboard/karma.conf.js
+++ /dev/null
@@ -1,111 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-// add Blob polyfill for Phantom.js
-bowerComponents.push('src/vendor/Blob.js/Blob.js');
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/openVPNDashboard/package.json b/views/ngXosViews/openVPNDashboard/package.json
deleted file mode 100644
index 4dacdcb..0000000
--- a/views/ngXosViews/openVPNDashboard/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-openVPNDashboard",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/openVPNDashboard/spec/sample.test.js b/views/ngXosViews/openVPNDashboard/spec/sample.test.js
deleted file mode 100644
index fdd3c31..0000000
--- a/views/ngXosViews/openVPNDashboard/spec/sample.test.js
+++ /dev/null
@@ -1,52 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The User List', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.openVPNDashboard'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('/api/tenant/openvpn/list/?no_hyperlinks=1').respond([
-      {
-        email: 'jermowery@email.arizona.edu',
-        firstname: 'Jeremy',
-        lastname: 'Mowery'
-      }
-    ]);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<vpn-list></vpn-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  it('should load 1 vpn', () => {
-    httpBackend.flush();
-    expect(isolatedScope.vpns.length).toBe(1);
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/openVPNDashboard/src/css/dev.css b/views/ngXosViews/openVPNDashboard/src/css/dev.css
deleted file mode 100644
index 37995e8..0000000
--- a/views/ngXosViews/openVPNDashboard/src/css/dev.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosOpenVPNDashboard{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/openVPNDashboard/src/css/main.css b/views/ngXosViews/openVPNDashboard/src/css/main.css
deleted file mode 100644
index f527055..0000000
--- a/views/ngXosViews/openVPNDashboard/src/css/main.css
+++ /dev/null
@@ -1,28 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosOpenVPNDashboard {
-  width: 70%;
-  margin: auto; }
-  #xosOpenVPNDashboard .vpn-row {
-    display: table-row; }
-  #xosOpenVPNDashboard .vpn-cell {
-    display: table-cell;
-    padding: 5px; }
-  #xosOpenVPNDashboard .vpn-header {
-    font-weight: bold; }
diff --git a/views/ngXosViews/openVPNDashboard/src/icons/README.md b/views/ngXosViews/openVPNDashboard/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/openVPNDashboard/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/openVPNDashboard/src/index.html b/views/ngXosViews/openVPNDashboard/src/index.html
deleted file mode 100644
index af5e294..0000000
--- a/views/ngXosViews/openVPNDashboard/src/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower --><!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.openVPNDashboard" id="xosOpenVPNDashboard">
-    <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower --><!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<!-- endinject -->
diff --git a/views/ngXosViews/openVPNDashboard/src/js/main.js b/views/ngXosViews/openVPNDashboard/src/js/main.js
deleted file mode 100644
index 5a6e173..0000000
--- a/views/ngXosViews/openVPNDashboard/src/js/main.js
+++ /dev/null
@@ -1,78 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.openVPNDashboard', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('openVPNList', {
-    url: '/',
-    template: '<vpn-list></vpn-list>'
-  });
-})
-.config(($compileProvider) => {
-  $compileProvider.aHrefSanitizationWhitelist(
-    /^\s*(https?|ftp|mailto|tel|file|blob):/);
-})
-.service('Vpn', function($http, $q){
-
-  this.getOpenVpnTenants = () => {
-    let deferred = $q.defer();
-
-    $http.get('/api/tenant/openvpn/list/')
-    .then((res) => {
-      deferred.resolve(res.data)
-    })
-    .catch((e) => {
-      deferred.reject(e);
-    });
-
-    return deferred.promise;
-  }
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.directive('vpnList', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/openvpn-list.tpl.html',
-    controller: function(Vpn){
-      Vpn.getOpenVpnTenants()
-      .then((vpns) => {
-        this.vpns = vpns;
-        for (var i = 0; i < this.vpns.length; i++) {
-          var blob = new Blob([this.vpns[i].script_text], {type: 'text/plain'});
-          this.vpns[i].script_text = (window.URL || window.webkitURL).createObjectURL( blob );
-        }
-      })
-      .catch((e) => {
-        throw new Error(e);
-      });
-    }
-  };
-});
diff --git a/views/ngXosViews/openVPNDashboard/src/sass/main.scss b/views/ngXosViews/openVPNDashboard/src/sass/main.scss
deleted file mode 100644
index 23b7c3e..0000000
--- a/views/ngXosViews/openVPNDashboard/src/sass/main.scss
+++ /dev/null
@@ -1,34 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xosOpenVPNDashboard {
-  width: 70%;
-  margin: auto;
-  .vpn-row {
-      display: table-row;
-  }
-  .vpn-cell {
-      display: table-cell;
-      padding: 5px;
-  }
-  .vpn-header {
-      font-weight: bold;
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/openVPNDashboard/src/templates/openvpn-list.tpl.html b/views/ngXosViews/openVPNDashboard/src/templates/openvpn-list.tpl.html
deleted file mode 100644
index 8f72232..0000000
--- a/views/ngXosViews/openVPNDashboard/src/templates/openvpn-list.tpl.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 style="display: table;">
-  <div class="vpn-row">
-    <h1 class="vpn-cell">VPN List</h1>
-  </div>
-  <div class="vpn-row">
-    <div class="vpn-cell vpn-header">ID</div>
-    <div class="vpn-cell vpn-header">VPN Network</div>
-    <div class="vpn-cell vpn-header">VPN Subnet</div>
-    <div class="vpn-cell vpn-header">Script Link</div>
-  </div>
-  <div class="vpn-row" ng-repeat="vpn in vm.vpns">
-    <div class="vpn-cell">{{ vpn.id }}</div>
-    <div class="vpn-cell">{{ vpn.server_network }}</div>
-    <div class="vpn-cell">{{ vpn.vpn_subnet }}</div>
-    <div class="vpn-cell">
-      <a download="connect-{{ vpn.id }}.vpn" ng-href="{{ vpn.script_text }}">Script</a>
-    </div>
-  </div>
-</div>
diff --git a/views/ngXosViews/openVPNDashboard/src/templates/users-list.tpl.html b/views/ngXosViews/openVPNDashboard/src/templates/users-list.tpl.html
deleted file mode 100644
index 6d26747..0000000
--- a/views/ngXosViews/openVPNDashboard/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.users"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/.bowerrc b/views/ngXosViews/serviceGrid/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/serviceGrid/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/.eslintrc b/views/ngXosViews/serviceGrid/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/serviceGrid/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/.gitignore b/views/ngXosViews/serviceGrid/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/serviceGrid/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/bower.json b/views/ngXosViews/serviceGrid/bower.json
deleted file mode 100644
index b6a6a31..0000000
--- a/views/ngXosViews/serviceGrid/bower.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "name": "xos-serviceGrid",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The serviceGrid view",
-  "license": "Apache-2.0",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "js-yaml": "~3.6.1",
-    "jszip": "Stuk/jszip#~3.0.0",
-    "file-saver": "eligrey/FileSaver.js#~1.3.2",
-    "graphlib": "~2.1.0"
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/serviceGrid/gulp/build.js b/views/ngXosViews/serviceGrid/gulp/build.js
deleted file mode 100644
index bef7c56..0000000
--- a/views/ngXosViews/serviceGrid/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.serviceGrid')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosServiceGrid.html',
-        options.static + 'css/xosServiceGrid.css',
-        options.static + 'images/serviceGrid-icon.png',
-        options.static + 'images/serviceGrid-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosServiceGrid.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/serviceGrid-icon.png`, `${options.icon}/serviceGrid-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosServiceGrid.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.serviceGrid',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosServiceGridVendor.js',
-            options.static + 'js/xosServiceGrid.js',
-            options.static + 'css/xosServiceGrid.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosServiceGrid.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosServiceGridVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['ServiceGrid'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosServiceGrid'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/serviceGrid-icon.png`) &&
-      fs.existsSync(`${options.icon}/serviceGrid-icon-active.png`)
-    ){
-      dashboardJson['ServiceGrid'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['serviceGrid_dashboard'] = {
-      node: 'ServiceGrid',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/gulp/server.js b/views/ngXosViews/serviceGrid/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosViews/serviceGrid/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/serviceGrid/gulpfile.js b/views/ngXosViews/serviceGrid/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/serviceGrid/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/serviceGrid/karma.conf.js b/views/ngXosViews/serviceGrid/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/serviceGrid/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/serviceGrid/mocks/data/flavors.json b/views/ngXosViews/serviceGrid/mocks/data/flavors.json
deleted file mode 100644
index 251ccb6..0000000
--- a/views/ngXosViews/serviceGrid/mocks/data/flavors.json
+++ /dev/null
@@ -1,216 +0,0 @@
-[
-  {
-    "humanReadableName": "m1.large",
-    "validators": {
-      "default": [],
-      "updated": [
-        "notBlank"
-      ],
-      "policed": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "deleted": [],
-      "description": [],
-      "no_policy": [],
-      "lazy_blocked": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "write_protect": [],
-      "flavor": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "order": [
-        "notBlank"
-      ],
-      "id": [],
-      "no_sync": [],
-      "enacted": []
-    },
-    "id": 3,
-    "created": "2016-06-20T21:33:32.126894Z",
-    "updated": "2016-06-20T21:33:36.066908Z",
-    "enacted": null,
-    "policed": null,
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": true,
-    "no_policy": false,
-    "name": "m1.large",
-    "description": null,
-    "flavor": "m1.large",
-    "order": 0,
-    "default": false,
-    "deployments": [
-      1
-    ]
-  },
-  {
-    "humanReadableName": "m1.medium",
-    "validators": {
-      "default": [],
-      "updated": [
-        "notBlank"
-      ],
-      "policed": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "deleted": [],
-      "description": [],
-      "no_policy": [],
-      "lazy_blocked": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "write_protect": [],
-      "flavor": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "order": [
-        "notBlank"
-      ],
-      "id": [],
-      "no_sync": [],
-      "enacted": []
-    },
-    "id": 2,
-    "created": "2016-06-20T21:33:32.035528Z",
-    "updated": "2016-06-20T21:33:36.089834Z",
-    "enacted": null,
-    "policed": null,
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": true,
-    "no_policy": false,
-    "name": "m1.medium",
-    "description": null,
-    "flavor": "m1.medium",
-    "order": 0,
-    "default": false,
-    "deployments": [
-      1
-    ]
-  },
-  {
-    "humanReadableName": "m1.small",
-    "validators": {
-      "default": [],
-      "updated": [
-        "notBlank"
-      ],
-      "policed": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "deleted": [],
-      "description": [],
-      "no_policy": [],
-      "lazy_blocked": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "write_protect": [],
-      "flavor": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "order": [
-        "notBlank"
-      ],
-      "id": [],
-      "no_sync": [],
-      "enacted": []
-    },
-    "id": 1,
-    "created": "2016-06-20T21:33:31.974383Z",
-    "updated": "2016-06-20T21:33:36.106941Z",
-    "enacted": null,
-    "policed": null,
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": true,
-    "no_policy": false,
-    "name": "m1.small",
-    "description": null,
-    "flavor": "m1.small",
-    "order": 0,
-    "default": false,
-    "deployments": [
-      1
-    ]
-  },
-  {
-    "humanReadableName": "m1.xlarge",
-    "validators": {
-      "default": [],
-      "updated": [
-        "notBlank"
-      ],
-      "policed": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "deleted": [],
-      "description": [],
-      "no_policy": [],
-      "lazy_blocked": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "write_protect": [],
-      "flavor": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "order": [
-        "notBlank"
-      ],
-      "id": [],
-      "no_sync": [],
-      "enacted": []
-    },
-    "id": 4,
-    "created": "2016-06-20T21:33:36.234266Z",
-    "updated": "2016-06-20T21:33:36.234121Z",
-    "enacted": null,
-    "policed": null,
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": true,
-    "no_policy": false,
-    "name": "m1.xlarge",
-    "description": null,
-    "flavor": "m1.xlarge",
-    "order": 0,
-    "default": false,
-    "deployments": []
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/images.json b/views/ngXosViews/serviceGrid/mocks/data/images.json
deleted file mode 100644
index 8a4fd83..0000000
--- a/views/ngXosViews/serviceGrid/mocks/data/images.json
+++ /dev/null
@@ -1,114 +0,0 @@
-[
-  {
-    "humanReadableName": "trusty-server-multi-nic",
-    "validators": {
-      "updated": [
-        "notBlank"
-      ],
-      "policed": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "deleted": [],
-      "container_format": [
-        "notBlank"
-      ],
-      "no_policy": [],
-      "disk_format": [
-        "notBlank"
-      ],
-      "kind": [
-        "notBlank"
-      ],
-      "lazy_blocked": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "write_protect": [],
-      "tag": [],
-      "path": [],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "no_sync": [],
-      "enacted": []
-    },
-    "id": 2,
-    "created": "2016-06-20T21:29:37.969117Z",
-    "updated": "2016-06-20T21:29:37.968740Z",
-    "enacted": "2016-06-20T21:29:38.057186Z",
-    "policed": "2016-06-20T21:29:39.144781Z",
-    "backend_register": "{\"next_run\": 0, \"last_success\": 1466458178.081831, \"exponent\": 0}",
-    "backend_status": "1 - OK",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "trusty-server-multi-nic",
-    "kind": "vm",
-    "disk_format": "raw",
-    "container_format": "bare",
-    "path": "/opt/xos/images/trusty-server-multi-nic.img",
-    "tag": null,
-    "deployments": []
-  },
-  {
-    "humanReadableName": "vsg-1.0",
-    "validators": {
-      "updated": [
-        "notBlank"
-      ],
-      "policed": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "deleted": [],
-      "container_format": [
-        "notBlank"
-      ],
-      "no_policy": [],
-      "disk_format": [
-        "notBlank"
-      ],
-      "kind": [
-        "notBlank"
-      ],
-      "lazy_blocked": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "write_protect": [],
-      "tag": [],
-      "path": [],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "no_sync": [],
-      "enacted": []
-    },
-    "id": 1,
-    "created": "2016-06-20T21:29:37.949039Z",
-    "updated": "2016-06-20T21:36:36.196635Z",
-    "enacted": "2016-06-20T21:36:56.463927Z",
-    "policed": "2016-06-20T21:36:37.125141Z",
-    "backend_register": "{\"next_run\": 0, \"last_success\": 1466458616.491853, \"exponent\": 0}",
-    "backend_status": "1 - OK",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "vsg-1.0",
-    "kind": "vm",
-    "disk_format": "raw",
-    "container_format": "bare",
-    "path": "/opt/xos/images/vsg-1.0.img",
-    "tag": null,
-    "deployments": []
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/instances.json b/views/ngXosViews/serviceGrid/mocks/data/instances.json
deleted file mode 100644
index 68a9620..0000000
--- a/views/ngXosViews/serviceGrid/mocks/data/instances.json
+++ /dev/null
@@ -1,89 +0,0 @@
-[
-    {
-        "humanReadableName": "mysite_vsg-1",
-        "validators": {
-            "policed": [],
-            "creator": [],
-            "ip": [],
-            "image": [
-                "notBlank"
-            ],
-            "backend_register": [
-                "notBlank"
-            ],
-            "flavor": [
-                "notBlank"
-            ],
-            "backend_status": [
-                "notBlank"
-            ],
-            "id": [],
-            "instance_name": [],
-            "slice": [
-                "notBlank"
-            ],
-            "no_sync": [],
-            "node": [
-                "notBlank"
-            ],
-            "userData": [],
-            "updated": [
-                "notBlank"
-            ],
-            "parent": [],
-            "deleted": [],
-            "lazy_blocked": [],
-            "deployment": [
-                "notBlank"
-            ],
-            "enacted": [],
-            "instance_uuid": [],
-            "numberCores": [
-                "notBlank"
-            ],
-            "name": [
-                "notBlank"
-            ],
-            "created": [],
-            "write_protect": [],
-            "isolation": [
-                "notBlank"
-            ],
-            "no_policy": [],
-            "instance_id": [],
-            "volumes": []
-        },
-        "id": 1,
-        "created": "2016-06-20T21:36:36.599139Z",
-        "updated": "2016-06-20T21:36:38.654961Z",
-        "enacted": "2016-06-20T21:37:09.416303Z",
-        "policed": "2016-06-20T21:36:40.179041Z",
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1466458656.696624, \"exponent\": 0}",
-        "backend_status": "1 - OK",
-        "deleted": false,
-        "write_protect": false,
-        "lazy_blocked": false,
-        "no_sync": false,
-        "no_policy": false,
-        "instance_id": "instance-00000001",
-        "instance_uuid": "6cdf8d0b-0468-4ce2-af07-b8d35e0e14cf",
-        "name": "mysite_vsg",
-        "instance_name": "mysite_vsg-1",
-        "ip": "192.168.122.140",
-        "image": 1,
-        "creator": 1,
-        "slice": 2,
-        "deployment": 1,
-        "node": 1,
-        "numberCores": 0,
-        "flavor": 1,
-        "userData": null,
-        "isolation": "vm",
-        "volumes": "/etc/dnsmasq.d,/etc/ufw",
-        "parent": null,
-        "networks": [
-            1,
-            2
-        ]
-    }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/networks.json b/views/ngXosViews/serviceGrid/mocks/data/networks.json
deleted file mode 100644
index e581298..0000000
--- a/views/ngXosViews/serviceGrid/mocks/data/networks.json
+++ /dev/null
@@ -1,166 +0,0 @@
-[
-  {
-    "humanReadableName": "management",
-    "validators": {
-      "router_id": [],
-      "policed": [],
-      "labels": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "start_ip": [],
-      "owner": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "subnet": [],
-      "subnet_id": [],
-      "end_ip": [],
-      "template": [
-        "notBlank"
-      ],
-      "no_sync": [],
-      "permit_all_slices": [],
-      "updated": [
-        "notBlank"
-      ],
-      "controller_url": [],
-      "controller_parameters": [],
-      "deleted": [],
-      "lazy_blocked": [],
-      "guaranteed_bandwidth": [
-        "notBlank"
-      ],
-      "enacted": [],
-      "autoconnect": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "write_protect": [],
-      "no_policy": [],
-      "network_id": [],
-      "topology_parameters": [],
-      "ports": []
-    },
-    "id": 1,
-    "created": "2016-06-20T21:36:32.006043Z",
-    "updated": "2016-06-20T21:36:32.039571Z",
-    "enacted": null,
-    "policed": "2016-06-20T21:36:32.389397Z",
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "management",
-    "template": 4,
-    "subnet": "172.27.0.0/24",
-    "ports": null,
-    "labels": null,
-    "owner": 1,
-    "guaranteed_bandwidth": 0,
-    "permit_all_slices": true,
-    "topology_parameters": null,
-    "controller_url": null,
-    "controller_parameters": null,
-    "network_id": null,
-    "router_id": null,
-    "subnet_id": null,
-    "autoconnect": false,
-    "slices": [
-      2
-    ],
-    "instances": [
-      1
-    ],
-    "routers": []
-  },
-  {
-    "humanReadableName": "mysite_vsg-access",
-    "validators": {
-      "router_id": [],
-      "policed": [],
-      "labels": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "start_ip": [],
-      "owner": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "subnet": [],
-      "subnet_id": [],
-      "end_ip": [],
-      "template": [
-        "notBlank"
-      ],
-      "no_sync": [],
-      "permit_all_slices": [],
-      "updated": [
-        "notBlank"
-      ],
-      "controller_url": [],
-      "controller_parameters": [],
-      "deleted": [],
-      "lazy_blocked": [],
-      "guaranteed_bandwidth": [
-        "notBlank"
-      ],
-      "enacted": [],
-      "autoconnect": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "write_protect": [],
-      "no_policy": [],
-      "network_id": [],
-      "topology_parameters": [],
-      "ports": []
-    },
-    "id": 2,
-    "created": "2016-06-20T21:36:36.439706Z",
-    "updated": "2016-06-20T21:36:36.456977Z",
-    "enacted": null,
-    "policed": "2016-06-20T21:36:37.419444Z",
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "mysite_vsg-access",
-    "template": 2,
-    "subnet": "",
-    "ports": null,
-    "labels": null,
-    "owner": 2,
-    "guaranteed_bandwidth": 0,
-    "permit_all_slices": true,
-    "topology_parameters": null,
-    "controller_url": null,
-    "controller_parameters": null,
-    "network_id": null,
-    "router_id": null,
-    "subnet_id": null,
-    "autoconnect": false,
-    "slices": [
-      2
-    ],
-    "instances": [
-      1
-    ],
-    "routers": []
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/networktemplates.json b/views/ngXosViews/serviceGrid/mocks/data/networktemplates.json
deleted file mode 100644
index c36a401..0000000
--- a/views/ngXosViews/serviceGrid/mocks/data/networktemplates.json
+++ /dev/null
@@ -1,262 +0,0 @@
-[
-  {
-    "humanReadableName": "Public shared IPv4",
-    "validators": {
-      "policed": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "access": [],
-      "shared_network_name": [],
-      "controller_kind": [],
-      "updated": [
-        "notBlank"
-      ],
-      "description": [],
-      "deleted": [],
-      "visibility": [
-        "notBlank"
-      ],
-      "lazy_blocked": [],
-      "guaranteed_bandwidth": [
-        "notBlank"
-      ],
-      "translation": [
-        "notBlank"
-      ],
-      "topology_kind": [
-        "notBlank"
-      ],
-      "enacted": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "write_protect": [],
-      "no_policy": [],
-      "no_sync": [],
-      "shared_network_id": []
-    },
-    "id": 1,
-    "created": "2016-06-23T20:14:16.126918Z",
-    "updated": "2016-06-23T20:14:16.126754Z",
-    "enacted": null,
-    "policed": null,
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "Public shared IPv4",
-    "description": null,
-    "guaranteed_bandwidth": 0,
-    "visibility": "private",
-    "translation": "NAT",
-    "access": null,
-    "shared_network_name": "nat-net",
-    "shared_network_id": null,
-    "topology_kind": "bigswitch",
-    "controller_kind": null
-  },
-  {
-    "humanReadableName": "Public dedicated IPv4",
-    "validators": {
-      "policed": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "access": [],
-      "shared_network_name": [],
-      "controller_kind": [],
-      "updated": [
-        "notBlank"
-      ],
-      "description": [],
-      "deleted": [],
-      "visibility": [
-        "notBlank"
-      ],
-      "lazy_blocked": [],
-      "guaranteed_bandwidth": [
-        "notBlank"
-      ],
-      "translation": [
-        "notBlank"
-      ],
-      "topology_kind": [
-        "notBlank"
-      ],
-      "enacted": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "write_protect": [],
-      "no_policy": [],
-      "no_sync": [],
-      "shared_network_id": []
-    },
-    "id": 3,
-    "created": "2016-06-23T20:14:16.202765Z",
-    "updated": "2016-06-23T20:14:16.202562Z",
-    "enacted": null,
-    "policed": null,
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "Public dedicated IPv4",
-    "description": null,
-    "guaranteed_bandwidth": 0,
-    "visibility": "public",
-    "translation": "none",
-    "access": null,
-    "shared_network_name": "ext-net",
-    "shared_network_id": null,
-    "topology_kind": "bigswitch",
-    "controller_kind": null
-  },
-  {
-    "humanReadableName": "management_template",
-    "validators": {
-      "policed": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "access": [],
-      "shared_network_name": [],
-      "controller_kind": [],
-      "updated": [
-        "notBlank"
-      ],
-      "description": [],
-      "deleted": [],
-      "visibility": [
-        "notBlank"
-      ],
-      "lazy_blocked": [],
-      "guaranteed_bandwidth": [
-        "notBlank"
-      ],
-      "translation": [
-        "notBlank"
-      ],
-      "topology_kind": [
-        "notBlank"
-      ],
-      "enacted": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "write_protect": [],
-      "no_policy": [],
-      "no_sync": [],
-      "shared_network_id": []
-    },
-    "id": 4,
-    "created": "2016-06-23T20:18:19.778090Z",
-    "updated": "2016-06-23T20:18:19.777887Z",
-    "enacted": null,
-    "policed": null,
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "management_template",
-    "description": null,
-    "guaranteed_bandwidth": 0,
-    "visibility": "private",
-    "translation": "none",
-    "access": null,
-    "shared_network_name": null,
-    "shared_network_id": null,
-    "topology_kind": "bigswitch",
-    "controller_kind": null
-  },
-  {
-    "humanReadableName": "Private",
-    "validators": {
-      "policed": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "access": [],
-      "shared_network_name": [],
-      "controller_kind": [],
-      "updated": [
-        "notBlank"
-      ],
-      "description": [],
-      "deleted": [],
-      "visibility": [
-        "notBlank"
-      ],
-      "lazy_blocked": [],
-      "guaranteed_bandwidth": [
-        "notBlank"
-      ],
-      "translation": [
-        "notBlank"
-      ],
-      "topology_kind": [
-        "notBlank"
-      ],
-      "enacted": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "write_protect": [],
-      "no_policy": [],
-      "no_sync": [],
-      "shared_network_id": []
-    },
-    "id": 2,
-    "created": "2016-06-23T20:14:16.178408Z",
-    "updated": "2016-06-23T20:18:24.072523Z",
-    "enacted": null,
-    "policed": null,
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "Private",
-    "description": null,
-    "guaranteed_bandwidth": 0,
-    "visibility": "private",
-    "translation": "none",
-    "access": null,
-    "shared_network_name": null,
-    "shared_network_id": null,
-    "topology_kind": "bigswitch",
-    "controller_kind": null
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/node.json b/views/ngXosViews/serviceGrid/mocks/data/node.json
deleted file mode 100644
index b92923f..0000000
--- a/views/ngXosViews/serviceGrid/mocks/data/node.json
+++ /dev/null
@@ -1,48 +0,0 @@
-[
-  {
-    "humanReadableName": "nova-compute-1",
-    "validators": {
-      "updated": [
-        "notBlank"
-      ],
-      "policed": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "deleted": [],
-      "no_policy": [],
-      "site": [],
-      "lazy_blocked": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "write_protect": [],
-      "site_deployment": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "no_sync": [],
-      "enacted": []
-    },
-    "id": 1,
-    "created": "2016-06-20T21:33:43.532833Z",
-    "updated": "2016-06-20T21:37:46.435545Z",
-    "enacted": null,
-    "policed": null,
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": true,
-    "no_policy": false,
-    "name": "nova-compute-1",
-    "site_deployment": 1,
-    "site": 1,
-    "nodelabels": []
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/services.json b/views/ngXosViews/serviceGrid/mocks/data/services.json
deleted file mode 100644
index f961a3c..0000000
--- a/views/ngXosViews/serviceGrid/mocks/data/services.json
+++ /dev/null
@@ -1,514 +0,0 @@
-[
-   {
-      "humanReadableName": "fabric",
-      "validators": {
-         "service_specific_attribute": [],
-         "policed": [],
-         "view_url": [],
-         "backend_register": [
-            "notBlank"
-         ],
-         "backend_status": [
-            "notBlank"
-         ],
-         "id": [],
-         "private_key_fn": [],
-         "icon_url": [],
-         "no_sync": [],
-         "updated": [
-            "notBlank"
-         ],
-         "description": [],
-         "deleted": [],
-         "lazy_blocked": [],
-         "versionNumber": [],
-         "service_specific_id": [],
-         "enacted": [],
-         "public_key": [],
-         "kind": [
-            "notBlank"
-         ],
-         "name": [
-            "notBlank"
-         ],
-         "created": [],
-         "write_protect": [],
-         "no_policy": [],
-         "enabled": [],
-         "controller": [],
-         "published": []
-      },
-      "id": 3,
-      "created": "2016-06-20T21:35:56.788935Z",
-      "updated": "2016-06-20T21:35:56.788499Z",
-      "enacted": null,
-      "policed": null,
-      "backend_register": "{}",
-      "backend_status": "0 - Provisioning in progress",
-      "deleted": false,
-      "write_protect": false,
-      "lazy_blocked": false,
-      "no_sync": false,
-      "no_policy": false,
-      "description": null,
-      "enabled": true,
-      "kind": "fabric",
-      "name": "fabric",
-      "versionNumber": null,
-      "published": true,
-      "view_url": "/admin/fabric/fabricservice/$id$/",
-      "icon_url": null,
-      "public_key": null,
-      "private_key_fn": null,
-      "service_specific_id": null,
-      "service_specific_attribute": null
-   },
-   {
-      "humanReadableName": "ONOS_Fabric",
-      "validators": {
-         "service_specific_attribute": [],
-         "policed": [],
-         "view_url": [],
-         "backend_register": [
-            "notBlank"
-         ],
-         "backend_status": [
-            "notBlank"
-         ],
-         "id": [],
-         "private_key_fn": [],
-         "icon_url": [],
-         "no_sync": [],
-         "updated": [
-            "notBlank"
-         ],
-         "description": [],
-         "deleted": [],
-         "lazy_blocked": [],
-         "versionNumber": [],
-         "service_specific_id": [],
-         "enacted": [],
-         "public_key": [],
-         "kind": [
-            "notBlank"
-         ],
-         "name": [
-            "notBlank"
-         ],
-         "created": [],
-         "write_protect": [],
-         "no_policy": [],
-         "enabled": [],
-         "controller": [],
-         "published": []
-      },
-      "id": 4,
-      "created": "2016-06-20T21:35:56.810806Z",
-      "updated": "2016-06-20T21:35:56.810649Z",
-      "enacted": "2016-06-20T21:36:04.658726Z",
-      "policed": null,
-      "backend_register": "{\"next_run\": 0, \"last_success\": 1466458564.69207, \"exponent\": 0}",
-      "backend_status": "1 - OK",
-      "deleted": false,
-      "write_protect": false,
-      "lazy_blocked": false,
-      "no_sync": false,
-      "no_policy": false,
-      "description": null,
-      "enabled": true,
-      "kind": "onos",
-      "name": "ONOS_Fabric",
-      "versionNumber": null,
-      "published": true,
-      "view_url": "/admin/onos/onosservice/$id$/",
-      "icon_url": null,
-      "public_key": null,
-      "private_key_fn": null,
-      "service_specific_id": null,
-      "service_specific_attribute": "{\"no_container\": true, \"rest_hostname\": \"onos-fabric\"}"
-   },
-   {
-      "humanReadableName": "vrouter",
-      "validators": {
-         "service_specific_attribute": [],
-         "policed": [],
-         "view_url": [],
-         "backend_register": [
-            "notBlank"
-         ],
-         "backend_status": [
-            "notBlank"
-         ],
-         "id": [],
-         "private_key_fn": [],
-         "icon_url": [],
-         "no_sync": [],
-         "updated": [
-            "notBlank"
-         ],
-         "description": [],
-         "deleted": [],
-         "lazy_blocked": [],
-         "versionNumber": [],
-         "service_specific_id": [],
-         "enacted": [],
-         "public_key": [],
-         "kind": [
-            "notBlank"
-         ],
-         "name": [
-            "notBlank"
-         ],
-         "created": [],
-         "write_protect": [],
-         "no_policy": [],
-         "enabled": [],
-         "controller": [],
-         "published": []
-      },
-      "id": 5,
-      "created": "2016-06-20T21:36:36.240269Z",
-      "updated": "2016-06-20T21:36:36.240062Z",
-      "enacted": null,
-      "policed": null,
-      "backend_register": "{}",
-      "backend_status": "0 - Provisioning in progress",
-      "deleted": false,
-      "write_protect": false,
-      "lazy_blocked": false,
-      "no_sync": false,
-      "no_policy": false,
-      "description": null,
-      "enabled": true,
-      "kind": "vROUTER",
-      "name": "vrouter",
-      "versionNumber": null,
-      "published": true,
-      "view_url": "/admin/vrouter/vrouterservice/$id$/",
-      "icon_url": null,
-      "public_key": null,
-      "private_key_fn": null,
-      "service_specific_id": null,
-      "service_specific_attribute": null
-   },
-   {
-      "humanReadableName": "vsg",
-      "validators": {
-         "service_specific_attribute": [],
-         "policed": [],
-         "view_url": [],
-         "backend_register": [
-            "notBlank"
-         ],
-         "backend_status": [
-            "notBlank"
-         ],
-         "id": [],
-         "private_key_fn": [],
-         "icon_url": [],
-         "no_sync": [],
-         "updated": [
-            "notBlank"
-         ],
-         "description": [],
-         "deleted": [],
-         "lazy_blocked": [],
-         "versionNumber": [],
-         "service_specific_id": [],
-         "enacted": [],
-         "public_key": [],
-         "kind": [
-            "notBlank"
-         ],
-         "name": [
-            "notBlank"
-         ],
-         "created": [],
-         "write_protect": [],
-         "no_policy": [],
-         "enabled": [],
-         "controller": [],
-         "published": []
-      },
-      "id": 6,
-      "created": "2016-06-20T21:36:36.262734Z",
-      "updated": "2016-06-20T21:36:36.262503Z",
-      "enacted": null,
-      "policed": null,
-      "backend_register": "{}",
-      "backend_status": "0 - Provisioning in progress",
-      "deleted": false,
-      "write_protect": false,
-      "lazy_blocked": false,
-      "no_sync": false,
-      "no_policy": false,
-      "description": null,
-      "enabled": true,
-      "kind": "vCPE",
-      "name": "vsg",
-      "versionNumber": null,
-      "published": true,
-      "view_url": "/admin/cord/vsgservice/$id$/",
-      "icon_url": null,
-      "public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCl1k9r1G491+ClISp6JOKlNmgBSV5YAvw2Ulh5Mj7XUgLatjHIBID2Ue54kAbCP48LVIAhqVFClPC7PtfVQY9+3mKi+LUJCgkkjR+6IlK/8eVzr1i3BvhLbtifrhKCvdL+d/5Tzxl8C8qCWfnJhVTqGRmVGBDFf4SukCjxF5CMG1naSlkgrINlMNc34IfQ2UAxRSscsEaMiijDQFBwGhJLQzef0r9vfIycnv3Ua/xQ5Pjqtcy/Go6K849wsNNUQ4yMgaUWZ8tmwFuqu4nFC2lI/H8EZN4NBejjMnJs3F6IMb0xe45/r7TXvWEpZ1c/nNwrvOPi/U44VkwMgp/EcRgV smbaker@node.smbaker-xos-test.xos-pg0.wisc.cloudlab.us\n",
-      "private_key_fn": "/opt/xos/services/vsg/keys/vsg_rsa",
-      "service_specific_id": null,
-      "service_specific_attribute": "{\"backend_network_label\": \"hpc_client\"}"
-   },
-   {
-      "humanReadableName": "volt",
-      "validators": {
-         "service_specific_attribute": [],
-         "policed": [],
-         "view_url": [],
-         "backend_register": [
-            "notBlank"
-         ],
-         "backend_status": [
-            "notBlank"
-         ],
-         "id": [],
-         "private_key_fn": [],
-         "icon_url": [],
-         "no_sync": [],
-         "updated": [
-            "notBlank"
-         ],
-         "description": [],
-         "deleted": [],
-         "lazy_blocked": [],
-         "versionNumber": [],
-         "service_specific_id": [],
-         "enacted": [],
-         "public_key": [],
-         "kind": [
-            "notBlank"
-         ],
-         "name": [
-            "notBlank"
-         ],
-         "created": [],
-         "write_protect": [],
-         "no_policy": [],
-         "enabled": [],
-         "controller": [],
-         "published": []
-      },
-      "id": 7,
-      "created": "2016-06-20T21:36:36.468811Z",
-      "updated": "2016-06-20T21:36:36.468645Z",
-      "enacted": null,
-      "policed": null,
-      "backend_register": "{}",
-      "backend_status": "0 - Provisioning in progress",
-      "deleted": false,
-      "write_protect": false,
-      "lazy_blocked": false,
-      "no_sync": false,
-      "no_policy": false,
-      "description": null,
-      "enabled": true,
-      "kind": "vOLT",
-      "name": "volt",
-      "versionNumber": null,
-      "published": true,
-      "view_url": "/admin/cord/voltservice/$id$/",
-      "icon_url": null,
-      "public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCl1k9r1G491+ClISp6JOKlNmgBSV5YAvw2Ulh5Mj7XUgLatjHIBID2Ue54kAbCP48LVIAhqVFClPC7PtfVQY9+3mKi+LUJCgkkjR+6IlK/8eVzr1i3BvhLbtifrhKCvdL+d/5Tzxl8C8qCWfnJhVTqGRmVGBDFf4SukCjxF5CMG1naSlkgrINlMNc34IfQ2UAxRSscsEaMiijDQFBwGhJLQzef0r9vfIycnv3Ua/xQ5Pjqtcy/Go6K849wsNNUQ4yMgaUWZ8tmwFuqu4nFC2lI/H8EZN4NBejjMnJs3F6IMb0xe45/r7TXvWEpZ1c/nNwrvOPi/U44VkwMgp/EcRgV smbaker@node.smbaker-xos-test.xos-pg0.wisc.cloudlab.us\n",
-      "private_key_fn": "/opt/xos/services/volt/keys/volt_rsa",
-      "service_specific_id": null,
-      "service_specific_attribute": null
-   },
-   {
-      "humanReadableName": "vtr",
-      "validators": {
-         "service_specific_attribute": [],
-         "policed": [],
-         "view_url": [],
-         "backend_register": [
-            "notBlank"
-         ],
-         "backend_status": [
-            "notBlank"
-         ],
-         "id": [],
-         "private_key_fn": [],
-         "icon_url": [],
-         "no_sync": [],
-         "updated": [
-            "notBlank"
-         ],
-         "description": [],
-         "deleted": [],
-         "lazy_blocked": [],
-         "versionNumber": [],
-         "service_specific_id": [],
-         "enacted": [],
-         "public_key": [],
-         "kind": [
-            "notBlank"
-         ],
-         "name": [
-            "notBlank"
-         ],
-         "created": [],
-         "write_protect": [],
-         "no_policy": [],
-         "enabled": [],
-         "controller": [],
-         "published": []
-      },
-      "id": 8,
-      "created": "2016-06-20T21:36:37.129713Z",
-      "updated": "2016-06-20T21:36:37.129433Z",
-      "enacted": null,
-      "policed": null,
-      "backend_register": "{}",
-      "backend_status": "0 - Provisioning in progress",
-      "deleted": false,
-      "write_protect": false,
-      "lazy_blocked": false,
-      "no_sync": false,
-      "no_policy": false,
-      "description": null,
-      "enabled": true,
-      "kind": "vTR",
-      "name": "vtr",
-      "versionNumber": null,
-      "published": true,
-      "view_url": "/admin/vtr/vtrservice/$id$/",
-      "icon_url": null,
-      "public_key": null,
-      "private_key_fn": null,
-      "service_specific_id": null,
-      "service_specific_attribute": null
-   },
-   {
-      "humanReadableName": "vtn",
-      "validators": {
-         "service_specific_attribute": [],
-         "policed": [],
-         "view_url": [],
-         "backend_register": [
-            "notBlank"
-         ],
-         "backend_status": [
-            "notBlank"
-         ],
-         "id": [],
-         "private_key_fn": [],
-         "icon_url": [],
-         "no_sync": [],
-         "updated": [
-            "notBlank"
-         ],
-         "description": [],
-         "deleted": [],
-         "lazy_blocked": [],
-         "versionNumber": [],
-         "service_specific_id": [],
-         "enacted": [],
-         "public_key": [],
-         "kind": [
-            "notBlank"
-         ],
-         "name": [
-            "notBlank"
-         ],
-         "created": [],
-         "write_protect": [],
-         "no_policy": [],
-         "enabled": [],
-         "controller": [],
-         "published": []
-      },
-      "id": 2,
-      "created": "2016-06-20T21:35:51.964599Z",
-      "updated": "2016-06-20T21:37:46.469766Z",
-      "enacted": null,
-      "policed": null,
-      "backend_register": "{}",
-      "backend_status": "0 - Provisioning in progress",
-      "deleted": false,
-      "write_protect": false,
-      "lazy_blocked": false,
-      "no_sync": false,
-      "no_policy": false,
-      "description": null,
-      "enabled": true,
-      "kind": "VTN",
-      "name": "vtn",
-      "versionNumber": null,
-      "published": true,
-      "view_url": "/admin/vtn/vtnservice/$id$/",
-      "icon_url": null,
-      "public_key": null,
-      "private_key_fn": null,
-      "service_specific_id": null,
-      "service_specific_attribute": "{\"sshUser\": \"root\", \"xosEndpoint\": \"http://xos/\", \"xosPassword\": \"letmein\", \"sshKeyFile\": \"/root/node_key\", \"xosUser\": \"padmin@vicci.org\", \"ovsdbPort\": \"6641\", \"sshPort\": \"22\", \"localManagementIp\": \"172.27.0.1/24\", \"privateGatewayMac\": \"00:00:00:00:00:01\"}"
-   },
-   {
-      "humanReadableName": "ONOS_CORD",
-      "validators": {
-         "service_specific_attribute": [],
-         "policed": [],
-         "view_url": [],
-         "backend_register": [
-            "notBlank"
-         ],
-         "backend_status": [
-            "notBlank"
-         ],
-         "id": [],
-         "private_key_fn": [],
-         "icon_url": [],
-         "no_sync": [],
-         "updated": [
-            "notBlank"
-         ],
-         "description": [],
-         "deleted": [],
-         "lazy_blocked": [],
-         "versionNumber": [],
-         "service_specific_id": [],
-         "enacted": [],
-         "public_key": [],
-         "kind": [
-            "notBlank"
-         ],
-         "name": [
-            "notBlank"
-         ],
-         "created": [],
-         "write_protect": [],
-         "no_policy": [],
-         "enabled": [],
-         "controller": [],
-         "published": []
-      },
-      "id": 1,
-      "created": "2016-06-20T21:35:51.892027Z",
-      "updated": "2016-06-20T21:37:46.417265Z",
-      "enacted": "2016-06-20T21:37:54.037851Z",
-      "policed": null,
-      "backend_register": "{\"next_run\": 0, \"last_success\": 1466458674.061194, \"exponent\": 0}",
-      "backend_status": "1 - OK",
-      "deleted": false,
-      "write_protect": false,
-      "lazy_blocked": false,
-      "no_sync": false,
-      "no_policy": false,
-      "description": null,
-      "enabled": true,
-      "kind": "onos",
-      "name": "ONOS_CORD",
-      "versionNumber": null,
-      "published": true,
-      "view_url": "/admin/onos/onosservice/$id$/",
-      "icon_url": null,
-      "public_key": null,
-      "private_key_fn": null,
-      "service_specific_id": null,
-      "service_specific_attribute": "{\"no_container\": true, \"rest_hostname\": \"onos-cord\"}"
-   }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/sites.json b/views/ngXosViews/serviceGrid/mocks/data/sites.json
deleted file mode 100644
index bd0ba95..0000000
--- a/views/ngXosViews/serviceGrid/mocks/data/sites.json
+++ /dev/null
@@ -1,72 +0,0 @@
-[
-  {
-    "humanReadableName": "mysite",
-    "validators": {
-      "policed": [],
-      "backend_register": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "site_url": [
-        "url"
-      ],
-      "location": [
-        "notBlank"
-      ],
-      "hosts_nodes": [],
-      "no_sync": [],
-      "abbreviated_name": [
-        "notBlank"
-      ],
-      "updated": [
-        "notBlank"
-      ],
-      "deleted": [],
-      "lazy_blocked": [],
-      "latitude": [],
-      "is_public": [],
-      "enacted": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "write_protect": [],
-      "no_policy": [],
-      "enabled": [],
-      "longitude": [],
-      "hosts_users": [],
-      "login_base": [
-        "notBlank"
-      ]
-    },
-    "id": 1,
-    "created": "2016-06-20T21:33:36.116579Z",
-    "updated": "2016-06-20T21:36:36.210629Z",
-    "enacted": null,
-    "policed": "2016-06-20T21:36:37.091400Z",
-    "backend_register": "{}",
-    "backend_status": "1 - OK",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "mysite",
-    "site_url": "http://xosproject.org/",
-    "enabled": true,
-    "hosts_nodes": true,
-    "hosts_users": true,
-    "location": null,
-    "longitude": null,
-    "latitude": null,
-    "login_base": "mysite",
-    "is_public": true,
-    "abbreviated_name": "",
-    "deployments": [
-      1
-    ]
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/slices.json b/views/ngXosViews/serviceGrid/mocks/data/slices.json
deleted file mode 100644
index 2f4d00c..0000000
--- a/views/ngXosViews/serviceGrid/mocks/data/slices.json
+++ /dev/null
@@ -1,163 +0,0 @@
-[
-  {
-    "humanReadableName": "mysite_management",
-    "validators": {
-      "default_flavor": [],
-      "policed": [],
-      "creator": [],
-      "site": [
-        "notBlank"
-      ],
-      "max_instances": [
-        "notBlank"
-      ],
-      "backend_register": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "network": [],
-      "service": [],
-      "default_isolation": [
-        "notBlank"
-      ],
-      "no_sync": [],
-      "exposed_ports": [],
-      "updated": [
-        "notBlank"
-      ],
-      "description": [],
-      "deleted": [],
-      "slice_url": [
-        "url"
-      ],
-      "serviceClass": [],
-      "lazy_blocked": [],
-      "omf_friendly": [],
-      "mount_data_sets": [],
-      "default_node": [],
-      "enacted": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "write_protect": [],
-      "no_policy": [],
-      "enabled": [],
-      "default_image": []
-    },
-    "id": 1,
-    "created": "2016-06-20T21:36:31.979507Z",
-    "updated": "2016-06-20T21:36:38.635976Z",
-    "enacted": null,
-    "policed": "2016-06-20T21:36:38.787528Z",
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "mysite_management",
-    "enabled": true,
-    "omf_friendly": false,
-    "description": "",
-    "slice_url": "",
-    "site": 1,
-    "max_instances": 10,
-    "service": null,
-    "network": "noauto",
-    "exposed_ports": null,
-    "serviceClass": null,
-    "creator": 1,
-    "default_flavor": null,
-    "default_image": null,
-    "mount_data_sets": "GenBank",
-    "default_isolation": "vm",
-    "networks": []
-  },
-  {
-    "humanReadableName": "mysite_vsg",
-    "validators": {
-      "default_flavor": [],
-      "policed": [],
-      "creator": [],
-      "site": [
-        "notBlank"
-      ],
-      "max_instances": [
-        "notBlank"
-      ],
-      "backend_register": [
-        "notBlank"
-      ],
-      "backend_status": [
-        "notBlank"
-      ],
-      "id": [],
-      "network": [],
-      "service": [],
-      "default_isolation": [
-        "notBlank"
-      ],
-      "no_sync": [],
-      "exposed_ports": [],
-      "updated": [
-        "notBlank"
-      ],
-      "description": [],
-      "deleted": [],
-      "slice_url": [
-        "url"
-      ],
-      "serviceClass": [],
-      "lazy_blocked": [],
-      "omf_friendly": [],
-      "mount_data_sets": [],
-      "default_node": [],
-      "enacted": [],
-      "name": [
-        "notBlank"
-      ],
-      "created": [],
-      "write_protect": [],
-      "no_policy": [],
-      "enabled": [],
-      "default_image": []
-    },
-    "id": 2,
-    "created": "2016-06-20T21:36:36.290539Z",
-    "updated": "2016-06-20T21:36:38.625760Z",
-    "enacted": null,
-    "policed": "2016-06-20T21:36:40.119502Z",
-    "backend_register": "{}",
-    "backend_status": "0 - Provisioning in progress",
-    "deleted": false,
-    "write_protect": false,
-    "lazy_blocked": false,
-    "no_sync": false,
-    "no_policy": false,
-    "name": "mysite_vsg",
-    "enabled": true,
-    "omf_friendly": false,
-    "description": "",
-    "slice_url": "",
-    "site": 1,
-    "max_instances": 10,
-    "service": 6,
-    "network": "noauto",
-    "exposed_ports": null,
-    "serviceClass": null,
-    "creator": 1,
-    "default_flavor": null,
-    "default_image": 1,
-    "mount_data_sets": "GenBank",
-    "default_isolation": "vm",
-    "networks": [
-      2,
-      1
-    ]
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/tenants.json b/views/ngXosViews/serviceGrid/mocks/data/tenants.json
deleted file mode 100644
index 2739c9a..0000000
--- a/views/ngXosViews/serviceGrid/mocks/data/tenants.json
+++ /dev/null
@@ -1,612 +0,0 @@
-[
-    {
-        "humanReadableName": "coarse-tenant-3",
-        "validators": {
-            "service_specific_attribute": [],
-            "policed": [],
-            "backend_register": [
-                "notBlank"
-            ],
-            "backend_status": [
-                "notBlank"
-            ],
-            "id": [],
-            "no_policy": [],
-            "subscriber_service": [],
-            "subscriber_tenant": [],
-            "no_sync": [],
-            "connect_method": [
-                "notBlank"
-            ],
-            "updated": [
-                "notBlank"
-            ],
-            "deleted": [],
-            "lazy_blocked": [],
-            "service_specific_id": [],
-            "subscriber_root": [],
-            "subscriber_user": [],
-            "enacted": [],
-            "kind": [
-                "notBlank"
-            ],
-            "created": [],
-            "write_protect": [],
-            "subscriber_network": [],
-            "provider_service": [
-                "notBlank"
-            ]
-        },
-        "id": 3,
-        "created": "2016-06-20T21:36:36.274049Z",
-        "updated": "2016-06-20T21:36:36.273883Z",
-        "enacted": null,
-        "policed": null,
-        "backend_register": "{}",
-        "backend_status": "0 - Provisioning in progress",
-        "deleted": false,
-        "write_protect": false,
-        "lazy_blocked": false,
-        "no_sync": false,
-        "no_policy": false,
-        "kind": "coarse",
-        "provider_service": 5,
-        "subscriber_service": 6,
-        "subscriber_tenant": null,
-        "subscriber_user": null,
-        "subscriber_root": null,
-        "subscriber_network": null,
-        "service_specific_id": null,
-        "service_specific_attribute": null,
-        "connect_method": "na"
-    },
-    {
-        "humanReadableName": "coarse-tenant-4",
-        "validators": {
-            "service_specific_attribute": [],
-            "policed": [],
-            "backend_register": [
-                "notBlank"
-            ],
-            "backend_status": [
-                "notBlank"
-            ],
-            "id": [],
-            "no_policy": [],
-            "subscriber_service": [],
-            "subscriber_tenant": [],
-            "no_sync": [],
-            "connect_method": [
-                "notBlank"
-            ],
-            "updated": [
-                "notBlank"
-            ],
-            "deleted": [],
-            "lazy_blocked": [],
-            "service_specific_id": [],
-            "subscriber_root": [],
-            "subscriber_user": [],
-            "enacted": [],
-            "kind": [
-                "notBlank"
-            ],
-            "created": [],
-            "write_protect": [],
-            "subscriber_network": [],
-            "provider_service": [
-                "notBlank"
-            ]
-        },
-        "id": 4,
-        "created": "2016-06-20T21:36:36.477159Z",
-        "updated": "2016-06-20T21:36:36.477018Z",
-        "enacted": null,
-        "policed": null,
-        "backend_register": "{}",
-        "backend_status": "0 - Provisioning in progress",
-        "deleted": false,
-        "write_protect": false,
-        "lazy_blocked": false,
-        "no_sync": false,
-        "no_policy": false,
-        "kind": "coarse",
-        "provider_service": 6,
-        "subscriber_service": 7,
-        "subscriber_tenant": null,
-        "subscriber_user": null,
-        "subscriber_root": null,
-        "subscriber_network": null,
-        "service_specific_id": null,
-        "service_specific_attribute": null,
-        "connect_method": "na"
-    },
-    {
-        "humanReadableName": "vOLT-tenant-6",
-        "validators": {
-            "service_specific_attribute": [],
-            "policed": [],
-            "backend_register": [
-                "notBlank"
-            ],
-            "backend_status": [
-                "notBlank"
-            ],
-            "id": [],
-            "no_policy": [],
-            "subscriber_service": [],
-            "subscriber_tenant": [],
-            "no_sync": [],
-            "connect_method": [
-                "notBlank"
-            ],
-            "updated": [
-                "notBlank"
-            ],
-            "deleted": [],
-            "lazy_blocked": [],
-            "service_specific_id": [],
-            "subscriber_root": [],
-            "subscriber_user": [],
-            "enacted": [],
-            "kind": [
-                "notBlank"
-            ],
-            "created": [],
-            "write_protect": [],
-            "subscriber_network": [],
-            "provider_service": [
-                "notBlank"
-            ]
-        },
-        "id": 6,
-        "created": "2016-06-20T21:36:36.533209Z",
-        "updated": "2016-06-20T21:36:36.533060Z",
-        "enacted": null,
-        "policed": null,
-        "backend_register": "{}",
-        "backend_status": "0 - Provisioning in progress",
-        "deleted": false,
-        "write_protect": false,
-        "lazy_blocked": false,
-        "no_sync": false,
-        "no_policy": false,
-        "kind": "vOLT",
-        "provider_service": 7,
-        "subscriber_service": null,
-        "subscriber_tenant": null,
-        "subscriber_user": null,
-        "subscriber_root": 1,
-        "subscriber_network": null,
-        "service_specific_id": "123",
-        "service_specific_attribute": null,
-        "connect_method": "na"
-    },
-    {
-        "humanReadableName": "vCPE-tenant-7",
-        "validators": {
-            "service_specific_attribute": [],
-            "policed": [],
-            "backend_register": [
-                "notBlank"
-            ],
-            "backend_status": [
-                "notBlank"
-            ],
-            "id": [],
-            "no_policy": [],
-            "subscriber_service": [],
-            "subscriber_tenant": [],
-            "no_sync": [],
-            "connect_method": [
-                "notBlank"
-            ],
-            "updated": [
-                "notBlank"
-            ],
-            "deleted": [],
-            "lazy_blocked": [],
-            "service_specific_id": [],
-            "subscriber_root": [],
-            "subscriber_user": [],
-            "enacted": [],
-            "kind": [
-                "notBlank"
-            ],
-            "created": [],
-            "write_protect": [],
-            "subscriber_network": [],
-            "provider_service": [
-                "notBlank"
-            ]
-        },
-        "id": 7,
-        "created": "2016-06-20T21:36:36.556180Z",
-        "updated": "2016-06-20T21:36:37.277167Z",
-        "enacted": "2016-06-20T21:43:30.075930Z",
-        "policed": null,
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1466459040.216983, \"exponent\": 0}",
-        "backend_status": "1 - OK",
-        "deleted": false,
-        "write_protect": false,
-        "lazy_blocked": false,
-        "no_sync": false,
-        "no_policy": false,
-        "kind": "vCPE",
-        "provider_service": 6,
-        "subscriber_service": null,
-        "subscriber_tenant": 6,
-        "subscriber_user": null,
-        "subscriber_root": null,
-        "subscriber_network": null,
-        "service_specific_id": null,
-        "service_specific_attribute": "{\"instance_id\": 1, \"creator_id\": 1, \"last_ansible_hash\": \"30d35de441b1e87e7e6a4fc79834ac56\"}",
-        "connect_method": "na"
-    },
-    {
-        "humanReadableName": "vROUTER-tenant-9",
-        "validators": {
-            "service_specific_attribute": [],
-            "policed": [],
-            "backend_register": [
-                "notBlank"
-            ],
-            "backend_status": [
-                "notBlank"
-            ],
-            "id": [],
-            "no_policy": [],
-            "subscriber_service": [],
-            "subscriber_tenant": [],
-            "no_sync": [],
-            "connect_method": [
-                "notBlank"
-            ],
-            "updated": [
-                "notBlank"
-            ],
-            "deleted": [],
-            "lazy_blocked": [],
-            "service_specific_id": [],
-            "subscriber_root": [],
-            "subscriber_user": [],
-            "enacted": [],
-            "kind": [
-                "notBlank"
-            ],
-            "created": [],
-            "write_protect": [],
-            "subscriber_network": [],
-            "provider_service": [
-                "notBlank"
-            ]
-        },
-        "id": 9,
-        "created": "2016-06-20T21:36:36.677067Z",
-        "updated": "2016-06-20T21:36:36.677678Z",
-        "enacted": null,
-        "policed": null,
-        "backend_register": "{\"next_run\": 1466494205.83568, \"last_failure\": 1466465405.835683, \"last_success\": 1466458621.14023, \"exponent\": 209, \"failures\": 209}",
-        "backend_status": "2 - Exception('Expecting object: line 1 column 1 (char 0) // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/network/configuration/hosts',)",
-        "deleted": false,
-        "write_protect": false,
-        "lazy_blocked": false,
-        "no_sync": false,
-        "no_policy": false,
-        "kind": "vROUTER",
-        "provider_service": 5,
-        "subscriber_service": null,
-        "subscriber_tenant": 7,
-        "subscriber_user": null,
-        "subscriber_root": null,
-        "subscriber_network": null,
-        "service_specific_id": null,
-        "service_specific_attribute": "{\"public_ip\": \"10.168.0.3\", \"address_pool_id\": 2, \"public_mac\": \"02:42:0a:a8:00:03\"}",
-        "connect_method": "na"
-    },
-    {
-        "humanReadableName": "vROUTER-tenant-8",
-        "validators": {
-            "service_specific_attribute": [],
-            "policed": [],
-            "backend_register": [
-                "notBlank"
-            ],
-            "backend_status": [
-                "notBlank"
-            ],
-            "id": [],
-            "no_policy": [],
-            "subscriber_service": [],
-            "subscriber_tenant": [],
-            "no_sync": [],
-            "connect_method": [
-                "notBlank"
-            ],
-            "updated": [
-                "notBlank"
-            ],
-            "deleted": [],
-            "lazy_blocked": [],
-            "service_specific_id": [],
-            "subscriber_root": [],
-            "subscriber_user": [],
-            "enacted": [],
-            "kind": [
-                "notBlank"
-            ],
-            "created": [],
-            "write_protect": [],
-            "subscriber_network": [],
-            "provider_service": [
-                "notBlank"
-            ]
-        },
-        "id": 8,
-        "created": "2016-06-20T21:36:36.664628Z",
-        "updated": "2016-06-20T21:36:36.665255Z",
-        "enacted": null,
-        "policed": null,
-        "backend_register": "{\"next_run\": 1466494206.981866, \"last_failure\": 1466465406.981868, \"last_success\": 1466458619.671976, \"exponent\": 209, \"failures\": 209}",
-        "backend_status": "2 - Exception('Expecting object: line 1 column 1 (char 0) // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/network/configuration/hosts',)",
-        "deleted": false,
-        "write_protect": false,
-        "lazy_blocked": false,
-        "no_sync": false,
-        "no_policy": false,
-        "kind": "vROUTER",
-        "provider_service": 5,
-        "subscriber_service": 6,
-        "subscriber_tenant": null,
-        "subscriber_user": null,
-        "subscriber_root": null,
-        "subscriber_network": null,
-        "service_specific_id": null,
-        "service_specific_attribute": "{\"public_ip\": \"10.168.0.2\", \"tenant_for_instance_id\": 1, \"address_pool_id\": 2, \"public_mac\": \"02:42:0a:a8:00:02\"}",
-        "connect_method": "na"
-    },
-    {
-        "humanReadableName": "onos-tenant-1",
-        "validators": {
-            "service_specific_attribute": [],
-            "policed": [],
-            "backend_register": [
-                "notBlank"
-            ],
-            "backend_status": [
-                "notBlank"
-            ],
-            "id": [],
-            "no_policy": [],
-            "subscriber_service": [],
-            "subscriber_tenant": [],
-            "no_sync": [],
-            "connect_method": [
-                "notBlank"
-            ],
-            "updated": [
-                "notBlank"
-            ],
-            "deleted": [],
-            "lazy_blocked": [],
-            "service_specific_id": [],
-            "subscriber_root": [],
-            "subscriber_user": [],
-            "enacted": [],
-            "kind": [
-                "notBlank"
-            ],
-            "created": [],
-            "write_protect": [],
-            "subscriber_network": [],
-            "provider_service": [
-                "notBlank"
-            ]
-        },
-        "id": 1,
-        "created": "2016-06-20T21:35:52.080746Z",
-        "updated": "2016-06-20T21:37:46.517157Z",
-        "enacted": "2016-06-20T21:37:55.377495Z",
-        "policed": null,
-        "backend_register": "{\"next_run\": 0, \"last_success\": 1466458677.529692, \"exponent\": 0}",
-        "backend_status": "1 - OK",
-        "deleted": false,
-        "write_protect": false,
-        "lazy_blocked": false,
-        "no_sync": false,
-        "no_policy": false,
-        "kind": "onos",
-        "provider_service": 1,
-        "subscriber_service": 2,
-        "subscriber_tenant": null,
-        "subscriber_user": null,
-        "subscriber_root": null,
-        "subscriber_network": null,
-        "service_specific_id": null,
-        "service_specific_attribute": "{\"creator_id\": 1, \"dependencies\": \"org.onosproject.drivers, org.onosproject.drivers.ovsdb, org.onosproject.openflow-base, org.onosproject.ovsdb-base, org.onosproject.dhcp, org.onosproject.cordvtn, org.onosproject.olt, org.onosproject.igmp, org.onosproject.cordmcast\", \"name\": \"VTN_ONOS_app\"}",
-        "connect_method": "na"
-    },
-    {
-        "humanReadableName": "onos-tenant-5",
-        "validators": {
-            "service_specific_attribute": [],
-            "policed": [],
-            "backend_register": [
-                "notBlank"
-            ],
-            "backend_status": [
-                "notBlank"
-            ],
-            "id": [],
-            "no_policy": [],
-            "subscriber_service": [],
-            "subscriber_tenant": [],
-            "no_sync": [],
-            "connect_method": [
-                "notBlank"
-            ],
-            "updated": [
-                "notBlank"
-            ],
-            "deleted": [],
-            "lazy_blocked": [],
-            "service_specific_id": [],
-            "subscriber_root": [],
-            "subscriber_user": [],
-            "enacted": [],
-            "kind": [
-                "notBlank"
-            ],
-            "created": [],
-            "write_protect": [],
-            "subscriber_network": [],
-            "provider_service": [
-                "notBlank"
-            ]
-        },
-        "id": 5,
-        "created": "2016-06-20T21:36:36.499094Z",
-        "updated": "2016-06-20T21:36:36.498928Z",
-        "enacted": null,
-        "policed": null,
-        "backend_register": "{\"next_run\": 1466494235.874574, \"failures\": 732, \"last_success\": 1466458599.686363, \"exponent\": 732, \"last_failure\": 1466465435.874577}",
-        "backend_status": "2 - Exception('Ansible playbook failed. // Status code was not [200] // Status code was not [200]',)",
-        "deleted": false,
-        "write_protect": false,
-        "lazy_blocked": false,
-        "no_sync": false,
-        "no_policy": false,
-        "kind": "onos",
-        "provider_service": 1,
-        "subscriber_service": 7,
-        "subscriber_tenant": null,
-        "subscriber_user": null,
-        "subscriber_root": null,
-        "subscriber_network": null,
-        "service_specific_id": null,
-        "service_specific_attribute": "{\"creator_id\": 1, \"dependencies\": \"org.onosproject.openflow-base, org.onosproject.olt, org.ciena.onos.ext_notifier, org.ciena.onos.volt_event_publisher\", \"name\": \"vOLT_ONOS_app\", \"install_dependencies\": \"onos-ext-notifier-1.0-SNAPSHOT.oar, onos-ext-volt-event-publisher-1.0-SNAPSHOT.oar\"}",
-        "connect_method": "na"
-    },
-    {
-        "humanReadableName": "onos-tenant-10",
-        "validators": {
-            "service_specific_attribute": [],
-            "policed": [],
-            "backend_register": [
-                "notBlank"
-            ],
-            "backend_status": [
-                "notBlank"
-            ],
-            "id": [],
-            "no_policy": [],
-            "subscriber_service": [],
-            "subscriber_tenant": [],
-            "no_sync": [],
-            "connect_method": [
-                "notBlank"
-            ],
-            "updated": [
-                "notBlank"
-            ],
-            "deleted": [],
-            "lazy_blocked": [],
-            "service_specific_id": [],
-            "subscriber_root": [],
-            "subscriber_user": [],
-            "enacted": [],
-            "kind": [
-                "notBlank"
-            ],
-            "created": [],
-            "write_protect": [],
-            "subscriber_network": [],
-            "provider_service": [
-                "notBlank"
-            ]
-        },
-        "id": 10,
-        "created": "2016-06-20T21:36:37.094935Z",
-        "updated": "2016-06-20T21:36:37.094764Z",
-        "enacted": null,
-        "policed": null,
-        "backend_register": "{\"next_run\": 1466494237.018397, \"failures\": 732, \"last_success\": 1466458602.833531, \"exponent\": 732, \"last_failure\": 1466465437.0184}",
-        "backend_status": "2 - Exception('Ansible playbook failed. // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.vrouter/active',)",
-        "deleted": false,
-        "write_protect": false,
-        "lazy_blocked": false,
-        "no_sync": false,
-        "no_policy": false,
-        "kind": "onos",
-        "provider_service": 4,
-        "subscriber_service": 5,
-        "subscriber_tenant": null,
-        "subscriber_user": null,
-        "subscriber_root": null,
-        "subscriber_network": null,
-        "service_specific_id": null,
-        "service_specific_attribute": "{\"creator_id\": 1, \"dependencies\": \"org.onosproject.vrouter\", \"name\": \"vRouter_ONOS_app\"}",
-        "connect_method": "na"
-    },
-    {
-        "humanReadableName": "onos-tenant-2",
-        "validators": {
-            "service_specific_attribute": [],
-            "policed": [],
-            "backend_register": [
-                "notBlank"
-            ],
-            "backend_status": [
-                "notBlank"
-            ],
-            "id": [],
-            "no_policy": [],
-            "subscriber_service": [],
-            "subscriber_tenant": [],
-            "no_sync": [],
-            "connect_method": [
-                "notBlank"
-            ],
-            "updated": [
-                "notBlank"
-            ],
-            "deleted": [],
-            "lazy_blocked": [],
-            "service_specific_id": [],
-            "subscriber_root": [],
-            "subscriber_user": [],
-            "enacted": [],
-            "kind": [
-                "notBlank"
-            ],
-            "created": [],
-            "write_protect": [],
-            "subscriber_network": [],
-            "provider_service": [
-                "notBlank"
-            ]
-        },
-        "id": 2,
-        "created": "2016-06-20T21:35:56.835440Z",
-        "updated": "2016-06-20T21:35:56.835274Z",
-        "enacted": null,
-        "policed": null,
-        "backend_register": "{\"next_run\": 1466494229.282132, \"failures\": 736, \"last_success\": 1466458566.347982, \"exponent\": 736, \"last_failure\": 1466465429.282135}",
-        "backend_status": "2 - Exception('Ansible playbook failed. // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.lldpprovider/active // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.hostprovider/active // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.openflow-base/active // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.openflow/active // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.drivers/active // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.segmentrouting/active',)",
-        "deleted": false,
-        "write_protect": false,
-        "lazy_blocked": false,
-        "no_sync": false,
-        "no_policy": false,
-        "kind": "onos",
-        "provider_service": 4,
-        "subscriber_service": 3,
-        "subscriber_tenant": null,
-        "subscriber_user": null,
-        "subscriber_root": null,
-        "subscriber_network": null,
-        "service_specific_id": null,
-        "service_specific_attribute": "{\"creator_id\": 1, \"dependencies\": \"org.onosproject.lldpprovider, org.onosproject.hostprovider, org.onosproject.openflow-base, org.onosproject.openflow, org.onosproject.drivers, org.onosproject.segmentrouting\", \"name\": \"Fabric_ONOS_app\"}",
-        "connect_method": "na"
-    }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/diagnostic.conf.json b/views/ngXosViews/serviceGrid/mocks/diagnostic.conf.json
deleted file mode 100644
index 70c3337..0000000
--- a/views/ngXosViews/serviceGrid/mocks/diagnostic.conf.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "endpoints": [
-    {
-      "url": "images",
-      "base": "api/core/",
-      "methods": ["GET"],
-      "param": "id"
-    },
-    {
-      "url": "instances",
-      "base": "api/core/",
-      "methods": ["GET"],
-      "param": "id"
-    },
-    {
-      "url": "networks",
-      "base": "api/core/",
-      "methods": ["GET"],
-      "param": "id"
-    },
-    {
-      "url": "networktemplates",
-      "base": "api/core/",
-      "methods": ["GET"],
-      "param": "id"
-    },
-    {
-      "url": "services",
-      "base": "api/core/",
-      "methods": ["GET"],
-      "param": "id"
-    },
-    {
-      "url": "sites",
-      "base": "api/core/",
-      "methods": ["GET"],
-      "param": "id"
-    },
-    {
-      "url": "slices",
-      "base": "api/core/",
-      "methods": ["GET"],
-      "param": "id"
-    },
-    {
-      "url": "tenants",
-      "base": "api/core/",
-      "methods": ["GET"],
-      "param": "id"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/package.json b/views/ngXosViews/serviceGrid/package.json
deleted file mode 100644
index 26ab093..0000000
--- a/views/ngXosViews/serviceGrid/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-serviceGrid",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/serviceGrid/spec/services_encoder.test.js b/views/ngXosViews/serviceGrid/spec/services_encoder.test.js
deleted file mode 100644
index 2090f0e..0000000
--- a/views/ngXosViews/serviceGrid/spec/services_encoder.test.js
+++ /dev/null
@@ -1,241 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/22/16.
- */
-
-(function () {
-  'use strict';
-  describe('The Services Encoder Service', () => {
-
-    var service, rootScope, ArchiveManagerSpy, toscaBase;
-
-    const toscaBaseDefault = {
-      topology_template: {
-        node_templates: {}
-      }
-    };
-
-    beforeEach(module('xos.serviceGrid'));
-    beforeEach(module('templates'));
-
-    beforeEach(inject(($rootScope, ArchiveManager, ServiceEncoder) => {
-      rootScope = $rootScope;
-      toscaBase = angular.copy(toscaBaseDefault);
-
-      ArchiveManagerSpy = ArchiveManager;
-      spyOn(ArchiveManagerSpy, 'createArchive');
-      spyOn(ArchiveManagerSpy, 'addFile');
-      service = ServiceEncoder;
-    }));
-
-    describe('the formatServiceProperties method', () => {
-
-      it('should return only the existing properties', (done) => {
-        service.formatServiceProperties({name: 'test', kind: 'vCPE'}, toscaBase)
-        .then(res => {
-          expect(res).toEqual({
-            topology_template:{
-              node_templates: {
-                'service#test': {
-                  type: 'tosca.nodes.VSGService',
-                  properties: {kind: 'vCPE'}
-                }
-              }
-            }
-          });
-          done();
-        });
-        rootScope.$apply();
-      });
-
-      it('should return all properties', (done) => {
-        service.formatServiceProperties({
-            name: 'test',
-            kind: 'vCPE',
-            view_url: 'view_url',
-            icon_url: 'icon_url',
-            private_key_fn: 'private_key_fn'
-          }, toscaBase)
-          .then(res => {
-            expect(res).toEqual({
-              topology_template:{
-                node_templates: {
-                  'service#test': {
-                    type: 'tosca.nodes.VSGService',
-                    properties: {
-                      kind: 'vCPE',
-                      view_url: 'view_url',
-                      icon_url: 'icon_url',
-                      private_key_fn: 'private_key_fn'
-                    }
-                  }
-                }
-              }
-            });
-            done();
-          });
-        rootScope.$apply();
-      });
-
-      describe('when a public key is provided', () => {
-        it('should add public_key and artifacts properties', (done) => {
-
-          let expected = {
-            topology_template:{
-              node_templates: {
-                'service#test': {
-                  type: 'tosca.nodes.VSGService',
-                  properties: {
-                    kind: 'vCPE',
-                    public_key: '{ get_artifact: [ SELF, pubkey, LOCAL_FILE] }'
-                  },
-                  artifacts: {
-                    pubkey: '/opt/xos/tosca/test/test_rsa.pub'
-                  }
-                }
-              }
-            }
-          };
-
-          service.formatServiceProperties({
-              kind: 'vCPE',
-              public_key: 'pkey',
-              name: 'test'
-            }, toscaBase)
-            .then(res => {
-              expect(res).toEqual(expected);
-              done();
-            });
-          rootScope.$apply();
-        });
-
-        it('should add public_key file to the archive', (done) => {
-          service.formatServiceProperties({
-              kind: 'vCPE',
-              public_key: 'pkey',
-              name: 'test'
-            }, toscaBase)
-            .then(res => {
-              expect(ArchiveManagerSpy.addFile).toHaveBeenCalledWith('test_rsa.pub', 'pkey');
-              done();
-            });
-          rootScope.$apply();
-        });
-      });
-    });
-
-    describe('the getServiceRequirements method', () => {
-      let TenantSpy, ServiceSpy, tenantQueryPromise;
-      beforeEach(inject(function(Tenants, Services, $q){
-
-        tenantQueryPromise= $q.defer();
-
-        TenantSpy = Tenants;
-        spyOn(TenantSpy, 'query').and.callFake(function(){
-          return {$promise: tenantQueryPromise.promise};
-        });
-
-        ServiceSpy = Services;
-        spyOn(ServiceSpy, 'get').and.callFake(function(p){
-          let d = $q.defer();
-          d.resolve({name: `deps_${p.id}`});
-          return {$promise: d.promise};
-        });
-      }));
-
-      it('should call the tenants service with correct params', () => {
-        service.getServiceRequirements({id: 1});
-        expect(TenantSpy.query).toHaveBeenCalledWith({subscriber_service: 1});
-      });
-
-      it('should not add requirements if the current service has no dependency', (done) => {
-        service.getServiceRequirements({id: 1}, {})
-          .then(res => {
-            expect(res).toEqual({});
-            done();
-          });
-        tenantQueryPromise.resolve();
-        rootScope.$apply();
-      });
-
-      it('should return a list of required service', () => {
-        service.getServiceRequirements({id: 1, name: 'test'}, {topology_template: {node_templates: {'service#test': {}}}})
-          .then(res => {
-            expect(res.topology_template.node_templates['service#test'].requirements).toEqual([
-              {
-                deps_3_tenant: {
-                  node: 'service#deps_3',
-                  relationship: 'tosca.relationships.TenantOfService'
-                }
-              },
-              {
-                deps_4_tenant: {
-                  node: 'service#deps_4',
-                  relationship: 'tosca.relationships.TenantOfService'
-                }
-              }
-            ]);
-          });
-        tenantQueryPromise.resolve([
-          {
-            subscriber_service: 1,
-            provider_service: 3
-          },
-          {
-            subscriber_service: 1,
-            provider_service: 4
-          }
-        ]);
-        rootScope.$apply();
-      });
-
-      it('should return a list of unique required service', () => {
-        service.getServiceRequirements({id: 1, name: 'test'}, {topology_template: {node_templates: {'service#test': {}}}})
-          .then(res => {
-            expect(res.topology_template.node_templates['service#test'].requirements).toEqual([
-              {
-                deps_3_tenant: {
-                  node: 'service#deps_3',
-                  relationship: 'tosca.relationships.TenantOfService'
-                }
-              }
-            ]);
-          });
-        tenantQueryPromise.resolve([
-          {
-            subscriber_service: 1,
-            provider_service: 3
-          },
-          {
-            subscriber_service: 1,
-            provider_service: 3
-          }
-        ]);
-        rootScope.$apply();
-      });
-    });
-  });
-
-})();
-
diff --git a/views/ngXosViews/serviceGrid/spec/site_encoder.test.js b/views/ngXosViews/serviceGrid/spec/site_encoder.test.js
deleted file mode 100644
index 63fab56..0000000
--- a/views/ngXosViews/serviceGrid/spec/site_encoder.test.js
+++ /dev/null
@@ -1,80 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/22/16.
- */
-
-(function () {
-  'use strict';
-  describe('The Site Encoder service', () => {
-    let service, toscaBase, siteGetPromise, SiteSpy, rootScope;
-
-    const toscaBaseDefault = {
-      topology_template: {
-        node_templates: {}
-      }
-    };
-
-    const siteResponse = {
-      name: 'MySite'
-    };
-
-    const expected = [{
-      topology_template: {
-        node_templates: {
-          'MySite': {
-            type: 'tosca.nodes.Site',
-          }
-        }
-      }
-    }, siteResponse];
-
-    beforeEach(module('xos.serviceGrid'));
-    beforeEach(module('templates'));
-
-    beforeEach(inject((SiteEncoder, Sites, $q, $rootScope) => {
-      toscaBase = angular.copy(toscaBaseDefault);
-      service = SiteEncoder;
-      rootScope = $rootScope;
-
-      siteGetPromise= $q.defer();
-      SiteSpy = Sites;
-      spyOn(SiteSpy, 'get').and.callFake(function(){
-        return {$promise: siteGetPromise.promise};
-      });
-    }));
-
-    describe('given a Site Id', () => {
-      it('should return the correct JSON structure', (done) => {
-        service.buildTosca({id: 1}, toscaBase)
-          .then(res => {
-            expect(res).toEqual(expected);
-            done();
-          });
-        siteGetPromise.resolve(siteResponse);
-        rootScope.$apply();
-      });
-    });
-  });
-})();
-
diff --git a/views/ngXosViews/serviceGrid/spec/slices_encoder.test.js b/views/ngXosViews/serviceGrid/spec/slices_encoder.test.js
deleted file mode 100644
index 71d36a5..0000000
--- a/views/ngXosViews/serviceGrid/spec/slices_encoder.test.js
+++ /dev/null
@@ -1,121 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/22/16.
- */
-
-(function () {
-  'use strict';
-
-  describe('The Slices Encoder service', () => {
-
-    let service, toscaBase, sliceQueryPromise, SliceSpy, rootScope;
-
-    const toscaBaseDefault = {
-      topology_template: {
-        node_templates: {}
-      }
-    };
-
-    const slicesArray = [
-      {
-        name: 'Slice1',
-        description: 'Description1',
-        network: 'noauto'
-      },
-      {
-        name: 'Slice2',
-        description: 'Description2',
-        network: 'noauto'
-      }
-    ];
-
-    const expected = {
-      topology_template: {
-        node_templates: {
-          Slice1: {
-            description: 'Description1',
-            type: 'tosca.nodes.Slice',
-            properties: {
-              network: 'noauto'
-            },
-            requirements: [
-              {management: {node: 'management', relationship: 'tosca.relationships.ConnectsToNetwork'}},
-              {test_service: {node: 'service#test', relationship: 'tosca.relationships.MemberOfService'}}
-            ]
-          },
-          Slice2: {
-            description: 'Description2',
-            type: 'tosca.nodes.Slice',
-            properties: {
-              network: 'noauto'
-            },
-            requirements: [
-              {management: {node: 'management', relationship: 'tosca.relationships.ConnectsToNetwork'}},
-              {test_service: {node: 'service#test', relationship: 'tosca.relationships.MemberOfService'}}
-            ]
-          }
-        }
-      }
-    };
-
-    beforeEach(module('xos.serviceGrid'));
-    beforeEach(module('templates'));
-
-    beforeEach(inject((SlicesEncoder, Slices, $q, $rootScope) => {
-      toscaBase = angular.copy(toscaBaseDefault);
-      service = SlicesEncoder;
-      rootScope = $rootScope;
-
-      sliceQueryPromise= $q.defer();
-      SliceSpy = Slices;
-      spyOn(SliceSpy, 'query').and.callFake(function(){
-        return {$promise: sliceQueryPromise.promise};
-      });
-    }));
-    
-    describe('given a Slices array ', () => {
-      it('should return the correct JSON structure', (done) => {
-        service.buildTosca(slicesArray, toscaBase, 'test')
-        .then(res => {
-          expect(res).toEqual(expected);
-          done();
-        });
-        rootScope.$apply();
-      });
-    });
-
-    describe('given a service', () => {
-      it('should return the JSON structure for all related slices', (done) => {
-        service.getServiceSlices({id : 1, name: 'test'}, toscaBase)
-        .then(res => {
-          expect(res).toEqual(expected);
-          done();
-        });
-        sliceQueryPromise.resolve(slicesArray);
-        rootScope.$apply();
-      });
-    });
-  });
-})();
-
diff --git a/views/ngXosViews/serviceGrid/spec/tosca_encoder.test.js b/views/ngXosViews/serviceGrid/spec/tosca_encoder.test.js
deleted file mode 100644
index 40825ef..0000000
--- a/views/ngXosViews/serviceGrid/spec/tosca_encoder.test.js
+++ /dev/null
@@ -1,252 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-  describe('The Tosca Encoder Service', () => {
-
-    var service, httpBackend, rootScope, ArchiveManagerSpy, toscaBase;
-
-    const serviceData = {
-      id: 1,
-      name: 'vsg',
-      kind: 'vCPE'
-    };
-
-    const toscaBaseDefault = {
-      topology_template: {
-        node_templates: {}
-      }
-    };
-
-    beforeEach(module('xos.serviceGrid'));
-    beforeEach(module('templates'));
-
-    beforeEach(inject(function($httpBackend, $rootScope, ToscaEncoder, ArchiveManager){
-
-      httpBackend = $httpBackend;
-      rootScope = $rootScope;
-      toscaBase = angular.copy(toscaBaseDefault);
-      service = ToscaEncoder;
-      ArchiveManagerSpy = ArchiveManager;
-      spyOn(ArchiveManagerSpy, 'createArchive');
-      spyOn(ArchiveManagerSpy, 'addFile');
-      spyOn(ArchiveManagerSpy, 'download');
-    }));
-
-    describe('the serviceToTosca method', () => {
-
-      const fakePropertiesDefault = {
-        tosca_definitions_version: 'tosca_simple_yaml_1_0',
-        description: 'Just enough Tosca to get the vSG slice running on the CORD POD',
-        imports: [
-          'custom_types/xos.yaml'
-        ],
-        topology_template:{
-          node_templates: {
-            'service#vsg': {
-              type: 'tosca.nodes.VSGService',
-              properties: {
-                view_url: 'viewUrl',
-                icon_url: 'iconUrl',
-                kind: 'vCPE'
-              }
-            }
-          }
-        }
-      };
-
-      const fakeRequirements = {
-        tosca_definitions_version: 'tosca_simple_yaml_1_0',
-        description: 'Just enough Tosca to get the vSG slice running on the CORD POD',
-        imports: [
-          'custom_types/xos.yaml'
-        ],
-        topology_template:{
-          node_templates: {
-            'service#vsg': {
-              type: 'tosca.nodes.VSGService',
-              properties: {
-                view_url: 'viewUrl',
-                icon_url: 'iconUrl',
-                kind: 'vCPE'
-              },
-              requirements: [
-                {
-                  node: 'service#vrouter',
-                  relationship: 'tosca.relationships.TenantOfService'
-                },
-                {
-                  node: 'service#volt',
-                  relationship: 'tosca.relationships.TenantOfService'
-                }
-              ]
-            }
-          }
-        }
-      };
-
-      const expectedWithoutRequirements = `tosca_definitions_version: tosca_simple_yaml_1_0
-description: Just enough Tosca to get the vSG slice running on the CORD POD
-imports:
-  - custom_types/xos.yaml
-topology_template:
-  node_templates:
-    service#vsg:
-      type: tosca.nodes.VSGService
-      properties:
-        view_url: viewUrl
-        icon_url: iconUrl
-        kind: vCPE
-`;
-
-      const expectedWithRequirements = `tosca_definitions_version: tosca_simple_yaml_1_0
-description: Just enough Tosca to get the vSG slice running on the CORD POD
-imports:
-  - custom_types/xos.yaml
-topology_template:
-  node_templates:
-    service#vsg:
-      type: tosca.nodes.VSGService
-      properties:
-        view_url: viewUrl
-        icon_url: iconUrl
-        kind: vCPE
-      requirements:
-        - node: service#vrouter
-          relationship: tosca.relationships.TenantOfService
-        - node: service#volt
-          relationship: tosca.relationships.TenantOfService
-`;
-
-      const expectedWithSlices = `tosca_definitions_version: tosca_simple_yaml_1_0
-description: Just enough Tosca to get the vSG slice running on the CORD POD
-imports:
-  - custom_types/xos.yaml
-topology_template:
-  node_templates:
-    service#vsg:
-      type: tosca.nodes.VSGService
-      properties:
-        view_url: viewUrl
-        icon_url: iconUrl
-        kind: vCPE
-    service_slice:
-      description: A service slice
-      type: tosca.nodes.Slice
-      properties:
-        network: noauto
-`;
-
-      let formatPromise, requirementPromise, slicesPromise, fakeProperties, serviceEncoderSpy, slicesEncoderSpy;
-
-      beforeEach(inject(($q, ServiceEncoder, SlicesEncoder) => {
-
-        serviceEncoderSpy = ServiceEncoder;
-        slicesEncoderSpy = SlicesEncoder;
-
-        // clone the base property for mock
-        fakeProperties = angular.copy(fakePropertiesDefault);
-
-        // create the promises
-        // this will be resolved in the single IT block,
-        // to allow different resolutions
-        formatPromise = $q.defer();
-        requirementPromise = $q.defer();
-        slicesPromise = $q.defer();
-
-        // mock functions and return promises
-        spyOn(serviceEncoderSpy, 'formatServiceProperties').and.callFake(function(){
-          return formatPromise.promise;
-        });
-        spyOn(serviceEncoderSpy, 'getServiceRequirements').and.callFake(function(){
-          return requirementPromise.promise;
-        });
-        spyOn(slicesEncoderSpy, 'getServiceSlices').and.callFake(function(){
-          return slicesPromise.promise;
-        });
-      }));
-
-      it('should create a new archive', () => {
-        service.serviceToTosca(serviceData);
-        expect(ArchiveManagerSpy.createArchive).toHaveBeenCalled();
-      });
-
-      it('should add the service file to the archive', (done) => {
-        service.serviceToTosca(serviceData)
-        .then(() => {
-          expect(ArchiveManagerSpy.addFile).toHaveBeenCalledWith('vsg_service.yaml', expectedWithoutRequirements);
-          expect(ArchiveManagerSpy.download).toHaveBeenCalledWith('vsg');
-          done();
-        });
-        formatPromise.resolve(fakeProperties);
-        requirementPromise.resolve(fakeProperties);
-        slicesPromise.resolve(fakeProperties);
-        rootScope.$apply();
-      });
-
-      // IS IT REALLY USEFULL TO TEST THE CONVERTION TO YAML?
-      xit('should create a tosca spec with no requirements', (done) => {
-        service.serviceToTosca(serviceData)
-          .then(res => {
-            expect(res).toEqual(expectedWithoutRequirements);
-            done();
-          });
-        formatPromise.resolve(fakeProperties);
-        requirementPromise.resolve(fakeProperties);
-        slicesPromise.resolve(fakeProperties);
-        rootScope.$apply();
-      });
-
-      xit('should create a tosca spec with requirements', (done) => {
-        service.serviceToTosca(serviceData)
-          .then(res => {
-            expect(res).toEqual(expectedWithRequirements);
-            done();
-          });
-        formatPromise.resolve(fakeProperties);
-        requirementPromise.resolve(fakeRequirements);
-        slicesPromise.resolve(fakeProperties);
-        rootScope.$apply();
-      });
-
-      xit('should create a tosca spec with additional slices', (done) => {
-
-        // this is dirty, we are changing an object and shouldn't be done in tests
-        angular.extend(
-          fakeProperties.topology_template.node_templates, {service_slice: {
-            description: 'A service slice',
-            type: 'tosca.nodes.Slice',
-            properties: {
-              network: 'noauto'
-            }
-          }});
-
-        service.serviceToTosca(serviceData)
-          .then(res => {
-            expect(res).toEqual(expectedWithSlices);
-            done();
-          });
-        formatPromise.resolve(fakeProperties);
-        requirementPromise.resolve(fakeProperties);
-        slicesPromise.resolve(fakeProperties);
-        rootScope.$apply();
-      });
-    });
-  });
-}());
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/css/dev.css b/views/ngXosViews/serviceGrid/src/css/dev.css
deleted file mode 100644
index e41be01..0000000
--- a/views/ngXosViews/serviceGrid/src/css/dev.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
diff --git a/views/ngXosViews/serviceGrid/src/css/main.css b/views/ngXosViews/serviceGrid/src/css/main.css
deleted file mode 100644
index 69d4f23..0000000
--- a/views/ngXosViews/serviceGrid/src/css/main.css
+++ /dev/null
@@ -1,69 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-xos-side-panel .xos-side-panel-content {
-  position: fixed;
-  width: 30%;
-  height: 100%;
-  padding: 25px;
-  background: #fff;
-  overflow: scroll; }
-  xos-side-panel .xos-side-panel-content.right {
-    border-left: 1px solid #555555;
-    top: 0;
-    right: 0;
-    visibility: hidden;
-    box-shadow: -10px 0px 20px -8px rgba(0, 0, 0, 0.75); }
-  xos-side-panel .xos-side-panel-content.right.out {
-    animation: 0.5s slideOutRight ease-in-out;
-    visibility: visible; }
-  xos-side-panel .xos-side-panel-content.right.in {
-    animation: 0.5s slideInRight ease-in-out;
-    visibility: visible; }
-
-@keyframes slideInRight {
-  from {
-    transform: translate3d(100%, 0, 0);
-    visibility: visible; }
-  to {
-    transform: translate3d(0, 0, 0); } }
-
-@keyframes slideOutRight {
-  from {
-    transform: translate3d(0, 0, 0); }
-  to {
-    visibility: hidden;
-    transform: translate3d(100%, 0, 0); } }
-
-#xosServiceGrid {
-  width: 100%; }
-  #xosServiceGrid service-graph {
-    display: block;
-    width: 100%;
-    height: 600px; }
-  #xosServiceGrid .node {
-    stroke: #337ab7;
-    fill: white; }
-  #xosServiceGrid .node.xos {
-    fill: #d9534f; }
-  #xosServiceGrid .link {
-    stroke: #286090;
-    stroke-width: 2px; }
-  #xosServiceGrid .link-arrow {
-    stroke: #286090;
-    fill: #286090; }
diff --git a/views/ngXosViews/serviceGrid/src/css/side-panel.css b/views/ngXosViews/serviceGrid/src/css/side-panel.css
deleted file mode 100644
index 5a16247..0000000
--- a/views/ngXosViews/serviceGrid/src/css/side-panel.css
+++ /dev/null
@@ -1,51 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-xos-side-panel .xos-side-panel-content {
-  position: fixed;
-  width: 30%;
-  height: 100%;
-  padding: 25px;
-  background: #fff;
-  overflow: scroll; }
-  xos-side-panel .xos-side-panel-content.right {
-    border-left: 1px solid #555555;
-    top: 0;
-    right: 0;
-    visibility: hidden;
-    box-shadow: -10px 0px 20px -8px rgba(0, 0, 0, 0.75); }
-  xos-side-panel .xos-side-panel-content.right.out {
-    animation: 0.5s slideOutRight ease-in-out;
-    visibility: visible; }
-  xos-side-panel .xos-side-panel-content.right.in {
-    animation: 0.5s slideInRight ease-in-out;
-    visibility: visible; }
-
-@keyframes slideInRight {
-  from {
-    transform: translate3d(100%, 0, 0);
-    visibility: visible; }
-  to {
-    transform: translate3d(0, 0, 0); } }
-
-@keyframes slideOutRight {
-  from {
-    transform: translate3d(0, 0, 0); }
-  to {
-    visibility: hidden;
-    transform: translate3d(100%, 0, 0); } }
diff --git a/views/ngXosViews/serviceGrid/src/icons/README.md b/views/ngXosViews/serviceGrid/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/serviceGrid/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/index.html b/views/ngXosViews/serviceGrid/src/index.html
deleted file mode 100644
index 8707112..0000000
--- a/views/ngXosViews/serviceGrid/src/index.html
+++ /dev/null
@@ -1,69 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/css/side-panel.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.serviceGrid" id="xosServiceGrid" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/js-yaml/dist/js-yaml.js"></script>
-<script src="vendor/jszip/dist/jszip.js"></script>
-<script src="vendor/file-saver/FileSaver.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/graphlib/dist/graphlib.core.js"></script>
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/tosca_encoder.service.js"></script>
-<script src="/.tmp/slices_encorder.service.js"></script>
-<script src="/.tmp/site_encode.service.js"></script>
-<script src="/.tmp/sidePanel.component.js"></script>
-<script src="/.tmp/service_encorder.service.js"></script>
-<script src="/.tmp/service-graph.js"></script>
-<script src="/.tmp/networks_encoder.service.js"></script>
-<script src="/.tmp/network_template_encoder.service.js"></script>
-<script src="/.tmp/image_encoder.service.js"></script>
-<script src="/.tmp/archive_manager.service.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/js/archive_manager.service.js b/views/ngXosViews/serviceGrid/src/js/archive_manager.service.js
deleted file mode 100644
index 18f4898..0000000
--- a/views/ngXosViews/serviceGrid/src/js/archive_manager.service.js
+++ /dev/null
@@ -1,57 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/22/16.
- */
-
-(function () {
-  'use strict';
-
-  /**
-   * @ngdoc service
-   * @name xos.ArchiveManager.serviceGrid
-   **/
-
-  angular.module('xos.serviceGrid')
-  .service('ArchiveManager', function(){
-    this.createArchive = () => {
-      this.archive = new JSZip();
-    };
-
-    this.addFile = (fileName, content) => {
-      this.archive.file(fileName, content);
-    };
-
-    this.download = (name) => {
-      console.log(this.archive);
-      this.archive.generateAsync({type: 'blob'})
-        .then(function(content) {
-          saveAs(content, `${name}.zip`);
-        })
-        .catch(e => {
-          console.log(e);
-        });
-    };
-  });
-})();
-
diff --git a/views/ngXosViews/serviceGrid/src/js/image_encoder.service.js b/views/ngXosViews/serviceGrid/src/js/image_encoder.service.js
deleted file mode 100644
index cd4fa8b..0000000
--- a/views/ngXosViews/serviceGrid/src/js/image_encoder.service.js
+++ /dev/null
@@ -1,58 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/22/16.
- */
-
-(function () {
-  'use strict';
-
-  /**
-   * @ngdoc service
-   * @name xos.ImageEncoder.serviceGrid
-   **/
-
-  // TODO write tests
-  angular.module('xos.serviceGrid')
-    .service('ImageEncoder', function($q, Images){
-
-      this.buildTosca = (imageId, toscaSpec) => {
-        const d = $q.defer();
-
-        Images.get({id: imageId}).$promise
-          .then(image => {
-            const toscaObj = {};
-            toscaObj[`image#${image.name}`] = {
-              type: 'tosca.nodes.Image'
-            };
-            angular.extend(toscaSpec.topology_template.node_templates, toscaObj);
-            d.resolve([toscaSpec, image]);
-          })
-          .catch(d.reject);
-
-
-        return d.promise;
-      };
-    });
-})();
-
diff --git a/views/ngXosViews/serviceGrid/src/js/main.js b/views/ngXosViews/serviceGrid/src/js/main.js
deleted file mode 100644
index 95c2342..0000000
--- a/views/ngXosViews/serviceGrid/src/js/main.js
+++ /dev/null
@@ -1,121 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.serviceGrid', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('serviceGrid', {
-    url: '/',
-    template: '<service-grid></service-grid>'
-  })
-  .state('serviceGraph', {
-    url: '/graph',
-    template: '<service-graph></service-graph>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.directive('serviceGrid', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/service-grid.tpl.html',
-    controller: function(Services, ToscaEncoder, _){
-
-      this.tableConfig = {
-        columns: [
-          {
-            label: 'Status',
-            prop: 'status',
-            type: 'icon',
-            formatter: item => {
-              let status = parseInt(item.backend_status.match(/^[0-9]/)[0]);
-              switch(status){
-              case 0:
-                return 'time';
-              case 1:
-                return 'ok';
-              case 2:
-                return 'remove';
-              }
-            }
-          },
-          {
-            label: 'Name',
-            prop: 'name',
-            link: item => `${item.view_url.replace(/\$[a-z]+\$/, item.id)}`
-          },
-          {
-            label: 'Kind',
-            prop: 'kind'
-          },
-          {
-            label: 'Enabled',
-            prop: 'enabled',
-            type: 'boolean'
-          }
-        ],
-        filter: 'field',
-        order: {
-          field: 'name'
-        },
-        actions: [
-          {
-            label: 'export',
-            icon: 'export',
-            cb: service => {
-              this.tosca = '';
-              ToscaEncoder.serviceToTosca(service)
-                .then(tosca => {
-                  this.showFeedback = true;
-                  this.tosca = tosca;
-                });
-            }
-          }
-        ]
-      };
-      
-      // retrieving user list
-      Services.query().$promise
-      .then((services) => {
-        this.services = _.map(services, s => {
-          // parse backend_status string in a boolean for display
-          // NOTE they are not boolean:
-          // - start with 0 = provisioning
-          // - start with 1 = good
-          // - start with 2 = error
-          s.status = parseInt(s.backend_status.match(/^[0-9]/)[0]) === 0 ? false : true;
-          return s;
-        })
-      })
-      .catch((e) => {
-        throw new Error(e);
-      });
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/js/network_template_encoder.service.js b/views/ngXosViews/serviceGrid/src/js/network_template_encoder.service.js
deleted file mode 100644
index c892786..0000000
--- a/views/ngXosViews/serviceGrid/src/js/network_template_encoder.service.js
+++ /dev/null
@@ -1,58 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/22/16.
- */
-
-(function () {
-  'use strict';
-
-  /**
-   * @ngdoc service
-   * @name xos.NetworkTemplateEncoder.serviceGrid
-   **/
-
-  // TODO write tests
-  angular.module('xos.serviceGrid')
-    .service('NetworkTemplateEncoder', function($q, Networkstemplates){
-
-      this.buildTosca = (templateId, toscaSpec) => {
-        const d = $q.defer();
-        Networkstemplates.get({id: templateId}).$promise
-        .then(template => {
-          const toscaObj = {};
-          toscaObj[`network_template#${template.name}`] = {
-            type: 'tosca.nodes.NetworkTemplate'
-          };
-          angular.extend(toscaSpec.topology_template.node_templates, toscaObj);
-          d.resolve([toscaSpec, template]);
-        })
-        .catch(e => {
-          d.reject(e);
-        });
-
-        return d.promise;
-      };
-    });
-})();
-
diff --git a/views/ngXosViews/serviceGrid/src/js/networks_encoder.service.js b/views/ngXosViews/serviceGrid/src/js/networks_encoder.service.js
deleted file mode 100644
index 82f12ca..0000000
--- a/views/ngXosViews/serviceGrid/src/js/networks_encoder.service.js
+++ /dev/null
@@ -1,150 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/22/16.
- */
-
-(function () {
-  'use strict';
-
-  /**
-   * @ngdoc service
-   * @name xos.NetworkEncoder.serviceGrid
-   **/
-
-  // TODO write tests
-  angular.module('xos.serviceGrid')
-    .service('NetworkEncoder', function($q, Networks, NetworkTemplateEncoder){
-
-      this.buildTosca = (networks, toscaSpec) => {
-
-        const apiNetworks = angular.copy(networks);
-
-        // store here the promise that will build the dependency structure
-        let dependency = {
-        };
-
-        const d = $q.defer();
-
-        try {
-          networks = _.reduce(networks, (obj, n) => {
-            obj[`network#${n.name}`] = {
-              type: 'tosca.nodes.network.Network.XOS',
-              requirements: []
-            };
-
-            // for each network slice, add requirement
-            if(angular.isDefined(n.slices)) {
-              _.forEach(n.slices, s => {
-                let owner = {
-                  owner: {
-                    node: s.name,
-                    relationship: 'tosca.relationships.MemberOfSlice'
-                  }
-                };
-
-                let conn =  {
-                  connection: {
-                    node: s.name,
-                    relationship: 'tosca.relationships.ConnectsToSlice'
-                  }
-                };
-                obj[`network#${n.name}`].requirements.push(owner, conn);
-              });
-
-              if(angular.isDefined(n.template)){
-                dependency[n.name] = NetworkTemplateEncoder.buildTosca(n.template, toscaSpec);
-              }
-            }
-
-            return obj;
-
-          }, {});
-
-          // if we have dependency wait for them
-          if(Object.keys(dependency).length > 0){
-            $q.all(dependency)
-            .then(deps => {
-              // NOTE how to make this readable??
-              if(deps){
-
-                // for each property in deps
-                for(let k of Object.keys(deps)){
-                  let [tosca, template] = deps[k];
-                  networks[`network#${k}`].requirements.push({
-                    network_template: {
-                      node: `network_template#${template.name}`,
-                      relationship: 'tosca.relationships.UsesNetworkTemplate'
-                    }
-                  });
-                  angular.extend(toscaSpec, tosca);
-                }
-              }
-              angular.extend(toscaSpec.topology_template.node_templates, networks);
-              d.resolve([toscaSpec, apiNetworks]);
-            })
-            .catch(e => {
-              throw new Error(e);
-            });
-          }
-          //else resolve directly
-          else {
-            angular.extend(toscaSpec.topology_template.node_templates, networks);
-            d.resolve([toscaSpec, apiNetworks]);
-          }
-        }
-        catch(e){
-          d.reject(e);
-        }
-
-        return d.promise;
-      };
-
-      this.getSliceNetworks = (slice, toscaSpec) => {
-        const d = $q.defer();
-        Networks.query({owner: slice.id}).$promise
-        .then((networks) => {
-          // check that all the network this slice own are listed in the slice
-          // does this make sense?
-          networks = _.filter(networks, n => {
-            return slice.networks.indexOf(n.id) !== -1;
-          });
-
-          // denormalize slice inside network
-          networks = networks.map(n => {
-            let idx = n.slices.indexOf(slice.id);
-            n.slices[idx] = slice;
-            return n;
-          });
-
-          this.buildTosca(networks, toscaSpec)
-          .then(d.resolve)
-          .catch(d.reject);
-
-        });
-
-        return d.promise;
-      }
-    });
-})();
-
diff --git a/views/ngXosViews/serviceGrid/src/js/service-graph.js b/views/ngXosViews/serviceGrid/src/js/service-graph.js
deleted file mode 100644
index e2b29b4..0000000
--- a/views/ngXosViews/serviceGrid/src/js/service-graph.js
+++ /dev/null
@@ -1,317 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  angular.module('xos.serviceGrid')
-  .service('Graph', function($q, Tenants, Services, Subscribers){
-
-    let tenancyGraph = new graphlib.Graph();
-    let cached = false;
-
-    const buildGraph = () => {
-
-      let deferred = $q.defer();
-
-      $q.all([
-        Tenants.query().$promise,
-        Services.query().$promise,
-        Subscribers.query().$promise
-      ])
-      .then((res) => {
-        let [tenants, services, subscribers] = res;
-        // adding service nodes
-        services.forEach(s => tenancyGraph.setNode(s.id, angular.extend(s, {type: 'service'})));
-
-
-        // coarse tenant
-        tenants.filter(t => t.subscriber_service && t.provider_service)
-          .forEach(t => tenancyGraph.setEdge(t.subscriber_service, t.provider_service, t, t.name));
-
-        // fine grain tenant
-        // adding subscribers as nodes (to build fine grain graph)
-        // subscribers.forEach(s => tenancyGraph.setNode(`sub-${s.id}`, angular.extend(s, {type: 'subscriber'})));
-        // TODO
-        // - Find tenant that start from a subscriber
-        // - Follow the chain: from the first tenant follow where subscriber_tenant = tenant_id untill we cannot find any more tenant
-        // tenants.filter(t => t.subscriber_root && t.provider_service)
-        // .forEach(t => tenancyGraph.setEdge(`sub-${t.subscriber_root}`, t.provider_service, t, t.name));
-        
-        deferred.resolve(tenancyGraph);
-      });
-
-      return deferred.promise;
-    };
-
-    this.getGraph = () => {
-      let deferred = $q.defer();
-
-      if(cached){
-        deferred.resolve(tenancyGraph);
-      }
-      else {
-        buildGraph()
-        .then((res) => {
-          cached = true;
-          deferred.resolve(res);
-        })
-        .catch(console.log);
-      }
-
-      return {$promise: deferred.promise};
-    };
-
-  })
-  .directive('serviceGraph', function(){
-    return {
-      restrict: 'E',
-      scope: {},
-      bindToController: true,
-      controllerAs: 'vm',
-      templateUrl: 'templates/service-graph.tpl.html',
-      controller: function($scope, $element, GraphService, Graph, ToscaEncoder){
-
-        let svg;
-        let el = $element[0];
-        let node, nodes;
-        let link, links;
-        const _this = this;
-
-        this.panelConfig = {
-          position: 'right'
-        };
-
-        // find position for link labels
-        const xpos = (source, target) => {
-          if (target.x > source.x) {
-            return (source.x + (target.x - source.x)/2); }
-          else {
-            return (target.x + (source.x - target.x)/2); }
-        }
-
-        const ypos = (source, target) => {
-          if (target.y > source.y) {
-            return Math.round(source.y + (target.y - source.y)/2);
-          }
-          else {
-            return Math.round(target.y + (source.y - target.y)/2); }
-        }
-
-        // animate node and links in the correct place
-        const tick = () => {
-          node
-            .attr('cx', d => d.x)
-            .attr('cy', d => d.y)
-            .attr({
-              transform: d => `translate(${d.x}, ${d.y})`
-            });
-          
-          svg.selectAll('.link')
-            .attr('x1', d => d.source.x)
-            .attr('y1', d => d.source.y)
-            .attr('x2', d => getTargetNodeCircumferencePoint(d)[0])
-            .attr('y2', d => getTargetNodeCircumferencePoint(d)[1]);
-
-          svg.selectAll('.link-text')
-            .attr('x', d => xpos(d.source, {x: getTargetNodeCircumferencePoint(d)[0], y: getTargetNodeCircumferencePoint(d)[1]}))
-            .attr('y', d => ypos(d.source, {x: getTargetNodeCircumferencePoint(d)[0], y: getTargetNodeCircumferencePoint(d)[1]}))
-            .attr('transform', d => {
-              let x = xpos(d.source, {x: getTargetNodeCircumferencePoint(d)[0], y: getTargetNodeCircumferencePoint(d)[1]});
-              let y = ypos(d.source, {x: getTargetNodeCircumferencePoint(d)[0], y: getTargetNodeCircumferencePoint(d)[1]});
-              return `rotate(-30, ${x}, ${y})`;
-            });
-        };
-
-        var chainCount = 1;
-        var spareCount = 1;
-
-        const getNodePosition = (n, graph, chainElements) => {
-          let node =  graph.node(n);
-          const step = el.clientWidth / (chainElements + 1);
-
-          if(graph.nodeEdges(n).length > 0){
-            let pos = {
-              y: el.clientHeight / 4,
-              x: step * chainCount,
-              fixed: true
-            };
-            angular.extend(node, pos);
-            chainCount = chainCount + 1;
-          }
-          else {
-            let pos = {
-              y: (el.clientHeight / 2) + (el.clientHeight / 4),
-              x: (step + step / 2) * spareCount,
-              fixed: true
-            };
-            angular.extend(node, pos);
-            spareCount = spareCount + 1;
-          }
-          return node;
-        };
-
-        Graph.getGraph().$promise
-        .then((graph) => {
-
-          // build links
-          links = graph.edges().map(e => {
-            return {
-              source: graph.node(e.v),
-              target: graph.node(e.w),
-              tenant: graph.edge(e)
-            }
-          });
-          
-          // check how many nodes are connected
-          // let longerGraph = graphlib.alg.components(graph).filter(g => g.length > 1);
-          const longerGraph = graphlib.alg.components(graph).reduce(function (a, b) { return a.length > b.length ? a : b; }).length;
-
-          nodes = graph.nodes().reverse().map(n => getNodePosition(n, graph, longerGraph));
-
-          handleSvg(el);
-          defineArrows();
-
-          var force = d3.layout.force()
-            .nodes(nodes)
-            .links(links)
-            .charge(-1060)
-            .gravity(0.1)
-            .linkDistance(200)
-            .size([el.clientWidth, el.clientHeight])
-            .on('tick', tick)
-            .start();
-
-          link = svg.selectAll('.link-container')
-            .data(links).enter().insert('g')
-            .attr('class', 'link-container');
-
-          link.insert('line')
-            .attr('class', 'link')
-            .attr('marker-end', 'url(#arrow)');
-
-          var linkText = svg.selectAll('.link-container')
-            .data(force.links())
-            .insert('text')
-            .attr({
-              class: 'link-text',
-              'text-anchor': 'start'
-            })
-            .text(d => `${d.tenant.humanReadableName}`)
-
-          node = svg.selectAll('.node')
-            .data(nodes)
-            .enter().append('g')
-            .call(force.drag)
-            .on('mousedown', function(d) {
-              $scope.$apply(() => {
-                if(d.name === 'XOS'){
-                  return;
-                }
-                _this.panelShow = true;
-                let status = parseInt(d.backend_status.match(/^[0-9]/)[0]);
-                console.log(status);
-                switch(status){
-                  case 0:
-                    d.icon = 'time';
-                    break;
-                  case 1:
-                    d.icon = 'ok';
-                    break;
-                  case 2:
-                    d.icon = 'remove';
-                    break;
-                }
-                _this.selectedNode = d;
-              });
-              d3.event.stopPropagation();
-            });
-
-          node.append('circle')
-            .attr({
-              class: d => `node ${d.type || ''}`,
-              r: 10
-            });
-
-          node.append('text')
-            .attr({
-              'text-anchor': 'middle',
-              'alignment-baseline': 'middle'
-            })
-            .text(d => d.humanReadableName || d.name);
-
-          // scale the node to fit the contained text
-          node.select('circle')
-            .attr({
-              r: function(d){
-                const parent = d3.select(this).node().parentNode;
-                const sib = d3.select(parent).select('text').node().getBBox();
-                const radius = (sib.width / 2) + 10;
-
-                // add radius as node attribute
-                d.nodeWidth = radius * 2;
-                return radius;
-              }
-            })
-
-        });
-
-        const handleSvg = (el) => {
-          d3.select(el).select('svg').remove();
-
-          svg = d3.select(el)
-          .append('svg')
-          .style('width', `${el.clientWidth}px`)
-          .style('height', `${el.clientHeight}px`);
-        };
-
-        const defineArrows = () => {
-          svg.append('svg:defs').selectAll('marker')
-          .data(['arrow'])      // Different link/path types can be defined here
-          .enter().append('svg:marker')    // This section adds in the arrows
-          .attr('id', String)
-          .attr('viewBox', '0 -5 10 10')
-          .attr('refX', 10)
-          .attr('refY', 0)
-          .attr('markerWidth', 6)
-          .attr('markerHeight', 6)
-          .attr('orient', 'auto')
-          .attr('class', 'link-arrow')
-          .append('svg:path')
-          .attr('d', 'M0,-5L10,0L0,5');
-        };
-
-        const getTargetNodeCircumferencePoint = d => {
-          const radius = d.target.nodeWidth / 2; // nodeWidth is just a custom attribute I calculate during the creation of the nodes depending on the node width
-          const dx = d.target.x - d.source.x;
-          const dy = d.target.y - d.source.y;
-          const gamma = Math.atan2(dy, dx); // Math.atan2 returns the angle in the correct quadrant as opposed to Math.atan
-
-          const tx = d.target.x - (Math.cos(gamma) * radius);
-          const ty = d.target.y - (Math.sin(gamma) * radius);
-
-          return [tx, ty];
-        };
-
-        this.exportToTosca = (service) => {
-          ToscaEncoder.serviceToTosca(service);
-        }
-      }
-    };
-  })
-})();
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/js/service_encorder.service.js b/views/ngXosViews/serviceGrid/src/js/service_encorder.service.js
deleted file mode 100644
index a5792a5..0000000
--- a/views/ngXosViews/serviceGrid/src/js/service_encorder.service.js
+++ /dev/null
@@ -1,143 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/22/16.
- */
-
-(function () {
-  'use strict';
-
-  /**
-   * @ngdoc service
-   * @name xos.toscaExporter.serviceGrid
-   **/
-
-  angular.module('xos.serviceGrid')
-    .service('ServiceEncoder', function($q, ArchiveManager, Tenants, Services){
-
-      const serviceTypes = {
-        fabric: 'tosca.nodes.FabricService',
-        onos: 'tosca.nodes.ONOSService',
-        vCPE: 'tosca.nodes.VSGService',
-        vOLT: 'tosca.nodes.VOLTService',
-        vROUTER: 'tosca.nodes.VRouterService',
-        VTN: 'tosca.nodes.VTNService',
-        vTR: 'tosca.nodes.Service'
-      };
-
-      this.formatServiceProperties = (service, toscaSpec) => {
-        const d = $q.defer();
-        const serviceName = `service#${service.name}`;
-        // create the structure to hold the service
-        toscaSpec.topology_template.node_templates[serviceName] = {};
-        toscaSpec.topology_template.node_templates[serviceName].type = serviceTypes[service.kind] || 'tosca.nodes.Service';
-
-        const res = {
-          properties: {
-            kind: service.kind
-          }
-        };
-
-        if(angular.isDefined(service.view_url)){
-          res.properties.view_url = service.view_url;
-        }
-
-        if(angular.isDefined(service.icon_url)){
-          res.properties.icon_url = service.icon_url;
-        }
-
-        if(angular.isDefined(service.private_key_fn)){
-          res.properties.private_key_fn = service.private_key_fn;
-        }
-
-        if(angular.isDefined(service.public_key)){
-          ArchiveManager.addFile(`${service.name}_rsa.pub`, service.public_key);
-          res.properties.public_key = '{ get_artifact: [ SELF, pubkey, LOCAL_FILE] }'
-          res['artifacts'] = {
-            pubkey: `/opt/xos/tosca/${service.name}/${service.name}_rsa.pub`
-          };
-          toscaSpec.topology_template.node_templates[serviceName].artifacts = res.artifacts;
-        }
-
-        toscaSpec.topology_template.node_templates[serviceName].properties = res.properties;
-        d.resolve(toscaSpec);
-        return d.promise;
-      };
-
-      this.getServiceRequirements = (service, toscaSpec) => {
-        const d = $q.defer();
-
-        Tenants.query({subscriber_service: service.id}).$promise
-          .then(tenants => {
-            const services = [];
-            // avoid multiple request for the same service
-            tenants = _.uniqBy(tenants, 'provider_service');
-
-            _.forEach(tenants, t => {
-              services.push(Services.get({id: t.provider_service}).$promise);
-            });
-
-            return $q.all(services)
-          })
-          .then((deps) => {
-            // Get the provider service and create an array of unique names
-            let requirements = _.reduce(deps, (list, d) => list.concat(d.name), []);
-
-            // create a object for requirements, later will parsed in Yaml
-            requirements = _.reduce(requirements, (list, r) => {
-              let name = `${r}_tenant`;
-              let obj = {};
-              obj[name] = {
-                node: `service#${r}`,
-                relationship: 'tosca.relationships.TenantOfService'
-              };
-              return list.concat(obj);
-            }, []);
-
-            if(requirements.length > 0){
-
-              // NOTE set a reference to the requirements in tosca
-              _.forEach(requirements, r => {
-                let reqName = r[Object.keys(r)[0]].node;
-                toscaSpec.topology_template.node_templates[reqName] = {
-                  type: 'tosca.nodes.Service',
-                  properties: {
-                    'no-create': true,
-                    'no-delete': true,
-                    'no-update': true
-                  }
-                };
-              });
-
-              const serviceName = `service#${service.name}`;
-              toscaSpec.topology_template.node_templates[serviceName].requirements = requirements;
-            }
-
-            d.resolve(toscaSpec);
-          });
-
-        return d.promise;
-      };
-    });
-})();
-
diff --git a/views/ngXosViews/serviceGrid/src/js/sidePanel.component.js b/views/ngXosViews/serviceGrid/src/js/sidePanel.component.js
deleted file mode 100644
index fa95025..0000000
--- a/views/ngXosViews/serviceGrid/src/js/sidePanel.component.js
+++ /dev/null
@@ -1,92 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 7/18/16.
- */
-
-(function () {
-  'use strict';
-
-  angular.module('xos.uiComponents')
-  .directive('xosSidePanel', function(){
-    return {
-      restrict: 'E',
-      scope: {
-        config: '=',
-        show: '='
-      },
-      template: `
-        <div class="xos-side-panel-content {{vm.classes.join(' ')}}">
-          <div class="row">
-            <div class="col-xs-12">
-              <button type="button" class="close" ng-click="vm.dismiss()">
-                <span aria-hidden="true">&times;</span>
-              </button>
-            </div>
-          </div>
-          <div class="row">
-            <div class="col-xs-12" ng-transclude></div>
-          </div>
-        </div>
-      `,
-      transclude: true,
-      bindToController: true,
-      controllerAs: 'vm',
-      controller: function($scope, $timeout, _){
-        console.log(this.show);
-
-        this.classes = [];
-
-        this.classes.push(this.config.position);
-
-        this.dismiss = () => {
-          this.show = false;
-          this.classes = this.toggleClass(this.classes);
-          $timeout(() => {
-            return _.remove(this.classes, c => c === 'out');
-          }, 500);
-        };
-
-        this.toggleClass = (classes) => {
-          if(classes.indexOf('in') > -1){
-            _.remove(this.classes, c => c === 'in');
-            this.classes.push('out');
-            return classes;
-          }
-          _.remove(this.classes, c => c === 'out');
-          this.classes.push('in');
-          return classes;
-        };
-
-        $scope.$watch(() => this.show, val => {
-          if (angular.isDefined(val)){
-            if (val && val === true){
-              this.classes = this.toggleClass(this.classes);
-            }
-          }
-        })
-      }
-    }
-  });
-})();
-
diff --git a/views/ngXosViews/serviceGrid/src/js/site_encode.service.js b/views/ngXosViews/serviceGrid/src/js/site_encode.service.js
deleted file mode 100644
index ae12ccf..0000000
--- a/views/ngXosViews/serviceGrid/src/js/site_encode.service.js
+++ /dev/null
@@ -1,57 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/22/16.
- */
-
-(function () {
-  'use strict';
-
-  /**
-   * @ngdoc service
-   * @name xos.SiteEncoder.serviceGrid
-   **/
-
-  angular.module('xos.serviceGrid')
-    .service('SiteEncoder', function($q, Sites){
-
-      this.buildTosca = (siteId, toscaSpec) => {
-        const d = $q.defer();
-
-        Sites.get({id: siteId}).$promise
-        .then(site => {
-          const toscaObj = {};
-          toscaObj[`${site.name}`] = {
-            type: 'tosca.nodes.Site'
-          };
-          angular.extend(toscaSpec.topology_template.node_templates, toscaObj);
-          d.resolve([toscaSpec, site]);
-        })
-        .catch(d.reject);
-
-
-        return d.promise;
-      };
-    });
-})();
-
diff --git a/views/ngXosViews/serviceGrid/src/js/slices_encorder.service.js b/views/ngXosViews/serviceGrid/src/js/slices_encorder.service.js
deleted file mode 100644
index 8e8bf89..0000000
--- a/views/ngXosViews/serviceGrid/src/js/slices_encorder.service.js
+++ /dev/null
@@ -1,177 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**
- * © OpenCORD
- *
- * Visit http://guide.xosproject.org/devguide/addview/ for more information
- *
- * Created by teone on 6/22/16.
- */
-
-(function () {
-  'use strict';
-
-  /**
-   * @ngdoc service
-   * @name xos.SlicesEncoder.serviceGrid
-   **/
-
-  angular.module('xos.serviceGrid')
-  .service('SlicesEncoder', function($q, _, Slices, SiteEncoder, ImageEncoder, NetworkEncoder){
-
-    this.buildTosca = (slices, toscaSpec, serviceName) => {
-      // store here the promise that will build the dependency structure
-      let dependency = {};
-
-      const d = $q.defer();
-      slices = _.reduce(slices, (obj, s) => {
-        obj[s.name] = {
-          type: 'tosca.nodes.Slice',
-          properties: {
-            network: s.network
-          },
-          requirements: [
-            // by default slices are connected to management network
-            {
-              management: {
-                node: 'management',
-                relationship: 'tosca.relationships.ConnectsToNetwork'
-              }
-            },
-          ]
-        };
-
-        if(angular.isDefined(serviceName)){
-          let service = {};
-          service[`${serviceName}_service`] = {
-            node: `service#${serviceName}`,
-            relationship: 'tosca.relationships.MemberOfService'
-          };
-          obj[s.name].requirements.push(service);
-        }
-
-        if(angular.isDefined(s.description)){
-          obj[s.name].description = s.description;
-        }
-        
-        if(angular.isDefined(s.site)){
-          dependency[`${s.name}#site`] = SiteEncoder.buildTosca(s.site, toscaSpec);
-        }
-        if(angular.isDefined(s.default_image)){
-          dependency[`${s.name}#image`] = ImageEncoder.buildTosca(s.default_image, toscaSpec);
-        }
-        if(angular.isDefined(s.networks) && s.networks.length > 0){
-          dependency[`${s.name}#management`] = NetworkEncoder.getSliceNetworks(s, toscaSpec);
-        }
-
-        return obj;
-      }, {});
-
-      // if we have dependency wait for them
-      if(Object.keys(dependency).length > 0){
-
-        let relationMap = {
-          site: 'tosca.relationships.MemberOfSite',
-          image: 'tosca.relationships.DefaultImage'
-        };
-
-        // NOTE create a reference to the management network
-        toscaSpec.topology_template.node_templates['management'] = {
-          type: 'tosca.nodes.network.Network.XOS',
-          properties: {
-            'no-create': true,
-            'no-delete': true,
-            'no-update': true
-          }
-        };
-
-        $q.all(dependency)
-        .then(deps => {
-
-          for(let k of Object.keys(deps)){
-
-            // this is UGLY!!!
-            // we are passing the requirement type inside the object key
-            // in which the promise is stored.
-            // This let us build the requirements array
-            let [sliceName, requirementType] = k.split('#');
-
-            if(angular.isDefined(relationMap[requirementType])){
-
-              if(!slices[sliceName].requirements){
-                slices[sliceName].requirements = [];
-              }
-
-              let [tosca, resource] = deps[k];
-
-              let requirementObj = {};
-
-              let reqName;
-
-              // NOTE site have problem with prefixing
-              if(requirementType === 'site'){
-                reqName = resource.name;
-              }
-              else{
-                reqName = `${requirementType}#${resource.name}`;
-              }
-
-              requirementObj[requirementType] = {
-                node: reqName,
-                relationship: relationMap[requirementType]
-              };
-
-              slices[sliceName].requirements.push(requirementObj);
-
-              angular.extend(toscaSpec, tosca);
-            }
-
-          }
-          // here we add slices to tosca
-          angular.extend(toscaSpec.topology_template.node_templates, slices);
-          d.resolve(toscaSpec);
-        })
-        .catch(e => {
-          throw new Error(e);
-        });
-      }
-      //else resolve directly
-      else {
-        angular.extend(toscaSpec.topology_template.node_templates, slices);
-        d.resolve(toscaSpec);
-      }
-
-      return d.promise;
-    };
-
-    this.getServiceSlices = (service, toscaSpec) => {
-      const d = $q.defer();
-      Slices.query({service: service.id}).$promise
-      .then(slices => {
-        return this.buildTosca(slices, toscaSpec, service.name)
-      })
-      .then(slicesTosca => {
-        d.resolve(slicesTosca);
-      });
-
-      return d.promise;
-    };
-  });
-})();
-
diff --git a/views/ngXosViews/serviceGrid/src/js/tosca_encoder.service.js b/views/ngXosViews/serviceGrid/src/js/tosca_encoder.service.js
deleted file mode 100644
index 962a69b..0000000
--- a/views/ngXosViews/serviceGrid/src/js/tosca_encoder.service.js
+++ /dev/null
@@ -1,97 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function () {
-  'use strict';
-
-  /**
-   * @ngdoc service
-   * @name xos.toscaExporter.serviceGrid
-   **/
-
-  angular.module('xos.serviceGrid')
-  .service('ToscaEncoder', function($q, _, ArchiveManager, ServiceEncoder, SlicesEncoder){
-
-    let toscaSpec = {
-      tosca_definitions_version: 'tosca_simple_yaml_1_0',
-      description: '',
-      imports: [
-        'custom_types/xos.yaml'
-      ],
-      topology_template:{
-        node_templates: {}
-      }
-    };
-
-    /**
-     * @ngdoc method
-     * @name xos.serviceGrid.ToscaEncoder#$toYml
-     * @methodOf xos.serviceGrid.ToscaEncoder
-     * @description
-     * Convert a Json data structure to Yaml, use https://github.com/nodeca/js-yaml
-     * @param {Object} item A Json object to be converted
-     * @returns {string} The Yaml representation of the Json input
-     **/
-
-    this.toYml = (item) => {
-      return jsyaml.dump(item).replace(/'/g, '');
-    };
-
-    this.export = (service) => {
-      ArchiveManager.download(service.name);
-      const file = this.toYml(toscaSpec);
-      return file;
-    };
-
-    this.serviceToTosca = service => {
-
-      ArchiveManager.createArchive();
-      //clean
-      toscaSpec.topology_template.node_templates = {};
-
-      toscaSpec.description = `Just enough Tosca to get the ${service.humanReadableName} service up and running`;
-
-      const d = $q.defer();
-
-      // build service properties
-      ServiceEncoder.formatServiceProperties(service, toscaSpec)
-      .then(spec => {
-        return SlicesEncoder.getServiceSlices(service, spec);
-      })
-      // add required slices (and it will all the slice requirements)
-      .then((spec) => {
-        return ServiceEncoder.getServiceRequirements(service, spec);
-      })
-      // add required services (provider services)
-      .then((spec) => {
-        ArchiveManager.addFile(`${service.name}_service.yaml`, this.toYml(spec));
-
-        this.export(service);
-
-        d.resolve(this.toYml(spec));
-      })
-      .catch(e => {
-        d.reject(e);
-      });
-      return d.promise;
-
-    }
-
-  });
-
-}());
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/sass/main.scss b/views/ngXosViews/serviceGrid/src/sass/main.scss
deleted file mode 100644
index be2c74d..0000000
--- a/views/ngXosViews/serviceGrid/src/sass/main.scss
+++ /dev/null
@@ -1,48 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-@import './side-panel.scss';
-
-#xosServiceGrid {
-  width: 100%;
-  service-graph {
-    display: block;
-    width: 100%;
-    height: 600px;
-  }
-
-  .node {
-    stroke: $brand-primary;
-    fill: white;
-  }
-
-  .node.xos {
-    fill: $brand-danger;
-  }
-
-  .link {
-    stroke: darken($brand-primary, 10);
-    stroke-width: 2px;
-  }
-
-  .link-arrow {
-    stroke: darken($brand-primary, 10);
-    fill: darken($brand-primary, 10);
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/sass/side-panel.scss b/views/ngXosViews/serviceGrid/src/sass/side-panel.scss
deleted file mode 100644
index 77b7c17..0000000
--- a/views/ngXosViews/serviceGrid/src/sass/side-panel.scss
+++ /dev/null
@@ -1,72 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-xos-side-panel{
-
-  .xos-side-panel-content{
-    position: fixed;
-    width: 30%;
-    height: 100%;
-    padding: 25px;
-    background: #fff;
-    overflow: scroll;
-
-    &.right {
-      border-left: 1px solid $gray;
-      top: 0;
-      //right: -35%;
-      right: 0;
-      visibility: hidden;
-      box-shadow: -10px 0px 20px -8px rgba(0,0,0,0.75);
-    }
-
-    &.right.out {
-      animation:  0.5s slideOutRight ease-in-out;
-      visibility: visible;
-    }
-
-    &.right.in {
-      animation:  0.5s slideInRight ease-in-out;
-      visibility: visible;
-    }
-  }
-}
-
-@keyframes slideInRight {
-  from {
-    transform: translate3d(100%, 0, 0);
-    visibility: visible;
-  }
-
-  to {
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-@keyframes slideOutRight {
-  from {
-    transform: translate3d(0, 0, 0);
-  }
-
-  to {
-    visibility: hidden;
-    transform: translate3d(100%, 0, 0);
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/templates/service-graph.tpl.html b/views/ngXosViews/serviceGrid/src/templates/service-graph.tpl.html
deleted file mode 100644
index a4afde2..0000000
--- a/views/ngXosViews/serviceGrid/src/templates/service-graph.tpl.html
+++ /dev/null
@@ -1,58 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row">
-  <div class="col-sm-10">
-    <h1>Graph</h1>
-  </div>
-  <div class="col-sm-2">
-    <!-- <a href="/admin/core/service/add" class="btn btn-success btn-block">
-      <i class="glyphicon glyphicon-plus"></i>
-      Add Service
-    </a> -->
-    <a href="#/" class="btn btn-default btn-block">
-      Service List
-    </a>
-  </div>
-</div>
-<xos-side-panel config="vm.panelConfig" show="vm.panelShow">
-  <h1>
-    {{vm.selectedNode.name}}
-    <small>
-      <i class="glyphicon glyphicon-{{vm.selectedNode.icon}}"></i>
-    </small>
-  </h1>
-  <table class="table">
-    <tr>
-      <td>Kind:</td>
-      <td>{{vm.selectedNode.kind}}</td>
-    </tr>
-    <tr>
-      <td>Enabled:</td>
-      <td>{{vm.selectedNode.enabled}}</td>
-    </tr>
-    <tr>
-      <td>Status:</td>
-      <td>{{vm.selectedNode.backend_status}}</td>
-    </tr>
-  </table>
-  <a ng-click="vm.exportToTosca(vm.selectedNode)" class="btn btn-primary">
-    Export to TOSCA
-    <i class="glyphicon glyphicon-export"></i>
-  </a>
-</xos-side-panel>
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/templates/service-grid.tpl.html b/views/ngXosViews/serviceGrid/src/templates/service-grid.tpl.html
deleted file mode 100644
index 22769c6..0000000
--- a/views/ngXosViews/serviceGrid/src/templates/service-grid.tpl.html
+++ /dev/null
@@ -1,44 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row">
-  <div class="col-md-10 table-responsive">
-    <xos-table config="vm.tableConfig" data="vm.services"></xos-table>
-  </div>
-  <div class="col-md-2">
-    <!-- <a href="/admin/core/service/add" class="btn btn-success btn-block">
-      <i class="glyphicon glyphicon-plus"></i>
-      Add Service
-    </a> -->
-    <a href="#/graph" class="btn btn-default btn-block">
-      Tenancy Graph
-    </a>
-  </div>
-</div>
-
-<div class="row">
-  <div class="col-xs-12">
-    <div class="alert alert-info" ng-show="vm.showFeedback">
-      Remember that you should copy any key artifact inside the container in <pre>/opt/xos/tosca</pre>!
-    </div>
-  </div>
-</div>
-
-<pre ng-show="vm.tosca">
-{{vm.tosca}}
-</pre>
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/templates/users-list.tpl.html b/views/ngXosViews/serviceGrid/src/templates/users-list.tpl.html
deleted file mode 100644
index 6d26747..0000000
--- a/views/ngXosViews/serviceGrid/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.users"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/.bowerrc b/views/ngXosViews/subscribers/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/subscribers/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/.eslintrc b/views/ngXosViews/subscribers/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/subscribers/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/.gitignore b/views/ngXosViews/subscribers/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/subscribers/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/bower.json b/views/ngXosViews/subscribers/bower.json
deleted file mode 100644
index 542ffeb..0000000
--- a/views/ngXosViews/subscribers/bower.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "xos-subscribers",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The subscribers view",
-  "license": "Apache-2.0",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/subscribers/gulp/build.js b/views/ngXosViews/subscribers/gulp/build.js
deleted file mode 100644
index 3ac0214..0000000
--- a/views/ngXosViews/subscribers/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.subscribers')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosSubscribers.html',
-        options.static + 'css/xosSubscribers.css',
-        options.static + 'images/subscribers-icon.png',
-        options.static + 'images/subscribers-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosSubscribers.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/subscribers-icon.png`, `${options.icon}/subscribers-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosSubscribers.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.subscribers',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosSubscribersVendor.js',
-            options.static + 'js/xosSubscribers.js',
-            options.static + 'css/xosSubscribers.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosSubscribers.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosSubscribersVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['Subscribers'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosSubscribers'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/subscribers-icon.png`) &&
-      fs.existsSync(`${options.icon}/subscribers-icon-active.png`)
-    ){
-      dashboardJson['Subscribers'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['subscribers_dashboard'] = {
-      node: 'Subscribers',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/gulp/server.js b/views/ngXosViews/subscribers/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosViews/subscribers/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/subscribers/gulpfile.js b/views/ngXosViews/subscribers/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/subscribers/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/subscribers/karma.conf.js b/views/ngXosViews/subscribers/karma.conf.js
deleted file mode 100644
index 0b22bc9..0000000
--- a/views/ngXosViews/subscribers/karma.conf.js
+++ /dev/null
@@ -1,109 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      'node_modules/babel-polyfill/dist/polyfill.js',
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/subscribers/package.json b/views/ngXosViews/subscribers/package.json
deleted file mode 100644
index 206b779..0000000
--- a/views/ngXosViews/subscribers/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-subscribers",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/subscribers/spec/sample.test.js b/views/ngXosViews/subscribers/spec/sample.test.js
deleted file mode 100644
index bf9149d..0000000
--- a/views/ngXosViews/subscribers/spec/sample.test.js
+++ /dev/null
@@ -1,71 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The Subscriber View', () => {
-  
-  const subscribersList = [
-    {
-      humanReadableName: 'cordSubscriber-1',
-      features: {cdn: false, uplink_speed: 1000000000, downlink_speed: 1000000000, uverse: true, status: 'enabled'},
-      id: 1,
-      identity: {account_num: '123', name: 'Stanford'},
-      related: {}
-    }
-  ];
-
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.subscribers'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    
-    httpBackend.whenGET('/api/tenant/cord/subscriber/?no_hyperlinks=1').respond(subscribersList);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<subscribers-list></subscribers-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  it('should load 1 subscriber', () => {
-    // this
-    httpBackend.flush();
-    scope.$digest();
-    let table = $(element).find('table');
-    let tr = table.find('tbody:last-child tr');
-    // let tds = $(tr[1]).find('td');
-    // console.log(tr);
-    expect(tr.length).toBe(1);
-    // expect($(tds[0]).html()).toBe('cordSubscriber-1')
-  });
-
-  it('should configure xos-smart-table', () => {
-    expect(isolatedScope.smartTableConfig).toEqual({resource: 'Subscribers'});
-  });
-
-  it('should render xos-smart-table', () => {
-    expect($(element).find('xos-smart-table').length).toBe(1);
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/src/css/dev.css b/views/ngXosViews/subscribers/src/css/dev.css
deleted file mode 100644
index 7ea0802..0000000
--- a/views/ngXosViews/subscribers/src/css/dev.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosSubscribers{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/src/css/main.css b/views/ngXosViews/subscribers/src/css/main.css
deleted file mode 100644
index e41be01..0000000
--- a/views/ngXosViews/subscribers/src/css/main.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
diff --git a/views/ngXosViews/subscribers/src/icons/README.md b/views/ngXosViews/subscribers/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/subscribers/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/src/index.html b/views/ngXosViews/subscribers/src/index.html
deleted file mode 100644
index 59c2982..0000000
--- a/views/ngXosViews/subscribers/src/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.subscribers" id="xosSubscribers" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/src/js/main.js b/views/ngXosViews/subscribers/src/js/main.js
deleted file mode 100644
index 7fda96a..0000000
--- a/views/ngXosViews/subscribers/src/js/main.js
+++ /dev/null
@@ -1,51 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.subscribers', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('user-list', {
-    url: '/',
-    template: '<subscribers-list></subscribers-list>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.directive('subscribersList', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/subscribers-list.tpl.html',
-    controller: function(){
-
-      this.smartTableConfig = {
-        resource: 'Subscribers'
-      };
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/src/sass/main.scss b/views/ngXosViews/subscribers/src/sass/main.scss
deleted file mode 100644
index b2dbbe8..0000000
--- a/views/ngXosViews/subscribers/src/sass/main.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xosSubscribers {
-  
-}
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/src/templates/subscribers-list.tpl.html b/views/ngXosViews/subscribers/src/templates/subscribers-list.tpl.html
deleted file mode 100644
index ed23ce9..0000000
--- a/views/ngXosViews/subscribers/src/templates/subscribers-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-smart-table config="vm.smartTableConfig"></xos-smart-table>
\ No newline at end of file
diff --git a/views/ngXosViews/subscribers/src/templates/users-list.tpl.html b/views/ngXosViews/subscribers/src/templates/users-list.tpl.html
deleted file mode 100644
index 6d26747..0000000
--- a/views/ngXosViews/subscribers/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.users"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosViews/synchronizerNotifier/.bowerrc b/views/ngXosViews/synchronizerNotifier/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/synchronizerNotifier/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/synchronizerNotifier/.eslintrc b/views/ngXosViews/synchronizerNotifier/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/synchronizerNotifier/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/synchronizerNotifier/.gitignore b/views/ngXosViews/synchronizerNotifier/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/synchronizerNotifier/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/synchronizerNotifier/bower.json b/views/ngXosViews/synchronizerNotifier/bower.json
deleted file mode 100644
index cf98e8d..0000000
--- a/views/ngXosViews/synchronizerNotifier/bower.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "xos-synchronizerNotifier",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The synchronizerNotifier view",
-  "license": "Apache-2.0",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/synchronizerNotifier/gulp/build.js b/views/ngXosViews/synchronizerNotifier/gulp/build.js
deleted file mode 100644
index a8ad95b..0000000
--- a/views/ngXosViews/synchronizerNotifier/gulp/build.js
+++ /dev/null
@@ -1,186 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-
-const TEMPLATE_FOOTER = ``;
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosSynchronizerNotifier.html',
-        options.static + 'css/xosSynchronizerNotifier.css',
-        options.static + 'images/synchronizerNotifier-icon.png',
-        options.static + 'images/synchronizerNotifier-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosSynchronizerNotifier.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/synchronizerNotifier-icon.png`,`${options.icon}/synchronizerNotifier-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosSynchronizerNotifier.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.synchronizerNotifier',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosSynchronizerNotifierVendor.js',
-            options.static + 'js/xosSynchronizerNotifier.js',
-            options.static + 'css/xosSynchronizerNotifier.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosSynchronizerNotifier.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosSynchronizerNotifierVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/synchronizerNotifier/gulp/server.js b/views/ngXosViews/synchronizerNotifier/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosViews/synchronizerNotifier/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/synchronizerNotifier/gulpfile.js b/views/ngXosViews/synchronizerNotifier/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/synchronizerNotifier/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/synchronizerNotifier/karma.conf.js b/views/ngXosViews/synchronizerNotifier/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/synchronizerNotifier/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/synchronizerNotifier/package.json b/views/ngXosViews/synchronizerNotifier/package.json
deleted file mode 100644
index 9283153..0000000
--- a/views/ngXosViews/synchronizerNotifier/package.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-  "name": "xos-synchronizerNotifier",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/synchronizerNotifier/spec/notification.test.js b/views/ngXosViews/synchronizerNotifier/spec/notification.test.js
deleted file mode 100644
index 0e9a67b..0000000
--- a/views/ngXosViews/synchronizerNotifier/spec/notification.test.js
+++ /dev/null
@@ -1,94 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The Synchronizer Notification Panel', () => {
-  
-  var scope, element, isolatedScope, XosUserPrefs;
-  const xosNotification = {
-    notify: jasmine.createSpy('notify')
-  };
-
-  const failureEvent = {
-    name: 'test',
-    status: false
-  };
-
-  const successEvent = {
-    name: 'test',
-    status: true
-  };
-
-  beforeEach(module('xos.synchronizerNotifier', ($provide) => {
-    $provide.value('Diag', {
-      start: () => null
-    });
-
-    $provide.value('xosNotification', xosNotification);
-  }));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($compile, $rootScope, _XosUserPrefs_){
-
-    XosUserPrefs = _XosUserPrefs_;
-    scope = $rootScope.$new();
-    element = angular.element('<sync-status></sync-status>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  describe('when an event is received', () => {
-
-    beforeEach(() => {
-      xosNotification.notify.calls.reset()
-    });
-
-    describe('and notification have not been sent', () => {
-      
-      beforeEach(() => {
-        XosUserPrefs.setSynchronizerNotificationStatus('test', false);
-        scope.$emit('diag', failureEvent);
-      });
-
-      it('should trigger notification', () => {
-        expect(xosNotification.notify).toHaveBeenCalled();
-      });
-
-      it('should update status in the scope', () => {
-        expect(isolatedScope.synchronizers.test).toEqual(failureEvent);
-        scope.$emit('diag', successEvent);
-        expect(isolatedScope.synchronizers.test).toEqual(successEvent);
-      });
-    });
-
-    describe('and notification have been sent', () => {
-      
-      beforeEach(() => {
-        XosUserPrefs.setSynchronizerNotificationStatus('test', true);
-        scope.$emit('diag', failureEvent);
-      });
-
-      it('should not trigger multiple notification for the same synchronizer', () => {
-        expect(xosNotification.notify).not.toHaveBeenCalled();
-      });
-    });
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/synchronizerNotifier/src/css/dev.css b/views/ngXosViews/synchronizerNotifier/src/css/dev.css
deleted file mode 100644
index 312313f..0000000
--- a/views/ngXosViews/synchronizerNotifier/src/css/dev.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosSynchronizerNotifier{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/synchronizerNotifier/src/css/main.css b/views/ngXosViews/synchronizerNotifier/src/css/main.css
deleted file mode 100644
index 5b35a68..0000000
--- a/views/ngXosViews/synchronizerNotifier/src/css/main.css
+++ /dev/null
@@ -1,32 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosSynchronizerNotifier {
-  float: left; }
-  #xosSynchronizerNotifier .alert {
-    margin-bottom: 0px !important; }
-  #xosSynchronizerNotifier .sync-status-container {
-    position: relative;
-    z-index: 200; }
-  #xosSynchronizerNotifier .notification-panel {
-    position: absolute;
-    width: 200px; }
-  #xosSynchronizerNotifier sync-status .badge.success {
-    background-color: #5cb85c; }
-  #xosSynchronizerNotifier sync-status .badge.warning {
-    background-color: #f0ad4e; }
diff --git a/views/ngXosViews/synchronizerNotifier/src/icons/README.md b/views/ngXosViews/synchronizerNotifier/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/synchronizerNotifier/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/synchronizerNotifier/src/index.html b/views/ngXosViews/synchronizerNotifier/src/index.html
deleted file mode 100644
index 780a367..0000000
--- a/views/ngXosViews/synchronizerNotifier/src/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div id="xosSynchronizerNotifier">
-  <sync-status></sync-status>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/synchronizerNotifier/src/js/main.js b/views/ngXosViews/synchronizerNotifier/src/js/main.js
deleted file mode 100644
index f0077f2..0000000
--- a/views/ngXosViews/synchronizerNotifier/src/js/main.js
+++ /dev/null
@@ -1,148 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.synchronizerNotifier', [
-  'ngResource',
-  'ngCookies',
-  'xos.helpers'
-])
-.service('Diag', function($rootScope, $http, $q, $interval){
-
-  let isRunning = false;
-
-  this.getDiags = () => {
-    let d = $q.defer();
-    $http.get('/api/core/diags')
-    .then(res => {
-      d.resolve(res.data);
-    })
-    .catch(err => {
-      d.reject(err);
-    });
-
-    return d.promise;
-  };
-
-  this.sendEvents = (diags) => {
-    diags.forEach(d => {
-      let status = JSON.parse(d.backend_register);
-      status.last_run = new Date(status.last_run * 1000);
-      status.last_duration = status.last_duration * 1000;
-      status.last_synchronizer_start = new Date(status.last_synchronizer_start * 1000);
-      status.last_syncrecord_start = status.last_syncrecord_start ? new Date(status.last_syncrecord_start * 1000) : null;
-      $rootScope.$broadcast(`diag`, {
-        name: d.name,
-        updated: d.updated,
-        info: status,
-        status: this.getSyncStatus(status)
-      });
-    });
-  };
-
-  this.start = () => {
-    isRunning = true;
-    this.getDiags()
-    .then(diags => {
-      this.sendEvents(diags);
-    });
-    return isRunning;
-  };
-
-  this.stop = () => {
-    isRunning = false;
-    return isRunning;
-  };
-
-  this.getSyncStatus = (status) => {
-
-    const now = new Date();
-    const gap = 15 * 60 * 1000; /* ms */
-    // const gap = 1 * 60 * 1000; // for demo use 1 minute
-    // if all of this values are older than 15 min,
-    // probably something is wrong
-    if (
-      (now - status.last_synchronizer_start) > gap &&
-      (now - status.last_syncrecord_start) > gap &&
-      (now - status.last_run) > gap
-    ){
-      return false;
-    }
-    else{
-      return true;
-    }
-  };
-
-  $interval(() => {
-    if(isRunning){
-      this.getDiags()
-      .then(diags => {
-        this.sendEvents(diags);
-      });
-    }
-  }, 5 * 60 * 1000);
-})
-.directive('syncStatus', function() {
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/sync-status.tpl.html',
-    controller: function($log, $rootScope, Diag, xosNotification, XosUserPrefs){
-      Diag.start();
-      // to debug set this to true,
-      // the panel will be opened by default
-      // this.showNotificationPanel = true;
-      this.synchronizers = {};
-
-      this.showNoSync = true;
-
-      $rootScope.$on('diag', (e, d) => {
-        this.synchronizers[d.name] = d;
-
-        // if errored
-        if(!d.status){
-          // and not already notified
-          if(!XosUserPrefs.getSynchronizerNotificationStatus(d.name)){
-            xosNotification.notify('CORD Synchronizer', {
-              icon: '/static/cord-logo.png',
-              body: `The ${d.name} synchronizer has not performed actions in the last 15 minutes.`
-            });
-          }
-          XosUserPrefs.setSynchronizerNotificationStatus(d.name, true);
-        }
-        else {
-          XosUserPrefs.setSynchronizerNotificationStatus(d.name, false);
-        }
-
-        // hide list if empty
-        this.showNoSync = false;
-        if(Object.keys(this.synchronizers).length === 0){
-          this.showNoSync = true;
-        }
-      });
-
-    }
-  }
-});
-
-angular.element(document).ready(function() {
-  angular.bootstrap('#xosSynchronizerNotifier', ['xos.synchronizerNotifier']);
-});
\ No newline at end of file
diff --git a/views/ngXosViews/synchronizerNotifier/src/sass/main.scss b/views/ngXosViews/synchronizerNotifier/src/sass/main.scss
deleted file mode 100644
index a93f38b..0000000
--- a/views/ngXosViews/synchronizerNotifier/src/sass/main.scss
+++ /dev/null
@@ -1,50 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xosSynchronizerNotifier {
-  
-  float: left;
-
-  .alert {
-    margin-bottom: 0px !important;
-  }
-
-  .sync-status-container {
-    position: relative;
-    z-index: 200;
-  }
-
-  .notification-panel {
-    position: absolute;
-    width: 200px;
-  }
-
-  sync-status {
-    .badge {
-      &.success {
-        background-color: $brand-success;
-      }
-
-      &.warning {
-        background-color: $brand-warning;
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/synchronizerNotifier/src/templates/sync-status.tpl.html b/views/ngXosViews/synchronizerNotifier/src/templates/sync-status.tpl.html
deleted file mode 100644
index 7fabbe4..0000000
--- a/views/ngXosViews/synchronizerNotifier/src/templates/sync-status.tpl.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="sync-status-container">
-  <div class="btn btn-default" ng-click="vm.showNotificationPanel = !vm.showNotificationPanel">
-    <i class="glyphicon glyphicon-inbox"></i>
-  </div>
-  <div class="notification-panel panel panel-default" ng-show="vm.showNotificationPanel">
-    <ul class="list-group" ng-show="!vm.showNoSync">
-      <li class="list-group-item" ng-repeat="(syncName, syncStatus) in vm.synchronizers">
-        <span class="badge" ng-class="{success: syncStatus.status, warning: !syncStatus.status}">
-          <span ng-show="syncStatus.status"><i class="glyphicon glyphicon-ok"></i></span>
-          <span ng-hide="syncStatus.status"><i class="glyphicon glyphicon-time"></i></span>
-        </span>
-        <b>{{syncName}}</b>
-        <br/>
-        <small><i>{{syncStatus.info.last_run | date:'mediumTime'}}</i></small>
-      </li>
-    </ul>
-    <div class="alert alert-info" ng-show="vm.showNoSync">
-      No syncronizers are running.
-    </div>
-  </div>
-</div>
diff --git a/views/ngXosViews/synchronizerNotifier/src/templates/users-list.tpl.html b/views/ngXosViews/synchronizerNotifier/src/templates/users-list.tpl.html
deleted file mode 100644
index 6d26747..0000000
--- a/views/ngXosViews/synchronizerNotifier/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.users"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/.bowerrc b/views/ngXosViews/tenant/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/tenant/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/.eslintrc b/views/ngXosViews/tenant/.eslintrc
deleted file mode 100644
index f9a952f..0000000
--- a/views/ngXosViews/tenant/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [0, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/.gitignore b/views/ngXosViews/tenant/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/tenant/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/bower.json b/views/ngXosViews/tenant/bower.json
deleted file mode 100644
index 4c5c1a7..0000000
--- a/views/ngXosViews/tenant/bower.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "xos-tenant",
-  "version": "0.0.0",
-  "authors": [
-    "Arpit Agarwal <arpit@onlab.us>"
-  ],
-  "description": "The tenant view",
-  "license": "Apache-2.0",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/tenant/gulp/build.js b/views/ngXosViews/tenant/gulp/build.js
deleted file mode 100644
index 2bdbe9e..0000000
--- a/views/ngXosViews/tenant/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.tenant')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosTenant.html',
-        options.static + 'css/xosTenant.css',
-        options.static + 'images/tenant-icon.png',
-        options.static + 'images/tenant-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosTenant.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/tenant-icon.png`, `${options.icon}/tenant-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosTenant.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.tenant',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosTenantVendor.js',
-            options.static + 'js/xosTenant.js',
-            options.static + 'css/xosTenant.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosTenant.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosTenantVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['Tenant'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosTenant'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/tenant-icon.png`) &&
-      fs.existsSync(`${options.icon}/tenant-icon-active.png`)
-    ){
-      dashboardJson['Tenant'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['tenant_dashboard'] = {
-      node: 'Tenant',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/gulp/server.js b/views/ngXosViews/tenant/gulp/server.js
deleted file mode 100644
index 4937186..0000000
--- a/views/ngXosViews/tenant/gulp/server.js
+++ /dev/null
@@ -1,188 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/xoslib/tenant') !== -1 ||
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/tenant/gulpfile.js b/views/ngXosViews/tenant/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/tenant/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/tenant/karma.conf.js b/views/ngXosViews/tenant/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/tenant/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/tenant/package.json b/views/ngXosViews/tenant/package.json
deleted file mode 100644
index 3633eec..0000000
--- a/views/ngXosViews/tenant/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-tenant",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/tenant/spec/sample.test.js b/views/ngXosViews/tenant/spec/sample.test.js
deleted file mode 100644
index 04d1f62..0000000
--- a/views/ngXosViews/tenant/spec/sample.test.js
+++ /dev/null
@@ -1,75 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('Tenant View', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.tenant'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    httpBackend.whenGET('/api/core/sites/?no_hyperlinks=1').respond(200, []);
-    // Setting up mock request
-    scope = $rootScope.$new();
-    element = angular.element('<site-list></site-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-  describe('site list table',() =>{
-    it('site list ', () => {
-      var sites = [
-        {
-          'name':'Mysite',
-          'id':'1'
-        }
-      ];
-      var slices = [
-        {
-          'site': '1',
-          'instance_total' :1,
-          'instance_total_ready' :1
-        },
-        {
-          'site': '1',
-          'instance_total': 2,
-          'instance_total_ready': 3
-        },
-        {
-          'site': '2',
-          'instance_total': '1',
-          'instance_total_ready': '2'
-        }
-      ];
-      var result = isolatedScope.returnData(sites,slices);
-      expect(result).toEqual([
-        {
-          'name':'Mysite',
-          'id':'1',
-          'instance_total':3,
-          'instance_total_ready':4
-        }
-      ]);
-    });
-  });
-});
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/src/css/dev.css b/views/ngXosViews/tenant/src/css/dev.css
deleted file mode 100644
index 1177a33..0000000
--- a/views/ngXosViews/tenant/src/css/dev.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosTenant{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/src/css/main.css b/views/ngXosViews/tenant/src/css/main.css
deleted file mode 100644
index e2a3de3..0000000
--- a/views/ngXosViews/tenant/src/css/main.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosTenant [ui-view] {
-  margin-bottom: 100px; }
-
-#xosTenant a {
-  margin-bottom: 15px; }
diff --git a/views/ngXosViews/tenant/src/icons/README.md b/views/ngXosViews/tenant/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/tenant/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/src/index.html b/views/ngXosViews/tenant/src/index.html
deleted file mode 100644
index 7331d5a..0000000
--- a/views/ngXosViews/tenant/src/index.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-
-<div ng-app="xos.tenant" id="xosTenant" class="container-fluid">
-   <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/sitedetail.js"></script>
-<script src="/.tmp/createslice.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/src/js/createslice.js b/views/ngXosViews/tenant/src/js/createslice.js
deleted file mode 100644
index d0060af..0000000
--- a/views/ngXosViews/tenant/src/js/createslice.js
+++ /dev/null
@@ -1,303 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Created by arpit on 7/7/2016.

- */

-'use strict';

-

-angular.module('xos.tenant')

-.directive('createSlice', function(){

-  return {

-    //sites : {},

-    restrict: 'E',

-    scope: {},

-    bindToController: true,

-    controllerAs: 'cs',

-    templateUrl: 'templates/createslice.html',

-    controller: function(Slices, SlicesPlus, Sites, Images, $stateParams, $http, $state, $q, XosUserPrefs,_){

-      this.config = {

-        exclude: ['site', 'password', 'last_login', 'mount_data_sets', 'default_flavor', 'creator', 'exposed_ports', 'networks', 'omf_friendly', 'omf_friendly', 'no_sync', 'no_policy', 'lazy_blocked', 'write_protect', 'deleted', 'backend_status', 'backend_register', 'policed', 'enacted', 'updated', 'created', 'validators', 'humanReadableName'],

-        formName: 'SliceDetails',

-        feedback: {

-          show: false,

-          message: 'Form submitted successfully !!!',

-          type: 'success'

-        },

-        actions: [

-          {

-            label: 'Save',

-            icon: 'ok', // refers to bootstraps glyphicon

-            cb: (model, form) => { // receive the model

-              saveform(model, form).then(()=> {

-                $state.go('site', {id: this.model.site});

-              });

-            },

-            class: 'success'

-          },  {

-            label: 'Save and continue editing',

-            icon: 'ok', // refers to bootstraps glyphicon

-            cb: (model, form) => { // receive the model

-              saveform(model, form);

-            },

-            class: 'primary'

-          },

-          {

-            label: 'Save and add another',

-            icon: 'ok', // refers to bootstraps glyphicon

-            cb: (model, form) => {

-              saveform(model, form).then(()=> {

-                $state.go('createslice', { site: this.model.site, id: ''});

-              });

-            },

-            class: 'primary'

-          }

-        ],

-        fields:

-        {

-          site: {

-            label: 'Site',

-            type: 'select',

-            validators: { required: true},

-            hint: 'The Site this Slice belongs to',

-            options: []

-

-          },

-          name: {

-            label: 'Name',

-            type: 'string',

-            hint: 'The Name of the Slice',

-            validators: {

-              required: true,

-              custom: (value)=>{

-                if(this.model.site){

-                  var selectVal = _.find(this.config.fields.site.options,['id',this.model.site]);

-                  if(selectVal && value){

-                    return (value.toLowerCase().indexOf(selectVal.label.toLowerCase()) === 0);

-                  }

-                }

-                return false;

-              }

-            }

-          },

-          serviceClass: {

-            label: 'ServiceClass',

-            type: 'select',

-            validators: {required: true},

-            hint: 'The Site this Slice belongs to',

-            options: [

-              {

-                id: 1,

-                label: 'Best effort'

-              }

-            ]

-          },

-          enabled: {

-            label: 'Enabled',

-            type: 'boolean',

-            hint: 'Status for this Slice'

-          },

-          description: {

-            label: 'Description',

-            type: 'string',

-            hint: 'High level description of the slice and expected activities',

-            validators: {

-              required: false,

-              minlength: 10

-            }

-          },

-          service: {

-            label: 'Service',

-            type: 'select',

-            validators: { required: false},

-            options: [

-              {

-                id: 0,

-                label: '--------'

-              }

-            ]

-          },

-          slice_url: {

-            label: 'Slice url',

-            type: 'string',

-            validators: {

-              required: false,

-              minlength: 10

-            }

-          },

-          max_instances: {

-            label: 'Max Instances',

-            type: 'number',

-            validators: {

-              required: false,

-              min: 0

-            }

-          },

-          default_isolation: {

-            label: 'Default Isolation',

-            type: 'select',

-            validators: { required: false},

-            options: [

-              {

-                id: 'vm',

-                label: 'Virtual Machine'

-              },

-              {

-                id: 'container',

-                label: 'Container'

-              },

-              {

-                id: 'container_vm',

-                label: 'Container in VM'

-              }

-            ]

-          },

-          default_image: {

-            label: 'Default image',

-            type: 'select',

-            validators: { required: false},

-            options: []

-          },

-          network: {

-            label: 'Network',

-            type: 'select',

-            validators: { required: false},

-            options: [

-              {

-                id: 'default',

-                label: 'Default'

-              },

-              {

-                id: 'host',

-                label: 'Host'

-              },

-              {

-                id: 'bridged',

-                label: 'Bridged'

-              },

-              {

-                id: 'noauto',

-                label: 'No Automatic Networks'

-              }

-            ]

-          }

-

-        }

-      };

-      var data;

-      Images.query().$promise

-          .then((users) => {

-            this.users = users;

-            data = this.users;

-            this.optionValImg = this.setData(data, {field1: 'id', field2: 'name'});

-            this.config.fields['default_image'].options = this.optionValImg;

-          })

-          .catch((e) => {

-            throw new Error(e);

-          });

-

-      // Use this method for select by seting object in fields variable of format { field1 : "val1", field2 : "val2"}

-      this.setData = (data, fields) => {

-        var i;

-        var retObj=[];

-        for(i = 0; i<data.length; i++){

-          var optVal = {id: data[i][fields.field1], label: data[i][fields.field2]};

-          retObj.push(optVal);

-

-        }

-        return retObj;

-      };

-

-      // retrieving user list

-

-      if ($stateParams.id)

-      {

-        delete this.config.fields['site'];

-        this.config.exclude.push('site');

-

-        Slices.get({id: $stateParams.id}).$promise

-          .then((users) => {

-            this.users = users;

-            data = users;

-

-            this.model = data;

-          })

-          .catch((e) => {

-            throw new Error(e);

-          });

-      }

-      else

-      {

-

-

-        this.model = {};

-        XosUserPrefs.getUserDetailsCookie().$promise

-        .then((userdata)=>{

-          this.model['creator'] =userdata.current_user_id;

-        })

-        .catch ((e) => {

-          throw new Error(e);

-        });

-

-        Sites.query().$promise

-        .then((users) => {

-          this.users_site = users;

-          this.optionVal = this.setData(this.users_site, {field1: 'id', field2: 'name'});

-          this.config.fields['site'].options = this.optionVal;

-        })

-        .catch((e) => {

-          throw new Error(e);

-        });

-      }

-

-      var  saveform = (model,form) =>

-      { // receive the model

-        var deferred = $q.defer();

-        delete model.networks;

-        if (form.$valid )

-        {

-          if(model.id){

-            var pr = Slices.update(model).$promise;

-          }

-          else{

-            var pr = Slices.save(model).$promise;

-          }

-          pr.then((users) => {

-            this.model = users;

-            this.config.feedback.show = true;

-            deferred.resolve(users);

-          })

-          .catch((e) => {

-            this.config.feedback.show = true;

-            this.config.feedback.type='danger';

-            if(e.data && e.data.detail )

-            {

-              this.config.feedback.message = e.data.detail;

-            }

-            else {

-              this.config.feedback.message=e.statusText;

-            }

-            deferred.reject(e);

-          });

-        }

-

-        return  deferred.promise;

-      }

-    }

-  };

-});
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/src/js/main.js b/views/ngXosViews/tenant/src/js/main.js
deleted file mode 100644
index 885e863..0000000
--- a/views/ngXosViews/tenant/src/js/main.js
+++ /dev/null
@@ -1,117 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';

-

-angular.module('xos.tenant', [

-  'ngResource',

-  'ngCookies',

-  'ui.router',

-  'xos.helpers'

-])

-.config(($stateProvider) => {

-  $stateProvider

-  .state('site-list', {

-    url: '/',

-    template: '<site-list></site-list>'

-  })

-    .state('site', {

-      url: '/site/:id',

-      template: '<site-detail></site-detail>'

-

-    })

-    .state('createslice', {

-      url: '/site/:site/slice/:id?',

-      template: '<create-slice></create-slice>'

-

-    });

-})

-.config(function($httpProvider){

-  $httpProvider.interceptors.push('NoHyperlinks');

-})

-.directive('siteList', function(){

-  return {

-    //sites : {},

-    restrict: 'E',

-    scope: {},

-    bindToController: true,

-    controllerAs: 'vm',

-    templateUrl: 'templates/users-list.tpl.html',

-    controller: function(Sites, SlicesPlus){

-

-

-

-      this.tableConfig = {

-        columns: [

-          {

-            label: 'Site',

-            prop: 'name',

-            link: item => `#/site/${item.id}`

-          },

-          {

-            label: 'Allocated',

-            prop: 'instance_total'

-          },

-          {

-            label: 'Ready',

-            prop: 'instance_total_ready'

-          }

-        ]

-      };

-

-      // retrieving user list

-      Sites.query().$promise

-      .then((users) => {

-        this.sites = users;

-        return  SlicesPlus.query().$promise

-      })

-      .then((users) => {

-        this.slices = users;

-        this.site_list = this.returnData(this.sites, this.slices);

-      })

-      .catch((e) => {

-        throw new Error(e);

-      });

-

-

-      this.returnData = (sites, slices) => {

-        var i, j=0;

-        var site_list=[];

-

-        for(i = 0; i<sites.length; i++){

-          var instance_t = 0;

-          var instance_t_r = 0;

-          for(j=0;j<slices.length;j++){

-            if (sites[i].id != null && slices[j].site !=null && sites[i].id === slices[j].site){

-              instance_t = instance_t + slices[j].instance_total;

-              instance_t_r = instance_t_r + slices[j].instance_total_ready;

-            }

-          }

-          var data_sites = {

-            'id': sites[i].id,

-            'name': sites[i].name,

-            'instance_total': instance_t,

-            'instance_total_ready': instance_t_r

-          };

-          site_list.push(data_sites);

-        }

-        return site_list;

-      }

-    }

-  };

-});

diff --git a/views/ngXosViews/tenant/src/js/sitedetail.js b/views/ngXosViews/tenant/src/js/sitedetail.js
deleted file mode 100644
index 723fb4f..0000000
--- a/views/ngXosViews/tenant/src/js/sitedetail.js
+++ /dev/null
@@ -1,64 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Created by arpit on 7/7/2016.

- */

-'use strict';

-

-angular.module('xos.tenant')

-.directive('siteDetail', function(){

-  return {

-    restrict: 'E',

-    scope: {},

-    bindToController: true,

-    controllerAs: 'sl',

-    templateUrl: 'templates/slicelist.html',

-    controller: function(SlicesPlus, $stateParams){

-      this.siteId  = $stateParams.id;

-      this.tableConfig = {

-        columns: [

-          {

-            label: 'Slice List',

-            prop: 'name',

-            link: item => `#/site/${item.site}/slice/${item.id}`

-          },

-          {

-            label: 'Allocated',

-            prop: 'instance_total'

-          },

-          {

-            label: 'Ready',

-            prop: 'instance_total_ready'

-          }

-        ]

-      };

-

-      // retrieving user list

-      SlicesPlus.query({

-        site: $stateParams.id

-      }).$promise

-      .then((users) => {

-        this.sliceList = users;

-      })

-      .catch((e) => {

-        throw new Error(e);

-      });

-    }

-  };

-});
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/src/sass/main.scss b/views/ngXosViews/tenant/src/sass/main.scss
deleted file mode 100644
index 60dff6b..0000000
--- a/views/ngXosViews/tenant/src/sass/main.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-@import '../../../../../views/style/sass/bootstrap/bootstrap/_variables.scss';
-
-
-#xosTenant {
-  [ui-view]{
-    margin-bottom: 100px;
-  }
-  
-  a{
-    margin-bottom: $form-group-margin-bottom;
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/src/templates/createslice.html b/views/ngXosViews/tenant/src/templates/createslice.html
deleted file mode 100644
index ddf5342..0000000
--- a/views/ngXosViews/tenant/src/templates/createslice.html
+++ /dev/null
@@ -1,29 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!--<xos-table config="cs.tableConfig" data="cs.sites"></xos-table>-->
-<h2>Slice Details</h2>
-<hr></hr>
-<xos-form ng-model="cs.model" config="cs.config" ></xos-form>
-
-<!--<pre>-->
-<!--&lt;!&ndash;{{cs.users | json}}&ndash;&gt;-->
-
-<!--{{cs.users.name | json}}-->
-
-<!--</pre>-->
\ No newline at end of file
diff --git a/views/ngXosViews/tenant/src/templates/slicelist.html b/views/ngXosViews/tenant/src/templates/slicelist.html
deleted file mode 100644
index e6cfa18..0000000
--- a/views/ngXosViews/tenant/src/templates/slicelist.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 ng-bind="siteNameSe"></span>-->
-<!--<xos-field></xos-field>-->
-<a class="addlink btn btn-info" ui-sref="createslice({site: sl.siteId})"><i class="glyphicon glyphicon-plus-sign"></i> Create Slice</a>
-<xos-table config="sl.tableConfig" data="sl.sliceList"></xos-table>
-<!--<div ui-view="sliceDetails"></div>-->
-<!--<pre>{{sl.users[0].site}}</pre>-->
diff --git a/views/ngXosViews/tenant/src/templates/users-list.tpl.html b/views/ngXosViews/tenant/src/templates/users-list.tpl.html
deleted file mode 100644
index 617c09c..0000000
--- a/views/ngXosViews/tenant/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.site_list"></xos-table>
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/.bowerrc b/views/ngXosViews/truckroll/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/truckroll/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/.eslintrc b/views/ngXosViews/truckroll/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/truckroll/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/.gitignore b/views/ngXosViews/truckroll/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/truckroll/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/bower.json b/views/ngXosViews/truckroll/bower.json
deleted file mode 100644
index 27373e8..0000000
--- a/views/ngXosViews/truckroll/bower.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "name": "xos-truckroll",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <matteo.scandolo@gmail.com>"
-  ],
-  "description": "The truckroll view",
-  "license": "Apache-2.0",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-animate": "1.4.7",
-    "angular-resource": "1.4.7",
-    "lodash": "~4.11.1",
-    "bootstrap-css": "3.3.6",
-    "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17",
-    "angular-recursion": "~1.0.5",
-    "ng-xos-lib": "opencord/ng-xos-lib#~1.0.0"
-  }
-}
diff --git a/views/ngXosViews/truckroll/gulp/build.js b/views/ngXosViews/truckroll/gulp/build.js
deleted file mode 100644
index 5328ec8..0000000
--- a/views/ngXosViews/truckroll/gulp/build.js
+++ /dev/null
@@ -1,245 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat-util');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-var postcss = require('gulp-postcss');
-var autoprefixer = require('autoprefixer');
-var mqpacker = require('css-mqpacker');
-var csswring = require('csswring');
-var yaml = require('js-yaml');
-var colors = require('colors/safe');
-var fs =  require('fs');
-
-const TEMPLATE_FOOTER = `
-angular.module('xos.truckroll')
-.run(['$location', function(a){
-  a.path('/');
-}])
-`
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [
-        options.dashboards + 'xosTruckroll.html',
-        options.static + 'css/xosTruckroll.css',
-        options.static + 'images/truckroll-icon.png',
-        options.static + 'images/truckroll-icon-active.png'
-      ],
-      {force: true}
-    );
-  });
-
-  // minify css
-  gulp.task('css', function () {
-    var processors = [
-      autoprefixer({browsers: ['last 1 version']}),
-      mqpacker,
-      csswring
-    ];
-
-    gulp.src([
-      `${options.css}**/*.css`,
-      `!${options.css}dev.css`
-    ])
-    .pipe(postcss(processors))
-    .pipe(gulp.dest(options.tmp + '/css/'));
-  });
-
-  // copy css in correct folder
-  gulp.task('copyCss', ['wait'], function(){
-    return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosTruckroll.css'))
-    .pipe(gulp.dest(options.static + 'css/'))
-  });
-
-  // copy images in correct folder
-  gulp.task('copyImages', ['wait'], function(){
-    return gulp.src([`${options.icon}/truckroll-icon.png`, `${options.icon}/truckroll-icon-active.png`])
-    .pipe(gulp.dest(options.static + 'images/'))
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosTruckroll.js'))
-    .pipe(concat.header('//Autogenerated, do not edit!!!\n'))
-    .pipe(concat.footer(TEMPLATE_FOOTER))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.truckroll',
-        root: 'templates/'
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n^<link.*)*\n<!-- endbower -->/gmi, ''))
-      .pipe(replace(/<!-- bower:js -->(\n^<script.*)*\n<!-- endbower -->/gmi, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'vendor/xosTruckrollVendor.js',
-            options.static + 'js/xosTruckroll.js',
-            options.static + 'css/xosTruckroll.css'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosTruckroll.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosTruckrollVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('wait', function (cb) {
-    // setTimeout could be any async task
-    setTimeout(function () {
-      cb();
-    }, 1000);
-  });
-
-  gulp.task('tosca', function (cb) {
-
-    // TOSCA to register the dashboard in the system
-    const dashboardJson = {};
-    dashboardJson['Truckroll'] = {
-      type: 'tosca.nodes.DashboardView',
-      properties: {
-        url: 'template:xosTruckroll'
-      }
-    };
-
-    // check for custom icons
-    if(
-      fs.existsSync(`${options.icon}/truckroll-icon.png`) &&
-      fs.existsSync(`${options.icon}/truckroll-icon-active.png`)
-    ){
-      dashboardJson['Truckroll'].properties.custom_icon = true;
-    }
-
-    const dashboardTosca = yaml.dump(dashboardJson).replace(/'/gmi, '');
-
-    // TOSCA to add the dashboard to the user
-    const userDashboardJson = {};
-    userDashboardJson['truckroll_dashboard'] = {
-      node: 'Truckroll',
-      relationship: 'tosca.relationships.UsesDashboard'
-    };
-    const userJson = {
-      'padmin@vicci.org': {
-        type: 'tosca.nodes.User',
-        properties: {
-          'no-create': true,
-          'no-delete': true
-        },
-        requirements: [userDashboardJson]
-      }
-    };
-    const userTosca = yaml.dump(userJson).replace(/'/gmi, '');
-
-
-    // the output is in a timeout so that it get printed after the gulp logs
-    setTimeout(function () {
-      console.log(colors.cyan('\n\n# You can use this recipe to load the dashboard in the system:'));
-      console.log(colors.yellow(dashboardTosca));
-      console.log(colors.cyan('# And this recipe to activate the dashboard for a user:'));
-      console.log(colors.yellow(userTosca));
-    }, 1000);
-    cb();
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'clean',
-      'sass',
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'css',
-      'copyCss',
-      'copyImages',
-      'copyHtml',
-      'cleanTmp',
-      'tosca'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/gulp/server.js b/views/ngXosViews/truckroll/gulp/server.js
deleted file mode 100644
index a1e725b..0000000
--- a/views/ngXosViews/truckroll/gulp/server.js
+++ /dev/null
@@ -1,187 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-var sass = require('gulp-sass');
-var fs = require('fs');
-var path = require('path');
-
-const environment = process.env.NODE_ENV;
-
-if(!fs.existsSync(path.join(__dirname, `../../../env/${environment || 'default'}.js`))){
-  if(!environment){
-    throw new Error('You should define a default.js config in /views/env folder.');
-  }
-  else{
-    throw new Error(`Since you are loading a custom environment, you should define a ${environment}.js config in /views/env folder.`);
-  }
-}
-
-var conf = require(path.join(__dirname, `../../../env/${environment || 'default'}.js`));
-
-var proxy = httpProxy.createProxyServer({
-  target: conf.host
-});
-
-
-proxy.on('error', function(error, req, res) {
-  res.writeHead(500, {
-    'Content-Type': 'text/plain'
-  });
-
-  console.error('[Proxy]', error);
-});
-
-module.exports = function(options){
-
-  gulp.task('browser', function() {
-    browserSync.init({
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/xos/core/static': options.static + '../../static/'
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/api/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.css + '**/*.css', function(){
-      browserSync.reload();
-    });
-    gulp.watch(`${options.sass}/**/*.scss`, ['sass'], function(){
-      browserSync.reload();
-    });
-
-    gulp.watch([
-      options.helpers + 'ngXosHelpers.js',
-      options.static + '../../static/xosNgLib.css'
-    ], function(){
-      browserSync.reload();
-    });
-  });
-
-  // compile sass
-  gulp.task('sass', function () {
-    return gulp.src(`${options.sass}/**/*.scss`)
-      .pipe(sass().on('error', sass.logError))
-      .pipe(gulp.dest(options.css));
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.helpers + 'ngXosHelpers.min.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.src + 'css/*.css',
-            options.static + '../../static/xosNgLib.css'
-          ]),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'sass',
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/truckroll/gulpfile.js b/views/ngXosViews/truckroll/gulpfile.js
deleted file mode 100644
index 1fbdb34..0000000
--- a/views/ngXosViews/truckroll/gulpfile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  css: 'src/css/',
-  icon: 'src/icons',
-  sass: 'src/sass/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: './src/vendor/ng-xos-lib/dist/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/truckroll/karma.conf.js b/views/ngXosViews/truckroll/karma.conf.js
deleted file mode 100644
index d333b91..0000000
--- a/views/ngXosViews/truckroll/karma.conf.js
+++ /dev/null
@@ -1,108 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      './src/vendor/ng-xos-lib/dist/ngXosVendor.min.js',
-      './src/vendor/ng-xos-lib/dist/ngXosHelpers.min.js',
-      'src/js/main.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'spec/**/*.mock.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/truckroll/package.json b/views/ngXosViews/truckroll/package.json
deleted file mode 100644
index dbfc895..0000000
--- a/views/ngXosViews/truckroll/package.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "name": "xos-truckroll",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "tosca": "gulp tosca",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "Apache-2.0",
-  "dependencies": {},
-  "devDependencies": {
-    "autoprefixer": "^6.3.3",
-    "browser-sync": "^2.9.11",
-    "colors": "^1.1.2",
-    "css-mqpacker": "^4.0.0",
-    "csswring": "^4.2.1",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-concat-util": "^0.5.5",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-postcss": "^6.0.1",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-sass": "^2.2.0",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "js-yaml": "^3.6.1",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "lodash": "^3.10.1",
-    "phantomjs": "^1.9.19",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/truckroll/spec/sample.test.js b/views/ngXosViews/truckroll/spec/sample.test.js
deleted file mode 100644
index ec88f9c..0000000
--- a/views/ngXosViews/truckroll/spec/sample.test.js
+++ /dev/null
@@ -1,52 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The User List', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.truckroll'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('/api/tenant/cord/subscriber/?no_hyperlinks=1').respond([
-      {
-        email: 'teo@onlab.us',
-        firstname: 'Matteo',
-        lastname: 'Scandolo' 
-      }
-    ]);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<truckroll></truckroll>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  it('should load 1 subscriber', () => {
-    httpBackend.flush();
-    expect(isolatedScope.subscribers.length).toBe(1);
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/src/css/dev.css b/views/ngXosViews/truckroll/src/css/dev.css
deleted file mode 100644
index a1905f7..0000000
--- a/views/ngXosViews/truckroll/src/css/dev.css
+++ /dev/null
@@ -1,24 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosTruckroll{
-  position: absolute;
-  top: 100px;
-  left: 200px;
-  width: 80%;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/src/css/main.css b/views/ngXosViews/truckroll/src/css/main.css
deleted file mode 100644
index e41be01..0000000
--- a/views/ngXosViews/truckroll/src/css/main.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
diff --git a/views/ngXosViews/truckroll/src/css/truckroll.css b/views/ngXosViews/truckroll/src/css/truckroll.css
deleted file mode 100644
index b4d59c7..0000000
--- a/views/ngXosViews/truckroll/src/css/truckroll.css
+++ /dev/null
@@ -1,107 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-.row + .row {
-  margin-top: 20px;
-}
-
-/* ANIMATIONS */
-.animate-vertical.ng-hide-add {
-  animation:0.5s slideOutDown ease-in-out;
-}
-.animate-vertical.ng-hide-remove {
-  animation:0.5s slideInUp ease-in-out;
-}
-
-@keyframes slideInUp {
-  from {
-    transform: translate3d(0, 100%, 0);
-    opacity: 0;
-  }
-
-  to {
-    transform: translate3d(0, 0, 0);
-    opacity: 1;
-  }
-}
-
-
-@keyframes slideOutDown {
-  from {
-    transform: translate3d(0, 0, 0);
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    transform: translate3d(0, 100%, 0);
-  }
-}
-
-/* LOADER */
-.loader {
-  font-size: 10px;
-  margin: 0 auto;
-  text-indent: -9999em;
-  width: 11em;
-  height: 11em;
-  border-radius: 50%;
-  background: #ffffff;
-  background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  position: relative;
-  animation: load3 1.4s infinite linear;
-  transform: translateZ(0);
-}
-.loader:before {
-  width: 50%;
-  height: 50%;
-  background: #105E9E;
-  border-radius: 100% 0 0 0;
-  position: absolute;
-  top: 0;
-  left: 0;
-  content: '';
-}
-.loader:after {
-  background: #fff;
-  width: 75%;
-  height: 75%;
-  border-radius: 50%;
-  content: '';
-  margin: auto;
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-}
-
-@keyframes load3 {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/src/icons/README.md b/views/ngXosViews/truckroll/src/icons/README.md
deleted file mode 100644
index 0d5a787..0000000
--- a/views/ngXosViews/truckroll/src/icons/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Set icon for custom dashboard 
-
-## Path to add images : <dashboard-name>/src/icons
-
-### Add two images with name in following format 
-    <dashboard-name>-icon.png
-    <dashboard-name>-icon-active.png
-
-Examples: 
-    If your dashboard name is `slice`
-    then you will add the images with the name as
-        `slice-icon.png`
-        `slice-icon-active.png`
-        
-        
-        
-        
-Note: If you don't add the custom images, then dashboard will use the default images stored at `/xos/core/xoslib/static/images`
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/src/icons/truckroll-icon-active.png b/views/ngXosViews/truckroll/src/icons/truckroll-icon-active.png
deleted file mode 100644
index 71b2a55..0000000
--- a/views/ngXosViews/truckroll/src/icons/truckroll-icon-active.png
+++ /dev/null
Binary files differ
diff --git a/views/ngXosViews/truckroll/src/icons/truckroll-icon.png b/views/ngXosViews/truckroll/src/icons/truckroll-icon.png
deleted file mode 100644
index fb7c7dc..0000000
--- a/views/ngXosViews/truckroll/src/icons/truckroll-icon.png
+++ /dev/null
Binary files differ
diff --git a/views/ngXosViews/truckroll/src/index.html b/views/ngXosViews/truckroll/src/index.html
deleted file mode 100644
index a02ee75..0000000
--- a/views/ngXosViews/truckroll/src/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/main.css">
-<link rel="stylesheet" href="/css/truckroll.css">
-<link rel="stylesheet" href="/../../../xos/core/static/xosNgLib.css">
-<!-- endinject -->
-
-<div ng-app="xos.truckroll" id="xosTruckroll" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/angular-recursion/angular-recursion.js"></script>
-<!-- endbower -->
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
-<script src="/.tmp/main.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/src/js/main.js b/views/ngXosViews/truckroll/src/js/main.js
deleted file mode 100644
index 3076406..0000000
--- a/views/ngXosViews/truckroll/src/js/main.js
+++ /dev/null
@@ -1,95 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-angular.module('xos.truckroll', [
-  'ngResource',
-  'ngCookies',
-  'ui.router',
-  'xos.helpers'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('user-list', {
-    url: '/',
-    template: '<truckroll></truckroll>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.directive('truckroll', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    templateUrl: 'templates/truckroll.tpl.html',
-    controller: function($timeout, $log, Subscribers, Truckroll){
-      Subscribers.query().$promise
-      .then((subscribers) => {
-        this.subscribers = subscribers;
-      });
-
-      this.loader = false;
-
-      this.runTest = () => {
-
-        // clean previous tests
-        delete this.truckroll.id;
-        delete this.truckroll.result;
-        delete this.truckroll.is_synced;
-        delete this.truckroll.result_code;
-        delete this.truckroll.backend_status;
-
-        const test = new Truckroll(this.truckroll);
-        this.loader = true;
-        test.$save()
-        .then((res) => {
-          this.waitForTest(res.id);
-        })
-      };
-
-      this.waitForTest = (id) => {
-
-        Truckroll.get({id: id}).$promise
-        .then((testResult) => {
-          // if error
-          // or
-          // if is synced
-          if(
-              testResult.backend_status.indexOf('2') >= 0 ||
-              (testResult.result_code && testResult.result_code.indexOf('2') >= 0) ||
-              testResult.is_synced
-            ){
-            this.truckroll = angular.copy(testResult);
-            this.loader = false;
-            Truckroll.delete({id: id});
-          }
-          // else keep polling
-          else{
-            $timeout(() => {
-              this.waitForTest(id);
-            }, 2000)
-          }
-        })
-      };
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/src/sass/main.scss b/views/ngXosViews/truckroll/src/sass/main.scss
deleted file mode 100644
index c3f1d1c..0000000
--- a/views/ngXosViews/truckroll/src/sass/main.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../../../../style/sass/lib/_variables.scss';
-
-#xosTruckroll {
-  
-}
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/src/templates/truckroll.tpl.html b/views/ngXosViews/truckroll/src/templates/truckroll.tpl.html
deleted file mode 100644
index 3957e6d..0000000
--- a/views/ngXosViews/truckroll/src/templates/truckroll.tpl.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="row">
-  <div class="col-xs-12">
-    <h2>Virtual Truck Roll</h2>
-    <p>Use this page to run test against your subscriber</p>
-  </div>
-</div>
-<form ng-submit="vm.runTest()">
-  <div class="row">
-    <div class="col-xs-12">
-      <label>Target:</label>
-    </div>
-    <div class="col-xs-12">
-      <select class="form-control" ng-model="vm.truckroll.target_id" ng-options="s.id as s.humanReadableName for s in vm.subscribers"></select>
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-xs-12">
-      <label>Scope:</label>
-    </div>
-    <div class="col-xs-6">
-      <a 
-      ng-click="vm.truckroll.scope = 'container'"
-      ng-class="{'btn-default': vm.truckroll.scope !== 'container', 'btn-primary': vm.truckroll.scope === 'container'}"
-      class="btn btn-block"
-      >
-        Container
-      </a>
-    </div>
-    <div class="col-xs-6">
-      <a 
-      ng-click="vm.truckroll.scope = 'vm'"
-      ng-class="{'btn-default': vm.truckroll.scope !== 'vm', 'btn-primary': vm.truckroll.scope === 'vm'}"
-      class="btn btn-block"
-      >
-        VM
-      </a>
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-xs-12">
-      <label>Test:</label>
-    </div>
-    <div class="col-xs-4">
-      <a 
-      ng-click="vm.truckroll.test = 'ping'"
-      ng-class="{'btn-default': vm.truckroll.test !== 'ping', 'btn-primary': vm.truckroll.test === 'ping'}"
-      class="btn btn-block">Ping</a>
-    </div>
-    <div class="col-xs-4">
-      <a 
-      ng-click="vm.truckroll.test = 'traceroute'"
-      ng-class="{'btn-default': vm.truckroll.test !== 'traceroute', 'btn-primary': vm.truckroll.test === 'traceroute'}"
-      class="btn btn-block">Traceroute</a>
-    </div>
-    <div class="col-xs-4">
-      <a 
-      ng-click="vm.truckroll.test = 'tcpdump'"
-      ng-class="{'btn-default': vm.truckroll.test !== 'tcpdump', 'btn-primary': vm.truckroll.test === 'tcpdump'}"
-      class="btn btn-block">Tcp Dump</a>
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-xs-12">
-      <label>Argument:</label>
-    </div>
-    <div class="col-xs-12">
-      <input type="text" class="form-control" ng-model="vm.truckroll.argument" required />
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-xs-12" ng-show="!vm.loader">
-      <button class="btn btn-success btn-block">Run test</button>
-    </div>
-  </div>
-</form>
-<div class="row">
-    <div class="col-xs-12 animate-vertical" ng-show="vm.loader">
-      <div class="loader"></div>
-    </div>
-  </div>
-  <div class="row" ng-hide="!vm.truckroll.result_code">
-    <div class="col-xs-12">
-      <label>Result Code</label>
-    </div>
-    <div class="col-xs-12">
-      <pre>{{vm.truckroll.result_code}}</pre>
-    </div>
-  </div>
-  <div class="row" ng-hide="!vm.truckroll.result">
-    <div class="col-xs-12">
-      <label>
-        Result:
-      </label>
-    </div>
-    <div class="col-xs-12">
-      <pre>{{vm.truckroll.result}}</pre>
-    </div>
-  </div>
-  <div class="row" ng-hide="!vm.truckroll.backend_status">
-    <div class="col-xs-12">
-      <label>Backend Status</label>
-    </div>
-    <div class="col-xs-12">
-      <pre>{{vm.truckroll.backend_status}}</pre>
-    </div>
-  </div>
\ No newline at end of file
diff --git a/views/ngXosViews/truckroll/src/templates/users-list.tpl.html b/views/ngXosViews/truckroll/src/templates/users-list.tpl.html
deleted file mode 100644
index 6d26747..0000000
--- a/views/ngXosViews/truckroll/src/templates/users-list.tpl.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<xos-table config="vm.tableConfig" data="vm.users"></xos-table>
\ No newline at end of file
diff --git a/views/npm-debug.log b/views/npm-debug.log
deleted file mode 100644
index 38c9da9..0000000
--- a/views/npm-debug.log
+++ /dev/null
@@ -1,20 +0,0 @@
-0 info it worked if it ends with ok
-1 verbose cli [ '/usr/bin/nodejs', '/usr/bin/npm', 'start' ]
-2 info using npm@3.6.0
-3 info using node@v5.7.0
-4 verbose stack Error: ENOENT: no such file or directory, open '/home/jeremy/xos/views/package.json'
-4 verbose stack     at Error (native)
-5 verbose cwd /home/jeremy/xos/views
-6 error Linux 4.2.0-19-generic
-7 error argv "/usr/bin/nodejs" "/usr/bin/npm" "start"
-8 error node v5.7.0
-9 error npm  v3.6.0
-10 error path /home/jeremy/xos/views/package.json
-11 error code ENOENT
-12 error errno -2
-13 error syscall open
-14 error enoent ENOENT: no such file or directory, open '/home/jeremy/xos/views/package.json'
-15 error enoent ENOENT: no such file or directory, open '/home/jeremy/xos/views/package.json'
-15 error enoent This is most likely not a problem with npm itself
-15 error enoent and is related to npm not being able to find a file.
-16 verbose exit [ -2, true ]
diff --git a/views/style/README.md b/views/style/README.md
deleted file mode 100644
index 7086fd9..0000000
--- a/views/style/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# XOS Styles
-
-This folder holds style definition for XOS and a collection of tools usefull to work with them.
-
-## Setup
-
-The best way to work with XOS styling and appearance is to have the `frontend` configuration running locally on your machine. In this way most of the GUI files are shared (see below). To use the provided tools as they are XOS should be available at `http://xos.dev:9999`.
-
-Before start working on the UI you should also install the dependencies, so enter `xos/views/style/` and execute `npm install` (NodeJs is required).
-
-## Developing
-
-When your environment is ready you could start it with `npm start`, this command will:
-  - Whatch styles in `xos/views/style/sass` and compile them on change
-  - Reload the broser on file changes (for more details see `xos/views/style/bs-config.js`)
-
-## Shared files:
-Shared files are defined in `xos/configurations/frontend/docker-compose.yml`, for the `frontend` configuration they are:
-```
-  - ../common/xos_common_config:/opt/xos/xos_configuration/xos_common_config
-  - ../../core/xoslib:/opt/xos/core/xoslib
-  - ../../core/static:/opt/xos/core/static
-  - ../../core/dashboard:/opt/xos/core/dashboard
-  - ../../core/templatetags:/opt/xos/core/templatetags
-  - ../../templates/admin:/opt/xos/templates/admin
-  - ../../configurations:/opt/xos/configurations
-  - ../../xos:/opt/xos/xos
-```
diff --git a/views/style/bs-config.js b/views/style/bs-config.js
deleted file mode 100644
index 12119b6..0000000
--- a/views/style/bs-config.js
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 = {
-  "files": [
-    '../../xos/core/dashboard/*.html',
-    '../../xos/core/xoslib/**/*.html',
-    '../../xos/core/xoslib/static/**/*.js',
-    '../../xos/core/xoslib/static/**/*.css',
-    '../../xos/core/dashboard/views/*.py',
-    '../../xos/core/views/*.py',
-    '../../xos/templates/**/*.html',
-    '../../xos/core/static/xos.css',
-    '../../xos/xos/**/*.py'
-  ],
-  proxy: "192.168.46.100:9999",
-  open: true
-};
diff --git a/views/style/package.json b/views/style/package.json
deleted file mode 100644
index 4da2c4d..0000000
--- a/views/style/package.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "name": "xos-styling",
-  "version": "0.0.1",
-  "scripts": {
-    "server": "browser-sync start --config bs-config.js",
-    "styles": "node-sass -w -r --include-path --source-map-embed -o ../../xos/core/static/ ./sass/xos.scss",
-    "start": "concurrently \"npm run styles\" \"npm run server\""
-  },
-  "devDependencies": {
-    "browser-sync": "^2.11.2",
-    "concurrently": "^2.0.0",
-    "node-sass": "^3.4.2"
-  }
-}
diff --git a/views/style/sass/bootstrap/_bootstrap-compass.scss b/views/style/sass/bootstrap/_bootstrap-compass.scss
deleted file mode 100644
index e8c3a80..0000000
--- a/views/style/sass/bootstrap/_bootstrap-compass.scss
+++ /dev/null
@@ -1,27 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-@function twbs-font-path($path) {
-  @return font-url($path, true);
-}
-
-@function twbs-image-path($path) {
-  @return image-url($path, true);
-}
-
-$bootstrap-sass-asset-helper: true;
diff --git a/views/style/sass/bootstrap/_bootstrap-mincer.scss b/views/style/sass/bootstrap/_bootstrap-mincer.scss
deleted file mode 100644
index 3b4051b..0000000
--- a/views/style/sass/bootstrap/_bootstrap-mincer.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Mincer asset helper functions
-//
-// This must be imported into a .css.ejs.scss file.
-// Then, <% %>-interpolations will be parsed as strings by Sass, and evaluated by EJS after Sass compilation.
-
-
-@function twbs-font-path($path) {
-  // do something like following
-  // from "path/to/font.ext#suffix" to "<%- asset_path(path/to/font.ext)) + #suffix %>"
-  // from "path/to/font.ext?#suffix" to "<%- asset_path(path/to/font.ext)) + ?#suffix %>"
-  // or from "path/to/font.ext" just "<%- asset_path(path/to/font.ext)) %>"
-  @return "<%- asset_path("#{$path}".replace(/[#?].*$/, '')) + "#{$path}".replace(/(^[^#?]*)([#?]?.*$)/, '$2') %>";
-}
-
-@function twbs-image-path($file) {
-  @return "<%- asset_path("#{$file}") %>";
-}
-
-$bootstrap-sass-asset-helper: true;
diff --git a/views/style/sass/bootstrap/_bootstrap-sprockets.scss b/views/style/sass/bootstrap/_bootstrap-sprockets.scss
deleted file mode 100644
index 4c9a12d..0000000
--- a/views/style/sass/bootstrap/_bootstrap-sprockets.scss
+++ /dev/null
@@ -1,27 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-@function twbs-font-path($path) {
-  @return font-path($path);
-}
-
-@function twbs-image-path($path) {
-  @return image-path($path);
-}
-
-$bootstrap-sass-asset-helper: true;
diff --git a/views/style/sass/bootstrap/_bootstrap.scss b/views/style/sass/bootstrap/_bootstrap.scss
deleted file mode 100644
index 8f46fe9..0000000
--- a/views/style/sass/bootstrap/_bootstrap.scss
+++ /dev/null
@@ -1,74 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-// Core variables and mixins
-@import "bootstrap/variables";
-@import "bootstrap/mixins";
-
-// Reset and dependencies
-@import "bootstrap/normalize";
-@import "bootstrap/print";
-@import "bootstrap/glyphicons";
-
-// Core CSS
-@import "bootstrap/scaffolding";
-@import "bootstrap/type";
-@import "bootstrap/code";
-@import "bootstrap/grid";
-@import "bootstrap/tables";
-@import "bootstrap/forms";
-@import "bootstrap/buttons";
-
-// Components
-@import "bootstrap/component-animations";
-@import "bootstrap/dropdowns";
-@import "bootstrap/button-groups";
-@import "bootstrap/input-groups";
-@import "bootstrap/navs";
-@import "bootstrap/navbar";
-@import "bootstrap/breadcrumbs";
-@import "bootstrap/pagination";
-@import "bootstrap/pager";
-@import "bootstrap/labels";
-@import "bootstrap/badges";
-@import "bootstrap/jumbotron";
-@import "bootstrap/thumbnails";
-@import "bootstrap/alerts";
-@import "bootstrap/progress-bars";
-@import "bootstrap/media";
-@import "bootstrap/list-group";
-@import "bootstrap/panels";
-@import "bootstrap/responsive-embed";
-@import "bootstrap/wells";
-@import "bootstrap/close";
-
-// Components w/ JavaScript
-@import "bootstrap/modals";
-@import "bootstrap/tooltip";
-@import "bootstrap/popovers";
-@import "bootstrap/carousel";
-
-// Utility classes
-@import "bootstrap/utilities";
-@import "bootstrap/responsive-utilities";
diff --git a/views/style/sass/bootstrap/bootstrap/_alerts.scss b/views/style/sass/bootstrap/bootstrap/_alerts.scss
deleted file mode 100644
index 234130a..0000000
--- a/views/style/sass/bootstrap/bootstrap/_alerts.scss
+++ /dev/null
@@ -1,91 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Alerts
-// --------------------------------------------------
-
-
-// Base styles
-// -------------------------
-
-.alert {
-  padding: $alert-padding;
-  margin-bottom: $line-height-computed;
-  border: 1px solid transparent;
-  border-radius: $alert-border-radius;
-
-  // Headings for larger alerts
-  h4 {
-    margin-top: 0;
-    // Specified for the h4 to prevent conflicts of changing $headings-color
-    color: inherit;
-  }
-
-  // Provide class for links that match alerts
-  .alert-link {
-    font-weight: $alert-link-font-weight;
-  }
-
-  // Improve alignment and spacing of inner content
-  > p,
-  > ul {
-    margin-bottom: 0;
-  }
-
-  > p + p {
-    margin-top: 5px;
-  }
-}
-
-// Dismissible alerts
-//
-// Expand the right padding and account for the close button's positioning.
-
-.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
-.alert-dismissible {
-  padding-right: ($alert-padding + 20);
-
-  // Adjust close link position
-  .close {
-    position: relative;
-    top: -2px;
-    right: -21px;
-    color: inherit;
-  }
-}
-
-// Alternate styles
-//
-// Generate contextual modifier classes for colorizing the alert.
-
-.alert-success {
-  @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);
-}
-
-.alert-info {
-  @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);
-}
-
-.alert-warning {
-  @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);
-}
-
-.alert-danger {
-  @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_badges.scss b/views/style/sass/bootstrap/bootstrap/_badges.scss
deleted file mode 100644
index 67289f9..0000000
--- a/views/style/sass/bootstrap/bootstrap/_badges.scss
+++ /dev/null
@@ -1,86 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Badges
-// --------------------------------------------------
-
-
-// Base class
-.badge {
-  display: inline-block;
-  min-width: 10px;
-  padding: 3px 7px;
-  font-size: $font-size-small;
-  font-weight: $badge-font-weight;
-  color: $badge-color;
-  line-height: $badge-line-height;
-  vertical-align: middle;
-  white-space: nowrap;
-  text-align: center;
-  background-color: $badge-bg;
-  border-radius: $badge-border-radius;
-
-  // Empty badges collapse automatically (not available in IE8)
-  &:empty {
-    display: none;
-  }
-
-  // Quick fix for badges in buttons
-  .btn & {
-    position: relative;
-    top: -1px;
-  }
-
-  .btn-xs &,
-  .btn-group-xs > .btn & {
-    top: 0;
-    padding: 1px 5px;
-  }
-
-  // [converter] extracted a& to a.badge
-
-  // Account for badges in navs
-  .list-group-item.active > &,
-  .nav-pills > .active > a > & {
-    color: $badge-active-color;
-    background-color: $badge-active-bg;
-  }
-
-  .list-group-item > & {
-    float: right;
-  }
-
-  .list-group-item > & + & {
-    margin-right: 5px;
-  }
-
-  .nav-pills > li > a > & {
-    margin-left: 3px;
-  }
-}
-
-// Hover state, but only for links
-a.badge {
-  &:hover,
-  &:focus {
-    color: $badge-link-hover-color;
-    text-decoration: none;
-    cursor: pointer;
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_breadcrumbs.scss b/views/style/sass/bootstrap/bootstrap/_breadcrumbs.scss
deleted file mode 100644
index 3408137..0000000
--- a/views/style/sass/bootstrap/bootstrap/_breadcrumbs.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Breadcrumbs
-// --------------------------------------------------
-
-
-.breadcrumb {
-  padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal;
-  margin-bottom: $line-height-computed;
-  list-style: none;
-  background-color: $breadcrumb-bg;
-  border-radius: $border-radius-base;
-
-  > li {
-    display: inline-block;
-
-    + li:before {
-      // [converter] Workaround for https://github.com/sass/libsass/issues/1115
-      $nbsp: "\00a0";
-      content: "#{$breadcrumb-separator}#{$nbsp}"; // Unicode space added since inline-block means non-collapsing white-space
-      padding: 0 5px;
-      color: $breadcrumb-color;
-    }
-  }
-
-  > .active {
-    color: $breadcrumb-active-color;
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_button-groups.scss b/views/style/sass/bootstrap/bootstrap/_button-groups.scss
deleted file mode 100644
index 9640ea2..0000000
--- a/views/style/sass/bootstrap/bootstrap/_button-groups.scss
+++ /dev/null
@@ -1,262 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Button groups
-// --------------------------------------------------
-
-// Make the div behave like a button
-.btn-group,
-.btn-group-vertical {
-  position: relative;
-  display: inline-block;
-  vertical-align: middle; // match .btn alignment given font-size hack above
-  > .btn {
-    position: relative;
-    float: left;
-    // Bring the "active" button to the front
-    &:hover,
-    &:focus,
-    &:active,
-    &.active {
-      z-index: 2;
-    }
-  }
-}
-
-// Prevent double borders when buttons are next to each other
-.btn-group {
-  .btn + .btn,
-  .btn + .btn-group,
-  .btn-group + .btn,
-  .btn-group + .btn-group {
-    margin-left: -1px;
-  }
-}
-
-// Optional: Group multiple button groups together for a toolbar
-.btn-toolbar {
-  margin-left: -5px; // Offset the first child's margin
-  @include clearfix;
-
-  .btn,
-  .btn-group,
-  .input-group {
-    float: left;
-  }
-  > .btn,
-  > .btn-group,
-  > .input-group {
-    margin-left: 5px;
-  }
-}
-
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
-  border-radius: 0;
-}
-
-// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
-.btn-group > .btn:first-child {
-  margin-left: 0;
-  &:not(:last-child):not(.dropdown-toggle) {
-    @include border-right-radius(0);
-  }
-}
-// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
-  @include border-left-radius(0);
-}
-
-// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
-.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:not(:last-child) {
-  > .btn:last-child,
-  > .dropdown-toggle {
-    @include border-right-radius(0);
-  }
-}
-.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  @include border-left-radius(0);
-}
-
-// On active and open, don't show outline
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-
-
-// Sizing
-//
-// Remix the default button sizing classes into new ones for easier manipulation.
-
-.btn-group-xs > .btn { @extend .btn-xs; }
-.btn-group-sm > .btn { @extend .btn-sm; }
-.btn-group-lg > .btn { @extend .btn-lg; }
-
-
-// Split button dropdowns
-// ----------------------
-
-// Give the line between buttons some depth
-.btn-group > .btn + .dropdown-toggle {
-  padding-left: 8px;
-  padding-right: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
-  padding-left: 12px;
-  padding-right: 12px;
-}
-
-// The clickable button for toggling the menu
-// Remove the gradient and set the same inset shadow as the :active state
-.btn-group.open .dropdown-toggle {
-  @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
-
-  // Show no shadow for `.btn-link` since it has no other button styles.
-  &.btn-link {
-    @include box-shadow(none);
-  }
-}
-
-
-// Reposition the caret
-.btn .caret {
-  margin-left: 0;
-}
-// Carets in other button sizes
-.btn-lg .caret {
-  border-width: $caret-width-large $caret-width-large 0;
-  border-bottom-width: 0;
-}
-// Upside down carets for .dropup
-.dropup .btn-lg .caret {
-  border-width: 0 $caret-width-large $caret-width-large;
-}
-
-
-// Vertical button groups
-// ----------------------
-
-.btn-group-vertical {
-  > .btn,
-  > .btn-group,
-  > .btn-group > .btn {
-    display: block;
-    float: none;
-    width: 100%;
-    max-width: 100%;
-  }
-
-  // Clear floats so dropdown menus can be properly placed
-  > .btn-group {
-    @include clearfix;
-    > .btn {
-      float: none;
-    }
-  }
-
-  > .btn + .btn,
-  > .btn + .btn-group,
-  > .btn-group + .btn,
-  > .btn-group + .btn-group {
-    margin-top: -1px;
-    margin-left: 0;
-  }
-}
-
-.btn-group-vertical > .btn {
-  &:not(:first-child):not(:last-child) {
-    border-radius: 0;
-  }
-  &:first-child:not(:last-child) {
-    @include border-top-radius($btn-border-radius-base);
-    @include border-bottom-radius(0);
-  }
-  &:last-child:not(:first-child) {
-    @include border-top-radius(0);
-    @include border-bottom-radius($btn-border-radius-base);
-  }
-}
-.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,
-  > .dropdown-toggle {
-    @include border-bottom-radius(0);
-  }
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  @include border-top-radius(0);
-}
-
-
-// Justified button groups
-// ----------------------
-
-.btn-group-justified {
-  display: table;
-  width: 100%;
-  table-layout: fixed;
-  border-collapse: separate;
-  > .btn,
-  > .btn-group {
-    float: none;
-    display: table-cell;
-    width: 1%;
-  }
-  > .btn-group .btn {
-    width: 100%;
-  }
-
-  > .btn-group .dropdown-menu {
-    left: auto;
-  }
-}
-
-
-// Checkbox and radio options
-//
-// In order to support the browser's form validation feedback, powered by the
-// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
-// `display: none;` or `visibility: hidden;` as that also hides the popover.
-// Simply visually hiding the inputs via `opacity` would leave them clickable in
-// certain cases which is prevented by using `clip` and `pointer-events`.
-// This way, we ensure a DOM element is visible to position the popover from.
-//
-// See https://github.com/twbs/bootstrap/pull/12794 and
-// https://github.com/twbs/bootstrap/pull/14559 for more information.
-
-[data-toggle="buttons"] {
-  > .btn,
-  > .btn-group > .btn {
-    input[type="radio"],
-    input[type="checkbox"] {
-      position: absolute;
-      clip: rect(0,0,0,0);
-      pointer-events: none;
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_buttons.scss b/views/style/sass/bootstrap/bootstrap/_buttons.scss
deleted file mode 100644
index 80e28ab..0000000
--- a/views/style/sass/bootstrap/bootstrap/_buttons.scss
+++ /dev/null
@@ -1,186 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Buttons
-// --------------------------------------------------
-
-
-// Base styles
-// --------------------------------------------------
-
-.btn {
-  display: inline-block;
-  margin-bottom: 0; // For input.btn
-  font-weight: $btn-font-weight;
-  text-align: center;
-  vertical-align: middle;
-  touch-action: manipulation;
-  cursor: pointer;
-  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
-  border: 1px solid transparent;
-  white-space: nowrap;
-  @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);
-  @include user-select(none);
-
-  &,
-  &:active,
-  &.active {
-    &:focus,
-    &.focus {
-      @include tab-focus;
-    }
-  }
-
-  &:hover,
-  &:focus,
-  &.focus {
-    color: $btn-default-color;
-    text-decoration: none;
-  }
-
-  &:active,
-  &.active {
-    outline: 0;
-    background-image: none;
-    @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
-  }
-
-  &.disabled,
-  &[disabled],
-  fieldset[disabled] & {
-    cursor: $cursor-disabled;
-    @include opacity(.65);
-    @include box-shadow(none);
-  }
-
-  // [converter] extracted a& to a.btn
-}
-
-a.btn {
-  &.disabled,
-  fieldset[disabled] & {
-    pointer-events: none; // Future-proof disabling of clicks on `<a>` elements
-  }
-}
-
-
-// Alternate buttons
-// --------------------------------------------------
-
-.btn-default {
-  @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);
-}
-.btn-primary {
-  @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);
-}
-// Success appears as green
-.btn-success {
-  @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);
-}
-// Info appears as blue-green
-.btn-info {
-  @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);
-}
-// Warning appears as orange
-.btn-warning {
-  @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);
-}
-// Danger and error appear as red
-.btn-danger {
-  @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);
-}
-
-
-// Link buttons
-// -------------------------
-
-// Make a button look and behave like a link
-.btn-link {
-  color: $link-color;
-  font-weight: normal;
-  border-radius: 0;
-
-  &,
-  &:active,
-  &.active,
-  &[disabled],
-  fieldset[disabled] & {
-    background-color: transparent;
-    @include box-shadow(none);
-  }
-  &,
-  &:hover,
-  &:focus,
-  &:active {
-    border-color: transparent;
-  }
-  &:hover,
-  &:focus {
-    color: $link-hover-color;
-    text-decoration: $link-hover-decoration;
-    background-color: transparent;
-  }
-  &[disabled],
-  fieldset[disabled] & {
-    &:hover,
-    &:focus {
-      color: $btn-link-disabled-color;
-      text-decoration: none;
-    }
-  }
-}
-
-
-// Button Sizes
-// --------------------------------------------------
-
-.btn-lg {
-  // line-height: ensure even-numbered height of button next to large input
-  @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $btn-border-radius-large);
-}
-.btn-sm {
-  // line-height: ensure proper height of button next to small input
-  @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);
-}
-.btn-xs {
-  @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small);
-}
-
-
-// Block button
-// --------------------------------------------------
-
-.btn-block {
-  display: block;
-  width: 100%;
-}
-
-// Vertically space out multiple block buttons
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-
-// Specificity overrides
-input[type="submit"],
-input[type="reset"],
-input[type="button"] {
-  &.btn-block {
-    width: 100%;
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_carousel.scss b/views/style/sass/bootstrap/bootstrap/_carousel.scss
deleted file mode 100644
index 91bca74..0000000
--- a/views/style/sass/bootstrap/bootstrap/_carousel.scss
+++ /dev/null
@@ -1,288 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Carousel
-// --------------------------------------------------
-
-
-// Wrapper for the slide container and indicators
-.carousel {
-  position: relative;
-}
-
-.carousel-inner {
-  position: relative;
-  overflow: hidden;
-  width: 100%;
-
-  > .item {
-    display: none;
-    position: relative;
-    @include transition(.6s ease-in-out left);
-
-    // Account for jankitude on images
-    > img,
-    > a > img {
-      @include img-responsive;
-      line-height: 1;
-    }
-
-    // WebKit CSS3 transforms for supported devices
-    @media all and (transform-3d), (-webkit-transform-3d) {
-      @include transition-transform(0.6s ease-in-out);
-      @include backface-visibility(hidden);
-      @include perspective(1000px);
-
-      &.next,
-      &.active.right {
-        @include translate3d(100%, 0, 0);
-        left: 0;
-      }
-      &.prev,
-      &.active.left {
-        @include translate3d(-100%, 0, 0);
-        left: 0;
-      }
-      &.next.left,
-      &.prev.right,
-      &.active {
-        @include translate3d(0, 0, 0);
-        left: 0;
-      }
-    }
-  }
-
-  > .active,
-  > .next,
-  > .prev {
-    display: block;
-  }
-
-  > .active {
-    left: 0;
-  }
-
-  > .next,
-  > .prev {
-    position: absolute;
-    top: 0;
-    width: 100%;
-  }
-
-  > .next {
-    left: 100%;
-  }
-  > .prev {
-    left: -100%;
-  }
-  > .next.left,
-  > .prev.right {
-    left: 0;
-  }
-
-  > .active.left {
-    left: -100%;
-  }
-  > .active.right {
-    left: 100%;
-  }
-
-}
-
-// Left/right controls for nav
-// ---------------------------
-
-.carousel-control {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  width: $carousel-control-width;
-  @include opacity($carousel-control-opacity);
-  font-size: $carousel-control-font-size;
-  color: $carousel-control-color;
-  text-align: center;
-  text-shadow: $carousel-text-shadow;
-  background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug
-  // We can't have this transition here because WebKit cancels the carousel
-  // animation if you trip this while in the middle of another animation.
-
-  // Set gradients for backgrounds
-  &.left {
-    @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001));
-  }
-  &.right {
-    left: auto;
-    right: 0;
-    @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5));
-  }
-
-  // Hover/focus state
-  &:hover,
-  &:focus {
-    outline: 0;
-    color: $carousel-control-color;
-    text-decoration: none;
-    @include opacity(.9);
-  }
-
-  // Toggles
-  .icon-prev,
-  .icon-next,
-  .glyphicon-chevron-left,
-  .glyphicon-chevron-right {
-    position: absolute;
-    top: 50%;
-    margin-top: -10px;
-    z-index: 5;
-    display: inline-block;
-  }
-  .icon-prev,
-  .glyphicon-chevron-left {
-    left: 50%;
-    margin-left: -10px;
-  }
-  .icon-next,
-  .glyphicon-chevron-right {
-    right: 50%;
-    margin-right: -10px;
-  }
-  .icon-prev,
-  .icon-next {
-    width:  20px;
-    height: 20px;
-    line-height: 1;
-    font-family: serif;
-  }
-
-
-  .icon-prev {
-    &:before {
-      content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
-    }
-  }
-  .icon-next {
-    &:before {
-      content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
-    }
-  }
-}
-
-// Optional indicator pips
-//
-// Add an unordered list with the following class and add a list item for each
-// slide your carousel holds.
-
-.carousel-indicators {
-  position: absolute;
-  bottom: 10px;
-  left: 50%;
-  z-index: 15;
-  width: 60%;
-  margin-left: -30%;
-  padding-left: 0;
-  list-style: none;
-  text-align: center;
-
-  li {
-    display: inline-block;
-    width:  10px;
-    height: 10px;
-    margin: 1px;
-    text-indent: -999px;
-    border: 1px solid $carousel-indicator-border-color;
-    border-radius: 10px;
-    cursor: pointer;
-
-    // IE8-9 hack for event handling
-    //
-    // Internet Explorer 8-9 does not support clicks on elements without a set
-    // `background-color`. We cannot use `filter` since that's not viewed as a
-    // background color by the browser. Thus, a hack is needed.
-    // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer
-    //
-    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
-    // set alpha transparency for the best results possible.
-    background-color: #000 \9; // IE8
-    background-color: rgba(0,0,0,0); // IE9
-  }
-  .active {
-    margin: 0;
-    width:  12px;
-    height: 12px;
-    background-color: $carousel-indicator-active-bg;
-  }
-}
-
-// Optional captions
-// -----------------------------
-// Hidden by default for smaller viewports
-.carousel-caption {
-  position: absolute;
-  left: 15%;
-  right: 15%;
-  bottom: 20px;
-  z-index: 10;
-  padding-top: 20px;
-  padding-bottom: 20px;
-  color: $carousel-caption-color;
-  text-align: center;
-  text-shadow: $carousel-text-shadow;
-  & .btn {
-    text-shadow: none; // No shadow for button elements in carousel-caption
-  }
-}
-
-
-// Scale up controls for tablets and up
-@media screen and (min-width: $screen-sm-min) {
-
-  // Scale up the controls a smidge
-  .carousel-control {
-    .glyphicon-chevron-left,
-    .glyphicon-chevron-right,
-    .icon-prev,
-    .icon-next {
-      width: ($carousel-control-font-size * 1.5);
-      height: ($carousel-control-font-size * 1.5);
-      margin-top: ($carousel-control-font-size / -2);
-      font-size: ($carousel-control-font-size * 1.5);
-    }
-    .glyphicon-chevron-left,
-    .icon-prev {
-      margin-left: ($carousel-control-font-size / -2);
-    }
-    .glyphicon-chevron-right,
-    .icon-next {
-      margin-right: ($carousel-control-font-size / -2);
-    }
-  }
-
-  // Show and left align the captions
-  .carousel-caption {
-    left: 20%;
-    right: 20%;
-    padding-bottom: 30px;
-  }
-
-  // Move up the indicators
-  .carousel-indicators {
-    bottom: 20px;
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_close.scss b/views/style/sass/bootstrap/bootstrap/_close.scss
deleted file mode 100644
index 6d3f345..0000000
--- a/views/style/sass/bootstrap/bootstrap/_close.scss
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Close icons
-// --------------------------------------------------
-
-
-.close {
-  float: right;
-  font-size: ($font-size-base * 1.5);
-  font-weight: $close-font-weight;
-  line-height: 1;
-  color: $close-color;
-  text-shadow: $close-text-shadow;
-  @include opacity(.2);
-
-  &:hover,
-  &:focus {
-    color: $close-color;
-    text-decoration: none;
-    cursor: pointer;
-    @include opacity(.5);
-  }
-
-  // [converter] extracted button& to button.close
-}
-
-// Additional properties for button version
-// iOS requires the button element instead of an anchor tag.
-// If you want the anchor version, it requires `href="#"`.
-// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
-button.close {
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_code.scss b/views/style/sass/bootstrap/bootstrap/_code.scss
deleted file mode 100644
index 79cdb70..0000000
--- a/views/style/sass/bootstrap/bootstrap/_code.scss
+++ /dev/null
@@ -1,87 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Code (inline and block)
-// --------------------------------------------------
-
-
-// Inline and block code styles
-code,
-kbd,
-pre,
-samp {
-  font-family: $font-family-monospace;
-}
-
-// Inline code
-code {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: $code-color;
-  background-color: $code-bg;
-  border-radius: $border-radius-base;
-}
-
-// User input typically entered via keyboard
-kbd {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: $kbd-color;
-  background-color: $kbd-bg;
-  border-radius: $border-radius-small;
-  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
-
-  kbd {
-    padding: 0;
-    font-size: 100%;
-    font-weight: bold;
-    box-shadow: none;
-  }
-}
-
-// Blocks of code
-pre {
-  display: block;
-  padding: (($line-height-computed - 1) / 2);
-  margin: 0 0 ($line-height-computed / 2);
-  font-size: ($font-size-base - 1); // 14px to 13px
-  line-height: $line-height-base;
-  word-break: break-all;
-  word-wrap: break-word;
-  color: $pre-color;
-  background-color: $pre-bg;
-  border: 1px solid $pre-border-color;
-  border-radius: $border-radius-base;
-
-  // Account for some code outputs that place code tags in pre tags
-  code {
-    padding: 0;
-    font-size: inherit;
-    color: inherit;
-    white-space: pre-wrap;
-    background-color: transparent;
-    border-radius: 0;
-  }
-}
-
-// Enable scrollable blocks of code
-.pre-scrollable {
-  max-height: $pre-scrollable-max-height;
-  overflow-y: scroll;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_component-animations.scss b/views/style/sass/bootstrap/bootstrap/_component-animations.scss
deleted file mode 100644
index 62efb80..0000000
--- a/views/style/sass/bootstrap/bootstrap/_component-animations.scss
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Component animations
-// --------------------------------------------------
-
-// Heads up!
-//
-// We don't use the `.opacity()` mixin here since it causes a bug with text
-// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
-
-.fade {
-  opacity: 0;
-  @include transition(opacity .15s linear);
-  &.in {
-    opacity: 1;
-  }
-}
-
-.collapse {
-  display: none;
-
-  &.in      { display: block; }
-  // [converter] extracted tr&.in to tr.collapse.in
-  // [converter] extracted tbody&.in to tbody.collapse.in
-}
-
-tr.collapse.in    { display: table-row; }
-
-tbody.collapse.in { display: table-row-group; }
-
-.collapsing {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  @include transition-property(height, visibility);
-  @include transition-duration(.35s);
-  @include transition-timing-function(ease);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_dropdowns.scss b/views/style/sass/bootstrap/bootstrap/_dropdowns.scss
deleted file mode 100644
index 06a4f52..0000000
--- a/views/style/sass/bootstrap/bootstrap/_dropdowns.scss
+++ /dev/null
@@ -1,234 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Dropdown menus
-// --------------------------------------------------
-
-
-// Dropdown arrow/caret
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  margin-left: 2px;
-  vertical-align: middle;
-  border-top:   $caret-width-base dashed;
-  border-top:   $caret-width-base solid \9; // IE8
-  border-right: $caret-width-base solid transparent;
-  border-left:  $caret-width-base solid transparent;
-}
-
-// The dropdown wrapper (div)
-.dropup,
-.dropdown {
-  position: relative;
-}
-
-// Prevent the focus on the dropdown toggle when closing dropdowns
-.dropdown-toggle:focus {
-  outline: 0;
-}
-
-// The dropdown menu (ul)
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: $zindex-dropdown;
-  display: none; // none by default, but block on "open" of the menu
-  float: left;
-  min-width: 160px;
-  padding: 5px 0;
-  margin: 2px 0 0; // override default ul
-  list-style: none;
-  font-size: $font-size-base;
-  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
-  background-color: $dropdown-bg;
-  border: 1px solid $dropdown-fallback-border; // IE8 fallback
-  border: 1px solid $dropdown-border;
-  border-radius: $border-radius-base;
-  @include box-shadow(0 6px 12px rgba(0,0,0,.175));
-  background-clip: padding-box;
-
-  // Aligns the dropdown menu to right
-  //
-  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
-  &.pull-right {
-    right: 0;
-    left: auto;
-  }
-
-  // Dividers (basically an hr) within the dropdown
-  .divider {
-    @include nav-divider($dropdown-divider-bg);
-  }
-
-  // Links within the dropdown menu
-  > li > a {
-    display: block;
-    padding: 3px 20px;
-    clear: both;
-    font-weight: normal;
-    line-height: $line-height-base;
-    color: $dropdown-link-color;
-    white-space: nowrap; // prevent links from randomly breaking onto new lines
-  }
-}
-
-// Hover/Focus state
-.dropdown-menu > li > a {
-  &:hover,
-  &:focus {
-    text-decoration: none;
-    color: $dropdown-link-hover-color;
-    background-color: $dropdown-link-hover-bg;
-  }
-}
-
-// Active state
-.dropdown-menu > .active > a {
-  &,
-  &:hover,
-  &:focus {
-    color: $dropdown-link-active-color;
-    text-decoration: none;
-    outline: 0;
-    background-color: $dropdown-link-active-bg;
-  }
-}
-
-// Disabled state
-//
-// Gray out text and ensure the hover/focus state remains gray
-
-.dropdown-menu > .disabled > a {
-  &,
-  &:hover,
-  &:focus {
-    color: $dropdown-link-disabled-color;
-  }
-
-  // Nuke hover/focus effects
-  &:hover,
-  &:focus {
-    text-decoration: none;
-    background-color: transparent;
-    background-image: none; // Remove CSS gradient
-    @include reset-filter;
-    cursor: $cursor-disabled;
-  }
-}
-
-// Open state for the dropdown
-.open {
-  // Show the menu
-  > .dropdown-menu {
-    display: block;
-  }
-
-  // Remove the outline when :focus is triggered
-  > a {
-    outline: 0;
-  }
-}
-
-// Menu positioning
-//
-// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
-// menu with the parent.
-.dropdown-menu-right {
-  left: auto; // Reset the default from `.dropdown-menu`
-  right: 0;
-}
-// With v3, we enabled auto-flipping if you have a dropdown within a right
-// aligned nav component. To enable the undoing of that, we provide an override
-// to restore the default dropdown menu alignment.
-//
-// This is only for left-aligning a dropdown menu within a `.navbar-right` or
-// `.pull-right` nav component.
-.dropdown-menu-left {
-  left: 0;
-  right: auto;
-}
-
-// Dropdown section headers
-.dropdown-header {
-  display: block;
-  padding: 3px 20px;
-  font-size: $font-size-small;
-  line-height: $line-height-base;
-  color: $dropdown-header-color;
-  white-space: nowrap; // as with > li > a
-}
-
-// Backdrop to catch body clicks on mobile, etc.
-.dropdown-backdrop {
-  position: fixed;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  top: 0;
-  z-index: ($zindex-dropdown - 10);
-}
-
-// Right aligned dropdowns
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-
-// Allow for dropdowns to go bottom up (aka, dropup-menu)
-//
-// Just add .dropup after the standard .dropdown class and you're set, bro.
-// TODO: abstract this so that the navbar fixed styles are not placed here?
-
-.dropup,
-.navbar-fixed-bottom .dropdown {
-  // Reverse the caret
-  .caret {
-    border-top: 0;
-    border-bottom: $caret-width-base dashed;
-    border-bottom: $caret-width-base solid \9; // IE8
-    content: "";
-  }
-  // Different positioning for bottom up menu
-  .dropdown-menu {
-    top: auto;
-    bottom: 100%;
-    margin-bottom: 2px;
-  }
-}
-
-
-// Component alignment
-//
-// Reiterate per navbar.less and the modified component alignment there.
-
-@media (min-width: $grid-float-breakpoint) {
-  .navbar-right {
-    .dropdown-menu {
-      right: 0; left: auto;
-    }
-    // Necessary for overrides of the default right aligned menu.
-    // Will remove come v4 in all likelihood.
-    .dropdown-menu-left {
-      left: 0; right: auto;
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_forms.scss b/views/style/sass/bootstrap/bootstrap/_forms.scss
deleted file mode 100644
index 4a10f55..0000000
--- a/views/style/sass/bootstrap/bootstrap/_forms.scss
+++ /dev/null
@@ -1,635 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Forms
-// --------------------------------------------------
-
-
-// Normalize non-controls
-//
-// Restyle and baseline non-control form elements.
-
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
-  // so we reset that to ensure it behaves more like a standard block element.
-  // See https://github.com/twbs/bootstrap/issues/12359.
-  min-width: 0;
-}
-
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: $line-height-computed;
-  font-size: ($font-size-base * 1.5);
-  line-height: inherit;
-  color: $legend-color;
-  border: 0;
-  border-bottom: 1px solid $legend-border-color;
-}
-
-label {
-  display: inline-block;
-  max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
-  margin-bottom: 5px;
-  font-weight: bold;
-}
-
-
-// Normalize form controls
-//
-// While most of our form styles require extra classes, some basic normalization
-// is required to ensure optimum display with or without those classes to better
-// address browser inconsistencies.
-
-// Override content-box in Normalize (* isn't specific enough)
-input[type="search"] {
-  @include box-sizing(border-box);
-}
-
-// Position radios and checkboxes better
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  margin-top: 1px \9; // IE8-9
-  line-height: normal;
-}
-
-input[type="file"] {
-  display: block;
-}
-
-// Make range inputs behave like textual form controls
-input[type="range"] {
-  display: block;
-  width: 100%;
-}
-
-// Make multiple select elements height not fixed
-select[multiple],
-select[size] {
-  height: auto;
-}
-
-// Focus for file, radio, and checkbox
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  @include tab-focus;
-}
-
-// Adjust output element
-output {
-  display: block;
-  padding-top: ($padding-base-vertical + 1);
-  font-size: $font-size-base;
-  line-height: $line-height-base;
-  color: $input-color;
-}
-
-
-// Common form controls
-//
-// Shared size and type resets for form controls. Apply `.form-control` to any
-// of the following form controls:
-//
-// select
-// textarea
-// input[type="text"]
-// input[type="password"]
-// input[type="datetime"]
-// input[type="datetime-local"]
-// input[type="date"]
-// input[type="month"]
-// input[type="time"]
-// input[type="week"]
-// input[type="number"]
-// input[type="email"]
-// input[type="url"]
-// input[type="search"]
-// input[type="tel"]
-// input[type="color"]
-
-.form-control {
-  display: block;
-  width: 100%;
-  height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
-  padding: $padding-base-vertical $padding-base-horizontal;
-  font-size: $font-size-base;
-  line-height: $line-height-base;
-  color: $input-color;
-  background-color: $input-bg;
-  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
-  border: 1px solid $input-border;
-  border-radius: $input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.
-  @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
-  @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);
-
-  // Customize the `:focus` state to imitate native WebKit styles.
-  @include form-control-focus;
-
-  // Placeholder
-  @include placeholder;
-
-  // Unstyle the caret on `<select>`s in IE10+.
-  &::-ms-expand {
-    border: 0;
-    background-color: transparent;
-  }
-
-  // Disabled and read-only inputs
-  //
-  // HTML5 says that controls under a fieldset > legend:first-child won't be
-  // disabled if the fieldset is disabled. Due to implementation difficulty, we
-  // don't honor that edge case; we style them as disabled anyway.
-  &[disabled],
-  &[readonly],
-  fieldset[disabled] & {
-    background-color: $input-bg-disabled;
-    opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655
-  }
-
-  &[disabled],
-  fieldset[disabled] & {
-    cursor: $cursor-disabled;
-  }
-
-  // [converter] extracted textarea& to textarea.form-control
-}
-
-// Reset height for `textarea`s
-textarea.form-control {
-  height: auto;
-}
-
-
-// Search inputs in iOS
-//
-// This overrides the extra rounded corners on search inputs in iOS so that our
-// `.form-control` class can properly style them. Note that this cannot simply
-// be added to `.form-control` as it's not specific enough. For details, see
-// https://github.com/twbs/bootstrap/issues/11586.
-
-input[type="search"] {
-  -webkit-appearance: none;
-}
-
-
-// Special styles for iOS temporal inputs
-//
-// In Mobile Safari, setting `display: block` on temporal inputs causes the
-// text within the input to become vertically misaligned. As a workaround, we
-// set a pixel line-height that matches the given height of the input, but only
-// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
-//
-// Note that as of 8.3, iOS doesn't support `datetime` or `week`.
-
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
-  input[type="date"],
-  input[type="time"],
-  input[type="datetime-local"],
-  input[type="month"] {
-    &.form-control {
-      line-height: $input-height-base;
-    }
-
-    &.input-sm,
-    .input-group-sm & {
-      line-height: $input-height-small;
-    }
-
-    &.input-lg,
-    .input-group-lg & {
-      line-height: $input-height-large;
-    }
-  }
-}
-
-
-// Form groups
-//
-// Designed to help with the organization and spacing of vertical forms. For
-// horizontal forms, use the predefined grid classes.
-
-.form-group {
-  margin-bottom: $form-group-margin-bottom;
-}
-
-
-// Checkboxes and radios
-//
-// Indent the labels to position radios/checkboxes as hanging controls.
-
-.radio,
-.checkbox {
-  position: relative;
-  display: block;
-  margin-top: 10px;
-  margin-bottom: 10px;
-
-  label {
-    min-height: $line-height-computed; // Ensure the input doesn't jump when there is no text
-    padding-left: 20px;
-    margin-bottom: 0;
-    font-weight: normal;
-    cursor: pointer;
-  }
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
-  position: absolute;
-  margin-left: -20px;
-  margin-top: 4px \9;
-}
-
-.radio + .radio,
-.checkbox + .checkbox {
-  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
-}
-
-// Radios and checkboxes on same line
-.radio-inline,
-.checkbox-inline {
-  position: relative;
-  display: inline-block;
-  padding-left: 20px;
-  margin-bottom: 0;
-  vertical-align: middle;
-  font-weight: normal;
-  cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
-  margin-top: 0;
-  margin-left: 10px; // space out consecutive inline controls
-}
-
-// Apply same disabled cursor tweak as for inputs
-// Some special care is needed because <label>s don't inherit their parent's `cursor`.
-//
-// Note: Neither radios nor checkboxes can be readonly.
-input[type="radio"],
-input[type="checkbox"] {
-  &[disabled],
-  &.disabled,
-  fieldset[disabled] & {
-    cursor: $cursor-disabled;
-  }
-}
-// These classes are used directly on <label>s
-.radio-inline,
-.checkbox-inline {
-  &.disabled,
-  fieldset[disabled] & {
-    cursor: $cursor-disabled;
-  }
-}
-// These classes are used on elements with <label> descendants
-.radio,
-.checkbox {
-  &.disabled,
-  fieldset[disabled] & {
-    label {
-      cursor: $cursor-disabled;
-    }
-  }
-}
-
-
-// Static form control text
-//
-// Apply class to a `p` element to make any string of text align with labels in
-// a horizontal form layout.
-
-.form-control-static {
-  // Size it appropriately next to real form controls
-  padding-top: ($padding-base-vertical + 1);
-  padding-bottom: ($padding-base-vertical + 1);
-  // Remove default margin from `p`
-  margin-bottom: 0;
-  min-height: ($line-height-computed + $font-size-base);
-
-  &.input-lg,
-  &.input-sm {
-    padding-left: 0;
-    padding-right: 0;
-  }
-}
-
-
-// Form control sizing
-//
-// Build on `.form-control` with modifier classes to decrease or increase the
-// height and font-size of form controls.
-//
-// The `.form-group-* form-control` variations are sadly duplicated to avoid the
-// issue documented in https://github.com/twbs/bootstrap/issues/15074.
-
-@include input-size('.input-sm', $input-height-small, $padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $input-border-radius-small);
-.form-group-sm {
-  .form-control {
-    height: $input-height-small;
-    padding: $padding-small-vertical $padding-small-horizontal;
-    font-size: $font-size-small;
-    line-height: $line-height-small;
-    border-radius: $input-border-radius-small;
-  }
-  select.form-control {
-    height: $input-height-small;
-    line-height: $input-height-small;
-  }
-  textarea.form-control,
-  select[multiple].form-control {
-    height: auto;
-  }
-  .form-control-static {
-    height: $input-height-small;
-    min-height: ($line-height-computed + $font-size-small);
-    padding: ($padding-small-vertical + 1) $padding-small-horizontal;
-    font-size: $font-size-small;
-    line-height: $line-height-small;
-  }
-}
-
-@include input-size('.input-lg', $input-height-large, $padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $input-border-radius-large);
-.form-group-lg {
-  .form-control {
-    height: $input-height-large;
-    padding: $padding-large-vertical $padding-large-horizontal;
-    font-size: $font-size-large;
-    line-height: $line-height-large;
-    border-radius: $input-border-radius-large;
-  }
-  select.form-control {
-    height: $input-height-large;
-    line-height: $input-height-large;
-  }
-  textarea.form-control,
-  select[multiple].form-control {
-    height: auto;
-  }
-  .form-control-static {
-    height: $input-height-large;
-    min-height: ($line-height-computed + $font-size-large);
-    padding: ($padding-large-vertical + 1) $padding-large-horizontal;
-    font-size: $font-size-large;
-    line-height: $line-height-large;
-  }
-}
-
-
-// Form control feedback states
-//
-// Apply contextual and semantic states to individual form controls.
-
-.has-feedback {
-  // Enable absolute positioning
-  position: relative;
-
-  // Ensure icons don't overlap text
-  .form-control {
-    padding-right: ($input-height-base * 1.25);
-  }
-}
-// Feedback icon (requires .glyphicon classes)
-.form-control-feedback {
-  position: absolute;
-  top: 0;
-  right: 0;
-  z-index: 2; // Ensure icon is above input groups
-  display: block;
-  width: $input-height-base;
-  height: $input-height-base;
-  line-height: $input-height-base;
-  text-align: center;
-  pointer-events: none;
-}
-.input-lg + .form-control-feedback,
-.input-group-lg + .form-control-feedback,
-.form-group-lg .form-control + .form-control-feedback {
-  width: $input-height-large;
-  height: $input-height-large;
-  line-height: $input-height-large;
-}
-.input-sm + .form-control-feedback,
-.input-group-sm + .form-control-feedback,
-.form-group-sm .form-control + .form-control-feedback {
-  width: $input-height-small;
-  height: $input-height-small;
-  line-height: $input-height-small;
-}
-
-// Feedback states
-.has-success {
-  @include form-control-validation($state-success-text, $state-success-text, $state-success-bg);
-}
-.has-warning {
-  @include form-control-validation($state-warning-text, $state-warning-text, $state-warning-bg);
-}
-.has-error {
-  @include form-control-validation($state-danger-text, $state-danger-text, $state-danger-bg);
-}
-
-// Reposition feedback icon if input has visible label above
-.has-feedback label {
-
-  & ~ .form-control-feedback {
-    top: ($line-height-computed + 5); // Height of the `label` and its margin
-  }
-  &.sr-only ~ .form-control-feedback {
-    top: 0;
-  }
-}
-
-
-// Help text
-//
-// Apply to any element you wish to create light text for placement immediately
-// below a form control. Use for general help, formatting, or instructional text.
-
-.help-block {
-  display: block; // account for any element using help-block
-  margin-top: 5px;
-  margin-bottom: 10px;
-  color: lighten($text-color, 25%); // lighten the text some for contrast
-}
-
-
-// Inline forms
-//
-// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
-// forms begin stacked on extra small (mobile) devices and then go inline when
-// viewports reach <768px.
-//
-// Requires wrapping inputs and labels with `.form-group` for proper display of
-// default HTML form controls and our custom form controls (e.g., input groups).
-//
-// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
-
-// [converter] extracted from `.form-inline` for libsass compatibility
-@mixin form-inline {
-
-  // Kick in the inline
-  @media (min-width: $screen-sm-min) {
-    // Inline-block all the things for "inline"
-    .form-group {
-      display: inline-block;
-      margin-bottom: 0;
-      vertical-align: middle;
-    }
-
-    // In navbar-form, allow folks to *not* use `.form-group`
-    .form-control {
-      display: inline-block;
-      width: auto; // Prevent labels from stacking above inputs in `.form-group`
-      vertical-align: middle;
-    }
-
-    // Make static controls behave like regular ones
-    .form-control-static {
-      display: inline-block;
-    }
-
-    .input-group {
-      display: inline-table;
-      vertical-align: middle;
-
-      .input-group-addon,
-      .input-group-btn,
-      .form-control {
-        width: auto;
-      }
-    }
-
-    // Input groups need that 100% width though
-    .input-group > .form-control {
-      width: 100%;
-    }
-
-    .control-label {
-      margin-bottom: 0;
-      vertical-align: middle;
-    }
-
-    // Remove default margin on radios/checkboxes that were used for stacking, and
-    // then undo the floating of radios and checkboxes to match.
-    .radio,
-    .checkbox {
-      display: inline-block;
-      margin-top: 0;
-      margin-bottom: 0;
-      vertical-align: middle;
-
-      label {
-        padding-left: 0;
-      }
-    }
-    .radio input[type="radio"],
-    .checkbox input[type="checkbox"] {
-      position: relative;
-      margin-left: 0;
-    }
-
-    // Re-override the feedback icon.
-    .has-feedback .form-control-feedback {
-      top: 0;
-    }
-  }
-}
-// [converter] extracted as `@mixin form-inline` for libsass compatibility
-.form-inline {
-  @include form-inline;
-}
-
-
-
-// Horizontal forms
-//
-// Horizontal forms are built on grid classes and allow you to create forms with
-// labels on the left and inputs on the right.
-
-.form-horizontal {
-
-  // Consistent vertical alignment of radios and checkboxes
-  //
-  // Labels also get some reset styles, but that is scoped to a media query below.
-  .radio,
-  .checkbox,
-  .radio-inline,
-  .checkbox-inline {
-    margin-top: 0;
-    margin-bottom: 0;
-    padding-top: ($padding-base-vertical + 1); // Default padding plus a border
-  }
-  // Account for padding we're adding to ensure the alignment and of help text
-  // and other content below items
-  .radio,
-  .checkbox {
-    min-height: ($line-height-computed + ($padding-base-vertical + 1));
-  }
-
-  // Make form groups behave like rows
-  .form-group {
-    @include make-row;
-  }
-
-  // Reset spacing and right align labels, but scope to media queries so that
-  // labels on narrow viewports stack the same as a default form example.
-  @media (min-width: $screen-sm-min) {
-    .control-label {
-      text-align: right;
-      margin-bottom: 0;
-      padding-top: ($padding-base-vertical + 1); // Default padding plus a border
-    }
-  }
-
-  // Validation states
-  //
-  // Reposition the icon because it's now within a grid column and columns have
-  // `position: relative;` on them. Also accounts for the grid gutter padding.
-  .has-feedback .form-control-feedback {
-    right: floor(($grid-gutter-width / 2));
-  }
-
-  // Form group sizes
-  //
-  // Quick utility class for applying `.input-lg` and `.input-sm` styles to the
-  // inputs and labels within a `.form-group`.
-  .form-group-lg {
-    @media (min-width: $screen-sm-min) {
-      .control-label {
-        padding-top: ($padding-large-vertical + 1);
-        font-size: $font-size-large;
-      }
-    }
-  }
-  .form-group-sm {
-    @media (min-width: $screen-sm-min) {
-      .control-label {
-        padding-top: ($padding-small-vertical + 1);
-        font-size: $font-size-small;
-      }
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_glyphicons.scss b/views/style/sass/bootstrap/bootstrap/_glyphicons.scss
deleted file mode 100644
index 0eccdef..0000000
--- a/views/style/sass/bootstrap/bootstrap/_glyphicons.scss
+++ /dev/null
@@ -1,325 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Glyphicons for Bootstrap
-//
-// Since icons are fonts, they can be placed anywhere text is placed and are
-// thus automatically sized to match the surrounding child. To use, create an
-// inline element with the appropriate classes, like so:
-//
-// <a href="#"><span class="glyphicon glyphicon-star"></span> Star</a>
-
-@at-root {
-  // Import the fonts
-  @font-face {
-    font-family: 'Glyphicons Halflings';
-    src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot'), '#{$icon-font-path}#{$icon-font-name}.eot'));
-    src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot?#iefix'), '#{$icon-font-path}#{$icon-font-name}.eot?#iefix')) format('embedded-opentype'),
-         url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.woff2'), '#{$icon-font-path}#{$icon-font-name}.woff2')) format('woff2'),
-         url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.woff'), '#{$icon-font-path}#{$icon-font-name}.woff')) format('woff'),
-         url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.ttf'), '#{$icon-font-path}#{$icon-font-name}.ttf')) format('truetype'),
-         url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}'), '#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}')) format('svg');
-  }
-}
-
-// Catchall baseclass
-.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;
-}
-
-// Individual icons
-.glyphicon-asterisk               { &:before { content: "\002a"; } }
-.glyphicon-plus                   { &:before { content: "\002b"; } }
-.glyphicon-euro,
-.glyphicon-eur                    { &: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"; } }
-.glyphicon-cd                     { &:before { content: "\e201"; } }
-.glyphicon-save-file              { &:before { content: "\e202"; } }
-.glyphicon-open-file              { &:before { content: "\e203"; } }
-.glyphicon-level-up               { &:before { content: "\e204"; } }
-.glyphicon-copy                   { &:before { content: "\e205"; } }
-.glyphicon-paste                  { &:before { content: "\e206"; } }
-// The following 2 Glyphicons are omitted for the time being because
-// they currently use Unicode codepoints that are outside the
-// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle
-// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.
-// Notably, the bug affects some older versions of the Android Browser.
-// More info: https://github.com/twbs/bootstrap/issues/10106
-// .glyphicon-door                   { &:before { content: "\1f6aa"; } }
-// .glyphicon-key                    { &:before { content: "\1f511"; } }
-.glyphicon-alert                  { &:before { content: "\e209"; } }
-.glyphicon-equalizer              { &:before { content: "\e210"; } }
-.glyphicon-king                   { &:before { content: "\e211"; } }
-.glyphicon-queen                  { &:before { content: "\e212"; } }
-.glyphicon-pawn                   { &:before { content: "\e213"; } }
-.glyphicon-bishop                 { &:before { content: "\e214"; } }
-.glyphicon-knight                 { &:before { content: "\e215"; } }
-.glyphicon-baby-formula           { &:before { content: "\e216"; } }
-.glyphicon-tent                   { &:before { content: "\26fa"; } }
-.glyphicon-blackboard             { &:before { content: "\e218"; } }
-.glyphicon-bed                    { &:before { content: "\e219"; } }
-.glyphicon-apple                  { &:before { content: "\f8ff"; } }
-.glyphicon-erase                  { &:before { content: "\e221"; } }
-.glyphicon-hourglass              { &:before { content: "\231b"; } }
-.glyphicon-lamp                   { &:before { content: "\e223"; } }
-.glyphicon-duplicate              { &:before { content: "\e224"; } }
-.glyphicon-piggy-bank             { &:before { content: "\e225"; } }
-.glyphicon-scissors               { &:before { content: "\e226"; } }
-.glyphicon-bitcoin                { &:before { content: "\e227"; } }
-.glyphicon-btc                    { &:before { content: "\e227"; } }
-.glyphicon-xbt                    { &:before { content: "\e227"; } }
-.glyphicon-yen                    { &:before { content: "\00a5"; } }
-.glyphicon-jpy                    { &:before { content: "\00a5"; } }
-.glyphicon-ruble                  { &:before { content: "\20bd"; } }
-.glyphicon-rub                    { &:before { content: "\20bd"; } }
-.glyphicon-scale                  { &:before { content: "\e230"; } }
-.glyphicon-ice-lolly              { &:before { content: "\e231"; } }
-.glyphicon-ice-lolly-tasted       { &:before { content: "\e232"; } }
-.glyphicon-education              { &:before { content: "\e233"; } }
-.glyphicon-option-horizontal      { &:before { content: "\e234"; } }
-.glyphicon-option-vertical        { &:before { content: "\e235"; } }
-.glyphicon-menu-hamburger         { &:before { content: "\e236"; } }
-.glyphicon-modal-window           { &:before { content: "\e237"; } }
-.glyphicon-oil                    { &:before { content: "\e238"; } }
-.glyphicon-grain                  { &:before { content: "\e239"; } }
-.glyphicon-sunglasses             { &:before { content: "\e240"; } }
-.glyphicon-text-size              { &:before { content: "\e241"; } }
-.glyphicon-text-color             { &:before { content: "\e242"; } }
-.glyphicon-text-background        { &:before { content: "\e243"; } }
-.glyphicon-object-align-top       { &:before { content: "\e244"; } }
-.glyphicon-object-align-bottom    { &:before { content: "\e245"; } }
-.glyphicon-object-align-horizontal{ &:before { content: "\e246"; } }
-.glyphicon-object-align-left      { &:before { content: "\e247"; } }
-.glyphicon-object-align-vertical  { &:before { content: "\e248"; } }
-.glyphicon-object-align-right     { &:before { content: "\e249"; } }
-.glyphicon-triangle-right         { &:before { content: "\e250"; } }
-.glyphicon-triangle-left          { &:before { content: "\e251"; } }
-.glyphicon-triangle-bottom        { &:before { content: "\e252"; } }
-.glyphicon-triangle-top           { &:before { content: "\e253"; } }
-.glyphicon-console                { &:before { content: "\e254"; } }
-.glyphicon-superscript            { &:before { content: "\e255"; } }
-.glyphicon-subscript              { &:before { content: "\e256"; } }
-.glyphicon-menu-left              { &:before { content: "\e257"; } }
-.glyphicon-menu-right             { &:before { content: "\e258"; } }
-.glyphicon-menu-down              { &:before { content: "\e259"; } }
-.glyphicon-menu-up                { &:before { content: "\e260"; } }
diff --git a/views/style/sass/bootstrap/bootstrap/_grid.scss b/views/style/sass/bootstrap/bootstrap/_grid.scss
deleted file mode 100644
index b97dcd5..0000000
--- a/views/style/sass/bootstrap/bootstrap/_grid.scss
+++ /dev/null
@@ -1,102 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Grid system
-// --------------------------------------------------
-
-
-// Container widths
-//
-// Set the container width, and override it for fixed navbars in media queries.
-
-.container {
-  @include container-fixed;
-
-  @media (min-width: $screen-sm-min) {
-    width: $container-sm;
-  }
-  @media (min-width: $screen-md-min) {
-    width: $container-md;
-  }
-  @media (min-width: $screen-lg-min) {
-    width: $container-lg;
-  }
-}
-
-
-// Fluid container
-//
-// Utilizes the mixin meant for fixed width containers, but without any defined
-// width for fluid, full width layouts.
-
-.container-fluid {
-  @include container-fixed;
-}
-
-
-// Row
-//
-// Rows contain and clear the floats of your columns.
-
-.row {
-  @include make-row;
-}
-
-
-// Columns
-//
-// Common styles for small and large grid columns
-
-@include make-grid-columns;
-
-
-// Extra small grid
-//
-// Columns, offsets, pushes, and pulls for extra small devices like
-// smartphones.
-
-@include make-grid(xs);
-
-
-// Small grid
-//
-// Columns, offsets, pushes, and pulls for the small device range, from phones
-// to tablets.
-
-@media (min-width: $screen-sm-min) {
-  @include make-grid(sm);
-}
-
-
-// Medium grid
-//
-// Columns, offsets, pushes, and pulls for the desktop device range.
-
-@media (min-width: $screen-md-min) {
-  @include make-grid(md);
-}
-
-
-// Large grid
-//
-// Columns, offsets, pushes, and pulls for the large desktop device range.
-
-@media (min-width: $screen-lg-min) {
-  @include make-grid(lg);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_input-groups.scss b/views/style/sass/bootstrap/bootstrap/_input-groups.scss
deleted file mode 100644
index 2addf33..0000000
--- a/views/style/sass/bootstrap/bootstrap/_input-groups.scss
+++ /dev/null
@@ -1,189 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Input groups
-// --------------------------------------------------
-
-// Base styles
-// -------------------------
-.input-group {
-  position: relative; // For dropdowns
-  display: table;
-  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
-
-  // Undo padding and float of grid classes
-  &[class*="col-"] {
-    float: none;
-    padding-left: 0;
-    padding-right: 0;
-  }
-
-  .form-control {
-    // Ensure that the input is always above the *appended* addon button for
-    // proper border colors.
-    position: relative;
-    z-index: 2;
-
-    // IE9 fubars the placeholder attribute in text inputs and the arrows on
-    // select elements in input groups. To fix it, we float the input. Details:
-    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855
-    float: left;
-
-    width: 100%;
-    margin-bottom: 0;
-    
-    &:focus {
-      z-index: 3;
-    }
-  }
-}
-
-// Sizing options
-//
-// Remix the default form control sizing classes into new ones for easier
-// manipulation.
-
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
-  @extend .input-lg;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
-  @extend .input-sm;
-}
-
-
-// Display as table-cell
-// -------------------------
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
-  display: table-cell;
-
-  &:not(:first-child):not(:last-child) {
-    border-radius: 0;
-  }
-}
-// Addon and addon wrapper for buttons
-.input-group-addon,
-.input-group-btn {
-  width: 1%;
-  white-space: nowrap;
-  vertical-align: middle; // Match the inputs
-}
-
-// Text input groups
-// -------------------------
-.input-group-addon {
-  padding: $padding-base-vertical $padding-base-horizontal;
-  font-size: $font-size-base;
-  font-weight: normal;
-  line-height: 1;
-  color: $input-color;
-  text-align: center;
-  background-color: $input-group-addon-bg;
-  border: 1px solid $input-group-addon-border-color;
-  border-radius: $input-border-radius;
-
-  // Sizing
-  &.input-sm {
-    padding: $padding-small-vertical $padding-small-horizontal;
-    font-size: $font-size-small;
-    border-radius: $input-border-radius-small;
-  }
-  &.input-lg {
-    padding: $padding-large-vertical $padding-large-horizontal;
-    font-size: $font-size-large;
-    border-radius: $input-border-radius-large;
-  }
-
-  // Nuke default margins from checkboxes and radios to vertically center within.
-  input[type="radio"],
-  input[type="checkbox"] {
-    margin-top: 0;
-  }
-}
-
-// Reset rounded corners
-.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 {
-  @include border-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 {
-  @include border-left-radius(0);
-}
-.input-group-addon:last-child {
-  border-left: 0;
-}
-
-// Button input groups
-// -------------------------
-.input-group-btn {
-  position: relative;
-  // Jankily prevent input button groups from wrapping with `white-space` and
-  // `font-size` in combination with `inline-block` on buttons.
-  font-size: 0;
-  white-space: nowrap;
-
-  // Negative margin for spacing, position for bringing hovered/focused/actived
-  // element above the siblings.
-  > .btn {
-    position: relative;
-    + .btn {
-      margin-left: -1px;
-    }
-    // Bring the "active" button to the front
-    &:hover,
-    &:focus,
-    &:active {
-      z-index: 2;
-    }
-  }
-
-  // Negative margin to only have a 1px border between the two
-  &:first-child {
-    > .btn,
-    > .btn-group {
-      margin-right: -1px;
-    }
-  }
-  &:last-child {
-    > .btn,
-    > .btn-group {
-      z-index: 2;
-      margin-left: -1px;
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_jumbotron.scss b/views/style/sass/bootstrap/bootstrap/_jumbotron.scss
deleted file mode 100644
index 82e9bc0..0000000
--- a/views/style/sass/bootstrap/bootstrap/_jumbotron.scss
+++ /dev/null
@@ -1,72 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Jumbotron
-// --------------------------------------------------
-
-
-.jumbotron {
-  padding-top:    $jumbotron-padding;
-  padding-bottom: $jumbotron-padding;
-  margin-bottom: $jumbotron-padding;
-  color: $jumbotron-color;
-  background-color: $jumbotron-bg;
-
-  h1,
-  .h1 {
-    color: $jumbotron-heading-color;
-  }
-
-  p {
-    margin-bottom: ($jumbotron-padding / 2);
-    font-size: $jumbotron-font-size;
-    font-weight: 200;
-  }
-
-  > hr {
-    border-top-color: darken($jumbotron-bg, 10%);
-  }
-
-  .container &,
-  .container-fluid & {
-    border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container
-    padding-left:  ($grid-gutter-width / 2);
-    padding-right: ($grid-gutter-width / 2);
-  }
-
-  .container {
-    max-width: 100%;
-  }
-
-  @media screen and (min-width: $screen-sm-min) {
-    padding-top:    ($jumbotron-padding * 1.6);
-    padding-bottom: ($jumbotron-padding * 1.6);
-
-    .container &,
-    .container-fluid & {
-      padding-left:  ($jumbotron-padding * 2);
-      padding-right: ($jumbotron-padding * 2);
-    }
-
-    h1,
-    .h1 {
-      font-size: $jumbotron-heading-font-size;
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_labels.scss b/views/style/sass/bootstrap/bootstrap/_labels.scss
deleted file mode 100644
index 8002da8..0000000
--- a/views/style/sass/bootstrap/bootstrap/_labels.scss
+++ /dev/null
@@ -1,84 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Labels
-// --------------------------------------------------
-
-.label {
-  display: inline;
-  padding: .2em .6em .3em;
-  font-size: 75%;
-  font-weight: bold;
-  line-height: 1;
-  color: $label-color;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: baseline;
-  border-radius: .25em;
-
-  // [converter] extracted a& to a.label
-
-  // Empty labels collapse automatically (not available in IE8)
-  &:empty {
-    display: none;
-  }
-
-  // Quick fix for labels in buttons
-  .btn & {
-    position: relative;
-    top: -1px;
-  }
-}
-
-// Add hover effects, but only for links
-a.label {
-  &:hover,
-  &:focus {
-    color: $label-link-hover-color;
-    text-decoration: none;
-    cursor: pointer;
-  }
-}
-
-// Colors
-// Contextual variations (linked labels get darker on :hover)
-
-.label-default {
-  @include label-variant($label-default-bg);
-}
-
-.label-primary {
-  @include label-variant($label-primary-bg);
-}
-
-.label-success {
-  @include label-variant($label-success-bg);
-}
-
-.label-info {
-  @include label-variant($label-info-bg);
-}
-
-.label-warning {
-  @include label-variant($label-warning-bg);
-}
-
-.label-danger {
-  @include label-variant($label-danger-bg);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_list-group.scss b/views/style/sass/bootstrap/bootstrap/_list-group.scss
deleted file mode 100644
index 75fe18c..0000000
--- a/views/style/sass/bootstrap/bootstrap/_list-group.scss
+++ /dev/null
@@ -1,148 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// List groups
-// --------------------------------------------------
-
-
-// Base class
-//
-// Easily usable on <ul>, <ol>, or <div>.
-
-.list-group {
-  // No need to set list-style: none; since .list-group-item is block level
-  margin-bottom: 20px;
-  padding-left: 0; // reset padding because ul and ol
-}
-
-
-// Individual list items
-//
-// Use on `li`s or `div`s within the `.list-group` parent.
-
-.list-group-item {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-  // Place the border on the list items and negative margin up for better styling
-  margin-bottom: -1px;
-  background-color: $list-group-bg;
-  border: 1px solid $list-group-border;
-
-  // Round the first and last items
-  &:first-child {
-    @include border-top-radius($list-group-border-radius);
-  }
-  &:last-child {
-    margin-bottom: 0;
-    @include border-bottom-radius($list-group-border-radius);
-  }
-}
-
-
-// Interactive list items
-//
-// Use anchor or button elements instead of `li`s or `div`s to create interactive items.
-// Includes an extra `.active` modifier class for showing selected items.
-
-a.list-group-item,
-button.list-group-item {
-  color: $list-group-link-color;
-
-  .list-group-item-heading {
-    color: $list-group-link-heading-color;
-  }
-
-  // Hover state
-  &:hover,
-  &:focus {
-    text-decoration: none;
-    color: $list-group-link-hover-color;
-    background-color: $list-group-hover-bg;
-  }
-}
-
-button.list-group-item {
-  width: 100%;
-  text-align: left;
-}
-
-.list-group-item {
-  // Disabled state
-  &.disabled,
-  &.disabled:hover,
-  &.disabled:focus {
-    background-color: $list-group-disabled-bg;
-    color: $list-group-disabled-color;
-    cursor: $cursor-disabled;
-
-    // Force color to inherit for custom content
-    .list-group-item-heading {
-      color: inherit;
-    }
-    .list-group-item-text {
-      color: $list-group-disabled-text-color;
-    }
-  }
-
-  // Active class on item itself, not parent
-  &.active,
-  &.active:hover,
-  &.active:focus {
-    z-index: 2; // Place active items above their siblings for proper border styling
-    color: $list-group-active-color;
-    background-color: $list-group-active-bg;
-    border-color: $list-group-active-border;
-
-    // Force color to inherit for custom content
-    .list-group-item-heading,
-    .list-group-item-heading > small,
-    .list-group-item-heading > .small {
-      color: inherit;
-    }
-    .list-group-item-text {
-      color: $list-group-active-text-color;
-    }
-  }
-}
-
-
-// Contextual variants
-//
-// Add modifier classes to change text and background color on individual items.
-// Organizationally, this must come after the `:hover` states.
-
-@include list-group-item-variant(success, $state-success-bg, $state-success-text);
-@include list-group-item-variant(info, $state-info-bg, $state-info-text);
-@include list-group-item-variant(warning, $state-warning-bg, $state-warning-text);
-@include list-group-item-variant(danger, $state-danger-bg, $state-danger-text);
-
-
-// Custom content options
-//
-// Extra classes for creating well-formatted content within `.list-group-item`s.
-
-.list-group-item-heading {
-  margin-top: 0;
-  margin-bottom: 5px;
-}
-.list-group-item-text {
-  margin-bottom: 0;
-  line-height: 1.3;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_media.scss b/views/style/sass/bootstrap/bootstrap/_media.scss
deleted file mode 100644
index 6f35185..0000000
--- a/views/style/sass/bootstrap/bootstrap/_media.scss
+++ /dev/null
@@ -1,84 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-.media {
-  // Proper spacing between instances of .media
-  margin-top: 15px;
-
-  &:first-child {
-    margin-top: 0;
-  }
-}
-
-.media,
-.media-body {
-  zoom: 1;
-  overflow: hidden;
-}
-
-.media-body {
-  width: 10000px;
-}
-
-.media-object {
-  display: block;
-
-  // Fix collapse in webkit from max-width: 100% and display: table-cell.
-  &.img-thumbnail {
-    max-width: none;
-  }
-}
-
-.media-right,
-.media > .pull-right {
-  padding-left: 10px;
-}
-
-.media-left,
-.media > .pull-left {
-  padding-right: 10px;
-}
-
-.media-left,
-.media-right,
-.media-body {
-  display: table-cell;
-  vertical-align: top;
-}
-
-.media-middle {
-  vertical-align: middle;
-}
-
-.media-bottom {
-  vertical-align: bottom;
-}
-
-// Reset margins on headings for tighter default spacing
-.media-heading {
-  margin-top: 0;
-  margin-bottom: 5px;
-}
-
-// Media list variation
-//
-// Undo default ul/ol styles
-.media-list {
-  padding-left: 0;
-  list-style: none;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_mixins.scss b/views/style/sass/bootstrap/bootstrap/_mixins.scss
deleted file mode 100644
index dbfaad2..0000000
--- a/views/style/sass/bootstrap/bootstrap/_mixins.scss
+++ /dev/null
@@ -1,58 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Mixins
-// --------------------------------------------------
-
-// Utilities
-@import "mixins/hide-text";
-@import "mixins/opacity";
-@import "mixins/image";
-@import "mixins/labels";
-@import "mixins/reset-filter";
-@import "mixins/resize";
-@import "mixins/responsive-visibility";
-@import "mixins/size";
-@import "mixins/tab-focus";
-@import "mixins/reset-text";
-@import "mixins/text-emphasis";
-@import "mixins/text-overflow";
-@import "mixins/vendor-prefixes";
-
-// Components
-@import "mixins/alerts";
-@import "mixins/buttons";
-@import "mixins/panels";
-@import "mixins/pagination";
-@import "mixins/list-group";
-@import "mixins/nav-divider";
-@import "mixins/forms";
-@import "mixins/progress-bar";
-@import "mixins/table-row";
-
-// Skins
-@import "mixins/background-variant";
-@import "mixins/border-radius";
-@import "mixins/gradients";
-
-// Layout
-@import "mixins/clearfix";
-@import "mixins/center-block";
-@import "mixins/nav-vertical-align";
-@import "mixins/grid-framework";
-@import "mixins/grid";
diff --git a/views/style/sass/bootstrap/bootstrap/_modals.scss b/views/style/sass/bootstrap/bootstrap/_modals.scss
deleted file mode 100644
index d7fd62f..0000000
--- a/views/style/sass/bootstrap/bootstrap/_modals.scss
+++ /dev/null
@@ -1,168 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Modals
-// --------------------------------------------------
-
-// .modal-open      - body class for killing the scroll
-// .modal           - container to scroll within
-// .modal-dialog    - positioning shell for the actual modal
-// .modal-content   - actual modal w/ bg and corners and shit
-
-// Kill the scroll on the body
-.modal-open {
-  overflow: hidden;
-}
-
-// Container that the modal scrolls within
-.modal {
-  display: none;
-  overflow: hidden;
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: $zindex-modal;
-  -webkit-overflow-scrolling: touch;
-
-  // Prevent Chrome on Windows from adding a focus outline. For details, see
-  // https://github.com/twbs/bootstrap/pull/10951.
-  outline: 0;
-
-  // When fading in the modal, animate it to slide down
-  &.fade .modal-dialog {
-    @include translate(0, -25%);
-    @include transition-transform(0.3s ease-out);
-  }
-  &.in .modal-dialog { @include translate(0, 0) }
-}
-.modal-open .modal {
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-
-// Shell div to position the modal with bottom padding
-.modal-dialog {
-  position: relative;
-  width: auto;
-  margin: 10px;
-}
-
-// Actual modal
-.modal-content {
-  position: relative;
-  background-color: $modal-content-bg;
-  border: 1px solid $modal-content-fallback-border-color; //old browsers fallback (ie8 etc)
-  border: 1px solid $modal-content-border-color;
-  border-radius: $border-radius-large;
-  @include box-shadow(0 3px 9px rgba(0,0,0,.5));
-  background-clip: padding-box;
-  // Remove focus outline from opened modal
-  outline: 0;
-}
-
-// Modal background
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: $zindex-modal-background;
-  background-color: $modal-backdrop-bg;
-  // Fade for backdrop
-  &.fade { @include opacity(0); }
-  &.in { @include opacity($modal-backdrop-opacity); }
-}
-
-// Modal header
-// Top section of the modal w/ title and dismiss
-.modal-header {
-  padding: $modal-title-padding;
-  border-bottom: 1px solid $modal-header-border-color;
-  @include clearfix;
-}
-// Close icon
-.modal-header .close {
-  margin-top: -2px;
-}
-
-// Title text within header
-.modal-title {
-  margin: 0;
-  line-height: $modal-title-line-height;
-}
-
-// Modal body
-// Where all modal content resides (sibling of .modal-header and .modal-footer)
-.modal-body {
-  position: relative;
-  padding: $modal-inner-padding;
-}
-
-// Footer (for actions)
-.modal-footer {
-  padding: $modal-inner-padding;
-  text-align: right; // right align buttons
-  border-top: 1px solid $modal-footer-border-color;
-  @include clearfix; // clear it in case folks use .pull-* classes on buttons
-
-  // Properly space out buttons
-  .btn + .btn {
-    margin-left: 5px;
-    margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
-  }
-  // but override that for button groups
-  .btn-group .btn + .btn {
-    margin-left: -1px;
-  }
-  // and override it for block buttons as well
-  .btn-block + .btn-block {
-    margin-left: 0;
-  }
-}
-
-// Measure scrollbar width for padding body during modal show/hide
-.modal-scrollbar-measure {
-  position: absolute;
-  top: -9999px;
-  width: 50px;
-  height: 50px;
-  overflow: scroll;
-}
-
-// Scale up the modal
-@media (min-width: $screen-sm-min) {
-  // Automatically set modal's width for larger viewports
-  .modal-dialog {
-    width: $modal-md;
-    margin: 30px auto;
-  }
-  .modal-content {
-    @include box-shadow(0 5px 15px rgba(0,0,0,.5));
-  }
-
-  // Modal sizes
-  .modal-sm { width: $modal-sm; }
-}
-
-@media (min-width: $screen-md-min) {
-  .modal-lg { width: $modal-lg; }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_navbar.scss b/views/style/sass/bootstrap/bootstrap/_navbar.scss
deleted file mode 100644
index a15463d..0000000
--- a/views/style/sass/bootstrap/bootstrap/_navbar.scss
+++ /dev/null
@@ -1,680 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Navbars
-// --------------------------------------------------
-
-
-// Wrapper and base class
-//
-// Provide a static navbar from which we expand to create full-width, fixed, and
-// other navbar variations.
-
-.navbar {
-  position: relative;
-  min-height: $navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)
-  margin-bottom: $navbar-margin-bottom;
-  border: 1px solid transparent;
-
-  // Prevent floats from breaking the navbar
-  @include clearfix;
-
-  @media (min-width: $grid-float-breakpoint) {
-    border-radius: $navbar-border-radius;
-  }
-}
-
-
-// Navbar heading
-//
-// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy
-// styling of responsive aspects.
-
-.navbar-header {
-  @include clearfix;
-
-  @media (min-width: $grid-float-breakpoint) {
-    float: left;
-  }
-}
-
-
-// Navbar collapse (body)
-//
-// Group your navbar content into this for easy collapsing and expanding across
-// various device sizes. By default, this content is collapsed when <768px, but
-// will expand past that for a horizontal display.
-//
-// To start (on mobile devices) the navbar links, forms, and buttons are stacked
-// vertically and include a `max-height` to overflow in case you have too much
-// content for the user's viewport.
-
-.navbar-collapse {
-  overflow-x: visible;
-  padding-right: $navbar-padding-horizontal;
-  padding-left:  $navbar-padding-horizontal;
-  border-top: 1px solid transparent;
-  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
-  @include clearfix;
-  -webkit-overflow-scrolling: touch;
-
-  &.in {
-    overflow-y: auto;
-  }
-
-  @media (min-width: $grid-float-breakpoint) {
-    width: auto;
-    border-top: 0;
-    box-shadow: none;
-
-    &.collapse {
-      display: block !important;
-      height: auto !important;
-      padding-bottom: 0; // Override default setting
-      overflow: visible !important;
-    }
-
-    &.in {
-      overflow-y: visible;
-    }
-
-    // Undo the collapse side padding for navbars with containers to ensure
-    // alignment of right-aligned contents.
-    .navbar-fixed-top &,
-    .navbar-static-top &,
-    .navbar-fixed-bottom & {
-      padding-left: 0;
-      padding-right: 0;
-    }
-  }
-}
-
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  .navbar-collapse {
-    max-height: $navbar-collapse-max-height;
-
-    @media (max-device-width: $screen-xs-min) and (orientation: landscape) {
-      max-height: 200px;
-    }
-  }
-}
-
-
-// Both navbar header and collapse
-//
-// When a container is present, change the behavior of the header and collapse.
-
-.container,
-.container-fluid {
-  > .navbar-header,
-  > .navbar-collapse {
-    margin-right: -$navbar-padding-horizontal;
-    margin-left:  -$navbar-padding-horizontal;
-
-    @media (min-width: $grid-float-breakpoint) {
-      margin-right: 0;
-      margin-left:  0;
-    }
-  }
-}
-
-
-//
-// Navbar alignment options
-//
-// Display the navbar across the entirety of the page or fixed it to the top or
-// bottom of the page.
-
-// Static top (unfixed, but 100% wide) navbar
-.navbar-static-top {
-  z-index: $zindex-navbar;
-  border-width: 0 0 1px;
-
-  @media (min-width: $grid-float-breakpoint) {
-    border-radius: 0;
-  }
-}
-
-// Fix the top/bottom navbars when screen real estate supports it
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  position: fixed;
-  right: 0;
-  left: 0;
-  z-index: $zindex-navbar-fixed;
-
-  // Undo the rounded corners
-  @media (min-width: $grid-float-breakpoint) {
-    border-radius: 0;
-  }
-}
-.navbar-fixed-top {
-  top: 0;
-  border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
-  bottom: 0;
-  margin-bottom: 0; // override .navbar defaults
-  border-width: 1px 0 0;
-}
-
-
-// Brand/project name
-
-.navbar-brand {
-  float: left;
-  padding: $navbar-padding-vertical $navbar-padding-horizontal;
-  font-size: $font-size-large;
-  line-height: $line-height-computed;
-  height: $navbar-height;
-
-  &:hover,
-  &:focus {
-    text-decoration: none;
-  }
-
-  > img {
-    display: block;
-  }
-
-  @media (min-width: $grid-float-breakpoint) {
-    .navbar > .container &,
-    .navbar > .container-fluid & {
-      margin-left: -$navbar-padding-horizontal;
-    }
-  }
-}
-
-
-// Navbar toggle
-//
-// Custom button for toggling the `.navbar-collapse`, powered by the collapse
-// JavaScript plugin.
-
-.navbar-toggle {
-  position: relative;
-  float: right;
-  margin-right: $navbar-padding-horizontal;
-  padding: 9px 10px;
-  @include navbar-vertical-align(34px);
-  background-color: transparent;
-  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
-  border: 1px solid transparent;
-  border-radius: $border-radius-base;
-
-  // We remove the `outline` here, but later compensate by attaching `:hover`
-  // styles to `:focus`.
-  &:focus {
-    outline: 0;
-  }
-
-  // Bars
-  .icon-bar {
-    display: block;
-    width: 22px;
-    height: 2px;
-    border-radius: 1px;
-  }
-  .icon-bar + .icon-bar {
-    margin-top: 4px;
-  }
-
-  @media (min-width: $grid-float-breakpoint) {
-    display: none;
-  }
-}
-
-
-// Navbar nav links
-//
-// Builds on top of the `.nav` components with its own modifier class to make
-// the nav the full height of the horizontal nav (above 768px).
-
-.navbar-nav {
-  margin: ($navbar-padding-vertical / 2) (-$navbar-padding-horizontal);
-
-  > li > a {
-    padding-top:    10px;
-    padding-bottom: 10px;
-    line-height: $line-height-computed;
-  }
-
-  @media (max-width: $grid-float-breakpoint-max) {
-    // Dropdowns get custom display when collapsed
-    .open .dropdown-menu {
-      position: static;
-      float: none;
-      width: auto;
-      margin-top: 0;
-      background-color: transparent;
-      border: 0;
-      box-shadow: none;
-      > li > a,
-      .dropdown-header {
-        padding: 5px 15px 5px 25px;
-      }
-      > li > a {
-        line-height: $line-height-computed;
-        &:hover,
-        &:focus {
-          background-image: none;
-        }
-      }
-    }
-  }
-
-  // Uncollapse the nav
-  @media (min-width: $grid-float-breakpoint) {
-    float: left;
-    margin: 0;
-
-    > li {
-      float: left;
-      > a {
-        padding-top:    $navbar-padding-vertical;
-        padding-bottom: $navbar-padding-vertical;
-      }
-    }
-  }
-}
-
-
-// Navbar form
-//
-// Extension of the `.form-inline` with some extra flavor for optimum display in
-// our navbars.
-
-.navbar-form {
-  margin-left: -$navbar-padding-horizontal;
-  margin-right: -$navbar-padding-horizontal;
-  padding: 10px $navbar-padding-horizontal;
-  border-top: 1px solid transparent;
-  border-bottom: 1px solid transparent;
-  $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
-  @include box-shadow($shadow);
-
-  // Mixin behavior for optimum display
-  @include form-inline;
-
-  .form-group {
-    @media (max-width: $grid-float-breakpoint-max) {
-      margin-bottom: 5px;
-
-      &:last-child {
-        margin-bottom: 0;
-      }
-    }
-  }
-
-  // Vertically center in expanded, horizontal navbar
-  @include navbar-vertical-align($input-height-base);
-
-  // Undo 100% width for pull classes
-  @media (min-width: $grid-float-breakpoint) {
-    width: auto;
-    border: 0;
-    margin-left: 0;
-    margin-right: 0;
-    padding-top: 0;
-    padding-bottom: 0;
-    @include box-shadow(none);
-  }
-}
-
-
-// Dropdown menus
-
-// Menu position and menu carets
-.navbar-nav > li > .dropdown-menu {
-  margin-top: 0;
-  @include border-top-radius(0);
-}
-// Menu position and menu caret support for dropups via extra dropup class
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
-  margin-bottom: 0;
-  @include border-top-radius($navbar-border-radius);
-  @include border-bottom-radius(0);
-}
-
-
-// Buttons in navbars
-//
-// Vertically center a button within a navbar (when *not* in a form).
-
-.navbar-btn {
-  @include navbar-vertical-align($input-height-base);
-
-  &.btn-sm {
-    @include navbar-vertical-align($input-height-small);
-  }
-  &.btn-xs {
-    @include navbar-vertical-align(22);
-  }
-}
-
-
-// Text in navbars
-//
-// Add a class to make any element properly align itself vertically within the navbars.
-
-.navbar-text {
-  @include navbar-vertical-align($line-height-computed);
-
-  @media (min-width: $grid-float-breakpoint) {
-    float: left;
-    margin-left: $navbar-padding-horizontal;
-    margin-right: $navbar-padding-horizontal;
-  }
-}
-
-
-// Component alignment
-//
-// Repurpose the pull utilities as their own navbar utilities to avoid specificity
-// issues with parents and chaining. Only do this when the navbar is uncollapsed
-// though so that navbar contents properly stack and align in mobile.
-//
-// Declared after the navbar components to ensure more specificity on the margins.
-
-@media (min-width: $grid-float-breakpoint) {
-  .navbar-left {
-    float: left !important;
-  }
-  .navbar-right {
-    float: right !important;
-  margin-right: -$navbar-padding-horizontal;
-
-    ~ .navbar-right {
-      margin-right: 0;
-    }
-  }
-}
-
-
-// Alternate navbars
-// --------------------------------------------------
-
-// Default navbar
-.navbar-default {
-  background-color: $navbar-default-bg;
-  border-color: $navbar-default-border;
-
-  .navbar-brand {
-    color: $navbar-default-brand-color;
-    &:hover,
-    &:focus {
-      color: $navbar-default-brand-hover-color;
-      background-color: $navbar-default-brand-hover-bg;
-    }
-  }
-
-  .navbar-text {
-    color: $navbar-default-color;
-  }
-
-  .navbar-nav {
-    > li > a {
-      color: $navbar-default-link-color;
-
-      &:hover,
-      &:focus {
-        color: $navbar-default-link-hover-color;
-        background-color: $navbar-default-link-hover-bg;
-      }
-    }
-    > .active > a {
-      &,
-      &:hover,
-      &:focus {
-        color: $navbar-default-link-active-color;
-        background-color: $navbar-default-link-active-bg;
-      }
-    }
-    > .disabled > a {
-      &,
-      &:hover,
-      &:focus {
-        color: $navbar-default-link-disabled-color;
-        background-color: $navbar-default-link-disabled-bg;
-      }
-    }
-  }
-
-  .navbar-toggle {
-    border-color: $navbar-default-toggle-border-color;
-    &:hover,
-    &:focus {
-      background-color: $navbar-default-toggle-hover-bg;
-    }
-    .icon-bar {
-      background-color: $navbar-default-toggle-icon-bar-bg;
-    }
-  }
-
-  .navbar-collapse,
-  .navbar-form {
-    border-color: $navbar-default-border;
-  }
-
-  // Dropdown menu items
-  .navbar-nav {
-    // Remove background color from open dropdown
-    > .open > a {
-      &,
-      &:hover,
-      &:focus {
-        background-color: $navbar-default-link-active-bg;
-        color: $navbar-default-link-active-color;
-      }
-    }
-
-    @media (max-width: $grid-float-breakpoint-max) {
-      // Dropdowns get custom display when collapsed
-      .open .dropdown-menu {
-        > li > a {
-          color: $navbar-default-link-color;
-          &:hover,
-          &:focus {
-            color: $navbar-default-link-hover-color;
-            background-color: $navbar-default-link-hover-bg;
-          }
-        }
-        > .active > a {
-          &,
-          &:hover,
-          &:focus {
-            color: $navbar-default-link-active-color;
-            background-color: $navbar-default-link-active-bg;
-          }
-        }
-        > .disabled > a {
-          &,
-          &:hover,
-          &:focus {
-            color: $navbar-default-link-disabled-color;
-            background-color: $navbar-default-link-disabled-bg;
-          }
-        }
-      }
-    }
-  }
-
-
-  // Links in navbars
-  //
-  // Add a class to ensure links outside the navbar nav are colored correctly.
-
-  .navbar-link {
-    color: $navbar-default-link-color;
-    &:hover {
-      color: $navbar-default-link-hover-color;
-    }
-  }
-
-  .btn-link {
-    color: $navbar-default-link-color;
-    &:hover,
-    &:focus {
-      color: $navbar-default-link-hover-color;
-    }
-    &[disabled],
-    fieldset[disabled] & {
-      &:hover,
-      &:focus {
-        color: $navbar-default-link-disabled-color;
-      }
-    }
-  }
-}
-
-// Inverse navbar
-
-.navbar-inverse {
-  background-color: $navbar-inverse-bg;
-  border-color: $navbar-inverse-border;
-
-  .navbar-brand {
-    color: $navbar-inverse-brand-color;
-    &:hover,
-    &:focus {
-      color: $navbar-inverse-brand-hover-color;
-      background-color: $navbar-inverse-brand-hover-bg;
-    }
-  }
-
-  .navbar-text {
-    color: $navbar-inverse-color;
-  }
-
-  .navbar-nav {
-    > li > a {
-      color: $navbar-inverse-link-color;
-
-      &:hover,
-      &:focus {
-        color: $navbar-inverse-link-hover-color;
-        background-color: $navbar-inverse-link-hover-bg;
-      }
-    }
-    > .active > a {
-      &,
-      &:hover,
-      &:focus {
-        color: $navbar-inverse-link-active-color;
-        background-color: $navbar-inverse-link-active-bg;
-      }
-    }
-    > .disabled > a {
-      &,
-      &:hover,
-      &:focus {
-        color: $navbar-inverse-link-disabled-color;
-        background-color: $navbar-inverse-link-disabled-bg;
-      }
-    }
-  }
-
-  // Darken the responsive nav toggle
-  .navbar-toggle {
-    border-color: $navbar-inverse-toggle-border-color;
-    &:hover,
-    &:focus {
-      background-color: $navbar-inverse-toggle-hover-bg;
-    }
-    .icon-bar {
-      background-color: $navbar-inverse-toggle-icon-bar-bg;
-    }
-  }
-
-  .navbar-collapse,
-  .navbar-form {
-    border-color: darken($navbar-inverse-bg, 7%);
-  }
-
-  // Dropdowns
-  .navbar-nav {
-    > .open > a {
-      &,
-      &:hover,
-      &:focus {
-        background-color: $navbar-inverse-link-active-bg;
-        color: $navbar-inverse-link-active-color;
-      }
-    }
-
-    @media (max-width: $grid-float-breakpoint-max) {
-      // Dropdowns get custom display
-      .open .dropdown-menu {
-        > .dropdown-header {
-          border-color: $navbar-inverse-border;
-        }
-        .divider {
-          background-color: $navbar-inverse-border;
-        }
-        > li > a {
-          color: $navbar-inverse-link-color;
-          &:hover,
-          &:focus {
-            color: $navbar-inverse-link-hover-color;
-            background-color: $navbar-inverse-link-hover-bg;
-          }
-        }
-        > .active > a {
-          &,
-          &:hover,
-          &:focus {
-            color: $navbar-inverse-link-active-color;
-            background-color: $navbar-inverse-link-active-bg;
-          }
-        }
-        > .disabled > a {
-          &,
-          &:hover,
-          &:focus {
-            color: $navbar-inverse-link-disabled-color;
-            background-color: $navbar-inverse-link-disabled-bg;
-          }
-        }
-      }
-    }
-  }
-
-  .navbar-link {
-    color: $navbar-inverse-link-color;
-    &:hover {
-      color: $navbar-inverse-link-hover-color;
-    }
-  }
-
-  .btn-link {
-    color: $navbar-inverse-link-color;
-    &:hover,
-    &:focus {
-      color: $navbar-inverse-link-hover-color;
-    }
-    &[disabled],
-    fieldset[disabled] & {
-      &:hover,
-      &:focus {
-        color: $navbar-inverse-link-disabled-color;
-      }
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_navs.scss b/views/style/sass/bootstrap/bootstrap/_navs.scss
deleted file mode 100644
index 6ae824e..0000000
--- a/views/style/sass/bootstrap/bootstrap/_navs.scss
+++ /dev/null
@@ -1,260 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Navs
-// --------------------------------------------------
-
-
-// Base class
-// --------------------------------------------------
-
-.nav {
-  margin-bottom: 0;
-  padding-left: 0; // Override default ul/ol
-  list-style: none;
-  @include clearfix;
-
-  > li {
-    position: relative;
-    display: block;
-
-    > a {
-      position: relative;
-      display: block;
-      padding: $nav-link-padding;
-      &:hover,
-      &:focus {
-        text-decoration: none;
-        background-color: $nav-link-hover-bg;
-      }
-    }
-
-    // Disabled state sets text to gray and nukes hover/tab effects
-    &.disabled > a {
-      color: $nav-disabled-link-color;
-
-      &:hover,
-      &:focus {
-        color: $nav-disabled-link-hover-color;
-        text-decoration: none;
-        background-color: transparent;
-        cursor: $cursor-disabled;
-      }
-    }
-  }
-
-  // Open dropdowns
-  .open > a {
-    &,
-    &:hover,
-    &:focus {
-      background-color: $nav-link-hover-bg;
-      border-color: $link-color;
-    }
-  }
-
-  // Nav dividers (deprecated with v3.0.1)
-  //
-  // This should have been removed in v3 with the dropping of `.nav-list`, but
-  // we missed it. We don't currently support this anywhere, but in the interest
-  // of maintaining backward compatibility in case you use it, it's deprecated.
-  .nav-divider {
-    @include nav-divider;
-  }
-
-  // Prevent IE8 from misplacing imgs
-  //
-  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
-  > li > a > img {
-    max-width: none;
-  }
-}
-
-
-// Tabs
-// -------------------------
-
-// Give the tabs something to sit on
-.nav-tabs {
-  border-bottom: 1px solid $nav-tabs-border-color;
-  > li {
-    float: left;
-    // Make the list-items overlay the bottom border
-    margin-bottom: -1px;
-
-    // Actual tabs (as links)
-    > a {
-      margin-right: 2px;
-      line-height: $line-height-base;
-      border: 1px solid transparent;
-      border-radius: $border-radius-base $border-radius-base 0 0;
-      &:hover {
-        border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color;
-      }
-    }
-
-    // Active state, and its :hover to override normal :hover
-    &.active > a {
-      &,
-      &:hover,
-      &:focus {
-        color: $nav-tabs-active-link-hover-color;
-        background-color: $nav-tabs-active-link-hover-bg;
-        border: 1px solid $nav-tabs-active-link-hover-border-color;
-        border-bottom-color: transparent;
-        cursor: default;
-      }
-    }
-  }
-  // pulling this in mainly for less shorthand
-  &.nav-justified {
-    @extend .nav-justified;
-    @extend .nav-tabs-justified;
-  }
-}
-
-
-// Pills
-// -------------------------
-.nav-pills {
-  > li {
-    float: left;
-
-    // Links rendered as pills
-    > a {
-      border-radius: $nav-pills-border-radius;
-    }
-    + li {
-      margin-left: 2px;
-    }
-
-    // Active state
-    &.active > a {
-      &,
-      &:hover,
-      &:focus {
-        color: $nav-pills-active-link-hover-color;
-        background-color: $nav-pills-active-link-hover-bg;
-      }
-    }
-  }
-}
-
-
-// Stacked pills
-.nav-stacked {
-  > li {
-    float: none;
-    + li {
-      margin-top: 2px;
-      margin-left: 0; // no need for this gap between nav items
-    }
-  }
-}
-
-
-// Nav variations
-// --------------------------------------------------
-
-// Justified nav links
-// -------------------------
-
-.nav-justified {
-  width: 100%;
-
-  > li {
-    float: none;
-    > a {
-      text-align: center;
-      margin-bottom: 5px;
-    }
-  }
-
-  > .dropdown .dropdown-menu {
-    top: auto;
-    left: auto;
-  }
-
-  @media (min-width: $screen-sm-min) {
-    > li {
-      display: table-cell;
-      width: 1%;
-      > a {
-        margin-bottom: 0;
-      }
-    }
-  }
-}
-
-// Move borders to anchors instead of bottom of list
-//
-// Mixin for adding on top the shared `.nav-justified` styles for our tabs
-.nav-tabs-justified {
-  border-bottom: 0;
-
-  > li > a {
-    // Override margin from .nav-tabs
-    margin-right: 0;
-    border-radius: $border-radius-base;
-  }
-
-  > .active > a,
-  > .active > a:hover,
-  > .active > a:focus {
-    border: 1px solid $nav-tabs-justified-link-border-color;
-  }
-
-  @media (min-width: $screen-sm-min) {
-    > li > a {
-      border-bottom: 1px solid $nav-tabs-justified-link-border-color;
-      border-radius: $border-radius-base $border-radius-base 0 0;
-    }
-    > .active > a,
-    > .active > a:hover,
-    > .active > a:focus {
-      border-bottom-color: $nav-tabs-justified-active-link-border-color;
-    }
-  }
-}
-
-
-// Tabbable tabs
-// -------------------------
-
-// Hide tabbable panes to start, show them when `.active`
-.tab-content {
-  > .tab-pane {
-    display: none;
-  }
-  > .active {
-    display: block;
-  }
-}
-
-
-// Dropdowns
-// -------------------------
-
-// Specific dropdowns
-.nav-tabs .dropdown-menu {
-  // make dropdown border overlap tab border
-  margin-top: -1px;
-  // Remove the top rounded corners here since there is a hard edge above the menu
-  @include border-top-radius(0);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_normalize.scss b/views/style/sass/bootstrap/bootstrap/_normalize.scss
deleted file mode 100644
index cf5eab5..0000000
--- a/views/style/sass/bootstrap/bootstrap/_normalize.scss
+++ /dev/null
@@ -1,442 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
-
-//
-// 1. Set default font family to sans-serif.
-// 2. Prevent iOS and IE text size adjust after device orientation change,
-//    without disabling user zoom.
-//
-
-html {
-  font-family: sans-serif; // 1
-  -ms-text-size-adjust: 100%; // 2
-  -webkit-text-size-adjust: 100%; // 2
-}
-
-//
-// Remove default margin.
-//
-
-body {
-  margin: 0;
-}
-
-// HTML5 display definitions
-// ==========================================================================
-
-//
-// Correct `block` display not defined for any HTML5 element in IE 8/9.
-// Correct `block` display not defined for `details` or `summary` in IE 10/11
-// and Firefox.
-// Correct `block` display not defined for `main` in IE 11.
-//
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
-  display: block;
-}
-
-//
-// 1. Correct `inline-block` display not defined in IE 8/9.
-// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
-//
-
-audio,
-canvas,
-progress,
-video {
-  display: inline-block; // 1
-  vertical-align: baseline; // 2
-}
-
-//
-// Prevent modern browsers from displaying `audio` without controls.
-// Remove excess height in iOS 5 devices.
-//
-
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-
-//
-// Address `[hidden]` styling not present in IE 8/9/10.
-// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
-//
-
-[hidden],
-template {
-  display: none;
-}
-
-// Links
-// ==========================================================================
-
-//
-// Remove the gray background color from active links in IE 10.
-//
-
-a {
-  background-color: transparent;
-}
-
-//
-// Improve readability of focused elements when they are also in an
-// active/hover state.
-//
-
-a:active,
-a:hover {
-  outline: 0;
-}
-
-// Text-level semantics
-// ==========================================================================
-
-//
-// Address styling not present in IE 8/9/10/11, Safari, and Chrome.
-//
-
-abbr[title] {
-  border-bottom: 1px dotted;
-}
-
-//
-// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
-//
-
-b,
-strong {
-  font-weight: bold;
-}
-
-//
-// Address styling not present in Safari and Chrome.
-//
-
-dfn {
-  font-style: italic;
-}
-
-//
-// Address variable `h1` font-size and margin within `section` and `article`
-// contexts in Firefox 4+, Safari, and Chrome.
-//
-
-h1 {
-  font-size: 2em;
-  margin: 0.67em 0;
-}
-
-//
-// Address styling not present in IE 8/9.
-//
-
-mark {
-  background: #ff0;
-  color: #000;
-}
-
-//
-// Address inconsistent and variable font size in all browsers.
-//
-
-small {
-  font-size: 80%;
-}
-
-//
-// Prevent `sub` and `sup` affecting `line-height` in all browsers.
-//
-
-sub,
-sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-
-sup {
-  top: -0.5em;
-}
-
-sub {
-  bottom: -0.25em;
-}
-
-// Embedded content
-// ==========================================================================
-
-//
-// Remove border when inside `a` element in IE 8/9/10.
-//
-
-img {
-  border: 0;
-}
-
-//
-// Correct overflow not hidden in IE 9/10/11.
-//
-
-svg:not(:root) {
-  overflow: hidden;
-}
-
-// Grouping content
-// ==========================================================================
-
-//
-// Address margin not present in IE 8/9 and Safari.
-//
-
-figure {
-  margin: 1em 40px;
-}
-
-//
-// Address differences between Firefox and other browsers.
-//
-
-hr {
-  box-sizing: content-box;
-  height: 0;
-}
-
-//
-// Contain overflow in all browsers.
-//
-
-pre {
-  overflow: auto;
-}
-
-//
-// Address odd `em`-unit font size rendering in all browsers.
-//
-
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em;
-}
-
-// Forms
-// ==========================================================================
-
-//
-// Known limitation: by default, Chrome and Safari on OS X allow very limited
-// styling of `select`, unless a `border` property is set.
-//
-
-//
-// 1. Correct color not being inherited.
-//    Known issue: affects color of disabled elements.
-// 2. Correct font properties not being inherited.
-// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
-//
-
-button,
-input,
-optgroup,
-select,
-textarea {
-  color: inherit; // 1
-  font: inherit; // 2
-  margin: 0; // 3
-}
-
-//
-// Address `overflow` set to `hidden` in IE 8/9/10/11.
-//
-
-button {
-  overflow: visible;
-}
-
-//
-// Address inconsistent `text-transform` inheritance for `button` and `select`.
-// All other form control elements do not inherit `text-transform` values.
-// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
-// Correct `select` style inheritance in Firefox.
-//
-
-button,
-select {
-  text-transform: none;
-}
-
-//
-// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
-//    and `video` controls.
-// 2. Correct inability to style clickable `input` types in iOS.
-// 3. Improve usability and consistency of cursor style between image-type
-//    `input` and others.
-//
-
-button,
-html input[type="button"], // 1
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button; // 2
-  cursor: pointer; // 3
-}
-
-//
-// Re-set default cursor for disabled elements.
-//
-
-button[disabled],
-html input[disabled] {
-  cursor: default;
-}
-
-//
-// Remove inner padding and border in Firefox 4+.
-//
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  border: 0;
-  padding: 0;
-}
-
-//
-// Address Firefox 4+ setting `line-height` on `input` using `!important` in
-// the UA stylesheet.
-//
-
-input {
-  line-height: normal;
-}
-
-//
-// It's recommended that you don't attempt to style these elements.
-// Firefox's implementation doesn't respect box-sizing, padding, or width.
-//
-// 1. Address box sizing set to `content-box` in IE 8/9/10.
-// 2. Remove excess padding in IE 8/9/10.
-//
-
-input[type="checkbox"],
-input[type="radio"] {
-  box-sizing: border-box; // 1
-  padding: 0; // 2
-}
-
-//
-// Fix the cursor style for Chrome's increment/decrement buttons. For certain
-// `font-size` values of the `input`, it causes the cursor style of the
-// decrement button to change from `default` to `text`.
-//
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-
-//
-// 1. Address `appearance` set to `searchfield` in Safari and Chrome.
-// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
-//
-
-input[type="search"] {
-  -webkit-appearance: textfield; // 1
-  box-sizing: content-box; //2
-}
-
-//
-// Remove inner padding and search cancel button in Safari and Chrome on OS X.
-// Safari (but not Chrome) clips the cancel button when the search input has
-// padding (and `textfield` appearance).
-//
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-
-//
-// Define consistent border, margin, and padding.
-//
-
-fieldset {
-  border: 1px solid #c0c0c0;
-  margin: 0 2px;
-  padding: 0.35em 0.625em 0.75em;
-}
-
-//
-// 1. Correct `color` not being inherited in IE 8/9/10/11.
-// 2. Remove padding so people aren't caught out if they zero out fieldsets.
-//
-
-legend {
-  border: 0; // 1
-  padding: 0; // 2
-}
-
-//
-// Remove default vertical scrollbar in IE 8/9/10/11.
-//
-
-textarea {
-  overflow: auto;
-}
-
-//
-// Don't inherit the `font-weight` (applied by a rule above).
-// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
-//
-
-optgroup {
-  font-weight: bold;
-}
-
-// Tables
-// ==========================================================================
-
-//
-// Remove most spacing between table cells.
-//
-
-table {
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-
-td,
-th {
-  padding: 0;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_pager.scss b/views/style/sass/bootstrap/bootstrap/_pager.scss
deleted file mode 100644
index 90ab92c..0000000
--- a/views/style/sass/bootstrap/bootstrap/_pager.scss
+++ /dev/null
@@ -1,72 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Pager pagination
-// --------------------------------------------------
-
-
-.pager {
-  padding-left: 0;
-  margin: $line-height-computed 0;
-  list-style: none;
-  text-align: center;
-  @include clearfix;
-  li {
-    display: inline;
-    > a,
-    > span {
-      display: inline-block;
-      padding: 5px 14px;
-      background-color: $pager-bg;
-      border: 1px solid $pager-border;
-      border-radius: $pager-border-radius;
-    }
-
-    > a:hover,
-    > a:focus {
-      text-decoration: none;
-      background-color: $pager-hover-bg;
-    }
-  }
-
-  .next {
-    > a,
-    > span {
-      float: right;
-    }
-  }
-
-  .previous {
-    > a,
-    > span {
-      float: left;
-    }
-  }
-
-  .disabled {
-    > a,
-    > a:hover,
-    > a:focus,
-    > span {
-      color: $pager-disabled-color;
-      background-color: $pager-bg;
-      cursor: $cursor-disabled;
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_pagination.scss b/views/style/sass/bootstrap/bootstrap/_pagination.scss
deleted file mode 100644
index b6f4d06..0000000
--- a/views/style/sass/bootstrap/bootstrap/_pagination.scss
+++ /dev/null
@@ -1,107 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Pagination (multiple pages)
-// --------------------------------------------------
-.pagination {
-  display: inline-block;
-  padding-left: 0;
-  margin: $line-height-computed 0;
-  border-radius: $border-radius-base;
-
-  > li {
-    display: inline; // Remove list-style and block-level defaults
-    > a,
-    > span {
-      position: relative;
-      float: left; // Collapse white-space
-      padding: $padding-base-vertical $padding-base-horizontal;
-      line-height: $line-height-base;
-      text-decoration: none;
-      color: $pagination-color;
-      background-color: $pagination-bg;
-      border: 1px solid $pagination-border;
-      margin-left: -1px;
-    }
-    &:first-child {
-      > a,
-      > span {
-        margin-left: 0;
-        @include border-left-radius($border-radius-base);
-      }
-    }
-    &:last-child {
-      > a,
-      > span {
-        @include border-right-radius($border-radius-base);
-      }
-    }
-  }
-
-  > li > a,
-  > li > span {
-    &:hover,
-    &:focus {
-      z-index: 2;
-      color: $pagination-hover-color;
-      background-color: $pagination-hover-bg;
-      border-color: $pagination-hover-border;
-    }
-  }
-
-  > .active > a,
-  > .active > span {
-    &,
-    &:hover,
-    &:focus {
-      z-index: 3;
-      color: $pagination-active-color;
-      background-color: $pagination-active-bg;
-      border-color: $pagination-active-border;
-      cursor: default;
-    }
-  }
-
-  > .disabled {
-    > span,
-    > span:hover,
-    > span:focus,
-    > a,
-    > a:hover,
-    > a:focus {
-      color: $pagination-disabled-color;
-      background-color: $pagination-disabled-bg;
-      border-color: $pagination-disabled-border;
-      cursor: $cursor-disabled;
-    }
-  }
-}
-
-// Sizing
-// --------------------------------------------------
-
-// Large
-.pagination-lg {
-  @include pagination-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large);
-}
-
-// Small
-.pagination-sm {
-  @include pagination-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_panels.scss b/views/style/sass/bootstrap/bootstrap/_panels.scss
deleted file mode 100644
index a072e6d..0000000
--- a/views/style/sass/bootstrap/bootstrap/_panels.scss
+++ /dev/null
@@ -1,289 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Panels
-// --------------------------------------------------
-
-
-// Base class
-.panel {
-  margin-bottom: $line-height-computed;
-  background-color: $panel-bg;
-  border: 1px solid transparent;
-  border-radius: $panel-border-radius;
-  @include box-shadow(0 1px 1px rgba(0,0,0,.05));
-}
-
-// Panel contents
-.panel-body {
-  padding: $panel-body-padding;
-  @include clearfix;
-}
-
-// Optional heading
-.panel-heading {
-  padding: $panel-heading-padding;
-  border-bottom: 1px solid transparent;
-  @include border-top-radius(($panel-border-radius - 1));
-
-  > .dropdown .dropdown-toggle {
-    color: inherit;
-  }
-}
-
-// Within heading, strip any `h*` tag of its default margins for spacing.
-.panel-title {
-  margin-top: 0;
-  margin-bottom: 0;
-  font-size: ceil(($font-size-base * 1.125));
-  color: inherit;
-
-  > a,
-  > small,
-  > .small,
-  > small > a,
-  > .small > a {
-    color: inherit;
-  }
-}
-
-// Optional footer (stays gray in every modifier class)
-.panel-footer {
-  padding: $panel-footer-padding;
-  background-color: $panel-footer-bg;
-  border-top: 1px solid $panel-inner-border;
-  @include border-bottom-radius(($panel-border-radius - 1));
-}
-
-
-// List groups in panels
-//
-// By default, space out list group content from panel headings to account for
-// any kind of custom content between the two.
-
-.panel {
-  > .list-group,
-  > .panel-collapse > .list-group {
-    margin-bottom: 0;
-
-    .list-group-item {
-      border-width: 1px 0;
-      border-radius: 0;
-    }
-
-    // Add border top radius for first one
-    &:first-child {
-      .list-group-item:first-child {
-        border-top: 0;
-        @include border-top-radius(($panel-border-radius - 1));
-      }
-    }
-
-    // Add border bottom radius for last one
-    &:last-child {
-      .list-group-item:last-child {
-        border-bottom: 0;
-        @include border-bottom-radius(($panel-border-radius - 1));
-      }
-    }
-  }
-  > .panel-heading + .panel-collapse > .list-group {
-    .list-group-item:first-child {
-      @include border-top-radius(0);
-    }
-  }
-}
-// Collapse space between when there's no additional content.
-.panel-heading + .list-group {
-  .list-group-item:first-child {
-    border-top-width: 0;
-  }
-}
-.list-group + .panel-footer {
-  border-top-width: 0;
-}
-
-// Tables in panels
-//
-// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and
-// watch it go full width.
-
-.panel {
-  > .table,
-  > .table-responsive > .table,
-  > .panel-collapse > .table {
-    margin-bottom: 0;
-
-    caption {
-      padding-left: $panel-body-padding;
-      padding-right: $panel-body-padding;
-    }
-  }
-  // Add border top radius for first one
-  > .table:first-child,
-  > .table-responsive:first-child > .table:first-child {
-    @include border-top-radius(($panel-border-radius - 1));
-
-    > thead:first-child,
-    > tbody:first-child {
-      > tr:first-child {
-        border-top-left-radius: ($panel-border-radius - 1);
-        border-top-right-radius: ($panel-border-radius - 1);
-
-        td:first-child,
-        th:first-child {
-          border-top-left-radius: ($panel-border-radius - 1);
-        }
-        td:last-child,
-        th:last-child {
-          border-top-right-radius: ($panel-border-radius - 1);
-        }
-      }
-    }
-  }
-  // Add border bottom radius for last one
-  > .table:last-child,
-  > .table-responsive:last-child > .table:last-child {
-    @include border-bottom-radius(($panel-border-radius - 1));
-
-    > tbody:last-child,
-    > tfoot:last-child {
-      > tr:last-child {
-        border-bottom-left-radius: ($panel-border-radius - 1);
-        border-bottom-right-radius: ($panel-border-radius - 1);
-
-        td:first-child,
-        th:first-child {
-          border-bottom-left-radius: ($panel-border-radius - 1);
-        }
-        td:last-child,
-        th:last-child {
-          border-bottom-right-radius: ($panel-border-radius - 1);
-        }
-      }
-    }
-  }
-  > .panel-body + .table,
-  > .panel-body + .table-responsive,
-  > .table + .panel-body,
-  > .table-responsive + .panel-body {
-    border-top: 1px solid $table-border-color;
-  }
-  > .table > tbody:first-child > tr:first-child th,
-  > .table > tbody:first-child > tr:first-child td {
-    border-top: 0;
-  }
-  > .table-bordered,
-  > .table-responsive > .table-bordered {
-    border: 0;
-    > thead,
-    > tbody,
-    > tfoot {
-      > tr {
-        > th:first-child,
-        > td:first-child {
-          border-left: 0;
-        }
-        > th:last-child,
-        > td:last-child {
-          border-right: 0;
-        }
-      }
-    }
-    > thead,
-    > tbody {
-      > tr:first-child {
-        > td,
-        > th {
-          border-bottom: 0;
-        }
-      }
-    }
-    > tbody,
-    > tfoot {
-      > tr:last-child {
-        > td,
-        > th {
-          border-bottom: 0;
-        }
-      }
-    }
-  }
-  > .table-responsive {
-    border: 0;
-    margin-bottom: 0;
-  }
-}
-
-
-// Collapsable panels (aka, accordion)
-//
-// Wrap a series of panels in `.panel-group` to turn them into an accordion with
-// the help of our collapse JavaScript plugin.
-
-.panel-group {
-  margin-bottom: $line-height-computed;
-
-  // Tighten up margin so it's only between panels
-  .panel {
-    margin-bottom: 0;
-    border-radius: $panel-border-radius;
-
-    + .panel {
-      margin-top: 5px;
-    }
-  }
-
-  .panel-heading {
-    border-bottom: 0;
-
-    + .panel-collapse > .panel-body,
-    + .panel-collapse > .list-group {
-      border-top: 1px solid $panel-inner-border;
-    }
-  }
-
-  .panel-footer {
-    border-top: 0;
-    + .panel-collapse .panel-body {
-      border-bottom: 1px solid $panel-inner-border;
-    }
-  }
-}
-
-
-// Contextual variations
-.panel-default {
-  @include panel-variant($panel-default-border, $panel-default-text, $panel-default-heading-bg, $panel-default-border);
-}
-.panel-primary {
-  @include panel-variant($panel-primary-border, $panel-primary-text, $panel-primary-heading-bg, $panel-primary-border);
-}
-.panel-success {
-  @include panel-variant($panel-success-border, $panel-success-text, $panel-success-heading-bg, $panel-success-border);
-}
-.panel-info {
-  @include panel-variant($panel-info-border, $panel-info-text, $panel-info-heading-bg, $panel-info-border);
-}
-.panel-warning {
-  @include panel-variant($panel-warning-border, $panel-warning-text, $panel-warning-heading-bg, $panel-warning-border);
-}
-.panel-danger {
-  @include panel-variant($panel-danger-border, $panel-danger-text, $panel-danger-heading-bg, $panel-danger-border);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_popovers.scss b/views/style/sass/bootstrap/bootstrap/_popovers.scss
deleted file mode 100644
index 4efd0e0..0000000
--- a/views/style/sass/bootstrap/bootstrap/_popovers.scss
+++ /dev/null
@@ -1,149 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Popovers
-// --------------------------------------------------
-
-
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: $zindex-popover;
-  display: none;
-  max-width: $popover-max-width;
-  padding: 1px;
-  // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.
-  // So reset our font and text properties to avoid inheriting weird values.
-  @include reset-text;
-  font-size: $font-size-base;
-
-  background-color: $popover-bg;
-  background-clip: padding-box;
-  border: 1px solid $popover-fallback-border-color;
-  border: 1px solid $popover-border-color;
-  border-radius: $border-radius-large;
-  @include box-shadow(0 5px 10px rgba(0,0,0,.2));
-
-  // Offset the popover to account for the popover arrow
-  &.top     { margin-top: -$popover-arrow-width; }
-  &.right   { margin-left: $popover-arrow-width; }
-  &.bottom  { margin-top: $popover-arrow-width; }
-  &.left    { margin-left: -$popover-arrow-width; }
-}
-
-.popover-title {
-  margin: 0; // reset heading margin
-  padding: 8px 14px;
-  font-size: $font-size-base;
-  background-color: $popover-title-bg;
-  border-bottom: 1px solid darken($popover-title-bg, 5%);
-  border-radius: ($border-radius-large - 1) ($border-radius-large - 1) 0 0;
-}
-
-.popover-content {
-  padding: 9px 14px;
-}
-
-// Arrows
-//
-// .arrow is outer, .arrow:after is inner
-
-.popover > .arrow {
-  &,
-  &:after {
-    position: absolute;
-    display: block;
-    width: 0;
-    height: 0;
-    border-color: transparent;
-    border-style: solid;
-  }
-}
-.popover > .arrow {
-  border-width: $popover-arrow-outer-width;
-}
-.popover > .arrow:after {
-  border-width: $popover-arrow-width;
-  content: "";
-}
-
-.popover {
-  &.top > .arrow {
-    left: 50%;
-    margin-left: -$popover-arrow-outer-width;
-    border-bottom-width: 0;
-    border-top-color: $popover-arrow-outer-fallback-color; // IE8 fallback
-    border-top-color: $popover-arrow-outer-color;
-    bottom: -$popover-arrow-outer-width;
-    &:after {
-      content: " ";
-      bottom: 1px;
-      margin-left: -$popover-arrow-width;
-      border-bottom-width: 0;
-      border-top-color: $popover-arrow-color;
-    }
-  }
-  &.right > .arrow {
-    top: 50%;
-    left: -$popover-arrow-outer-width;
-    margin-top: -$popover-arrow-outer-width;
-    border-left-width: 0;
-    border-right-color: $popover-arrow-outer-fallback-color; // IE8 fallback
-    border-right-color: $popover-arrow-outer-color;
-    &:after {
-      content: " ";
-      left: 1px;
-      bottom: -$popover-arrow-width;
-      border-left-width: 0;
-      border-right-color: $popover-arrow-color;
-    }
-  }
-  &.bottom > .arrow {
-    left: 50%;
-    margin-left: -$popover-arrow-outer-width;
-    border-top-width: 0;
-    border-bottom-color: $popover-arrow-outer-fallback-color; // IE8 fallback
-    border-bottom-color: $popover-arrow-outer-color;
-    top: -$popover-arrow-outer-width;
-    &:after {
-      content: " ";
-      top: 1px;
-      margin-left: -$popover-arrow-width;
-      border-top-width: 0;
-      border-bottom-color: $popover-arrow-color;
-    }
-  }
-
-  &.left > .arrow {
-    top: 50%;
-    right: -$popover-arrow-outer-width;
-    margin-top: -$popover-arrow-outer-width;
-    border-right-width: 0;
-    border-left-color: $popover-arrow-outer-fallback-color; // IE8 fallback
-    border-left-color: $popover-arrow-outer-color;
-    &:after {
-      content: " ";
-      right: 1px;
-      border-right-width: 0;
-      border-left-color: $popover-arrow-color;
-      bottom: -$popover-arrow-width;
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_print.scss b/views/style/sass/bootstrap/bootstrap/_print.scss
deleted file mode 100644
index efbb344..0000000
--- a/views/style/sass/bootstrap/bootstrap/_print.scss
+++ /dev/null
@@ -1,119 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
-
-// ==========================================================================
-// Print styles.
-// Inlined to avoid the additional HTTP request: h5bp.com/r
-// ==========================================================================
-
-@media print {
-    *,
-    *:before,
-    *:after {
-        background: transparent !important;
-        color: #000 !important; // Black prints faster: h5bp.com/s
-        box-shadow: none !important;
-        text-shadow: none !important;
-    }
-
-    a,
-    a:visited {
-        text-decoration: underline;
-    }
-
-    a[href]:after {
-        content: " (" attr(href) ")";
-    }
-
-    abbr[title]:after {
-        content: " (" attr(title) ")";
-    }
-
-    // Don't show links that are fragment identifiers,
-    // or use the `javascript:` pseudo protocol
-    a[href^="#"]:after,
-    a[href^="javascript:"]:after {
-        content: "";
-    }
-
-    pre,
-    blockquote {
-        border: 1px solid #999;
-        page-break-inside: avoid;
-    }
-
-    thead {
-        display: table-header-group; // h5bp.com/t
-    }
-
-    tr,
-    img {
-        page-break-inside: avoid;
-    }
-
-    img {
-        max-width: 100% !important;
-    }
-
-    p,
-    h2,
-    h3 {
-        orphans: 3;
-        widows: 3;
-    }
-
-    h2,
-    h3 {
-        page-break-after: avoid;
-    }
-
-    // Bootstrap specific changes start
-
-    // Bootstrap components
-    .navbar {
-        display: none;
-    }
-    .btn,
-    .dropup > .btn {
-        > .caret {
-            border-top-color: #000 !important;
-        }
-    }
-    .label {
-        border: 1px solid #000;
-    }
-
-    .table {
-        border-collapse: collapse !important;
-
-        td,
-        th {
-            background-color: #fff !important;
-        }
-    }
-    .table-bordered {
-        th,
-        td {
-            border: 1px solid #ddd !important;
-        }
-    }
-
-    // Bootstrap specific changes end
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_progress-bars.scss b/views/style/sass/bootstrap/bootstrap/_progress-bars.scss
deleted file mode 100644
index bdbf920..0000000
--- a/views/style/sass/bootstrap/bootstrap/_progress-bars.scss
+++ /dev/null
@@ -1,105 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Progress bars
-// --------------------------------------------------
-
-
-// Bar animations
-// -------------------------
-
-// WebKit
-@-webkit-keyframes progress-bar-stripes {
-  from  { background-position: 40px 0; }
-  to    { background-position: 0 0; }
-}
-
-// Spec and IE10+
-@keyframes progress-bar-stripes {
-  from  { background-position: 40px 0; }
-  to    { background-position: 0 0; }
-}
-
-
-// Bar itself
-// -------------------------
-
-// Outer container
-.progress {
-  overflow: hidden;
-  height: $line-height-computed;
-  margin-bottom: $line-height-computed;
-  background-color: $progress-bg;
-  border-radius: $progress-border-radius;
-  @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
-}
-
-// Bar of progress
-.progress-bar {
-  float: left;
-  width: 0%;
-  height: 100%;
-  font-size: $font-size-small;
-  line-height: $line-height-computed;
-  color: $progress-bar-color;
-  text-align: center;
-  background-color: $progress-bar-bg;
-  @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
-  @include transition(width .6s ease);
-}
-
-// Striped bars
-//
-// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the
-// `.progress-bar-striped` class, which you just add to an existing
-// `.progress-bar`.
-.progress-striped .progress-bar,
-.progress-bar-striped {
-  @include gradient-striped;
-  background-size: 40px 40px;
-}
-
-// Call animation for the active one
-//
-// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the
-// `.progress-bar.active` approach.
-.progress.active .progress-bar,
-.progress-bar.active {
-  @include animation(progress-bar-stripes 2s linear infinite);
-}
-
-
-// Variations
-// -------------------------
-
-.progress-bar-success {
-  @include progress-bar-variant($progress-bar-success-bg);
-}
-
-.progress-bar-info {
-  @include progress-bar-variant($progress-bar-info-bg);
-}
-
-.progress-bar-warning {
-  @include progress-bar-variant($progress-bar-warning-bg);
-}
-
-.progress-bar-danger {
-  @include progress-bar-variant($progress-bar-danger-bg);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_responsive-embed.scss b/views/style/sass/bootstrap/bootstrap/_responsive-embed.scss
deleted file mode 100644
index a6b2ce4..0000000
--- a/views/style/sass/bootstrap/bootstrap/_responsive-embed.scss
+++ /dev/null
@@ -1,53 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Embeds responsive
-//
-// Credit: Nicolas Gallagher and SUIT CSS.
-
-.embed-responsive {
-  position: relative;
-  display: block;
-  height: 0;
-  padding: 0;
-  overflow: hidden;
-
-  .embed-responsive-item,
-  iframe,
-  embed,
-  object,
-  video {
-    position: absolute;
-    top: 0;
-    left: 0;
-    bottom: 0;
-    height: 100%;
-    width: 100%;
-    border: 0;
-  }
-}
-
-// Modifier class for 16:9 aspect ratio
-.embed-responsive-16by9 {
-  padding-bottom: 56.25%;
-}
-
-// Modifier class for 4:3 aspect ratio
-.embed-responsive-4by3 {
-  padding-bottom: 75%;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_responsive-utilities.scss b/views/style/sass/bootstrap/bootstrap/_responsive-utilities.scss
deleted file mode 100644
index 1d4fa87..0000000
--- a/views/style/sass/bootstrap/bootstrap/_responsive-utilities.scss
+++ /dev/null
@@ -1,197 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Responsive: Utility classes
-// --------------------------------------------------
-
-
-// IE10 in Windows (Phone) 8
-//
-// Support for responsive views via media queries is kind of borked in IE10, for
-// Surface/desktop in split view and for Windows Phone 8. This particular fix
-// must be accompanied by a snippet of JavaScript to sniff the user agent and
-// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at
-// our Getting Started page for more information on this bug.
-//
-// For more information, see the following:
-//
-// Issue: https://github.com/twbs/bootstrap/issues/10497
-// Docs: http://getbootstrap.com/getting-started/#support-ie10-width
-// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/
-// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
-
-@at-root {
-  @-ms-viewport {
-    width: device-width;
-  }
-}
-
-
-// Visibility utilities
-// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0
-
-@include responsive-invisibility('.visible-xs');
-@include responsive-invisibility('.visible-sm');
-@include responsive-invisibility('.visible-md');
-@include responsive-invisibility('.visible-lg');
-
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
-  display: none !important;
-}
-
-@media (max-width: $screen-xs-max) {
-  @include responsive-visibility('.visible-xs');
-}
-.visible-xs-block {
-  @media (max-width: $screen-xs-max) {
-    display: block !important;
-  }
-}
-.visible-xs-inline {
-  @media (max-width: $screen-xs-max) {
-    display: inline !important;
-  }
-}
-.visible-xs-inline-block {
-  @media (max-width: $screen-xs-max) {
-    display: inline-block !important;
-  }
-}
-
-@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
-  @include responsive-visibility('.visible-sm');
-}
-.visible-sm-block {
-  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
-    display: block !important;
-  }
-}
-.visible-sm-inline {
-  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
-    display: inline !important;
-  }
-}
-.visible-sm-inline-block {
-  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
-    display: inline-block !important;
-  }
-}
-
-@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
-  @include responsive-visibility('.visible-md');
-}
-.visible-md-block {
-  @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
-    display: block !important;
-  }
-}
-.visible-md-inline {
-  @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
-    display: inline !important;
-  }
-}
-.visible-md-inline-block {
-  @media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
-    display: inline-block !important;
-  }
-}
-
-@media (min-width: $screen-lg-min) {
-  @include responsive-visibility('.visible-lg');
-}
-.visible-lg-block {
-  @media (min-width: $screen-lg-min) {
-    display: block !important;
-  }
-}
-.visible-lg-inline {
-  @media (min-width: $screen-lg-min) {
-    display: inline !important;
-  }
-}
-.visible-lg-inline-block {
-  @media (min-width: $screen-lg-min) {
-    display: inline-block !important;
-  }
-}
-
-@media (max-width: $screen-xs-max) {
-  @include responsive-invisibility('.hidden-xs');
-}
-
-@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
-  @include responsive-invisibility('.hidden-sm');
-}
-
-@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
-  @include responsive-invisibility('.hidden-md');
-}
-
-@media (min-width: $screen-lg-min) {
-  @include responsive-invisibility('.hidden-lg');
-}
-
-
-// Print utilities
-//
-// Media queries are placed on the inside to be mixin-friendly.
-
-// Note: Deprecated .visible-print as of v3.2.0
-
-@include responsive-invisibility('.visible-print');
-
-@media print {
-  @include responsive-visibility('.visible-print');
-}
-.visible-print-block {
-  display: none !important;
-
-  @media print {
-    display: block !important;
-  }
-}
-.visible-print-inline {
-  display: none !important;
-
-  @media print {
-    display: inline !important;
-  }
-}
-.visible-print-inline-block {
-  display: none !important;
-
-  @media print {
-    display: inline-block !important;
-  }
-}
-
-@media print {
-  @include responsive-invisibility('.hidden-print');
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_scaffolding.scss b/views/style/sass/bootstrap/bootstrap/_scaffolding.scss
deleted file mode 100644
index b9bee43..0000000
--- a/views/style/sass/bootstrap/bootstrap/_scaffolding.scss
+++ /dev/null
@@ -1,179 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Scaffolding
-// --------------------------------------------------
-
-
-// Reset the box-sizing
-//
-// Heads up! This reset may cause conflicts with some third-party widgets.
-// For recommendations on resolving such conflicts, see
-// http://getbootstrap.com/getting-started/#third-box-sizing
-* {
-  @include box-sizing(border-box);
-}
-*:before,
-*:after {
-  @include box-sizing(border-box);
-}
-
-
-// Body reset
-
-html {
-  font-size: 10px;
-  -webkit-tap-highlight-color: rgba(0,0,0,0);
-}
-
-body {
-  font-family: $font-family-base;
-  font-size: $font-size-base;
-  line-height: $line-height-base;
-  color: $text-color;
-  background-color: $body-bg;
-}
-
-// Reset fonts for relevant elements
-input,
-button,
-select,
-textarea {
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-}
-
-
-// Links
-
-a {
-  color: $link-color;
-  text-decoration: none;
-
-  &:hover,
-  &:focus {
-    color: $link-hover-color;
-    text-decoration: $link-hover-decoration;
-  }
-
-  &:focus {
-    @include tab-focus;
-  }
-}
-
-
-// Figures
-//
-// We reset this here because previously Normalize had no `figure` margins. This
-// ensures we don't break anyone's use of the element.
-
-figure {
-  margin: 0;
-}
-
-
-// Images
-
-img {
-  vertical-align: middle;
-}
-
-// Responsive images (ensure images don't scale beyond their parents)
-.img-responsive {
-  @include img-responsive;
-}
-
-// Rounded corners
-.img-rounded {
-  border-radius: $border-radius-large;
-}
-
-// Image thumbnails
-//
-// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.
-.img-thumbnail {
-  padding: $thumbnail-padding;
-  line-height: $line-height-base;
-  background-color: $thumbnail-bg;
-  border: 1px solid $thumbnail-border;
-  border-radius: $thumbnail-border-radius;
-  @include transition(all .2s ease-in-out);
-
-  // Keep them at most 100% wide
-  @include img-responsive(inline-block);
-}
-
-// Perfect circle
-.img-circle {
-  border-radius: 50%; // set radius in percents
-}
-
-
-// Horizontal rules
-
-hr {
-  margin-top:    $line-height-computed;
-  margin-bottom: $line-height-computed;
-  border: 0;
-  border-top: 1px solid $hr-border;
-}
-
-
-// Only display content to screen readers
-//
-// See: http://a11yproject.com/posts/how-to-hide-content/
-
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  margin: -1px;
-  padding: 0;
-  overflow: hidden;
-  clip: rect(0,0,0,0);
-  border: 0;
-}
-
-// Use in conjunction with .sr-only to only display content when it's focused.
-// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
-// Credit: HTML5 Boilerplate
-
-.sr-only-focusable {
-  &:active,
-  &:focus {
-    position: static;
-    width: auto;
-    height: auto;
-    margin: 0;
-    overflow: visible;
-    clip: auto;
-  }
-}
-
-
-// iOS "clickable elements" fix for role="button"
-//
-// Fixes "clickability" issue (and more generally, the firing of events such as focus as well)
-// for traditionally non-focusable elements with role="button"
-// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
-
-[role="button"] {
-  cursor: pointer;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_tables.scss b/views/style/sass/bootstrap/bootstrap/_tables.scss
deleted file mode 100644
index be51b0a..0000000
--- a/views/style/sass/bootstrap/bootstrap/_tables.scss
+++ /dev/null
@@ -1,252 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Tables
-// --------------------------------------------------
-
-
-table {
-  background-color: $table-bg;
-}
-caption {
-  padding-top: $table-cell-padding;
-  padding-bottom: $table-cell-padding;
-  color: $text-muted;
-  text-align: left;
-}
-th {
-  text-align: left;
-}
-
-
-// Baseline styles
-
-.table {
-  width: 100%;
-  max-width: 100%;
-  margin-bottom: $line-height-computed;
-  // Cells
-  > thead,
-  > tbody,
-  > tfoot {
-    > tr {
-      > th,
-      > td {
-        padding: $table-cell-padding;
-        line-height: $line-height-base;
-        vertical-align: top;
-        border-top: 1px solid $table-border-color;
-      }
-    }
-  }
-  // Bottom align for column headings
-  > thead > tr > th {
-    vertical-align: bottom;
-    border-bottom: 2px solid $table-border-color;
-  }
-  // Remove top border from thead by default
-  > caption + thead,
-  > colgroup + thead,
-  > thead:first-child {
-    > tr:first-child {
-      > th,
-      > td {
-        border-top: 0;
-      }
-    }
-  }
-  // Account for multiple tbody instances
-  > tbody + tbody {
-    border-top: 2px solid $table-border-color;
-  }
-
-  // Nesting
-  .table {
-    background-color: $body-bg;
-  }
-}
-
-
-// Condensed table w/ half padding
-
-.table-condensed {
-  > thead,
-  > tbody,
-  > tfoot {
-    > tr {
-      > th,
-      > td {
-        padding: $table-condensed-cell-padding;
-      }
-    }
-  }
-}
-
-
-// Bordered version
-//
-// Add borders all around the table and between all the columns.
-
-.table-bordered {
-  border: 1px solid $table-border-color;
-  > thead,
-  > tbody,
-  > tfoot {
-    > tr {
-      > th,
-      > td {
-        border: 1px solid $table-border-color;
-      }
-    }
-  }
-  > thead > tr {
-    > th,
-    > td {
-      border-bottom-width: 2px;
-    }
-  }
-}
-
-
-// Zebra-striping
-//
-// Default zebra-stripe styles (alternating gray and transparent backgrounds)
-
-.table-striped {
-  > tbody > tr:nth-of-type(odd) {
-    background-color: $table-bg-accent;
-  }
-}
-
-
-// Hover effect
-//
-// Placed here since it has to come after the potential zebra striping
-
-.table-hover {
-  > tbody > tr:hover {
-    background-color: $table-bg-hover;
-  }
-}
-
-
-// Table cell sizing
-//
-// Reset default table behavior
-
-table col[class*="col-"] {
-  position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)
-  float: none;
-  display: table-column;
-}
-table {
-  td,
-  th {
-    &[class*="col-"] {
-      position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)
-      float: none;
-      display: table-cell;
-    }
-  }
-}
-
-
-// Table backgrounds
-//
-// Exact selectors below required to override `.table-striped` and prevent
-// inheritance to nested tables.
-
-// Generate the contextual variants
-@include table-row-variant('active', $table-bg-active);
-@include table-row-variant('success', $state-success-bg);
-@include table-row-variant('info', $state-info-bg);
-@include table-row-variant('warning', $state-warning-bg);
-@include table-row-variant('danger', $state-danger-bg);
-
-
-// Responsive tables
-//
-// Wrap your tables in `.table-responsive` and we'll make them mobile friendly
-// by enabling horizontal scrolling. Only applies <768px. Everything above that
-// will display normally.
-
-.table-responsive {
-  overflow-x: auto;
-  min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)
-
-  @media screen and (max-width: $screen-xs-max) {
-    width: 100%;
-    margin-bottom: ($line-height-computed * 0.75);
-    overflow-y: hidden;
-    -ms-overflow-style: -ms-autohiding-scrollbar;
-    border: 1px solid $table-border-color;
-
-    // Tighten up spacing
-    > .table {
-      margin-bottom: 0;
-
-      // Ensure the content doesn't wrap
-      > thead,
-      > tbody,
-      > tfoot {
-        > tr {
-          > th,
-          > td {
-            white-space: nowrap;
-          }
-        }
-      }
-    }
-
-    // Special overrides for the bordered tables
-    > .table-bordered {
-      border: 0;
-
-      // Nuke the appropriate borders so that the parent can handle them
-      > thead,
-      > tbody,
-      > tfoot {
-        > tr {
-          > th:first-child,
-          > td:first-child {
-            border-left: 0;
-          }
-          > th:last-child,
-          > td:last-child {
-            border-right: 0;
-          }
-        }
-      }
-
-      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since
-      // chances are there will be only one `tr` in a `thead` and that would
-      // remove the border altogether.
-      > tbody,
-      > tfoot {
-        > tr:last-child {
-          > th,
-          > td {
-            border-bottom: 0;
-          }
-        }
-      }
-
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_theme.scss b/views/style/sass/bootstrap/bootstrap/_theme.scss
deleted file mode 100644
index 5e5bd5d..0000000
--- a/views/style/sass/bootstrap/bootstrap/_theme.scss
+++ /dev/null
@@ -1,309 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-//
-// Load core variables and mixins
-// --------------------------------------------------
-
-@import "variables";
-@import "mixins";
-
-
-//
-// Buttons
-// --------------------------------------------------
-
-// Common styles
-.btn-default,
-.btn-primary,
-.btn-success,
-.btn-info,
-.btn-warning,
-.btn-danger {
-  text-shadow: 0 -1px 0 rgba(0,0,0,.2);
-  $shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);
-  @include box-shadow($shadow);
-
-  // Reset the shadow
-  &:active,
-  &.active {
-    @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
-  }
-
-  &.disabled,
-  &[disabled],
-  fieldset[disabled] & {
-    @include box-shadow(none);
-  }
-
-  .badge {
-    text-shadow: none;
-  }
-}
-
-// Mixin for generating new styles
-@mixin btn-styles($btn-color: #555) {
-  @include gradient-vertical($start-color: $btn-color, $end-color: darken($btn-color, 12%));
-  @include reset-filter; // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620
-  background-repeat: repeat-x;
-  border-color: darken($btn-color, 14%);
-
-  &:hover,
-  &:focus  {
-    background-color: darken($btn-color, 12%);
-    background-position: 0 -15px;
-  }
-
-  &:active,
-  &.active {
-    background-color: darken($btn-color, 12%);
-    border-color: darken($btn-color, 14%);
-  }
-
-  &.disabled,
-  &[disabled],
-  fieldset[disabled] & {
-    &,
-    &:hover,
-    &:focus,
-    &.focus,
-    &:active,
-    &.active {
-      background-color: darken($btn-color, 12%);
-      background-image: none;
-    }
-  }
-}
-
-// Common styles
-.btn {
-  // Remove the gradient for the pressed/active state
-  &:active,
-  &.active {
-    background-image: none;
-  }
-}
-
-// Apply the mixin to the buttons
-.btn-default { @include btn-styles($btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }
-.btn-primary { @include btn-styles($btn-primary-bg); }
-.btn-success { @include btn-styles($btn-success-bg); }
-.btn-info    { @include btn-styles($btn-info-bg); }
-.btn-warning { @include btn-styles($btn-warning-bg); }
-.btn-danger  { @include btn-styles($btn-danger-bg); }
-
-
-//
-// Images
-// --------------------------------------------------
-
-.thumbnail,
-.img-thumbnail {
-  @include box-shadow(0 1px 2px rgba(0,0,0,.075));
-}
-
-
-//
-// Dropdowns
-// --------------------------------------------------
-
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  @include gradient-vertical($start-color: $dropdown-link-hover-bg, $end-color: darken($dropdown-link-hover-bg, 5%));
-  background-color: darken($dropdown-link-hover-bg, 5%);
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  @include gradient-vertical($start-color: $dropdown-link-active-bg, $end-color: darken($dropdown-link-active-bg, 5%));
-  background-color: darken($dropdown-link-active-bg, 5%);
-}
-
-
-//
-// Navbar
-// --------------------------------------------------
-
-// Default navbar
-.navbar-default {
-  @include gradient-vertical($start-color: lighten($navbar-default-bg, 10%), $end-color: $navbar-default-bg);
-  @include reset-filter; // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
-  border-radius: $navbar-border-radius;
-  $shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);
-  @include box-shadow($shadow);
-
-  .navbar-nav > .open > a,
-  .navbar-nav > .active > a {
-    @include gradient-vertical($start-color: darken($navbar-default-link-active-bg, 5%), $end-color: darken($navbar-default-link-active-bg, 2%));
-    @include box-shadow(inset 0 3px 9px rgba(0,0,0,.075));
-  }
-}
-.navbar-brand,
-.navbar-nav > li > a {
-  text-shadow: 0 1px 0 rgba(255,255,255,.25);
-}
-
-// Inverted navbar
-.navbar-inverse {
-  @include gradient-vertical($start-color: lighten($navbar-inverse-bg, 10%), $end-color: $navbar-inverse-bg);
-  @include reset-filter; // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257
-  border-radius: $navbar-border-radius;
-  .navbar-nav > .open > a,
-  .navbar-nav > .active > a {
-    @include gradient-vertical($start-color: $navbar-inverse-link-active-bg, $end-color: lighten($navbar-inverse-link-active-bg, 2.5%));
-    @include box-shadow(inset 0 3px 9px rgba(0,0,0,.25));
-  }
-
-  .navbar-brand,
-  .navbar-nav > li > a {
-    text-shadow: 0 -1px 0 rgba(0,0,0,.25);
-  }
-}
-
-// Undo rounded corners in static and fixed navbars
-.navbar-static-top,
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  border-radius: 0;
-}
-
-// Fix active state of dropdown items in collapsed mode
-@media (max-width: $grid-float-breakpoint-max) {
-  .navbar .navbar-nav .open .dropdown-menu > .active > a {
-    &,
-    &:hover,
-    &:focus {
-      color: #fff;
-      @include gradient-vertical($start-color: $dropdown-link-active-bg, $end-color: darken($dropdown-link-active-bg, 5%));
-    }
-  }
-}
-
-
-//
-// Alerts
-// --------------------------------------------------
-
-// Common styles
-.alert {
-  text-shadow: 0 1px 0 rgba(255,255,255,.2);
-  $shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);
-  @include box-shadow($shadow);
-}
-
-// Mixin for generating new styles
-@mixin alert-styles($color) {
-  @include gradient-vertical($start-color: $color, $end-color: darken($color, 7.5%));
-  border-color: darken($color, 15%);
-}
-
-// Apply the mixin to the alerts
-.alert-success    { @include alert-styles($alert-success-bg); }
-.alert-info       { @include alert-styles($alert-info-bg); }
-.alert-warning    { @include alert-styles($alert-warning-bg); }
-.alert-danger     { @include alert-styles($alert-danger-bg); }
-
-
-//
-// Progress bars
-// --------------------------------------------------
-
-// Give the progress background some depth
-.progress {
-  @include gradient-vertical($start-color: darken($progress-bg, 4%), $end-color: $progress-bg)
-}
-
-// Mixin for generating new styles
-@mixin progress-bar-styles($color) {
-  @include gradient-vertical($start-color: $color, $end-color: darken($color, 10%));
-}
-
-// Apply the mixin to the progress bars
-.progress-bar            { @include progress-bar-styles($progress-bar-bg); }
-.progress-bar-success    { @include progress-bar-styles($progress-bar-success-bg); }
-.progress-bar-info       { @include progress-bar-styles($progress-bar-info-bg); }
-.progress-bar-warning    { @include progress-bar-styles($progress-bar-warning-bg); }
-.progress-bar-danger     { @include progress-bar-styles($progress-bar-danger-bg); }
-
-// Reset the striped class because our mixins don't do multiple gradients and
-// the above custom styles override the new `.progress-bar-striped` in v3.2.0.
-.progress-bar-striped {
-  @include gradient-striped;
-}
-
-
-//
-// List groups
-// --------------------------------------------------
-
-.list-group {
-  border-radius: $border-radius-base;
-  @include box-shadow(0 1px 2px rgba(0,0,0,.075));
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
-  text-shadow: 0 -1px 0 darken($list-group-active-bg, 10%);
-  @include gradient-vertical($start-color: $list-group-active-bg, $end-color: darken($list-group-active-bg, 7.5%));
-  border-color: darken($list-group-active-border, 7.5%);
-
-  .badge {
-    text-shadow: none;
-  }
-}
-
-
-//
-// Panels
-// --------------------------------------------------
-
-// Common styles
-.panel {
-  @include box-shadow(0 1px 2px rgba(0,0,0,.05));
-}
-
-// Mixin for generating new styles
-@mixin panel-heading-styles($color) {
-  @include gradient-vertical($start-color: $color, $end-color: darken($color, 5%));
-}
-
-// Apply the mixin to the panel headings only
-.panel-default > .panel-heading   { @include panel-heading-styles($panel-default-heading-bg); }
-.panel-primary > .panel-heading   { @include panel-heading-styles($panel-primary-heading-bg); }
-.panel-success > .panel-heading   { @include panel-heading-styles($panel-success-heading-bg); }
-.panel-info > .panel-heading      { @include panel-heading-styles($panel-info-heading-bg); }
-.panel-warning > .panel-heading   { @include panel-heading-styles($panel-warning-heading-bg); }
-.panel-danger > .panel-heading    { @include panel-heading-styles($panel-danger-heading-bg); }
-
-
-//
-// Wells
-// --------------------------------------------------
-
-.well {
-  @include gradient-vertical($start-color: darken($well-bg, 5%), $end-color: $well-bg);
-  border-color: darken($well-bg, 10%);
-  $shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);
-  @include box-shadow($shadow);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_thumbnails.scss b/views/style/sass/bootstrap/bootstrap/_thumbnails.scss
deleted file mode 100644
index 046a8df..0000000
--- a/views/style/sass/bootstrap/bootstrap/_thumbnails.scss
+++ /dev/null
@@ -1,56 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Thumbnails
-// --------------------------------------------------
-
-
-// Mixin and adjust the regular image class
-.thumbnail {
-  display: block;
-  padding: $thumbnail-padding;
-  margin-bottom: $line-height-computed;
-  line-height: $line-height-base;
-  background-color: $thumbnail-bg;
-  border: 1px solid $thumbnail-border;
-  border-radius: $thumbnail-border-radius;
-  @include transition(border .2s ease-in-out);
-
-  > img,
-  a > img {
-    @include img-responsive;
-    margin-left: auto;
-    margin-right: auto;
-  }
-
-  // [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active
-
-  // Image captions
-  .caption {
-    padding: $thumbnail-caption-padding;
-    color: $thumbnail-caption-color;
-  }
-}
-
-// Add a hover state for linked versions only
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
-  border-color: $link-color;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_tooltip.scss b/views/style/sass/bootstrap/bootstrap/_tooltip.scss
deleted file mode 100644
index d5932c2..0000000
--- a/views/style/sass/bootstrap/bootstrap/_tooltip.scss
+++ /dev/null
@@ -1,119 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Tooltips
-// --------------------------------------------------
-
-
-// Base class
-.tooltip {
-  position: absolute;
-  z-index: $zindex-tooltip;
-  display: block;
-  // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.
-  // So reset our font and text properties to avoid inheriting weird values.
-  @include reset-text;
-  font-size: $font-size-small;
-
-  @include opacity(0);
-
-  &.in     { @include opacity($tooltip-opacity); }
-  &.top    { margin-top:  -3px; padding: $tooltip-arrow-width 0; }
-  &.right  { margin-left:  3px; padding: 0 $tooltip-arrow-width; }
-  &.bottom { margin-top:   3px; padding: $tooltip-arrow-width 0; }
-  &.left   { margin-left: -3px; padding: 0 $tooltip-arrow-width; }
-}
-
-// Wrapper for the tooltip content
-.tooltip-inner {
-  max-width: $tooltip-max-width;
-  padding: 3px 8px;
-  color: $tooltip-color;
-  text-align: center;
-  background-color: $tooltip-bg;
-  border-radius: $border-radius-base;
-}
-
-// Arrows
-.tooltip-arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-}
-// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1
-.tooltip {
-  &.top .tooltip-arrow {
-    bottom: 0;
-    left: 50%;
-    margin-left: -$tooltip-arrow-width;
-    border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
-    border-top-color: $tooltip-arrow-color;
-  }
-  &.top-left .tooltip-arrow {
-    bottom: 0;
-    right: $tooltip-arrow-width;
-    margin-bottom: -$tooltip-arrow-width;
-    border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
-    border-top-color: $tooltip-arrow-color;
-  }
-  &.top-right .tooltip-arrow {
-    bottom: 0;
-    left: $tooltip-arrow-width;
-    margin-bottom: -$tooltip-arrow-width;
-    border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
-    border-top-color: $tooltip-arrow-color;
-  }
-  &.right .tooltip-arrow {
-    top: 50%;
-    left: 0;
-    margin-top: -$tooltip-arrow-width;
-    border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;
-    border-right-color: $tooltip-arrow-color;
-  }
-  &.left .tooltip-arrow {
-    top: 50%;
-    right: 0;
-    margin-top: -$tooltip-arrow-width;
-    border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;
-    border-left-color: $tooltip-arrow-color;
-  }
-  &.bottom .tooltip-arrow {
-    top: 0;
-    left: 50%;
-    margin-left: -$tooltip-arrow-width;
-    border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
-    border-bottom-color: $tooltip-arrow-color;
-  }
-  &.bottom-left .tooltip-arrow {
-    top: 0;
-    right: $tooltip-arrow-width;
-    margin-top: -$tooltip-arrow-width;
-    border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
-    border-bottom-color: $tooltip-arrow-color;
-  }
-  &.bottom-right .tooltip-arrow {
-    top: 0;
-    left: $tooltip-arrow-width;
-    margin-top: -$tooltip-arrow-width;
-    border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
-    border-bottom-color: $tooltip-arrow-color;
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_type.scss b/views/style/sass/bootstrap/bootstrap/_type.scss
deleted file mode 100644
index e473e81..0000000
--- a/views/style/sass/bootstrap/bootstrap/_type.scss
+++ /dev/null
@@ -1,316 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Typography
-// --------------------------------------------------
-
-
-// Headings
-// -------------------------
-
-h1, h2, h3, h4, h5, h6,
-.h1, .h2, .h3, .h4, .h5, .h6 {
-  font-family: $headings-font-family;
-  font-weight: $headings-font-weight;
-  line-height: $headings-line-height;
-  color: $headings-color;
-
-  small,
-  .small {
-    font-weight: normal;
-    line-height: 1;
-    color: $headings-small-color;
-  }
-}
-
-h1, .h1,
-h2, .h2,
-h3, .h3 {
-  margin-top: $line-height-computed;
-  margin-bottom: ($line-height-computed / 2);
-
-  small,
-  .small {
-    font-size: 65%;
-  }
-}
-h4, .h4,
-h5, .h5,
-h6, .h6 {
-  margin-top: ($line-height-computed / 2);
-  margin-bottom: ($line-height-computed / 2);
-
-  small,
-  .small {
-    font-size: 75%;
-  }
-}
-
-h1, .h1 { font-size: $font-size-h1; }
-h2, .h2 { font-size: $font-size-h2; }
-h3, .h3 { font-size: $font-size-h3; }
-h4, .h4 { font-size: $font-size-h4; }
-h5, .h5 { font-size: $font-size-h5; }
-h6, .h6 { font-size: $font-size-h6; }
-
-
-// Body text
-// -------------------------
-
-p {
-  margin: 0 0 ($line-height-computed / 2);
-}
-
-.lead {
-  margin-bottom: $line-height-computed;
-  font-size: floor(($font-size-base * 1.15));
-  font-weight: 300;
-  line-height: 1.4;
-
-  @media (min-width: $screen-sm-min) {
-    font-size: ($font-size-base * 1.5);
-  }
-}
-
-
-// Emphasis & misc
-// -------------------------
-
-// Ex: (12px small font / 14px base font) * 100% = about 85%
-small,
-.small {
-  font-size: floor((100% * $font-size-small / $font-size-base));
-}
-
-mark,
-.mark {
-  background-color: $state-warning-bg;
-  padding: .2em;
-}
-
-// Alignment
-.text-left           { text-align: left; }
-.text-right          { text-align: right; }
-.text-center         { text-align: center; }
-.text-justify        { text-align: justify; }
-.text-nowrap         { white-space: nowrap; }
-
-// Transformation
-.text-lowercase      { text-transform: lowercase; }
-.text-uppercase      { text-transform: uppercase; }
-.text-capitalize     { text-transform: capitalize; }
-
-// Contextual colors
-.text-muted {
-  color: $text-muted;
-}
-
-@include text-emphasis-variant('.text-primary', $brand-primary);
-
-@include text-emphasis-variant('.text-success', $state-success-text);
-
-@include text-emphasis-variant('.text-info', $state-info-text);
-
-@include text-emphasis-variant('.text-warning', $state-warning-text);
-
-@include text-emphasis-variant('.text-danger', $state-danger-text);
-
-// Contextual backgrounds
-// For now we'll leave these alongside the text classes until v4 when we can
-// safely shift things around (per SemVer rules).
-.bg-primary {
-  // Given the contrast here, this is the only class to have its color inverted
-  // automatically.
-  color: #fff;
-}
-@include bg-variant('.bg-primary', $brand-primary);
-
-@include bg-variant('.bg-success', $state-success-bg);
-
-@include bg-variant('.bg-info', $state-info-bg);
-
-@include bg-variant('.bg-warning', $state-warning-bg);
-
-@include bg-variant('.bg-danger', $state-danger-bg);
-
-
-// Page header
-// -------------------------
-
-.page-header {
-  padding-bottom: (($line-height-computed / 2) - 1);
-  margin: ($line-height-computed * 2) 0 $line-height-computed;
-  border-bottom: 1px solid $page-header-border-color;
-}
-
-
-// Lists
-// -------------------------
-
-// Unordered and Ordered lists
-ul,
-ol {
-  margin-top: 0;
-  margin-bottom: ($line-height-computed / 2);
-  ul,
-  ol {
-    margin-bottom: 0;
-  }
-}
-
-// List options
-
-// [converter] extracted from `.list-unstyled` for libsass compatibility
-@mixin list-unstyled {
-  padding-left: 0;
-  list-style: none;
-}
-// [converter] extracted as `@mixin list-unstyled` for libsass compatibility
-.list-unstyled {
-  @include list-unstyled;
-}
-
-
-// Inline turns list items into inline-block
-.list-inline {
-  @include list-unstyled;
-  margin-left: -5px;
-
-  > li {
-    display: inline-block;
-    padding-left: 5px;
-    padding-right: 5px;
-  }
-}
-
-// Description Lists
-dl {
-  margin-top: 0; // Remove browser default
-  margin-bottom: $line-height-computed;
-}
-dt,
-dd {
-  line-height: $line-height-base;
-}
-dt {
-  font-weight: bold;
-}
-dd {
-  margin-left: 0; // Undo browser default
-}
-
-// Horizontal description lists
-//
-// Defaults to being stacked without any of the below styles applied, until the
-// grid breakpoint is reached (default of ~768px).
-
-.dl-horizontal {
-  dd {
-    @include clearfix; // Clear the floated `dt` if an empty `dd` is present
-  }
-
-  @media (min-width: $dl-horizontal-breakpoint) {
-    dt {
-      float: left;
-      width: ($dl-horizontal-offset - 20);
-      clear: left;
-      text-align: right;
-      @include text-overflow;
-    }
-    dd {
-      margin-left: $dl-horizontal-offset;
-    }
-  }
-}
-
-
-// Misc
-// -------------------------
-
-// Abbreviations and acronyms
-abbr[title],
-// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted $abbr-border-color;
-}
-.initialism {
-  font-size: 90%;
-  @extend .text-uppercase;
-}
-
-// Blockquotes
-blockquote {
-  padding: ($line-height-computed / 2) $line-height-computed;
-  margin: 0 0 $line-height-computed;
-  font-size: $blockquote-font-size;
-  border-left: 5px solid $blockquote-border-color;
-
-  p,
-  ul,
-  ol {
-    &:last-child {
-      margin-bottom: 0;
-    }
-  }
-
-  // Note: Deprecated small and .small as of v3.1.0
-  // Context: https://github.com/twbs/bootstrap/issues/11660
-  footer,
-  small,
-  .small {
-    display: block;
-    font-size: 80%; // back to default font-size
-    line-height: $line-height-base;
-    color: $blockquote-small-color;
-
-    &:before {
-      content: '\2014 \00A0'; // em dash, nbsp
-    }
-  }
-}
-
-// Opposite alignment of blockquote
-//
-// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.
-.blockquote-reverse,
-blockquote.pull-right {
-  padding-right: 15px;
-  padding-left: 0;
-  border-right: 5px solid $blockquote-border-color;
-  border-left: 0;
-  text-align: right;
-
-  // Account for citation
-  footer,
-  small,
-  .small {
-    &:before { content: ''; }
-    &:after {
-      content: '\00A0 \2014'; // nbsp, em dash
-    }
-  }
-}
-
-// Addresses
-address {
-  margin-bottom: $line-height-computed;
-  font-style: normal;
-  line-height: $line-height-base;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_utilities.scss b/views/style/sass/bootstrap/bootstrap/_utilities.scss
deleted file mode 100644
index af86900..0000000
--- a/views/style/sass/bootstrap/bootstrap/_utilities.scss
+++ /dev/null
@@ -1,73 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Utility classes
-// --------------------------------------------------
-
-
-// Floats
-// -------------------------
-
-.clearfix {
-  @include clearfix;
-}
-.center-block {
-  @include center-block;
-}
-.pull-right {
-  float: right !important;
-}
-.pull-left {
-  float: left !important;
-}
-
-
-// Toggling content
-// -------------------------
-
-// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1
-.hide {
-  display: none !important;
-}
-.show {
-  display: block !important;
-}
-.invisible {
-  visibility: hidden;
-}
-.text-hide {
-  @include text-hide;
-}
-
-
-// Hide from screenreaders and browsers
-//
-// Credit: HTML5 Boilerplate
-
-.hidden {
-  display: none !important;
-}
-
-
-// For Affix plugin
-// -------------------------
-
-.affix {
-  position: fixed;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/_variables.scss b/views/style/sass/bootstrap/bootstrap/_variables.scss
deleted file mode 100644
index 26f9b0b..0000000
--- a/views/style/sass/bootstrap/bootstrap/_variables.scss
+++ /dev/null
@@ -1,892 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-$bootstrap-sass-asset-helper: false !default;
-//
-// Variables
-// --------------------------------------------------
-
-
-//== Colors
-//
-//## Gray and brand colors for use across Bootstrap.
-
-$gray-base:              #000 !default;
-$gray-darker:            lighten($gray-base, 13.5%) !default; // #222
-$gray-dark:              lighten($gray-base, 20%) !default;   // #333
-$gray:                   lighten($gray-base, 33.5%) !default; // #555
-$gray-light:             lighten($gray-base, 46.7%) !default; // #777
-$gray-lighter:           lighten($gray-base, 93.5%) !default; // #eee
-
-$brand-primary:         darken(#428bca, 6.5%) !default; // #337ab7
-$brand-success:         #5cb85c !default;
-$brand-info:            #5bc0de !default;
-$brand-warning:         #f0ad4e !default;
-$brand-danger:          #d9534f !default;
-
-
-//== Scaffolding
-//
-//## Settings for some of the most global styles.
-
-//** Background color for `<body>`.
-$body-bg:               #fff !default;
-//** Global text color on `<body>`.
-$text-color:            $gray-dark !default;
-
-//** Global textual link color.
-$link-color:            $brand-primary !default;
-//** Link hover color set via `darken()` function.
-$link-hover-color:      darken($link-color, 15%) !default;
-//** Link hover decoration.
-$link-hover-decoration: underline !default;
-
-
-//== Typography
-//
-//## Font, line-height, and color for body text, headings, and more.
-
-$font-family-sans-serif:  "Helvetica Neue", Helvetica, Arial, sans-serif !default;
-$font-family-serif:       Georgia, "Times New Roman", Times, serif !default;
-//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
-$font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace !default;
-$font-family-base:        $font-family-sans-serif !default;
-
-$font-size-base:          14px !default;
-$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px
-$font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px
-
-$font-size-h1:            floor(($font-size-base * 2.6)) !default; // ~36px
-$font-size-h2:            floor(($font-size-base * 2.15)) !default; // ~30px
-$font-size-h3:            ceil(($font-size-base * 1.7)) !default; // ~24px
-$font-size-h4:            ceil(($font-size-base * 1.25)) !default; // ~18px
-$font-size-h5:            $font-size-base !default;
-$font-size-h6:            ceil(($font-size-base * 0.85)) !default; // ~12px
-
-//** Unit-less `line-height` for use in components like buttons.
-$line-height-base:        1.428571429 !default; // 20/14
-//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
-$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px
-
-//** By default, this inherits from the `<body>`.
-$headings-font-family:    inherit !default;
-$headings-font-weight:    500 !default;
-$headings-line-height:    1.1 !default;
-$headings-color:          inherit !default;
-
-
-//== Iconography
-//
-//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
-
-//** Load fonts from this directory.
-
-// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
-// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
-$icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/") !default;
-
-//** File name for all font files.
-$icon-font-name:          "glyphicons-halflings-regular" !default;
-//** Element ID within SVG icon file.
-$icon-font-svg-id:        "glyphicons_halflingsregular" !default;
-
-
-//== Components
-//
-//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
-
-$padding-base-vertical:     6px !default;
-$padding-base-horizontal:   12px !default;
-
-$padding-large-vertical:    10px !default;
-$padding-large-horizontal:  16px !default;
-
-$padding-small-vertical:    5px !default;
-$padding-small-horizontal:  10px !default;
-
-$padding-xs-vertical:       1px !default;
-$padding-xs-horizontal:     5px !default;
-
-$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome
-$line-height-small:         1.5 !default;
-
-$border-radius-base:        4px !default;
-$border-radius-large:       6px !default;
-$border-radius-small:       3px !default;
-
-//** Global color for active items (e.g., navs or dropdowns).
-$component-active-color:    #fff !default;
-//** Global background color for active items (e.g., navs or dropdowns).
-$component-active-bg:       $brand-primary !default;
-
-//** Width of the `border` for generating carets that indicator dropdowns.
-$caret-width-base:          4px !default;
-//** Carets increase slightly in size for larger components.
-$caret-width-large:         5px !default;
-
-
-//== Tables
-//
-//## Customizes the `.table` component with basic values, each used across all table variations.
-
-//** Padding for `<th>`s and `<td>`s.
-$table-cell-padding:            8px !default;
-//** Padding for cells in `.table-condensed`.
-$table-condensed-cell-padding:  5px !default;
-
-//** Default background color used for all tables.
-$table-bg:                      transparent !default;
-//** Background color used for `.table-striped`.
-$table-bg-accent:               #f9f9f9 !default;
-//** Background color used for `.table-hover`.
-$table-bg-hover:                #f5f5f5 !default;
-$table-bg-active:               $table-bg-hover !default;
-
-//** Border color for table and cell borders.
-$table-border-color:            #ddd !default;
-
-
-//== Buttons
-//
-//## For each of Bootstrap's buttons, define text, background and border color.
-
-$btn-font-weight:                normal !default;
-
-$btn-default-color:              #333 !default;
-$btn-default-bg:                 #fff !default;
-$btn-default-border:             #ccc !default;
-
-$btn-primary-color:              #fff !default;
-$btn-primary-bg:                 $brand-primary !default;
-$btn-primary-border:             darken($btn-primary-bg, 5%) !default;
-
-$btn-success-color:              #fff !default;
-$btn-success-bg:                 $brand-success !default;
-$btn-success-border:             darken($btn-success-bg, 5%) !default;
-
-$btn-info-color:                 #fff !default;
-$btn-info-bg:                    $brand-info !default;
-$btn-info-border:                darken($btn-info-bg, 5%) !default;
-
-$btn-warning-color:              #fff !default;
-$btn-warning-bg:                 $brand-warning !default;
-$btn-warning-border:             darken($btn-warning-bg, 5%) !default;
-
-$btn-danger-color:               #fff !default;
-$btn-danger-bg:                  $brand-danger !default;
-$btn-danger-border:              darken($btn-danger-bg, 5%) !default;
-
-$btn-link-disabled-color:        $gray-light !default;
-
-// Allows for customizing button radius independently from global border radius
-$btn-border-radius-base:         $border-radius-base !default;
-$btn-border-radius-large:        $border-radius-large !default;
-$btn-border-radius-small:        $border-radius-small !default;
-
-
-//== Forms
-//
-//##
-
-//** `<input>` background color
-$input-bg:                       #fff !default;
-//** `<input disabled>` background color
-$input-bg-disabled:              $gray-lighter !default;
-
-//** Text color for `<input>`s
-$input-color:                    $gray !default;
-//** `<input>` border color
-$input-border:                   #ccc !default;
-
-// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
-//** Default `.form-control` border radius
-// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
-$input-border-radius:            $border-radius-base !default;
-//** Large `.form-control` border radius
-$input-border-radius-large:      $border-radius-large !default;
-//** Small `.form-control` border radius
-$input-border-radius-small:      $border-radius-small !default;
-
-//** Border color for inputs on focus
-$input-border-focus:             #66afe9 !default;
-
-//** Placeholder text color
-$input-color-placeholder:        #999 !default;
-
-//** Default `.form-control` height
-$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
-//** Large `.form-control` height
-$input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
-//** Small `.form-control` height
-$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
-
-//** `.form-group` margin
-$form-group-margin-bottom:       15px !default;
-
-$legend-color:                   $gray-dark !default;
-$legend-border-color:            #e5e5e5 !default;
-
-//** Background color for textual input addons
-$input-group-addon-bg:           $gray-lighter !default;
-//** Border color for textual input addons
-$input-group-addon-border-color: $input-border !default;
-
-//** Disabled cursor for form controls and buttons.
-$cursor-disabled:                not-allowed !default;
-
-
-//== Dropdowns
-//
-//## Dropdown menu container and contents.
-
-//** Background for the dropdown menu.
-$dropdown-bg:                    #fff !default;
-//** Dropdown menu `border-color`.
-$dropdown-border:                rgba(0,0,0,.15) !default;
-//** Dropdown menu `border-color` **for IE8**.
-$dropdown-fallback-border:       #ccc !default;
-//** Divider color for between dropdown items.
-$dropdown-divider-bg:            #e5e5e5 !default;
-
-//** Dropdown link text color.
-$dropdown-link-color:            $gray-dark !default;
-//** Hover color for dropdown links.
-$dropdown-link-hover-color:      darken($gray-dark, 5%) !default;
-//** Hover background for dropdown links.
-$dropdown-link-hover-bg:         #f5f5f5 !default;
-
-//** Active dropdown menu item text color.
-$dropdown-link-active-color:     $component-active-color !default;
-//** Active dropdown menu item background color.
-$dropdown-link-active-bg:        $component-active-bg !default;
-
-//** Disabled dropdown menu item background color.
-$dropdown-link-disabled-color:   $gray-light !default;
-
-//** Text color for headers within dropdown menus.
-$dropdown-header-color:          $gray-light !default;
-
-//** Deprecated `$dropdown-caret-color` as of v3.1.0
-$dropdown-caret-color:           #000 !default;
-
-
-//-- Z-index master list
-//
-// Warning: Avoid customizing these values. They're used for a bird's eye view
-// of components dependent on the z-axis and are designed to all work together.
-//
-// Note: These variables are not generated into the Customizer.
-
-$zindex-navbar:            1000 !default;
-$zindex-dropdown:          1000 !default;
-$zindex-popover:           1060 !default;
-$zindex-tooltip:           1070 !default;
-$zindex-navbar-fixed:      1030 !default;
-$zindex-modal-background:  1040 !default;
-$zindex-modal:             1050 !default;
-
-
-//== Media queries breakpoints
-//
-//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
-
-// Extra small screen / phone
-//** Deprecated `$screen-xs` as of v3.0.1
-$screen-xs:                  480px !default;
-//** Deprecated `$screen-xs-min` as of v3.2.0
-$screen-xs-min:              $screen-xs !default;
-//** Deprecated `$screen-phone` as of v3.0.1
-$screen-phone:               $screen-xs-min !default;
-
-// Small screen / tablet
-//** Deprecated `$screen-sm` as of v3.0.1
-$screen-sm:                  768px !default;
-$screen-sm-min:              $screen-sm !default;
-//** Deprecated `$screen-tablet` as of v3.0.1
-$screen-tablet:              $screen-sm-min !default;
-
-// Medium screen / desktop
-//** Deprecated `$screen-md` as of v3.0.1
-$screen-md:                  992px !default;
-$screen-md-min:              $screen-md !default;
-//** Deprecated `$screen-desktop` as of v3.0.1
-$screen-desktop:             $screen-md-min !default;
-
-// Large screen / wide desktop
-//** Deprecated `$screen-lg` as of v3.0.1
-$screen-lg:                  1200px !default;
-$screen-lg-min:              $screen-lg !default;
-//** Deprecated `$screen-lg-desktop` as of v3.0.1
-$screen-lg-desktop:          $screen-lg-min !default;
-
-// So media queries don't overlap when required, provide a maximum
-$screen-xs-max:              ($screen-sm-min - 1) !default;
-$screen-sm-max:              ($screen-md-min - 1) !default;
-$screen-md-max:              ($screen-lg-min - 1) !default;
-
-
-//== Grid system
-//
-//## Define your custom responsive grid.
-
-//** Number of columns in the grid.
-$grid-columns:              12 !default;
-//** Padding between columns. Gets divided in half for the left and right.
-$grid-gutter-width:         30px !default;
-// Navbar collapse
-//** Point at which the navbar becomes uncollapsed.
-$grid-float-breakpoint:     $screen-sm-min !default;
-//** Point at which the navbar begins collapsing.
-$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
-
-
-//== Container sizes
-//
-//## Define the maximum width of `.container` for different screen sizes.
-
-// Small screen / tablet
-$container-tablet:             (720px + $grid-gutter-width) !default;
-//** For `$screen-sm-min` and up.
-$container-sm:                 $container-tablet !default;
-
-// Medium screen / desktop
-$container-desktop:            (940px + $grid-gutter-width) !default;
-//** For `$screen-md-min` and up.
-$container-md:                 $container-desktop !default;
-
-// Large screen / wide desktop
-$container-large-desktop:      (1140px + $grid-gutter-width) !default;
-//** For `$screen-lg-min` and up.
-$container-lg:                 $container-large-desktop !default;
-
-
-//== Navbar
-//
-//##
-
-// Basics of a navbar
-$navbar-height:                    50px !default;
-$navbar-margin-bottom:             $line-height-computed !default;
-$navbar-border-radius:             $border-radius-base !default;
-$navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;
-$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;
-$navbar-collapse-max-height:       340px !default;
-
-$navbar-default-color:             #777 !default;
-$navbar-default-bg:                #f8f8f8 !default;
-$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;
-
-// Navbar links
-$navbar-default-link-color:                #777 !default;
-$navbar-default-link-hover-color:          #333 !default;
-$navbar-default-link-hover-bg:             transparent !default;
-$navbar-default-link-active-color:         #555 !default;
-$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;
-$navbar-default-link-disabled-color:       #ccc !default;
-$navbar-default-link-disabled-bg:          transparent !default;
-
-// Navbar brand label
-$navbar-default-brand-color:               $navbar-default-link-color !default;
-$navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%) !default;
-$navbar-default-brand-hover-bg:            transparent !default;
-
-// Navbar toggle
-$navbar-default-toggle-hover-bg:           #ddd !default;
-$navbar-default-toggle-icon-bar-bg:        #888 !default;
-$navbar-default-toggle-border-color:       #ddd !default;
-
-
-//=== Inverted navbar
-// Reset inverted navbar basics
-$navbar-inverse-color:                      lighten($gray-light, 15%) !default;
-$navbar-inverse-bg:                         #222 !default;
-$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;
-
-// Inverted navbar links
-$navbar-inverse-link-color:                 lighten($gray-light, 15%) !default;
-$navbar-inverse-link-hover-color:           #fff !default;
-$navbar-inverse-link-hover-bg:              transparent !default;
-$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;
-$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;
-$navbar-inverse-link-disabled-color:        #444 !default;
-$navbar-inverse-link-disabled-bg:           transparent !default;
-
-// Inverted navbar brand label
-$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;
-$navbar-inverse-brand-hover-color:          #fff !default;
-$navbar-inverse-brand-hover-bg:             transparent !default;
-
-// Inverted navbar toggle
-$navbar-inverse-toggle-hover-bg:            #333 !default;
-$navbar-inverse-toggle-icon-bar-bg:         #fff !default;
-$navbar-inverse-toggle-border-color:        #333 !default;
-
-
-//== Navs
-//
-//##
-
-//=== Shared nav styles
-$nav-link-padding:                          10px 15px !default;
-$nav-link-hover-bg:                         $gray-lighter !default;
-
-$nav-disabled-link-color:                   $gray-light !default;
-$nav-disabled-link-hover-color:             $gray-light !default;
-
-//== Tabs
-$nav-tabs-border-color:                     #ddd !default;
-
-$nav-tabs-link-hover-border-color:          $gray-lighter !default;
-
-$nav-tabs-active-link-hover-bg:             $body-bg !default;
-$nav-tabs-active-link-hover-color:          $gray !default;
-$nav-tabs-active-link-hover-border-color:   #ddd !default;
-
-$nav-tabs-justified-link-border-color:            #ddd !default;
-$nav-tabs-justified-active-link-border-color:     $body-bg !default;
-
-//== Pills
-$nav-pills-border-radius:                   $border-radius-base !default;
-$nav-pills-active-link-hover-bg:            $component-active-bg !default;
-$nav-pills-active-link-hover-color:         $component-active-color !default;
-
-
-//== Pagination
-//
-//##
-
-$pagination-color:                     $link-color !default;
-$pagination-bg:                        #fff !default;
-$pagination-border:                    #ddd !default;
-
-$pagination-hover-color:               $link-hover-color !default;
-$pagination-hover-bg:                  $gray-lighter !default;
-$pagination-hover-border:              #ddd !default;
-
-$pagination-active-color:              #fff !default;
-$pagination-active-bg:                 $brand-primary !default;
-$pagination-active-border:             $brand-primary !default;
-
-$pagination-disabled-color:            $gray-light !default;
-$pagination-disabled-bg:               #fff !default;
-$pagination-disabled-border:           #ddd !default;
-
-
-//== Pager
-//
-//##
-
-$pager-bg:                             $pagination-bg !default;
-$pager-border:                         $pagination-border !default;
-$pager-border-radius:                  15px !default;
-
-$pager-hover-bg:                       $pagination-hover-bg !default;
-
-$pager-active-bg:                      $pagination-active-bg !default;
-$pager-active-color:                   $pagination-active-color !default;
-
-$pager-disabled-color:                 $pagination-disabled-color !default;
-
-
-//== Jumbotron
-//
-//##
-
-$jumbotron-padding:              30px !default;
-$jumbotron-color:                inherit !default;
-$jumbotron-bg:                   $gray-lighter !default;
-$jumbotron-heading-color:        inherit !default;
-$jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;
-$jumbotron-heading-font-size:    ceil(($font-size-base * 4.5)) !default;
-
-
-//== Form states and alerts
-//
-//## Define colors for form feedback states and, by default, alerts.
-
-$state-success-text:             #3c763d !default;
-$state-success-bg:               #dff0d8 !default;
-$state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%) !default;
-
-$state-info-text:                #31708f !default;
-$state-info-bg:                  #d9edf7 !default;
-$state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%) !default;
-
-$state-warning-text:             #8a6d3b !default;
-$state-warning-bg:               #fcf8e3 !default;
-$state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%) !default;
-
-$state-danger-text:              #a94442 !default;
-$state-danger-bg:                #f2dede !default;
-$state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%) !default;
-
-
-//== Tooltips
-//
-//##
-
-//** Tooltip max width
-$tooltip-max-width:           200px !default;
-//** Tooltip text color
-$tooltip-color:               #fff !default;
-//** Tooltip background color
-$tooltip-bg:                  #000 !default;
-$tooltip-opacity:             .9 !default;
-
-//** Tooltip arrow width
-$tooltip-arrow-width:         5px !default;
-//** Tooltip arrow color
-$tooltip-arrow-color:         $tooltip-bg !default;
-
-
-//== Popovers
-//
-//##
-
-//** Popover body background color
-$popover-bg:                          #fff !default;
-//** Popover maximum width
-$popover-max-width:                   276px !default;
-//** Popover border color
-$popover-border-color:                rgba(0,0,0,.2) !default;
-//** Popover fallback border color
-$popover-fallback-border-color:       #ccc !default;
-
-//** Popover title background color
-$popover-title-bg:                    darken($popover-bg, 3%) !default;
-
-//** Popover arrow width
-$popover-arrow-width:                 10px !default;
-//** Popover arrow color
-$popover-arrow-color:                 $popover-bg !default;
-
-//** Popover outer arrow width
-$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;
-//** Popover outer arrow color
-$popover-arrow-outer-color:           fade_in($popover-border-color, 0.05) !default;
-//** Popover outer arrow fallback color
-$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;
-
-
-//== Labels
-//
-//##
-
-//** Default label background color
-$label-default-bg:            $gray-light !default;
-//** Primary label background color
-$label-primary-bg:            $brand-primary !default;
-//** Success label background color
-$label-success-bg:            $brand-success !default;
-//** Info label background color
-$label-info-bg:               $brand-info !default;
-//** Warning label background color
-$label-warning-bg:            $brand-warning !default;
-//** Danger label background color
-$label-danger-bg:             $brand-danger !default;
-
-//** Default label text color
-$label-color:                 #fff !default;
-//** Default text color of a linked label
-$label-link-hover-color:      #fff !default;
-
-
-//== Modals
-//
-//##
-
-//** Padding applied to the modal body
-$modal-inner-padding:         15px !default;
-
-//** Padding applied to the modal title
-$modal-title-padding:         15px !default;
-//** Modal title line-height
-$modal-title-line-height:     $line-height-base !default;
-
-//** Background color of modal content area
-$modal-content-bg:                             #fff !default;
-//** Modal content border color
-$modal-content-border-color:                   rgba(0,0,0,.2) !default;
-//** Modal content border color **for IE8**
-$modal-content-fallback-border-color:          #999 !default;
-
-//** Modal backdrop background color
-$modal-backdrop-bg:           #000 !default;
-//** Modal backdrop opacity
-$modal-backdrop-opacity:      .5 !default;
-//** Modal header border color
-$modal-header-border-color:   #e5e5e5 !default;
-//** Modal footer border color
-$modal-footer-border-color:   $modal-header-border-color !default;
-
-$modal-lg:                    900px !default;
-$modal-md:                    600px !default;
-$modal-sm:                    300px !default;
-
-
-//== Alerts
-//
-//## Define alert colors, border radius, and padding.
-
-$alert-padding:               15px !default;
-$alert-border-radius:         $border-radius-base !default;
-$alert-link-font-weight:      bold !default;
-
-$alert-success-bg:            $state-success-bg !default;
-$alert-success-text:          $state-success-text !default;
-$alert-success-border:        $state-success-border !default;
-
-$alert-info-bg:               $state-info-bg !default;
-$alert-info-text:             $state-info-text !default;
-$alert-info-border:           $state-info-border !default;
-
-$alert-warning-bg:            $state-warning-bg !default;
-$alert-warning-text:          $state-warning-text !default;
-$alert-warning-border:        $state-warning-border !default;
-
-$alert-danger-bg:             $state-danger-bg !default;
-$alert-danger-text:           $state-danger-text !default;
-$alert-danger-border:         $state-danger-border !default;
-
-
-//== Progress bars
-//
-//##
-
-//** Background color of the whole progress component
-$progress-bg:                 #f5f5f5 !default;
-//** Progress bar text color
-$progress-bar-color:          #fff !default;
-//** Variable for setting rounded corners on progress bar.
-$progress-border-radius:      $border-radius-base !default;
-
-//** Default progress bar color
-$progress-bar-bg:             $brand-primary !default;
-//** Success progress bar color
-$progress-bar-success-bg:     $brand-success !default;
-//** Warning progress bar color
-$progress-bar-warning-bg:     $brand-warning !default;
-//** Danger progress bar color
-$progress-bar-danger-bg:      $brand-danger !default;
-//** Info progress bar color
-$progress-bar-info-bg:        $brand-info !default;
-
-
-//== List group
-//
-//##
-
-//** Background color on `.list-group-item`
-$list-group-bg:                 #fff !default;
-//** `.list-group-item` border color
-$list-group-border:             #ddd !default;
-//** List group border radius
-$list-group-border-radius:      $border-radius-base !default;
-
-//** Background color of single list items on hover
-$list-group-hover-bg:           #f5f5f5 !default;
-//** Text color of active list items
-$list-group-active-color:       $component-active-color !default;
-//** Background color of active list items
-$list-group-active-bg:          $component-active-bg !default;
-//** Border color of active list elements
-$list-group-active-border:      $list-group-active-bg !default;
-//** Text color for content within active list items
-$list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;
-
-//** Text color of disabled list items
-$list-group-disabled-color:      $gray-light !default;
-//** Background color of disabled list items
-$list-group-disabled-bg:         $gray-lighter !default;
-//** Text color for content within disabled list items
-$list-group-disabled-text-color: $list-group-disabled-color !default;
-
-$list-group-link-color:         #555 !default;
-$list-group-link-hover-color:   $list-group-link-color !default;
-$list-group-link-heading-color: #333 !default;
-
-
-//== Panels
-//
-//##
-
-$panel-bg:                    #fff !default;
-$panel-body-padding:          15px !default;
-$panel-heading-padding:       10px 15px !default;
-$panel-footer-padding:        $panel-heading-padding !default;
-$panel-border-radius:         $border-radius-base !default;
-
-//** Border color for elements within panels
-$panel-inner-border:          #ddd !default;
-$panel-footer-bg:             #f5f5f5 !default;
-
-$panel-default-text:          $gray-dark !default;
-$panel-default-border:        #ddd !default;
-$panel-default-heading-bg:    #f5f5f5 !default;
-
-$panel-primary-text:          #fff !default;
-$panel-primary-border:        $brand-primary !default;
-$panel-primary-heading-bg:    $brand-primary !default;
-
-$panel-success-text:          $state-success-text !default;
-$panel-success-border:        $state-success-border !default;
-$panel-success-heading-bg:    $state-success-bg !default;
-
-$panel-info-text:             $state-info-text !default;
-$panel-info-border:           $state-info-border !default;
-$panel-info-heading-bg:       $state-info-bg !default;
-
-$panel-warning-text:          $state-warning-text !default;
-$panel-warning-border:        $state-warning-border !default;
-$panel-warning-heading-bg:    $state-warning-bg !default;
-
-$panel-danger-text:           $state-danger-text !default;
-$panel-danger-border:         $state-danger-border !default;
-$panel-danger-heading-bg:     $state-danger-bg !default;
-
-
-//== Thumbnails
-//
-//##
-
-//** Padding around the thumbnail image
-$thumbnail-padding:           4px !default;
-//** Thumbnail background color
-$thumbnail-bg:                $body-bg !default;
-//** Thumbnail border color
-$thumbnail-border:            #ddd !default;
-//** Thumbnail border radius
-$thumbnail-border-radius:     $border-radius-base !default;
-
-//** Custom text color for thumbnail captions
-$thumbnail-caption-color:     $text-color !default;
-//** Padding around the thumbnail caption
-$thumbnail-caption-padding:   9px !default;
-
-
-//== Wells
-//
-//##
-
-$well-bg:                     #f5f5f5 !default;
-$well-border:                 darken($well-bg, 7%) !default;
-
-
-//== Badges
-//
-//##
-
-$badge-color:                 #fff !default;
-//** Linked badge text color on hover
-$badge-link-hover-color:      #fff !default;
-$badge-bg:                    $gray-light !default;
-
-//** Badge text color in active nav link
-$badge-active-color:          $link-color !default;
-//** Badge background color in active nav link
-$badge-active-bg:             #fff !default;
-
-$badge-font-weight:           bold !default;
-$badge-line-height:           1 !default;
-$badge-border-radius:         10px !default;
-
-
-//== Breadcrumbs
-//
-//##
-
-$breadcrumb-padding-vertical:   8px !default;
-$breadcrumb-padding-horizontal: 15px !default;
-//** Breadcrumb background color
-$breadcrumb-bg:                 #f5f5f5 !default;
-//** Breadcrumb text color
-$breadcrumb-color:              #ccc !default;
-//** Text color of current page in the breadcrumb
-$breadcrumb-active-color:       $gray-light !default;
-//** Textual separator for between breadcrumb elements
-$breadcrumb-separator:          "/" !default;
-
-
-//== Carousel
-//
-//##
-
-$carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;
-
-$carousel-control-color:                      #fff !default;
-$carousel-control-width:                      15% !default;
-$carousel-control-opacity:                    .5 !default;
-$carousel-control-font-size:                  20px !default;
-
-$carousel-indicator-active-bg:                #fff !default;
-$carousel-indicator-border-color:             #fff !default;
-
-$carousel-caption-color:                      #fff !default;
-
-
-//== Close
-//
-//##
-
-$close-font-weight:           bold !default;
-$close-color:                 #000 !default;
-$close-text-shadow:           0 1px 0 #fff !default;
-
-
-//== Code
-//
-//##
-
-$code-color:                  #c7254e !default;
-$code-bg:                     #f9f2f4 !default;
-
-$kbd-color:                   #fff !default;
-$kbd-bg:                      #333 !default;
-
-$pre-bg:                      #f5f5f5 !default;
-$pre-color:                   $gray-dark !default;
-$pre-border-color:            #ccc !default;
-$pre-scrollable-max-height:   340px !default;
-
-
-//== Type
-//
-//##
-
-//** Horizontal offset for forms and lists.
-$component-offset-horizontal: 180px !default;
-//** Text muted color
-$text-muted:                  $gray-light !default;
-//** Abbreviations and acronyms border color
-$abbr-border-color:           $gray-light !default;
-//** Headings small color
-$headings-small-color:        $gray-light !default;
-//** Blockquote small color
-$blockquote-small-color:      $gray-light !default;
-//** Blockquote font size
-$blockquote-font-size:        ($font-size-base * 1.25) !default;
-//** Blockquote border color
-$blockquote-border-color:     $gray-lighter !default;
-//** Page header border color
-$page-header-border-color:    $gray-lighter !default;
-//** Width of horizontal description list titles
-$dl-horizontal-offset:        $component-offset-horizontal !default;
-//** Point at which .dl-horizontal becomes horizontal
-$dl-horizontal-breakpoint:    $grid-float-breakpoint !default;
-//** Horizontal line color.
-$hr-border:                   $gray-lighter !default;
diff --git a/views/style/sass/bootstrap/bootstrap/_wells.scss b/views/style/sass/bootstrap/bootstrap/_wells.scss
deleted file mode 100644
index 088599d..0000000
--- a/views/style/sass/bootstrap/bootstrap/_wells.scss
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-//
-// Wells
-// --------------------------------------------------
-
-
-// Base class
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: $well-bg;
-  border: 1px solid $well-border;
-  border-radius: $border-radius-base;
-  @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
-  blockquote {
-    border-color: #ddd;
-    border-color: rgba(0,0,0,.15);
-  }
-}
-
-// Sizes
-.well-lg {
-  padding: 24px;
-  border-radius: $border-radius-large;
-}
-.well-sm {
-  padding: 9px;
-  border-radius: $border-radius-small;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_alerts.scss b/views/style/sass/bootstrap/bootstrap/mixins/_alerts.scss
deleted file mode 100644
index df664d3..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_alerts.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Alerts
-
-@mixin alert-variant($background, $border, $text-color) {
-  background-color: $background;
-  border-color: $border;
-  color: $text-color;
-
-  hr {
-    border-top-color: darken($border, 5%);
-  }
-  .alert-link {
-    color: darken($text-color, 10%);
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_background-variant.scss b/views/style/sass/bootstrap/bootstrap/mixins/_background-variant.scss
deleted file mode 100644
index 57bbeaa..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_background-variant.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Contextual backgrounds
-
-// [converter] $parent hack
-@mixin bg-variant($parent, $color) {
-  #{$parent} {
-    background-color: $color;
-  }
-  a#{$parent}:hover,
-  a#{$parent}:focus {
-    background-color: darken($color, 10%);
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_border-radius.scss b/views/style/sass/bootstrap/bootstrap/mixins/_border-radius.scss
deleted file mode 100644
index a5b96ef..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_border-radius.scss
+++ /dev/null
@@ -1,36 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Single side border-radius
-
-@mixin border-top-radius($radius) {
-  border-top-right-radius: $radius;
-   border-top-left-radius: $radius;
-}
-@mixin border-right-radius($radius) {
-  border-bottom-right-radius: $radius;
-     border-top-right-radius: $radius;
-}
-@mixin border-bottom-radius($radius) {
-  border-bottom-right-radius: $radius;
-   border-bottom-left-radius: $radius;
-}
-@mixin border-left-radius($radius) {
-  border-bottom-left-radius: $radius;
-     border-top-left-radius: $radius;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_buttons.scss b/views/style/sass/bootstrap/bootstrap/mixins/_buttons.scss
deleted file mode 100644
index 920a972..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_buttons.scss
+++ /dev/null
@@ -1,83 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Button variants
-//
-// Easily pump out default styles, as well as :hover, :focus, :active,
-// and disabled options for all buttons
-
-@mixin button-variant($color, $background, $border) {
-  color: $color;
-  background-color: $background;
-  border-color: $border;
-
-  &:focus,
-  &.focus {
-    color: $color;
-    background-color: darken($background, 10%);
-        border-color: darken($border, 25%);
-  }
-  &:hover {
-    color: $color;
-    background-color: darken($background, 10%);
-        border-color: darken($border, 12%);
-  }
-  &:active,
-  &.active,
-  .open > &.dropdown-toggle {
-    color: $color;
-    background-color: darken($background, 10%);
-        border-color: darken($border, 12%);
-
-    &:hover,
-    &:focus,
-    &.focus {
-      color: $color;
-      background-color: darken($background, 17%);
-          border-color: darken($border, 25%);
-    }
-  }
-  &:active,
-  &.active,
-  .open > &.dropdown-toggle {
-    background-image: none;
-  }
-  &.disabled,
-  &[disabled],
-  fieldset[disabled] & {
-    &:hover,
-    &:focus,
-    &.focus {
-      background-color: $background;
-          border-color: $border;
-    }
-  }
-
-  .badge {
-    color: $background;
-    background-color: $color;
-  }
-}
-
-// Button sizes
-@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {
-  padding: $padding-vertical $padding-horizontal;
-  font-size: $font-size;
-  line-height: $line-height;
-  border-radius: $border-radius;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_center-block.scss b/views/style/sass/bootstrap/bootstrap/mixins/_center-block.scss
deleted file mode 100644
index 11accdd..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_center-block.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Center-align a block level element
-
-@mixin center-block() {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_clearfix.scss b/views/style/sass/bootstrap/bootstrap/mixins/_clearfix.scss
deleted file mode 100644
index 64ec11b..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_clearfix.scss
+++ /dev/null
@@ -1,40 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Clearfix
-//
-// For modern browsers
-// 1. The space content is one way to avoid an Opera bug when the
-//    contenteditable attribute is included anywhere else in the document.
-//    Otherwise it causes space to appear at the top and bottom of elements
-//    that are clearfixed.
-// 2. The use of `table` rather than `block` is only necessary if using
-//    `:before` to contain the top-margins of child elements.
-//
-// Source: http://nicolasgallagher.com/micro-clearfix-hack/
-
-@mixin clearfix() {
-  &:before,
-  &:after {
-    content: " "; // 1
-    display: table; // 2
-  }
-  &:after {
-    clear: both;
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_forms.scss b/views/style/sass/bootstrap/bootstrap/mixins/_forms.scss
deleted file mode 100644
index 36b8c1f..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_forms.scss
+++ /dev/null
@@ -1,106 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Form validation states
-//
-// Used in forms.less to generate the form validation CSS for warnings, errors,
-// and successes.
-
-@mixin form-control-validation($text-color: #555, $border-color: #ccc, $background-color: #f5f5f5) {
-  // Color the label and help text
-  .help-block,
-  .control-label,
-  .radio,
-  .checkbox,
-  .radio-inline,
-  .checkbox-inline,
-  &.radio label,
-  &.checkbox label,
-  &.radio-inline label,
-  &.checkbox-inline label  {
-    color: $text-color;
-  }
-  // Set the border and box shadow on specific inputs to match
-  .form-control {
-    border-color: $border-color;
-    @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
-    &:focus {
-      border-color: darken($border-color, 10%);
-      $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($border-color, 20%);
-      @include box-shadow($shadow);
-    }
-  }
-  // Set validation states also for addons
-  .input-group-addon {
-    color: $text-color;
-    border-color: $border-color;
-    background-color: $background-color;
-  }
-  // Optional feedback icon
-  .form-control-feedback {
-    color: $text-color;
-  }
-}
-
-
-// Form control focus state
-//
-// Generate a customized focus state and for any input with the specified color,
-// which defaults to the `$input-border-focus` variable.
-//
-// We highly encourage you to not customize the default value, but instead use
-// this to tweak colors on an as-needed basis. This aesthetic change is based on
-// WebKit's default styles, but applicable to a wider range of browsers. Its
-// usability and accessibility should be taken into account with any change.
-//
-// Example usage: change the default blue border and shadow to white for better
-// contrast against a dark gray background.
-@mixin form-control-focus($color: $input-border-focus) {
-  $color-rgba: rgba(red($color), green($color), blue($color), .6);
-  &:focus {
-    border-color: $color;
-    outline: 0;
-    @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px $color-rgba);
-  }
-}
-
-// Form control sizing
-//
-// Relative text size, padding, and border-radii changes for form controls. For
-// horizontal sizing, wrap controls in the predefined grid classes. `<select>`
-// element gets special love because it's special, and that's a fact!
-// [converter] $parent hack
-@mixin input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {
-  #{$parent} {
-    height: $input-height;
-    padding: $padding-vertical $padding-horizontal;
-    font-size: $font-size;
-    line-height: $line-height;
-    border-radius: $border-radius;
-  }
-
-  select#{$parent} {
-    height: $input-height;
-    line-height: $input-height;
-  }
-
-  textarea#{$parent},
-  select[multiple]#{$parent} {
-    height: auto;
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_gradients.scss b/views/style/sass/bootstrap/bootstrap/mixins/_gradients.scss
deleted file mode 100644
index fcbb055..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_gradients.scss
+++ /dev/null
@@ -1,76 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Gradients
-
-
-
-// Horizontal gradient, from left to right
-//
-// Creates two color stops, start and end, by specifying a color and position for each color stop.
-// Color stops are not available in IE9 and below.
-@mixin gradient-horizontal($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
-  background-image: -webkit-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+
-  background-image: -o-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Opera 12
-  background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down
-}
-
-// Vertical gradient, from top to bottom
-//
-// Creates two color stops, start and end, by specifying a color and position for each color stop.
-// Color stops are not available in IE9 and below.
-@mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
-  background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent);  // Safari 5.1-6, Chrome 10+
-  background-image: -o-linear-gradient(top, $start-color $start-percent, $end-color $end-percent);  // Opera 12
-  background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down
-}
-
-@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {
-  background-repeat: repeat-x;
-  background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1-6, Chrome 10+
-  background-image: -o-linear-gradient($deg, $start-color, $end-color); // Opera 12
-  background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
-}
-@mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
-  background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);
-  background-image: -o-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);
-  background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
-  background-repeat: no-repeat;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback
-}
-@mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
-  background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color);
-  background-image: -o-linear-gradient($start-color, $mid-color $color-stop, $end-color);
-  background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
-  background-repeat: no-repeat;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback
-}
-@mixin gradient-radial($inner-color: #555, $outer-color: #333) {
-  background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color);
-  background-image: radial-gradient(circle, $inner-color, $outer-color);
-  background-repeat: no-repeat;
-}
-@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) {
-  background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
-  background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_grid-framework.scss b/views/style/sass/bootstrap/bootstrap/mixins/_grid-framework.scss
deleted file mode 100644
index 240776e..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_grid-framework.scss
+++ /dev/null
@@ -1,99 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Framework grid generation
-//
-// Used only by Bootstrap to generate the correct number of grid classes given
-// any value of `$grid-columns`.
-
-// [converter] This is defined recursively in LESS, but Sass supports real loops
-@mixin make-grid-columns($i: 1, $list: ".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}") {
-  @for $i from (1 + 1) through $grid-columns {
-    $list: "#{$list}, .col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}";
-  }
-  #{$list} {
-    position: relative;
-    // Prevent columns from collapsing when empty
-    min-height: 1px;
-    // Inner gutter via padding
-    padding-left:  ceil(($grid-gutter-width / 2));
-    padding-right: floor(($grid-gutter-width / 2));
-  }
-}
-
-
-// [converter] This is defined recursively in LESS, but Sass supports real loops
-@mixin float-grid-columns($class, $i: 1, $list: ".col-#{$class}-#{$i}") {
-  @for $i from (1 + 1) through $grid-columns {
-    $list: "#{$list}, .col-#{$class}-#{$i}";
-  }
-  #{$list} {
-    float: left;
-  }
-}
-
-
-@mixin calc-grid-column($index, $class, $type) {
-  @if ($type == width) and ($index > 0) {
-    .col-#{$class}-#{$index} {
-      width: percentage(($index / $grid-columns));
-    }
-  }
-  @if ($type == push) and ($index > 0) {
-    .col-#{$class}-push-#{$index} {
-      left: percentage(($index / $grid-columns));
-    }
-  }
-  @if ($type == push) and ($index == 0) {
-    .col-#{$class}-push-0 {
-      left: auto;
-    }
-  }
-  @if ($type == pull) and ($index > 0) {
-    .col-#{$class}-pull-#{$index} {
-      right: percentage(($index / $grid-columns));
-    }
-  }
-  @if ($type == pull) and ($index == 0) {
-    .col-#{$class}-pull-0 {
-      right: auto;
-    }
-  }
-  @if ($type == offset) {
-    .col-#{$class}-offset-#{$index} {
-      margin-left: percentage(($index / $grid-columns));
-    }
-  }
-}
-
-// [converter] This is defined recursively in LESS, but Sass supports real loops
-@mixin loop-grid-columns($columns, $class, $type) {
-  @for $i from 0 through $columns {
-    @include calc-grid-column($i, $class, $type);
-  }
-}
-
-
-// Create grid for specific class
-@mixin make-grid($class) {
-  @include float-grid-columns($class);
-  @include loop-grid-columns($grid-columns, $class, width);
-  @include loop-grid-columns($grid-columns, $class, pull);
-  @include loop-grid-columns($grid-columns, $class, push);
-  @include loop-grid-columns($grid-columns, $class, offset);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_grid.scss b/views/style/sass/bootstrap/bootstrap/mixins/_grid.scss
deleted file mode 100644
index 6c304d2..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_grid.scss
+++ /dev/null
@@ -1,140 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Grid system
-//
-// Generate semantic grid columns with these mixins.
-
-// Centered container element
-@mixin container-fixed($gutter: $grid-gutter-width) {
-  margin-right: auto;
-  margin-left: auto;
-  padding-left:  floor(($gutter / 2));
-  padding-right: ceil(($gutter / 2));
-  @include clearfix;
-}
-
-// Creates a wrapper for a series of columns
-@mixin make-row($gutter: $grid-gutter-width) {
-  margin-left:  ceil(($gutter / -2));
-  margin-right: floor(($gutter / -2));
-  @include clearfix;
-}
-
-// Generate the extra small columns
-@mixin make-xs-column($columns, $gutter: $grid-gutter-width) {
-  position: relative;
-  float: left;
-  width: percentage(($columns / $grid-columns));
-  min-height: 1px;
-  padding-left:  ($gutter / 2);
-  padding-right: ($gutter / 2);
-}
-@mixin make-xs-column-offset($columns) {
-  margin-left: percentage(($columns / $grid-columns));
-}
-@mixin make-xs-column-push($columns) {
-  left: percentage(($columns / $grid-columns));
-}
-@mixin make-xs-column-pull($columns) {
-  right: percentage(($columns / $grid-columns));
-}
-
-// Generate the small columns
-@mixin make-sm-column($columns, $gutter: $grid-gutter-width) {
-  position: relative;
-  min-height: 1px;
-  padding-left:  ($gutter / 2);
-  padding-right: ($gutter / 2);
-
-  @media (min-width: $screen-sm-min) {
-    float: left;
-    width: percentage(($columns / $grid-columns));
-  }
-}
-@mixin make-sm-column-offset($columns) {
-  @media (min-width: $screen-sm-min) {
-    margin-left: percentage(($columns / $grid-columns));
-  }
-}
-@mixin make-sm-column-push($columns) {
-  @media (min-width: $screen-sm-min) {
-    left: percentage(($columns / $grid-columns));
-  }
-}
-@mixin make-sm-column-pull($columns) {
-  @media (min-width: $screen-sm-min) {
-    right: percentage(($columns / $grid-columns));
-  }
-}
-
-// Generate the medium columns
-@mixin make-md-column($columns, $gutter: $grid-gutter-width) {
-  position: relative;
-  min-height: 1px;
-  padding-left:  ($gutter / 2);
-  padding-right: ($gutter / 2);
-
-  @media (min-width: $screen-md-min) {
-    float: left;
-    width: percentage(($columns / $grid-columns));
-  }
-}
-@mixin make-md-column-offset($columns) {
-  @media (min-width: $screen-md-min) {
-    margin-left: percentage(($columns / $grid-columns));
-  }
-}
-@mixin make-md-column-push($columns) {
-  @media (min-width: $screen-md-min) {
-    left: percentage(($columns / $grid-columns));
-  }
-}
-@mixin make-md-column-pull($columns) {
-  @media (min-width: $screen-md-min) {
-    right: percentage(($columns / $grid-columns));
-  }
-}
-
-// Generate the large columns
-@mixin make-lg-column($columns, $gutter: $grid-gutter-width) {
-  position: relative;
-  min-height: 1px;
-  padding-left:  ($gutter / 2);
-  padding-right: ($gutter / 2);
-
-  @media (min-width: $screen-lg-min) {
-    float: left;
-    width: percentage(($columns / $grid-columns));
-  }
-}
-@mixin make-lg-column-offset($columns) {
-  @media (min-width: $screen-lg-min) {
-    margin-left: percentage(($columns / $grid-columns));
-  }
-}
-@mixin make-lg-column-push($columns) {
-  @media (min-width: $screen-lg-min) {
-    left: percentage(($columns / $grid-columns));
-  }
-}
-@mixin make-lg-column-pull($columns) {
-  @media (min-width: $screen-lg-min) {
-    right: percentage(($columns / $grid-columns));
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_hide-text.scss b/views/style/sass/bootstrap/bootstrap/mixins/_hide-text.scss
deleted file mode 100644
index 59edbcc..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_hide-text.scss
+++ /dev/null
@@ -1,39 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// CSS image replacement
-//
-// Heads up! v3 launched with only `.hide-text()`, but per our pattern for
-// mixins being reused as classes with the same name, this doesn't hold up. As
-// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.
-//
-// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
-
-// Deprecated as of v3.0.1 (has been removed in v4)
-@mixin hide-text() {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-
-// New mixin to use as of v3.0.1
-@mixin text-hide() {
-  @include hide-text;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_image.scss b/views/style/sass/bootstrap/bootstrap/mixins/_image.scss
deleted file mode 100644
index a2b1fb1..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_image.scss
+++ /dev/null
@@ -1,51 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Image Mixins
-// - Responsive image
-// - Retina image
-
-
-// Responsive image
-//
-// Keep images from scaling beyond the width of their parents.
-@mixin img-responsive($display: block) {
-  display: $display;
-  max-width: 100%; // Part 1: Set a maximum relative to the parent
-  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
-}
-
-
-// Retina image
-//
-// Short retina mixin for setting background-image and -size. Note that the
-// spelling of `min--moz-device-pixel-ratio` is intentional.
-@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {
-  background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path("#{$file-1x}"), "#{$file-1x}"));
-
-  @media
-  only screen and (-webkit-min-device-pixel-ratio: 2),
-  only screen and (   min--moz-device-pixel-ratio: 2),
-  only screen and (     -o-min-device-pixel-ratio: 2/1),
-  only screen and (        min-device-pixel-ratio: 2),
-  only screen and (                min-resolution: 192dpi),
-  only screen and (                min-resolution: 2dppx) {
-    background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path("#{$file-2x}"), "#{$file-2x}"));
-    background-size: $width-1x $height-1x;
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_labels.scss b/views/style/sass/bootstrap/bootstrap/mixins/_labels.scss
deleted file mode 100644
index 2b2c265..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_labels.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Labels
-
-@mixin label-variant($color) {
-  background-color: $color;
-
-  &[href] {
-    &:hover,
-    &:focus {
-      background-color: darken($color, 10%);
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_list-group.scss b/views/style/sass/bootstrap/bootstrap/mixins/_list-group.scss
deleted file mode 100644
index b794daa..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_list-group.scss
+++ /dev/null
@@ -1,50 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// List Groups
-
-@mixin list-group-item-variant($state, $background, $color) {
-  .list-group-item-#{$state} {
-    color: $color;
-    background-color: $background;
-
-    // [converter] extracted a&, button& to a.list-group-item-#{$state}, button.list-group-item-#{$state}
-  }
-
-  a.list-group-item-#{$state},
-  button.list-group-item-#{$state} {
-    color: $color;
-
-    .list-group-item-heading {
-      color: inherit;
-    }
-
-    &:hover,
-    &:focus {
-      color: $color;
-      background-color: darken($background, 5%);
-    }
-    &.active,
-    &.active:hover,
-    &.active:focus {
-      color: #fff;
-      background-color: $color;
-      border-color: $color;
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_nav-divider.scss b/views/style/sass/bootstrap/bootstrap/mixins/_nav-divider.scss
deleted file mode 100644
index cf5a947..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_nav-divider.scss
+++ /dev/null
@@ -1,28 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Horizontal dividers
-//
-// Dividers (basically an hr) within dropdowns and nav lists
-
-@mixin nav-divider($color: #e5e5e5) {
-  height: 1px;
-  margin: (($line-height-computed / 2) - 1) 0;
-  overflow: hidden;
-  background-color: $color;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_nav-vertical-align.scss b/views/style/sass/bootstrap/bootstrap/mixins/_nav-vertical-align.scss
deleted file mode 100644
index 3ecd120..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_nav-vertical-align.scss
+++ /dev/null
@@ -1,27 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Navbar vertical align
-//
-// Vertically center elements in the navbar.
-// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
-
-@mixin navbar-vertical-align($element-height) {
-  margin-top: (($navbar-height - $element-height) / 2);
-  margin-bottom: (($navbar-height - $element-height) / 2);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_opacity.scss b/views/style/sass/bootstrap/bootstrap/mixins/_opacity.scss
deleted file mode 100644
index c54e2f8..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_opacity.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Opacity
-
-@mixin opacity($opacity) {
-  opacity: $opacity;
-  // IE8 filter
-  $opacity-ie: ($opacity * 100);
-  filter: alpha(opacity=$opacity-ie);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_pagination.scss b/views/style/sass/bootstrap/bootstrap/mixins/_pagination.scss
deleted file mode 100644
index 9a12cf3..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_pagination.scss
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Pagination
-
-@mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {
-  > li {
-    > a,
-    > span {
-      padding: $padding-vertical $padding-horizontal;
-      font-size: $font-size;
-      line-height: $line-height;
-    }
-    &:first-child {
-      > a,
-      > span {
-        @include border-left-radius($border-radius);
-      }
-    }
-    &:last-child {
-      > a,
-      > span {
-        @include border-right-radius($border-radius);
-      }
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_panels.scss b/views/style/sass/bootstrap/bootstrap/mixins/_panels.scss
deleted file mode 100644
index bfbd248..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_panels.scss
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Panels
-
-@mixin panel-variant($border, $heading-text-color, $heading-bg-color, $heading-border) {
-  border-color: $border;
-
-  & > .panel-heading {
-    color: $heading-text-color;
-    background-color: $heading-bg-color;
-    border-color: $heading-border;
-
-    + .panel-collapse > .panel-body {
-      border-top-color: $border;
-    }
-    .badge {
-      color: $heading-bg-color;
-      background-color: $heading-text-color;
-    }
-  }
-  & > .panel-footer {
-    + .panel-collapse > .panel-body {
-      border-bottom-color: $border;
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_progress-bar.scss b/views/style/sass/bootstrap/bootstrap/mixins/_progress-bar.scss
deleted file mode 100644
index ffa7e19..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_progress-bar.scss
+++ /dev/null
@@ -1,28 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Progress bars
-
-@mixin progress-bar-variant($color) {
-  background-color: $color;
-
-  // Deprecated parent class requirement as of v3.2.0
-  .progress-striped & {
-    @include gradient-striped;
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_reset-filter.scss b/views/style/sass/bootstrap/bootstrap/mixins/_reset-filter.scss
deleted file mode 100644
index 679a10d..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_reset-filter.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Reset filters for IE
-//
-// When you need to remove a gradient background, do not forget to use this to reset
-// the IE filter for IE9 and below.
-
-@mixin reset-filter() {
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_reset-text.scss b/views/style/sass/bootstrap/bootstrap/mixins/_reset-text.scss
deleted file mode 100644
index 2176cbc..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_reset-text.scss
+++ /dev/null
@@ -1,36 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 reset-text() {
-  font-family: $font-family-base;
-  // We deliberately do NOT reset font-size.
-  font-style: normal;
-  font-weight: normal;
-  letter-spacing: normal;
-  line-break: auto;
-  line-height: $line-height-base;
-  text-align: left; // Fallback for where `start` is not supported
-  text-align: start;
-  text-decoration: none;
-  text-shadow: none;
-  text-transform: none;
-  white-space: normal;
-  word-break: normal;
-  word-spacing: normal;
-  word-wrap: normal;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_resize.scss b/views/style/sass/bootstrap/bootstrap/mixins/_resize.scss
deleted file mode 100644
index caf105e..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_resize.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Resize anything
-
-@mixin resizable($direction) {
-  resize: $direction; // Options: horizontal, vertical, both
-  overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_responsive-visibility.scss b/views/style/sass/bootstrap/bootstrap/mixins/_responsive-visibility.scss
deleted file mode 100644
index 45d6e1b..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_responsive-visibility.scss
+++ /dev/null
@@ -1,39 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Responsive utilities
-
-//
-// More easily include all the states for responsive-utilities.less.
-// [converter] $parent hack
-@mixin responsive-visibility($parent) {
-  #{$parent} {
-    display: block !important;
-  }
-  table#{$parent}  { display: table !important; }
-  tr#{$parent}     { display: table-row !important; }
-  th#{$parent},
-  td#{$parent}     { display: table-cell !important; }
-}
-
-// [converter] $parent hack
-@mixin responsive-invisibility($parent) {
-  #{$parent} {
-    display: none !important;
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_size.scss b/views/style/sass/bootstrap/bootstrap/mixins/_size.scss
deleted file mode 100644
index db160e5..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_size.scss
+++ /dev/null
@@ -1,28 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Sizing shortcuts
-
-@mixin size($width, $height) {
-  width: $width;
-  height: $height;
-}
-
-@mixin square($size) {
-  @include size($size, $size);
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_tab-focus.scss b/views/style/sass/bootstrap/bootstrap/mixins/_tab-focus.scss
deleted file mode 100644
index 592b5b7..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_tab-focus.scss
+++ /dev/null
@@ -1,27 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// WebKit-style focus
-
-@mixin tab-focus() {
-  // Default
-  outline: thin dotted;
-  // WebKit
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_table-row.scss b/views/style/sass/bootstrap/bootstrap/mixins/_table-row.scss
deleted file mode 100644
index aca3446..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_table-row.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Tables
-
-@mixin table-row-variant($state, $background) {
-  // Exact selectors below required to override `.table-striped` and prevent
-  // inheritance to nested tables.
-  .table > thead > tr,
-  .table > tbody > tr,
-  .table > tfoot > tr {
-    > td.#{$state},
-    > th.#{$state},
-    &.#{$state} > td,
-    &.#{$state} > th {
-      background-color: $background;
-    }
-  }
-
-  // Hover states for `.table-hover`
-  // Note: this is not available for cells or rows within `thead` or `tfoot`.
-  .table-hover > tbody > tr {
-    > td.#{$state}:hover,
-    > th.#{$state}:hover,
-    &.#{$state}:hover > td,
-    &:hover > .#{$state},
-    &.#{$state}:hover > th {
-      background-color: darken($background, 5%);
-    }
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_text-emphasis.scss b/views/style/sass/bootstrap/bootstrap/mixins/_text-emphasis.scss
deleted file mode 100644
index 09a50c3..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_text-emphasis.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Typography
-
-// [converter] $parent hack
-@mixin text-emphasis-variant($parent, $color) {
-  #{$parent} {
-    color: $color;
-  }
-  a#{$parent}:hover,
-  a#{$parent}:focus {
-    color: darken($color, 10%);
-  }
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_text-overflow.scss b/views/style/sass/bootstrap/bootstrap/mixins/_text-overflow.scss
deleted file mode 100644
index ddc0eda..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_text-overflow.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Text overflow
-// Requires inline-block or block for proper styling
-
-@mixin text-overflow() {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
diff --git a/views/style/sass/bootstrap/bootstrap/mixins/_vendor-prefixes.scss b/views/style/sass/bootstrap/bootstrap/mixins/_vendor-prefixes.scss
deleted file mode 100644
index 2cd1b1c..0000000
--- a/views/style/sass/bootstrap/bootstrap/mixins/_vendor-prefixes.scss
+++ /dev/null
@@ -1,240 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Vendor Prefixes
-//
-// All vendor mixins are deprecated as of v3.2.0 due to the introduction of
-// Autoprefixer in our Gruntfile. They have been removed in v4.
-
-// - Animations
-// - Backface visibility
-// - Box shadow
-// - Box sizing
-// - Content columns
-// - Hyphens
-// - Placeholder text
-// - Transformations
-// - Transitions
-// - User Select
-
-
-// Animations
-@mixin animation($animation) {
-  -webkit-animation: $animation;
-       -o-animation: $animation;
-          animation: $animation;
-}
-@mixin animation-name($name) {
-  -webkit-animation-name: $name;
-          animation-name: $name;
-}
-@mixin animation-duration($duration) {
-  -webkit-animation-duration: $duration;
-          animation-duration: $duration;
-}
-@mixin animation-timing-function($timing-function) {
-  -webkit-animation-timing-function: $timing-function;
-          animation-timing-function: $timing-function;
-}
-@mixin animation-delay($delay) {
-  -webkit-animation-delay: $delay;
-          animation-delay: $delay;
-}
-@mixin animation-iteration-count($iteration-count) {
-  -webkit-animation-iteration-count: $iteration-count;
-          animation-iteration-count: $iteration-count;
-}
-@mixin animation-direction($direction) {
-  -webkit-animation-direction: $direction;
-          animation-direction: $direction;
-}
-@mixin animation-fill-mode($fill-mode) {
-  -webkit-animation-fill-mode: $fill-mode;
-          animation-fill-mode: $fill-mode;
-}
-
-// Backface visibility
-// Prevent browsers from flickering when using CSS 3D transforms.
-// Default value is `visible`, but can be changed to `hidden`
-
-@mixin backface-visibility($visibility) {
-  -webkit-backface-visibility: $visibility;
-     -moz-backface-visibility: $visibility;
-          backface-visibility: $visibility;
-}
-
-// Drop shadows
-//
-// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's
-// supported browsers that have box shadow capabilities now support it.
-
-@mixin box-shadow($shadow...) {
-  -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1
-          box-shadow: $shadow;
-}
-
-// Box sizing
-@mixin box-sizing($boxmodel) {
-  -webkit-box-sizing: $boxmodel;
-     -moz-box-sizing: $boxmodel;
-          box-sizing: $boxmodel;
-}
-
-// CSS3 Content Columns
-@mixin content-columns($column-count, $column-gap: $grid-gutter-width) {
-  -webkit-column-count: $column-count;
-     -moz-column-count: $column-count;
-          column-count: $column-count;
-  -webkit-column-gap: $column-gap;
-     -moz-column-gap: $column-gap;
-          column-gap: $column-gap;
-}
-
-// Optional hyphenation
-@mixin hyphens($mode: auto) {
-  word-wrap: break-word;
-  -webkit-hyphens: $mode;
-     -moz-hyphens: $mode;
-      -ms-hyphens: $mode; // IE10+
-       -o-hyphens: $mode;
-          hyphens: $mode;
-}
-
-// Placeholder text
-@mixin placeholder($color: $input-color-placeholder) {
-  // Firefox
-  &::-moz-placeholder {
-    color: $color;
-    opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
-  }
-  &:-ms-input-placeholder { color: $color; } // Internet Explorer 10+
-  &::-webkit-input-placeholder  { color: $color; } // Safari and Chrome
-}
-
-// Transformations
-@mixin scale($ratio...) {
-  -webkit-transform: scale($ratio);
-      -ms-transform: scale($ratio); // IE9 only
-       -o-transform: scale($ratio);
-          transform: scale($ratio);
-}
-
-@mixin scaleX($ratio) {
-  -webkit-transform: scaleX($ratio);
-      -ms-transform: scaleX($ratio); // IE9 only
-       -o-transform: scaleX($ratio);
-          transform: scaleX($ratio);
-}
-@mixin scaleY($ratio) {
-  -webkit-transform: scaleY($ratio);
-      -ms-transform: scaleY($ratio); // IE9 only
-       -o-transform: scaleY($ratio);
-          transform: scaleY($ratio);
-}
-@mixin skew($x, $y) {
-  -webkit-transform: skewX($x) skewY($y);
-      -ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
-       -o-transform: skewX($x) skewY($y);
-          transform: skewX($x) skewY($y);
-}
-@mixin translate($x, $y) {
-  -webkit-transform: translate($x, $y);
-      -ms-transform: translate($x, $y); // IE9 only
-       -o-transform: translate($x, $y);
-          transform: translate($x, $y);
-}
-@mixin translate3d($x, $y, $z) {
-  -webkit-transform: translate3d($x, $y, $z);
-          transform: translate3d($x, $y, $z);
-}
-@mixin rotate($degrees) {
-  -webkit-transform: rotate($degrees);
-      -ms-transform: rotate($degrees); // IE9 only
-       -o-transform: rotate($degrees);
-          transform: rotate($degrees);
-}
-@mixin rotateX($degrees) {
-  -webkit-transform: rotateX($degrees);
-      -ms-transform: rotateX($degrees); // IE9 only
-       -o-transform: rotateX($degrees);
-          transform: rotateX($degrees);
-}
-@mixin rotateY($degrees) {
-  -webkit-transform: rotateY($degrees);
-      -ms-transform: rotateY($degrees); // IE9 only
-       -o-transform: rotateY($degrees);
-          transform: rotateY($degrees);
-}
-@mixin perspective($perspective) {
-  -webkit-perspective: $perspective;
-     -moz-perspective: $perspective;
-          perspective: $perspective;
-}
-@mixin perspective-origin($perspective) {
-  -webkit-perspective-origin: $perspective;
-     -moz-perspective-origin: $perspective;
-          perspective-origin: $perspective;
-}
-@mixin transform-origin($origin) {
-  -webkit-transform-origin: $origin;
-     -moz-transform-origin: $origin;
-      -ms-transform-origin: $origin; // IE9 only
-          transform-origin: $origin;
-}
-
-
-// Transitions
-
-@mixin transition($transition...) {
-  -webkit-transition: $transition;
-       -o-transition: $transition;
-          transition: $transition;
-}
-@mixin transition-property($transition-property...) {
-  -webkit-transition-property: $transition-property;
-          transition-property: $transition-property;
-}
-@mixin transition-delay($transition-delay) {
-  -webkit-transition-delay: $transition-delay;
-          transition-delay: $transition-delay;
-}
-@mixin transition-duration($transition-duration...) {
-  -webkit-transition-duration: $transition-duration;
-          transition-duration: $transition-duration;
-}
-@mixin transition-timing-function($timing-function) {
-  -webkit-transition-timing-function: $timing-function;
-          transition-timing-function: $timing-function;
-}
-@mixin transition-transform($transition...) {
-  -webkit-transition: -webkit-transform $transition;
-     -moz-transition: -moz-transform $transition;
-       -o-transition: -o-transform $transition;
-          transition: transform $transition;
-}
-
-
-// User select
-// For selecting text on the page
-
-@mixin user-select($select) {
-  -webkit-user-select: $select;
-     -moz-user-select: $select;
-      -ms-user-select: $select; // IE10+
-          user-select: $select;
-}
diff --git a/views/style/sass/lib/_variables.scss b/views/style/sass/lib/_variables.scss
deleted file mode 100644
index fe41673..0000000
--- a/views/style/sass/lib/_variables.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 '../bootstrap/bootstrap/_variables.scss';
-
-$icon-font-path: '/static/suit/bootstrap/fonts/';
-
-//== Colors
-//
-//## Gray and brand colors for use across Bootstrap.
-
-$gray-base:              #000 !default;
-$gray-darker:            lighten($gray-base, 13.5%) !default; // #222
-$gray-dark:              lighten($gray-base, 20%) !default;   // #333
-$gray:                   lighten($gray-base, 33.5%) !default; // #555
-$gray-light:             lighten($gray-base, 46.7%) !default; // #777
-$gray-lighter:           lighten($gray-base, 93.5%) !default; // #eee
-
-$brand-primary:         darken(#428bca, 6.5%) !default; // #337ab7
-$brand-success:         #5cb85c !default;
-$brand-info:            #5bc0de !default;
-$brand-warning:         #f0ad4e !default;
-$brand-danger:          #d9534f !default;
-
-$default-spacing: $line-height-computed;
-
-// Tables
-$thead-background: #6e7277;
\ No newline at end of file
diff --git a/views/style/sass/lib/breadcrumb.scss b/views/style/sass/lib/breadcrumb.scss
deleted file mode 100644
index 8a56d1e..0000000
--- a/views/style/sass/lib/breadcrumb.scss
+++ /dev/null
@@ -1,22 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-
-.breadcrumb li a {
-  font-weight:bold;
-}
\ No newline at end of file
diff --git a/views/style/sass/lib/footer.scss b/views/style/sass/lib/footer.scss
deleted file mode 100644
index 3ecb752..0000000
--- a/views/style/sass/lib/footer.scss
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/************************* FOOTER *************************/
-
-.footer{
-  z-index: 99;
-  position: fixed;
-}
-
-/* FIXME */
-@media(max-width:768px) {
-  .footer{
-    display: none;
-  }
-
-  #page-content-wrapper{
-    padding-bottom: 60px;
-  }
-}
-
-.footer .content .statusMsg {
-  float: right;
-  padding: 15px 20px 0 0;
-  display: block;
-}
-/************************* END FOOTER *************************/
\ No newline at end of file
diff --git a/views/style/sass/lib/form.scss b/views/style/sass/lib/form.scss
deleted file mode 100644
index 1f06c65..0000000
--- a/views/style/sass/lib/form.scss
+++ /dev/null
@@ -1,22 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-.form-control {
-    width: auto;
-    min-width: 100%;
-}
\ No newline at end of file
diff --git a/views/style/sass/lib/header.scss b/views/style/sass/lib/header.scss
deleted file mode 100644
index ddb9a72..0000000
--- a/views/style/sass/lib/header.scss
+++ /dev/null
@@ -1,49 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/* ************************* HEADER STYLE ************************* */
-
-.header{
-  background-color: #ffffff !important;
-  border-bottom: 3px solid #C5CCD4;
-  margin-bottom: 14px;
-  height: 85px;
-
-  .logo{
-    max-height: 80px;
-  }
-
-  a {
-    font-weight: bold;
-  }
-
-  #user-tools {
-    padding: 12px 20px 0px 0px;
-    float: right;
-    margin-top: -5px;
-
-    // hiding links on mobile
-    @media (max-width: $screen-sm-max) {
-      .user-links *:not(:last-child){
-        display: none;
-      }
-    }
-  }
-}
-
-/************************* END HEADER *************************/
diff --git a/views/style/sass/lib/login.scss b/views/style/sass/lib/login.scss
deleted file mode 100644
index a23761e..0000000
--- a/views/style/sass/lib/login.scss
+++ /dev/null
@@ -1,92 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-body.login img.logo{
-   width: 250px;
-   display: block;
-   margin: 20px auto;
-   padding-top: 20px;
-}
-.login {
-  background-image: url('bg.jpg');
-  background-size: cover;
-  background-position: center; 
-  background-repeat: no-repeat;
-}
-
-.login #content-main {
-  float: none;
-    height: 330px;
-    margin: 100px auto 0;
-    width: 265px;
-}
-.login{
-  #content-main {
-    background: rgba(255,255,255,0.82);
-  }
-
-  #content-main form input[type=text],
-  #content-main form input[type=password],
-  .requestDialog.ui-widget input{
-    background-color: rgb(250, 255, 189);
-  }
-  
-  /*#forgot_pwd{
-    font-size: 11px;
-    font-style: normal;
-    text-decoration: none;
-  }
-  
-  #create_acct{
-    font-size: 11px;
-    font-style: normal;
-    text-decoration: none;
-    padding-left: 45px;
-  }*/
-
-  .row + .row {
-    margin-top: 10px;
-  }
-
-  #content-main form {
-    margin: 5px 15px 0;
-  }
-
-  .btn-primary {
-    @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);
-    background: $btn-primary-bg;
-  }
-
-  .forgotLink {
-    width: 45%;
-    text-align: left;
-    float: left;
-  }
-
-  #request-account-form{
-    display:none;
-  }
-
-  #requestAccountLink {
-    margin-top: 10px;
-    cursor: pointer;
-    color: $brand-primary;
-    text-decoration: underline;
-  }
-}
-
diff --git a/views/style/sass/lib/logout.scss b/views/style/sass/lib/logout.scss
deleted file mode 100644
index b4c6176..0000000
--- a/views/style/sass/lib/logout.scss
+++ /dev/null
@@ -1,65 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-body.logout img.logo{
-   width: 250px;
-   display: block;
-   margin: 20px auto;
-   padding-top: 20px;
-}
-
-h1.logouth1tag{
-  text-align: center;
-}
-
-.logout #content-main {
-  float: none;
-
-    width: 300px;
-  overflow-x: hidden;
-
-}
-.logout{
-
-  background: rgba(255,255,255,0.82);
-  float: none;
-  height: 330px;
-  margin: 100px auto 0;
-  width: 316px;
-  overflow-x: hidden;
-  overflow-y: hidden;
-  padding: 10px 0px 0px 10px;
-
-  .requestDialog.ui-widget input{
-    background-color: rgb(250, 255, 189);
-  }
-  .row + .row {
-    margin-top: 10px;
-  }
-
-  .btn-primary {
-    @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);
-    background: $btn-primary-bg;
-  }
-  p.logoutptag {
-    margin: 20px 10px 20px;
-    font-size: 16px;
-    text-align: center;
-  }
-}
-
diff --git a/views/style/sass/lib/nav.scss b/views/style/sass/lib/nav.scss
deleted file mode 100644
index 2897386..0000000
--- a/views/style/sass/lib/nav.scss
+++ /dev/null
@@ -1,180 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/************************* NAV *************************/
-
-@import "../bootstrap/bootstrap/_variables.scss";
-@import "./_variables.scss";
-
-#sidebar-wrapper {
-  -webkit-box-shadow: 3px 0px 5px 0px rgba(50, 50, 50, 0.75);
-  -moz-box-shadow:    3px 0px 5px 0px rgba(50, 50, 50, 0.75);
-  box-shadow:         3px 0px 5px 0px rgba(50, 50, 50, 0.75);
-
-  .logo{
-    max-width: 100%;
-    margin: $default-spacing auto;
-  }
-
-  a {
-    font-weight: bold;
-  }
-
-  // ICONS
-  .icon-app {
-    background-image: url("opencloudApp.png");
-  }
-  .icon-home {
-    /*  Going with darker standard color nav -- so using over png's background-image: url("Home.png"); */
-    background-image: url("Home.png");
-  }
-  .icon-deployment{
-    background-image: url("Deployments.png");
-  }
-  .icon-site{
-    background-image: url("Sites.png");
-  }
-  .icon-slice{
-    background-image: url("Slices.png");
-  }
-  .icon-user{
-    background-image: url("Users.png");
-  }
-  .icon-reservation{
-    background-image: url("Reservations.png");
-  }
-  .icon-cog{
-    background-image: url("Services.png");
-  }
-
-  // ACTIVE ICONS
-  li.active a,
-  li.focus a {
-    .icon-home{
-      background-image: url("Home_over.png");
-    }
-    .icon-deployment{
-      background-image: url("Deployments_over.png");
-    }
-    .icon-site{
-      background-image: url("Sites_over.png");
-    }
-    .icon-slice{
-      background-image: url("Slices_over.png");
-    }
-    .icon-user{
-      background-image: url("Users_over.png");
-    }
-    .icon-reservation{
-      background-image: url("Reservations_over.png");
-    }
-    .icon-cog{
-      background-image: url("Services_over.png");
-    }
-  }
-
-  li{
-    a {
-      transition: all .5s ease-in-out;
-    }
-    ul.dashboard-list{
-      padding-left: $default-spacing;
-      li{
-        list-style: none;
-        position: relative;
-        margin-top: $default-spacing / 4;
-        margin-bottom: $default-spacing / 4;
-        margin-left: $default-spacing;
-
-        &:before {
-          display: inline-block;
-          font-size: 2em;
-          font-weight: 200;
-          position: absolute;
-          top: 15px;
-          left: -15px;
-          line-height: 0;
-          content: '-';
-          background-color: $nav-pills-active-link-hover-bg;
-        }
-        // Actual tabs (as links)
-        > a {
-          cursor: pointer;
-          display: block;
-          padding: 5px 0px;
-          margin-right: 0;
-          border-radius: $nav-pills-border-radius;
-          > img {
-            width:20px;
-          }
-          &:hover,&:focus  {
-            padding-left: 15px;
-            text-decoration: none;
-            background-color: $nav-link-hover-bg;
-          }
-        }
-
-        // Active state, and its :hover to override normal :hover
-        &.active > a {
-          padding-left: 15px;
-          color: $nav-pills-active-link-hover-color;
-          background-color: lighten($nav-pills-active-link-hover-bg, 5%);
-        }
-      }
-    }
-  }
-  [class^="icon-"]{
-    background-position: left center;
-    width:22px;
-    height:22px;
-    display: inline-block;
-    margin-right: 10px;
-    position: relative;
-    top: 5px;
-  }
-
-  .glyphicon-arrow-right{
-    display: none;
-  }
-}
-
-#wrapper.collapsed {
-
-  padding-left: 60px;
-
-  #sidebar-wrapper {
-    width: 60px;
-
-    a>span, .logo, .dashboard-list{
-      display: none;
-    }
-
-    a{
-      padding: 10px;
-    }
-
-    .glyphicon-arrow-left{
-      display: none;
-    }
-    .glyphicon-arrow-right{
-      display: block;
-    }
-  }    
-}
-
-/************************* END NAV *************************/
\ No newline at end of file
diff --git a/views/style/sass/lib/table.scss b/views/style/sass/lib/table.scss
deleted file mode 100644
index 1fbe539..0000000
--- a/views/style/sass/lib/table.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 {
-  th {
-    a {
-      color: #000;
-    }
-  }
-}
\ No newline at end of file
diff --git a/views/style/sass/lib/tabs.scss b/views/style/sass/lib/tabs.scss
deleted file mode 100644
index b14eded..0000000
--- a/views/style/sass/lib/tabs.scss
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-.nav-tabs-suit li.active a,
-.nav-tabs-suit li.active a:hover,
-.nav-tabs-suit li a:hover,
-.nav-tabs-suit > li.active > a:focus {
-  background-color: $brand-primary;
-  color: #fff;
-  outline: none;
-}
-
-.nav-tabs>li {
-  margin-bottom: 0px;
-}
-
-.nav-tabs-suit li a{
-  letter-spacing: 1px;
-}
-
-#suit_form_tabs {
-  border-bottom-width: 5px !important;
-  border-bottom-style: solid;
-  border-bottom-color: $brand-primary;
-}
-
-.ui-widget-header {
-  background: none !important;
-  border: none !important;
-}
\ No newline at end of file
diff --git a/views/style/sass/xos.scss b/views/style/sass/xos.scss
deleted file mode 100644
index 1445836..0000000
--- a/views/style/sass/xos.scss
+++ /dev/null
@@ -1,798 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 './lib/_variables';
-@import "./bootstrap/_bootstrap";
-@import "lib/header";
-@import "lib/nav";
-@import "lib/footer";
-@import "lib/table";
-@import "lib/tabs";
-@import "lib/login";
-@import 'lib/breadcrumb';
-@import 'lib/form';
-@import "lib/logout";
-/************************
-colors:
-    tab - active/focus color
-    background-color: #105E9E !important;
-
-ONLab darker blue select :: background-color: #004775;
-#0170BB
-    left-nav
-    background-color: #448CCA;
-    background-color // normal: #B4CADF
-91BFE4
-
-*************************/
-
-html, body, body.login {
-  height: 100%;
-  min-height: 100%;
-  margin: 0;
-}
-
-body{
-  max-width: 100%;
-  overflow-x: hidden;
-}
-
-#wrap {
-  height: 100%;
-  min-height: 100%;
-  padding-bottom: 60px;
-}
-
-/* ************************* SIDENAV TOGGLE ************************* */
-
-#wrapper {
-    padding-left: 0;
-    transition: all 0.5s ease;
-    min-height: 100%;
-    height: 100%;
-}
-
-#wrapper.toggled {
-    padding-left: 250px;
-}
-
-#sidebar-wrapper {
-  z-index: 99;
-  position: fixed;
-  left: 250px;
-  width: 0;
-  height: 100%;
-  margin-left: -250px;
-  overflow-y: auto;
-  transition: all 0.5s ease;
-  background: white;
-}
-
-#wrapper.toggled #sidebar-wrapper {
-  width: 250px;
-  padding: 10px;
-}
-
-#page-content-wrapper {
-  width: 100%;
-  position: absolute;
-  padding: 15px;
-  min-height: 100%;
-  height: 100%;
-  .container-fluid, 
-  .content-wrapper, 
-  .content-wrapper .col-lg-12, 
-  .suit-columns,
-  #content {
-    min-height: 100%;
-    height: 100%;
-  }
-
-  #content {
-    padding-left:  ($grid-gutter-width / 2);
-    padding-right: ($grid-gutter-width / 2);
-  }
-
-  #content-main {
-    /*padding: ($grid-gutter-width / 2);*/
-    padding-bottom: 60px;
-  }
-}
-
-
-.ui-tabs-panel {
-    min-height: 700px;
-}
-
-#wrapper.toggled #page-content-wrapper {
-    position: absolute;
-    margin-right: -250px;
-}
-
-@media(min-width:768px) {
-    #wrapper {
-        padding-left: 250px;
-    }
-
-    #wrapper.toggled {
-        padding-left: 0;
-    }
-
-    #sidebar-wrapper {
-      width: 250px;
-      padding: 10px;
-    }
-
-    #wrapper.toggled #sidebar-wrapper {
-        width: 0;
-    }
-
-    #page-content-wrapper {
-        padding: 20px;
-        position: relative;
-    }
-
-    #wrapper.toggled #page-content-wrapper {
-        position: relative;
-        margin-right: 0;
-    }
-}
-
-.navbar-toggle{
-  border: 1px solid $brand-primary;
-}
-
-.navbar-toggle .icon-bar{
-  background: $brand-primary;
-}
-/* ************************* END SIDENAV TOGGLE ************************* */
-
-[ui-view] {
-    margin-bottom: 100px;
-}
-
-/************************* FORM TWEAKS *************************/
-@media (min-width: $screen-md){
-    .form-column.col-lg-4 {
-        width: 66.66666667%;
-    }
-}
-/************************* END FORM TWEAKS *************************/
-
-/*   CSS for jquery Tabs */
-
-.alignCenter {
-    text-align: center !important;
-    align: center !important;
-}
-
-.ui-widget-overlay {
-    background: black !important;
-}
-.ui-corner-all {
-border-bottom-left-radius: 0px !important;
-border-bottom-right-radius: 0px !important;
-}
-
-#openCloudTopPage {
-   margin-top: -25px;
-   margin-right: -90;
-   float: right;
-}
-#minDashboard {
-  /*min-width:625px; */
-  display:inline;
-  float: right;
-  border: 2px darkGrey;
-}
-
-.save-box {
-  background-color: #ffffff;
-  margin: 2px;
-}
-.save-box .btn-info {
-  font-size: 14px;
-  padding: 10px 20px 10px 20px;
-}
-
-.required:after {
-  color: red !important;
-  font-size: 18px;
-}
-/*.btn-success {color:black}*/
-#suit-center {
-padding: 20px;
-width: 100%;
-/*min-width:650px;*/
-}
-.inner-two-columns .inner-center-column .tab-content {
-overflow-x: auto;
-margin-bottom: 15px;
-/*min-width: auto;*/
-width:100%;
-}
-/*.inner-two-columns .inner-center-column {
-  margin-right: 200px;
-  background-color: rgb(158, 163, 159);
-}*/
-label {
-display: block;
-font-weight: bold;
-margin-bottom: 5px;
-}
-
-/*For changing background color of suit center*/
-#suit-center {
-background-color: #ffffff;
-}
-
-/** Leave room for scroll bar now that contents can be appropriately scrolled **/
-.form-horizontal .inline-group .add-row {
-    margin: -1px -1px 15px 0px;
-}
-
-/** Setting overflow and 1kpx to deal with inlines/forms overlapping on 
-    browser resizes **/
-#content-main {
-    /*overflow-x:auto;*/
-    /*min-width: 1000px;*/
-}
-
-.tab-content tab-content-main {
-    overflow-x: auto !important;
-}
-
-#wrap{
-background:none;
-}
-
-.noclearfix {
-    display:block; clear:left; width:0px; height:0px;
-}
-
-body{
-background-color:#ffffff;
-}
-
-.suit-column{
-background-color:#ffffff;
-}
-
-
-
-.nav-tabs > .active > a, .nav-tabs > .active > a:hover, .nav-tabs > .active > a:focus {
-	/*background-color: #448CCA;*/
-	background-color: #105E9E;
-	color: #FFF;
-	border: none;
-}
-
-/*Added by Beena for adding the three components in dashboard*/
-.breadcrumb{
-	display:inline-block;
-	background-color: #fff;
-
-}
-
-.nodetextbox{
-	/*background-color: #ededed;*/
-	line-height: 25px;
-	width: 150px; 
-	text-align: center;
-	font-weight: bold;
-	margin-left:0px;
-	display:inline-block;
-	border:none;
-	font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
-	font-size: 8px;
-}
-
-.nodelabel{
-width: 20px;
-display: inline-block;
-border-radius: 0px;
-border:1px solid #000;
-/*line-height: 23px;*/
-text-align: center;
-font-weight: normal;
-}
-
-#user-tools {
-  font-weight: bold;
-}
-.header-content .header-column {
-	display: none;
-}
-.header .input-icon {
-    background-image: url("Search.png");
-    background-repeat: no-repeat;
-background-position:left center;
-opacity:1;
-    background-size: 100%;
-    vertical-align:middle;
-	margin-right: -30px;
-    /*margin-top: 5px;*/
-    position: relative;
-    height: 22px;
-    width: 22px;
-}
-
-.header .icon-search {
-	/*background-image: url("search.png") !important;
-    background-repeat: no-repeat !important;
-    background-size: 120% auto !important;
-    background-position: 0;*/
-}
-
-#dashboardHPC {
-    padding-bottom: 10px;
-}
-.summary-attr {
-    padding-right: 20px;
-}
-.summary-attr-util {
-    padding-right: 20px;
-    color: green;
-}
-.SiteDetail {
-color: darkBlue;
-    font-size: 1.5em;
-}
-#addInstances {
- color: green;
-text-decoration: underline;
-    padding-right: 20px;
-}
-#remInstances {
- color: red;
- text-decoration: underline;
-}
-#map-us {
-    padding-top: 10px;
-    width: 700px;
-    height: 400px;
-}
-
-.minidashbutton {
-	-moz-box-shadow:inset 0px 1px 0px 0px #ffffff;
-	-webkit-box-shadow:inset 0px 1px 0px 0px #ffffff;
-	box-shadow:inset 0px 1px 0px 0px #ffffff;
-	background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #ffffff), color-stop(1, #f6f6f6));
-	background:-moz-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
-	background:-webkit-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
-	background:-o-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
-	background:-ms-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
-	background:linear-gradient(to bottom, #ffffff 5%, #f6f6f6 100%);
-	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f6f6f6',GradientType=0);
-	background-color:#ffffff;
-	-moz-border-radius:6px;
-	-webkit-border-radius:6px;
-	border-radius:6px;
-	border:1px solid #dcdcdc;
-	display:inline-block;
-	cursor:pointer;
-	color:#666666;
-	font-family:arial;
-	font-size:15px;
-	font-weight:bold;
-	padding:6px 24px;
-	text-decoration:none;
-	text-shadow:0px 1px 0px #ffffff;
-}
-.minidashbutton:hover {
-	background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #f6f6f6), color-stop(1, #ffffff));
-	background:-moz-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
-	background:-webkit-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
-	background:-o-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
-	background:-ms-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
-	background:linear-gradient(to bottom, #f6f6f6 5%, #ffffff 100%);
-	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6f6f6', endColorstr='#ffffff',GradientType=0);
-	background-color:#f6f6f6;
-}
-
-.newMiniDashboard {
-    border: 1px solid green;
-    width: auto;
-}
-
-.endDashPair {
-    clear: left;
-}
-.miniDashPair {
-    float: left;
-    width: auto;
-    margin-left: 20px;
-}
-
-.miniDashPair label {
- text-align: center;
-}
-/* Charts CSS */
-p.numeral
-{
-	font-size:32pt;
-	color:#ffffff;
-	opacity: 0.7;
-	font-family:Helvetica Neue;
-	font-weight:100;
-	text-align:center;
-	line-height:75%;
-}
-
-.helper-text
-{
-	border: 1px solid #fff;
-	padding: 7px;
-	border-radius: 18px;
-	font-size:13pt;
-	color:#ffffff;
-	opacity: 0.7;
-	font-family:Helvetica Neue;
-	font-weight:200;
-	text-align:center;
-	line-height:100%;
-}
-p.osobject
-{
-	font-size:12pt;
-	color:#ffffff;
-	opacity: 0.7;
-	font-family:Helvetica Neue;
-	font-weight:200;
-	text-align:center;
-	line-height:100%;
-}
-
-p.heading
-{
-	font-size:20px;
-        letter-spacing: 1px;
-	color: black;
-	font-family:Arial;
-	font-weight:bold;
-	text-align:center;
-}
-
-/*p.heading
-{
-	font-size:32pt;
-	color:#ffffff;
-	opacity: 0.7;
-	font-family:Helvetica Neue;
-	font-weight:200;
-	text-align:center;
-}*/
-
-div.graph 
-{
-	height:340px;
-}
-
-div.numeral 
-{
-	height:120px;
-}
-
-div.heading 
-{
-	height:10px;
-}
-
-div.padding 
-{
-	height:20px;
-}
-
-div.chartContainer
-{
-	/*background-image:url('chartsBg.jpg');*/
-	width:527px;
-	height:400px;
-	border:1px;
-}
-
-/* D3 */
-
-.axis path,
-.axis line {
-  fill: none;
-  stroke: #ffffff;
-  opacity: 0.7;
-  shape-rendering: crispEdges;
-}
-
-
-.x.axis path {
-  display: none;
-}
-
-.x.axis text {
-  fill: white;
-  opacity: 0.5;
-}
-
-.y.axis text {
-  opacity: 0.5;
-  fill: white;
-}
-
-.y.axis text.legend {
-  opacity: 1.0;
-  fill: white;
-  font-size:8pt;
-}
-
-.line {
-  fill: none;
-  stroke: white;
-  stroke-width: 3px;
-  opacity: 0.6;
-}
-
-
-/******  Added in so that we can have a loader show as charts get ready to render ***/
-.loading {
-    //background-color: orange;
-    background-image: url(spinner.gif) no-repeat center middle;
-    text-align: center;
-    font-size: 20px;
-    height: 100%;
-/*    width: auto;*/
-    float: left;
-    padding: 10px;
-}
-/* Charts CSS */
-
-#tabs-4 {
-    margin: 40px;
-    font-size: 24px;
-    font-weight: bold;
-}
-
-.tenant-row{
-   padding-bottom: 0.7%;
-}
-
-/***********TENANT VIEW*************/
-
-#image-dropdown,#slice-image-value,#adv-slice-image-value{
- margin-left: 5%;
-}
-
-
-#adv-slice-image-value{
-margin-right: 0.5%;
-}
-
-#adv-network-value {
-margin-right: 0.3%;
-}
-
-#network-dropdown,#adv-network-dropdown,#adv-network-value{
- margin-left: 3.7%;
-}
-
-#service-level-dropdown,#service-level-value,#adv-service-level-dropdown,#adv-service-level-value{
- margin-left: 0.2% !important;
-}
-
-#slice-name-value,#adv-slice-name-value{
-   margin-left: 2%;
-}
-#adv-dataset-dropdown{
-margin-left: 3.7%;
-}
-#advanced-tenant,#basic-tenant,#instance-btn,#save-btn{
-  float:right;
-}
- #delete-slice-btn,#download-details,#add-user-btn{
-	margin-left:1%;
-}
-
-#instance-btn,#save-btn,#create-slice-btn,#delete-slice-btn,#add-user-btn,#download-details{
-  margin-top:1%;
-}
-
-.tenantDialog.ui-widget input{
-        border-radius: 0px !important;
-	height: 12px !important;
-	width: 180px !important;
-	margin-right: 10% !important;
-	float: right;
-}
-
-.tenantDialog .ui-dialog-buttonset .ui-button{
-border-radius: 0 !important;
-background-color: grey !important;
-font-weight: bold !important;
-font-size: 0.9em !important;
-}
-
-.tenantDialog .ui-dialog-titlebar{
-border-radius: 0 !important;
-background-color: grey !important;
-}
-
-.create-slice-row{
-	margin-bottom: 4%;
-	clear: both;
-	height: 25px;
-}
-
-.create-slice-row label, .tenantDialog label{
-   margin-right:1%;
-   float:left;
-}
-
-.create-slice-row select{
-   height:24px;
-   width: 196px;
-   font-size: 0.9em !important;
-}
-
-.tenant-create-slice{
-	float:right;
-	margin-right: 10% !important;
-}
-
-#delete-slice{
-float: right;
-}
-
-#tooltip,#adv-tooltip,#basic-tooltip{
-font-size:0.7em;
-color:red;
-display:none;
-}
-
-#tenantSliceDataWrapper {
-	padding: 1% 0;
-}
-
-#advancedTenantSliceDataWrapper .help-inline{
-	font-size: 11px;
-	color: #999;
-	padding-bottom: 1%;
-}
-
-.create-slice-row label{
-	clear:both;
-	margin-right: 1%;
-}
-
-#advNumOfInstances{
-        margin-right: 1% !important;
-}
-
-#private-vol-checkbox{
-margin: 0 0 1% 1%;
-}
-
-.public-key-warning{
-text-align: center;
-display:none;
-}
-
-#private-vol{
-margin-right: 15% !important;
-}
-.customize_row {
-  display: table;
-}
-.customize_column {
-  display: table-cell;
-  padding: 10px;
-}
-
-.request-form-row{
-padding:1% 8%;
-}
-
-.requestDialog{
-background-color: white;
-border-radius: 8px;
-width: 30% !important;
-height: 40% !important;
-margin-top: -16%;
-top: -103.703125px !important;
-}
-
-.request-form-row label{
-	float: left;
-}
-
-
-.requestDialog .ui-dialog-buttonset .ui-button{
-border-radius: 0 !important;
-background-color: grey !important;
-font-weight: bold !important;
-font-size: 0.9em !important;
-}
-
-.requestDialog .ui-dialog-titlebar-close{
-float:right;
-}
-
-#request-signup{
-height: 40px !important;
-margin: 0 14%;
-float: left;
-background-color: #448CCA;
-background-image: none;
-width: 70% !important;
-}
-
-.requestDialog .ui-dialog-titlebar{
-border-radius: 0 !important;
-height: 25px;
-padding-top: 2%;
-}
-
-.requestDialog #ui-id-1{
-padding-left: 28%;
-font-size: medium;
-}
-
-#request-site-name{
-	width: 98%;
-}
-
-/* SUIT CHANGES */
-
-.form-buttons {
-    margin-top: 20px;
-    padding: 10px;
-    border-top: 1px solid #cccccc;
-}
-
-.form-horizontal .selector .selector-chooser li .selector-remove,
-.form-horizontal .selector .selector-chooser li .selector-remove:hover{
-  @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);
-  @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);
-}
-
-.form-horizontal .selector .selector-chooser li .selector-add,
-.form-horizontal .selector .selector-chooser li .selector-add:hover{
-  margin-bottom: $form-group-margin-bottom;
-  @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);
-  @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);
-}
-
-/* MODAL */
-.ui-dialog{
-  z-index: 4000 !important;
-}
-
-button.ui-dialog-titlebar-close{
-  font-family: 'Glyphicons Halflings' !important;
-  display: inline-block;
-}
-
-button.ui-dialog-titlebar-close:after {
-    content: "\e014";
-}
-/* VCPe ADMIN FIX
-form#vcpeservice_form ul li {
-    display: inline-block;
-    background: red;
-    margin-top: 10px;
-    width: auto;
-    padding: 10px;
-    border-radius: 5px;
-}
-*/
\ No newline at end of file
diff --git a/xos/api/utility/dashboards.py b/xos/api/utility/dashboards.py
deleted file mode 100644
index bb2b7fd..0000000
--- a/xos/api/utility/dashboards.py
+++ /dev/null
@@ -1,133 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework.exceptions import APIException
-from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
-import json
-from core.models import UserDashboardView, DashboardView
-from api.xosapi_helpers import XOSViewSet, PlusModelSerializer
-
-
-class DashboardsSerializer(PlusModelSerializer):
-    id = serializers.CharField(read_only=True)
-    name = serializers.CharField(read_only=True)
-    url = serializers.CharField(read_only=True)
-    shown = serializers.CharField(read_only=True)
-    icon = serializers.CharField(read_only=True)
-
-    class Meta:
-        model = DashboardView
-        fields = ('id', 'name', 'url', 'shown', 'icon')
-
-
-class DashboardsList(XOSViewSet):
-    method_kind = "viewset"
-    method_name = "dashboards"
-    base_name = "dashboards"
-
-    queryset = DashboardView.objects.all()
-    serializer_class = DashboardsSerializer
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = []
-
-        patterns.append(self.list_url("$", {"get": "get_dashboards", "post": "set_dashboards"}, "get_user_dashboards"))
-        # patterns.append(self.list_url("(?P<pk>[a-zA-Z0-9\-_]+)/$", {"post": "set_dashboards"}, "set_user_dashboards"))
-
-        return patterns
-
-    def get_dashboards(self, request):
-        if (not request.user.is_authenticated()):
-            raise XOSPermissionDenied("You must be authenticated in order to use this API")
-        else:
-            user_id = request.user.id
-            available_dashboards = DashboardView.objects.filter(enabled=True).exclude(name="Customize")
-            user_dashboards = UserDashboardView.objects.filter(user_id=user_id)
-
-            user_dashboards_ids = []
-            user_dashboards_order = {}
-            for d in user_dashboards:
-                user_dashboards_ids.append(d.dashboardView.id)
-                user_dashboards_order[d.dashboardView.id] = d.order
-
-            list = []
-
-            for d in available_dashboards:
-                dash = {}
-                if(d.id in user_dashboards_ids):
-                    dash['shown'] = True
-                    dash['order'] = user_dashboards_order[d.id]
-                else:
-                    dash['shown'] = False
-                dash['name'] = d.name
-                dash['url'] = d.url
-                dash['id'] = d.id
-                dash['icon'] = d.icon
-                list.append(dash)
-
-            return Response(list)
-
-    def add_dashboard_to_user(self, user_id, dashboard_id, order):
-        try:
-            existing = UserDashboardView.objects.get(user_id=user_id, dashboardView_id=dashboard_id)
-        except:
-            # if the dashboard does not exist create a new entry
-            new_dashboard = UserDashboardView()
-            new_dashboard.user_id = user_id
-            new_dashboard.dashboardView_id = dashboard_id
-            new_dashboard.order = order
-            new_dashboard.save()
-            return new_dashboard
-
-        # else update this one, and update order for the others
-        if(existing.order is not order):
-            # update all changed models
-            updateList = UserDashboardView.objects.filter(user_id=user_id).filter(order__lt=existing.order).filter(order__gte=order).exclude(id=existing.id)
-
-            for d in updateList:
-                d.order = d.order + 1
-                d.save()
-
-            # update current model
-            existing.order = order
-            existing.save()
-        return existing
-
-    def remove_dashboard_from_user(self, user_id, dashboard_id):
-        print user_id
-        print dashboard_id
-        dashboard = UserDashboardView.objects.get(user_id=user_id, dashboardView_id=dashboard_id)
-        dashboard.delete(purge=True)
-
-    def set_dashboards(self, request):
-        dashboard_id = request.data.get("id", None)
-        old_dashboard = request.data
-        if (not request.user.is_authenticated()):
-            raise XOSPermissionDenied("You must be authenticated in order to use this API")
-        elif(not dashboard_id):
-            raise XOSPermissionDenied("You should provide the dashboard ID")
-        else:
-            if(old_dashboard['shown'] is True):
-                self.add_dashboard_to_user(request.user.id, dashboard_id, old_dashboard['order'])
-            else:
-                self.remove_dashboard_from_user(request.user.id, dashboard_id)
-            return Response(old_dashboard)
diff --git a/xos/api/utility/deleted_objects.py b/xos/api/utility/deleted_objects.py
deleted file mode 100644
index 4a139ad..0000000
--- a/xos/api/utility/deleted_objects.py
+++ /dev/null
@@ -1,60 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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 json
-from django.http import HttpResponse
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework import status
-from core.models import *
-from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
-from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField
-from django.db import models
-
-class DeletedObjectsViewSet(XOSViewSet):
-    base_name = "deleted_objects"
-    method_name = "deleted_objects"
-    method_kind = "viewset"
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = []
-
-        patterns.append( self.list_url("$", {"get": "get_deleted_objects"}, "list_deleted_objects") )
-
-        return patterns
-
-    def get_deleted_objects(self, request):
-        deleted_models = []
-        for model in models.get_models(include_auto_created=False):
-            if hasattr(model, "deleted_objects"):
-                if hasattr(model,"_meta") and hasattr(model._meta,"proxy") and model._meta.proxy:
-                    # ignore proxy models; we'll just report the base
-                    continue
-                for obj in model.deleted_objects.all():
-                    deleted_models.append( {"classname": obj.__class__.__name__,
-                                            "unicode": str(obj),
-                                            "id": obj.id} )
-
-        return HttpResponse( json.dumps(deleted_models), content_type="application/javascript")
-
-
-
-
-
diff --git a/xos/api/utility/loginview.py b/xos/api/utility/loginview.py
deleted file mode 100644
index ce64ec5..0000000
--- a/xos/api/utility/loginview.py
+++ /dev/null
@@ -1,116 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework.views import APIView
-from core.models import *
-from django.forms import widgets
-from django.forms.models import model_to_dict
-from django.core.exceptions import PermissionDenied
-from django.contrib.contenttypes.models import ContentType
-import json
-import socket
-import time
-import django.middleware.csrf
-from xos.exceptions import *
-from django.contrib.sessions.backends.db import SessionStore
-from django.contrib.sessions.models import Session
-from django.contrib.auth import authenticate
-
-def date_handler(obj):
-    return obj.isoformat() if hasattr(obj, 'isoformat') else obj
-
-def serialize_user(model):
-    serialized = model_to_dict(model)
-    del serialized['timezone']
-    del serialized['password']
-    return json.dumps(serialized, default=date_handler)
-
-class LoginView(APIView):
-    method_kind = "list"
-    method_name = "login"
-
-    def do_login(self, request, username, password):
-        if not username:
-            raise XOSMissingField("No username specified")
-
-        if not password:
-            raise XOSMissingField("No password specified")
-
-        u=authenticate(username=username, password=password)
-        if not u:
-            raise PermissionDenied("Failed to authenticate user %s" % username)
-
-        auth = {"username": username, "password": password}
-        request.session["auth"] = auth
-        request.session['_auth_user_id'] = u.pk
-        request.session['_auth_user_backend'] = u.backend
-        request.session.save()
-
-        return Response({
-            "xoscsrftoken": django.middleware.csrf.get_token(request),
-            "xossessionid": request.session.session_key,
-            "user": serialize_user(u)
-        })
-
-    def get(self, request, format=None):
-        username = request.GET.get("username", None)
-        password = request.GET.get("password", None)
-
-        return self.do_login(request, username, password)
-
-    def post(self, request, format=None):
-        username = request.data.get("username", None)
-        password = request.data.get("password", None)
-
-        return self.do_login(request, username, password)
-
-class LogoutView(APIView):
-    method_kind = "list"
-    method_name = "logout"
-
-    def do_logout(self, request, sessionid):
-        if not sessionid:
-            raise XOSMissingField("No xossessionid specified")
-
-        # Make sure the session exists. This prevents us from accidentally
-        # creating empty sessions with SessionStore()
-        session = Session.objects.filter(session_key=sessionid)
-        if not session:
-            # session doesn't exist
-            raise PermissionDenied("Session does not exist")
-
-        session = SessionStore(session_key=sessionid)
-        if "auth" in session:
-            del session["auth"]
-            session.save()
-        if "_auth_user_id" in session:
-            del session["_auth_user_id"]
-            session.save()
-
-        return Response("Logged Out")
-
-    def get(self, request, format=None):
-        sessionid = request.GET.get("xossessionid", None)
-        return self.do_logout(request, sessionid)
-
-    def post(self, request, format=None):
-        sessionid = request.data.get("xossessionid", None)
-        return self.do_logout(request, sessionid)
diff --git a/xos/api/utility/modeldefs.py b/xos/api/utility/modeldefs.py
deleted file mode 100644
index a32569d..0000000
--- a/xos/api/utility/modeldefs.py
+++ /dev/null
@@ -1,138 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework.exceptions import APIException
-from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
-import json
-from core.models import UserDashboardView, DashboardView
-from api.xosapi_helpers import XOSViewSet, PlusModelSerializer
-import django.apps
-from rest_framework.views import APIView
-
-
-class ModelDefsList(APIView):
-    method_kind = "list"
-    method_name = "modeldefs"
-
-    typeMap = {
-        'BooleanField': 'boolean',
-        'TextField': 'text',
-        'CharField': 'string',
-        'ForeignKey': 'number',
-        'IntegerField': 'number',
-        'AutoField': 'number',
-        'DateTimeField': 'date'
-    }
-
-    validatorMap = {
-        'EmailValidator': 'email',
-        'MaxLengthValidator': 'maxlength',
-        'URLValidator': 'url',
-        'MinValueValidator': 'min',
-        'MaxValueValidator': 'max',
-        'validate_ipv46_address': 'ip'
-    }
-
-    def convertType(self, type):
-        try:
-            jsType = self.typeMap[type]
-            return jsType
-        except Exception:
-            return None
-
-    def convertValidator(self, validator):
-        try:
-            jsValidator = self.validatorMap[validator]
-            return jsValidator
-        except Exception:
-            return None
-
-    def getRelationType(self, field):
-        if (field.many_to_many):
-            return 'many_to_many'
-        if (field.many_to_one):
-            return 'many_to_one'
-        if (field.one_to_many):
-            return 'one_to_many'
-        if (field.one_to_one):
-            return 'one_to_one'
-
-    def get(self, request, format=None):
-        models = django.apps.apps.get_models()
-
-        response = []
-
-        for model in models:
-            if 'core' in model.__module__:
-                # if 'Instance' == model.__name__:
-                modeldef = {}
-                modeldef['name'] = model.__name__
-
-                fields = []
-                relations = []
-                for f in model._meta.fields:
-
-                    field = {
-                        'name': f.name,
-                        'hint': f.help_text,
-                        'validators': {
-                        }
-                    }
-
-                    fieldtype = self.convertType(f.get_internal_type())
-                    if fieldtype is not None:
-                        field['type'] = fieldtype
-                    else:
-                        field['type'] = 'string'
-
-                    if not f.blank and not f.null:
-                        field['validators']['required'] = True
-
-                    for v in f.validators:
-                        validator_name = v.__class__.__name__
-                        if 'function' in validator_name:
-                            validator_name = v.__name__
-                        validator_name = self.convertValidator(validator_name)
-
-                        if hasattr(v, 'limit_value'):
-                            field['validators'][validator_name] = v.limit_value
-                        else:
-                            field['validators'][validator_name] = True
-
-                    fields.append(field)
-
-                    if f.is_relation and f.related_model and f.related_model.__name__ != 'ContentType':
-                        # ContentType is a Django internal model, we don't want it in the GUI
-
-                        # Add the relation details to the model
-                        field['relation'] = {
-                            'model': f.related_model.__name__,
-                            'type': self.getRelationType(f)
-                        }
-
-                        relations.append(f.related_model.__name__)
-
-                modeldef['fields'] = fields
-
-                # TODO add relation type (eg: OneToMany, ManyToMany)
-                modeldef['relations'] = list(set(relations))
-                response.append(modeldef)
-        return Response(response)
diff --git a/xos/api/utility/onboarding.py b/xos/api/utility/onboarding.py
deleted file mode 100644
index fda5d28..0000000
--- a/xos/api/utility/onboarding.py
+++ /dev/null
@@ -1,129 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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 json
-from django.http import HttpResponse
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework import status
-from core.models import *
-from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
-from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField
-
-class OnboardingViewSet(XOSViewSet):
-    base_name = "onboarding"
-    method_name = "onboarding"
-    method_kind = "viewset"
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = [] #super(CordSubscriberViewSet, self).get_urlpatterns(api_path=api_path)
-
-        patterns.append( self.list_url("xos/ready/$", {"get": "get_xos_ready"}, "xos_ready") )
-        patterns.append( self.list_url("xos/rebuild/$", {"post": "post_rebuild"}, "xos_rebuild") )
-
-        patterns.append( self.list_url("summary/$", {"get": "get_summary"}, "summary") )
-
-        patterns.append( self.list_url("services/$", {"get": "get_service_list"}, "service_list") )
-        patterns.append( self.list_url("services/(?P<service>[a-zA-Z0-9\-_]+)/ready/$", {"get": "get_service_ready"}, "service_ready") )
-
-
-        return patterns
-
-    def is_ready(self, obj):
-        return (obj.enacted is not None) and (obj.updated is not None) and (obj.enacted>=obj.updated) and (obj.backend_status.startswith("1"))
-
-    def get_xos_ready(self, request):
-        xos = XOS.objects.all()
-        if not xos:
-            return Response(false)
-
-        xos=xos[0]
-
-        result = (xos.enacted is not None) and (xos.updated is not None) and (xos.enacted>=xos.updated) and (xos.backend_status.startswith("1"))
-        return HttpResponse( json.dumps(result), content_type="application/javascript" )
-
-    def post_rebuild(self, request):
-        xos = XOS.objects.all()
-        if not xos:
-            raise Exception("There is no XOS object")
-
-        xos=xos[0]
-
-        service = request.data.get("service", None)
-        if service:
-           xos.rebuild([service])
-        else:
-           xos.rebuild()
-
-        return Response(True)
-
-    def get_summary(self, request):
-        result = []
-
-        xos = XOS.objects.all()
-        if not xos:
-            result.append( ("XOS", false) )
-        else:
-            xos=xos[0]
-
-            result.append( ("XOS", self.is_ready(xos)) )
-
-            for sc in xos.loadable_modules.all():
-                result.append( (sc.name, self.is_ready(sc)) )
-
-        result = "\n".join( ["%s: %s" % (x[0], x[1]) for x in result] )
-        if result:
-            result = result + "\n"
-
-        return HttpResponse( result, content_type="text/ascii" )
-
-    def get_service_list(self, request):
-        xos = XOS.objects.all()
-        if not xos:
-            return Response([])
-
-        xos=xos[0]
-
-        result = []
-        for sc in xos.loadable_modules.all():
-            result.append(sc.name)
-
-        return HttpResponse( json.dumps(result), content_type="application/javascript")
-
-    def get_service_ready(self, request, service):
-        xos = XOS.objects.all()
-        if not xos:
-            return Response([])
-
-        xos=xos[0]
-
-        sc=xos.loadable_modules.filter(name=service)
-        if not sc:
-            return HttpResponse("Not Found", status_code=404)
-
-        sc=sc[0]
-        result = self.is_ready(sc)
-
-        return HttpResponse( json.dumps(result), content_type="application/javascript")
-
-
-
-
-
diff --git a/xos/api/utility/portforwarding.py b/xos/api/utility/portforwarding.py
deleted file mode 100644
index 0e8af16..0000000
--- a/xos/api/utility/portforwarding.py
+++ /dev/null
@@ -1,66 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework.views import APIView
-from core.models import *
-from django.forms import widgets
-from django.core.exceptions import PermissionDenied
-from xos.exceptions import XOSNotFound
-from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField
-from django.db.models import Q
-
-class PortForwardingSerializer(serializers.Serializer):
-    id = serializers.IntegerField(read_only=True)
-    ip = serializers.CharField(read_only=True)
-    ports = serializers.CharField(read_only=True, source="network.ports")
-    hostname = serializers.CharField(read_only=True, source="instance.node.name")
-
-    class Meta:
-        model = Port
-        fields = ('id', 'ip', 'ports', 'hostname')
-
-class PortForwardingViewSet(XOSViewSet):
-    base_name = "portforwarding"
-    method_name = "portforwarding"
-    method_kind = "viewset"
-    read_only = True
-    serializer_class = PortForwardingSerializer
-
-    def get_queryset(self):
-        queryset=Port.objects.exclude(Q(network__isnull=True) |
-                                                  Q(instance__isnull=True) |
-                                                  Q(instance__node__isnull=True) |
-                                                  Q(network__ports__isnull=True) | Q(network__ports__exact='') |
-                                                  Q(ip__isnull=True))
-
-        node_name = self.request.query_params.get('node_name', None)
-        if node_name is not None:
-            queryset = queryset.filter(instance__node__name = node_name)
-
-        if "" in [q.ip for q in list(queryset)]:
-            # Q(ip__exact=='') does not work right, so let's filter the hard way
-            queryset = [q for q in list(queryset) if q.ip!='']
-            queryset = [q.id for q in queryset]
-            queryset = Port.objects.filter(pk__in=queryset)
-
-        return queryset
-
-
diff --git a/xos/api/utility/sliceplus.py b/xos/api/utility/sliceplus.py
deleted file mode 100644
index 3b1d47f..0000000
--- a/xos/api/utility/sliceplus.py
+++ /dev/null
@@ -1,440 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework.exceptions import APIException
-from core.models import *
-from django.forms import widgets
-from core.xoslib.objects.sliceplus import SlicePlus
-from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
-import json
-from core.models import Slice, Privilege, SliceRole, Instance, Site, Node, User
-from operator import itemgetter, attrgetter
-from api.xosapi_helpers import PlusObjectMixin, PlusModelSerializer
-
-# rest_framework 3.x
-IdField = serializers.ReadOnlyField
-WritableField = serializers.Field
-DictionaryField = serializers.DictField
-ListField = serializers.ListField
-
-
-class SlicePlus(Slice, PlusObjectMixin):
-    class Meta:
-        proxy = True
-
-    def __init__(self, *args, **kwargs):
-        super(SlicePlus, self).__init__(*args, **kwargs)
-        self._update_users = None
-        self._sliceInfo = None
-        self.getSliceInfo()
-        self._instance_status = self._sliceInfo["instanceStatus"]
-        self._instance_distribution = self._sliceInfo["sitesUsed"]
-        self._initial_instance_distribution = self._instance_distribution
-        self._network_ports = self._sliceInfo["networkPorts"]
-        self._initial_network_ports = self._network_ports
-        self._current_user_roles = self._sliceInfo["roles"]
-
-    def getSliceInfo(self, user=None):
-        if not self._sliceInfo:
-            site_status = {}
-            used_sites = {}
-            ready_sites = {}
-            used_deployments = {}
-            instanceCount = 0
-            instance_status = {}
-            sshCommands = []
-            for instance in self.instances.all():
-                site = instance.node.site_deployment.site
-                deployment = instance.node.site_deployment.deployment
-                used_sites[site.name] = used_sites.get(site.name, 0) + 1
-                used_deployments[deployment.name] = used_deployments.get(deployment.name, 0) + 1
-                instanceCount = instanceCount + 1
-
-                if instance.backend_status:
-                    status = instance.backend_status[0]
-                else:
-                    status = "none"
-
-                if not status in instance_status:
-                    instance_status[status] = 0
-                instance_status[status] = instance_status[status] + 1
-
-                sshCommand = instance.get_ssh_command()
-                if sshCommand:
-                    sshCommands.append(sshCommand)
-                    ready_sites[site.name] = ready_sites.get(site.name, 0) + 1
-
-            users = {}
-            for priv in Privilege.objects.filter(object_id=self.id, accessor_type='User', object_type='Slice'):
-                if not (priv.accessor_id in users.keys()):
-                    accessor_user = User.objects.get(pk = priv.accessor_id)
-                    users[priv.accessor_id] = {"name": accessor_user.email, "id": priv.accessor_id, "roles": []}
-
-                permission = priv.permission
-                if permission.startswith('role:'):
-                    accessor_role = permission[5:]
-                    accessor_role.lstrip()
-                    users[priv.accessor_id]["roles"].append(accessor_role)
-
-            # XXX this assumes there is only one network that can have ports bound
-            # to it for a given slice. This is intended for the tenant view, which
-            # will obey this field.
-            networkPorts = ""
-            for networkSlice in self.networkslices.all():
-                network = networkSlice.network
-                if (network.owner.id != self.id):
-                    continue
-                if network.ports:
-                    networkPorts = network.ports
-
-            self._sliceInfo = {
-                    "sitesUsed": used_sites,
-                    "sitesReady": ready_sites,
-                    "instanceStatus": instance_status,
-                    "deploymentsUsed": used_deployments,
-                    "instanceCount": instanceCount,
-                    "siteCount": len(used_sites.keys()),
-                    "users": users,
-                    "roles": [],
-                    "sshCommands": sshCommands,
-                    "networkPorts": networkPorts}
-
-        if user:
-            auser = self._sliceInfo["users"].get(user.id, None)
-            if (auser):
-                self._sliceInfo["roles"] = auser["roles"]
-
-        return self._sliceInfo
-
-    @property
-    def instance_distribution_ready(self):
-        return self._sliceInfo["sitesReady"]
-
-    @property
-    def instance_total_ready(self):
-        return sum(self._sliceInfo["sitesReady"].values())
-
-    @property
-    def current_user_roles(self):
-        return self._current_user_roles
-
-    @property
-    def instance_distribution(self):
-        return self._instance_distribution
-
-    @instance_distribution.setter
-    def instance_distribution(self, value):
-        self._instance_distribution = value
-
-    @property
-    def instance_total(self):
-        return sum(self._instance_distribution.values())
-
-    @property
-    def instance_status(self):
-        return self._instance_status
-
-    @property
-    def user_names(self):
-        return [user["name"] for user in self.getSliceInfo()["users"].values()]
-
-    @user_names.setter
-    def user_names(self, value):
-        pass  # it's read-only
-
-    @property
-    def users(self):
-        return [user["id"] for user in self.getSliceInfo()["users"].values()]
-
-    @users.setter
-    def users(self, value):
-        self._update_users = value
-
-    @property
-    def network_ports(self):
-        return self._network_ports
-
-    @network_ports.setter
-    def network_ports(self, value):
-        self._network_ports = value
-
-    @staticmethod
-    def select_by_user(user):
-        if user.is_admin:
-            qs = SlicePlus.objects.all()
-        else:
-            slice_ids = [sp.object_id for sp in Privilege.objects.filter(accessor_id=user.id, accessor_type='User', object_type='Slice')]
-            qs = SlicePlus.objects.filter(id__in=slice_ids)
-        return qs
-
-    def get_node_allocation(self, siteList):
-        siteIDList = [site.id for site in siteList]
-        nodeList = []
-        for node in Node.objects.all():
-            if (node.site_deployment.site.id in siteIDList):
-                node.instanceCount = 0
-                for instance in node.instances.all():
-                    if instance.slice.id == self.id:
-                        node.instanceCount = node.instanceCount + 1
-                nodeList.append(node)
-        return nodeList
-
-    def save(self, *args, **kwargs):
-        if (not hasattr(self, "caller")) or self.caller==None:
-            raise APIException("no self.caller in SlicePlus.save")
-
-        updated_image = self.has_field_changed("default_image")
-        updated_flavor = self.has_field_changed("default_flavor")
-
-        super(SlicePlus, self).save(*args, **kwargs)
-
-        # try things out first
-
-        updated_sites = (self._instance_distribution != self._initial_instance_distribution) or updated_image or updated_flavor
-        if updated_sites:
-            self.save_instance_distribution(noAct=True, reset=(updated_image or updated_flavor))
-
-        if self._update_users:
-            self.save_users(noAct=True)
-
-        if (self._network_ports != self._initial_network_ports):
-            self.save_network_ports(noAct=True)
-
-        # now actually save them
-
-        if updated_sites:
-            self.save_instance_distribution(reset=(updated_image or updated_flavor))
-
-        if self._update_users:
-            self.save_users()
-
-        if (self._network_ports != self._initial_network_ports):
-            self.save_network_ports()
-
-    def save_instance_distribution(self, noAct = False, reset=False):
-        print "save_instance_distribution, reset=",reset
-
-        if (not self._instance_distribution):
-            # Must be a instance that was just created, and has not instance_distribution
-            # field.
-            return
-
-        all_slice_instances = self.instances.all()
-        for site_name in self._instance_distribution.keys():
-            desired_allocation = self._instance_distribution[site_name]
-
-            # make a list of the instances for this site
-            instances = []
-            for instance in all_slice_instances:
-                if instance.node.site_deployment.site.name == site_name:
-                    instances.append(instance)
-
-            # delete extra instances
-            while (reset and len(instances) > 0) or (len(instances) > desired_allocation):
-                instance = instances.pop()
-                if (not noAct):
-                    print "deleting instance", instance
-                    instance.delete()
-                else:
-                    print "would delete instance", instance
-
-            # add more instances
-            if (len(instances) < desired_allocation):
-                site = Site.objects.get(name=site_name)
-                nodes = self.get_node_allocation([site])
-
-                if (not nodes):
-                    raise APIException(detail="no nodes in site %s" % site_name)
-
-                while (len(instances) < desired_allocation):
-                    # pick the least allocated node
-                    nodes = sorted(nodes, key=attrgetter("instanceCount"))
-                    node = nodes[0]
-
-                    instance = Instance(name=node.name,
-                                        slice=self,
-                                        node=node,
-                                        image=self.default_image,
-                                        flavor=self.default_flavor,
-                                        creator=self.creator,
-                                        deployment=node.site_deployment.deployment)
-                    instance.caller = self.caller
-                    instances.append(instance)
-                    if (not noAct):
-                        print "added instance", instance
-                        instance.save()
-                    else:
-                        print "would add instance", instance
-
-                    node.instanceCount = node.instanceCount + 1
-
-    def save_users(self, noAct=False):
-        new_users = self._update_users
-
-        try:
-            default_role = SliceRole.objects.get(role="access")
-        except:
-            default_role = SliceRole.objects.get(role="default")
-
-        slice_privs = Privilege.objects.filter(object_id = self.id, object_type = 'Slice', accessor_type='User')
-        slice_user_ids = [priv.accessor_id for priv in slice_privs]
-
-        for user_id in new_users:
-            if (user_id not in slice_user_ids):
-                priv = Privilege(object_id=self.id, accessor_id=user_id, accessor_type = 'User', permission='role:%s'%default_role.role, object_type = 'Slice')
-                priv.caller = self.caller
-                if (not noAct):
-                    priv.save()
-
-                print "added user id", user_id
-
-        for priv in slice_privs:
-            if (priv.role.id != default_role.id):
-                # only mess with 'default' users; don't kill an admin
-                continue
-
-            if (priv.user.id not in new_users):
-                if (not noAct):
-                    priv.delete()
-
-                print "deleted user id", user_id
-
-    def save_network_ports(self, noAct=False):
-        # First search for any network that already has a filled in 'ports'
-        # field. We'll assume there can only be one, so it must be the right
-        # one.
-        for networkSlice in self.networkslices.all():
-            network = networkSlice.network
-            if (network.owner.id != self.id):
-                continue
-            if network.ports:
-                network.ports = self._network_ports
-                network.caller = self.caller
-                if (not noAct):
-                    network.save()
-                return
-
-        # Now try a network that is a "NAT", since setting ports on a non-NAT
-        # network doesn't make much sense.
-        for networkSlice in self.networkslices.all():
-            network = networkSlice.network
-            if (network.owner.id != self.id):
-                continue
-            if network.template.translation == "NAT":
-                network.ports = self._network_ports
-                network.caller = self.caller
-                if (not noAct):
-                    network.save()
-                return
-
-        # uh oh, we didn't find a network
-
-        raise APIException(detail="No network was found that ports could be set on")
-
-
-class SlicePlusIdSerializer(PlusModelSerializer):
-        id = IdField()
-
-        humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-        network_ports = serializers.CharField(required=False)
-        instance_distribution = DictionaryField(required=False)
-        instance_distribution_ready = DictionaryField(read_only=True)
-        instance_total = serializers.IntegerField(read_only=True)
-        instance_total_ready = serializers.IntegerField(read_only=True)
-        instance_status = DictionaryField(read_only=True)
-        users = ListField(required=False)
-        user_names = ListField(required=False)  # readonly = True ?
-        current_user_can_see = serializers.SerializerMethodField("getCurrentUserCanSee")
-
-        def getCurrentUserCanSee(self, slice):
-            # user can 'see' the slice if he is the creator or he has a role
-            current_user = self.context['request'].user
-            if (slice.creator and slice.creator == current_user):
-                return True
-            return (len(slice.getSliceInfo(current_user)["roles"]) > 0)
-
-        def getSliceInfo(self, slice):
-            return slice.getSliceInfo(user=self.context['request'].user)
-
-        def getHumanReadableName(self, obj):
-            return str(obj)
-
-        networks = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
-
-        class Meta:
-            model = SlicePlus
-            fields = ('humanReadableName', 'id', 'created', 'updated', 'enacted', 'name', 'enabled',
-                      'description', 'slice_url', 'site', 'max_instances', 'service', 'network', 'mount_data_sets',
-                      'default_image', 'default_flavor',
-                      'creator',
-
-                      # these are the value-added fields from SlicePlus
-                      'networks', 'network_ports', 'backendIcon', 'backendHtml',
-                      'current_user_roles',  'instance_distribution', 'instance_distribution_ready', 'instance_total',
-                      'instance_total_ready', 'instance_status', 'users', "user_names", "current_user_can_see")
-
-
-class SlicePlusList(XOSListCreateAPIView):
-    queryset = SlicePlus.objects.select_related().all()
-    serializer_class = SlicePlusIdSerializer
-
-    method_kind = "list"
-    method_name = "slicesplus"
-
-    def get_queryset(self):
-        current_user_can_see = self.request.query_params.get('current_user_can_see', False)
-        site_filter = self.request.query_params.get('site', False)
-
-        if (not self.request.user.is_authenticated()):
-            raise XOSPermissionDenied("You must be authenticated in order to use this API")
-
-        slices = SlicePlus.select_by_user(self.request.user)
-
-        if (site_filter and not current_user_can_see):
-            slices = SlicePlus.objects.filter(site=site_filter)
-
-        # If current_user_can_see is set, then filter the queryset to return
-        # only those slices that the user is either creator or has privilege
-        # on.
-        if (current_user_can_see):
-            slice_ids = []
-            for slice in slices:
-                if (self.request.user == slice.creator) or (len(slice.getSliceInfo(self.request.user)["roles"]) > 0):
-                    slice_ids.append(slice.id)
-            if (site_filter):
-                slices = SlicePlus.objects.filter(id__in=slice_ids, site=site_filter)
-            else:
-                slices = SlicePlus.objects.filter(id__in=slice_ids)
-
-        return slices
-
-
-class SlicePlusDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = SlicePlus.objects.select_related().all()
-    serializer_class = SlicePlusIdSerializer
-
-    method_kind = "detail"
-    method_name = "slicesplus"
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSPermissionDenied("You must be authenticated in order to use this API")
-        return SlicePlus.select_by_user(self.request.user)
diff --git a/xos/api/utility/sshkeys.py b/xos/api/utility/sshkeys.py
deleted file mode 100644
index 4a50310..0000000
--- a/xos/api/utility/sshkeys.py
+++ /dev/null
@@ -1,58 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework.views import APIView
-from core.models import *
-from django.forms import widgets
-from django.core.exceptions import PermissionDenied
-from xos.exceptions import XOSNotFound
-from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField
-from django.db.models import Q
-
-class SSHKeysSerializer(PlusModelSerializer):
-    id = serializers.CharField(read_only=True, source="instance_id")
-    public_keys = serializers.ListField(read_only=True, source="get_public_keys")
-    node_name = serializers.CharField(read_only=True, source="node.name")
-
-    class Meta:
-        model = Instance
-        fields = ('id', 'public_keys', 'node_name')
-
-class SSHKeysViewSet(XOSViewSet):
-    base_name = "sshkeys"
-    method_name = "sshkeys"
-    method_kind = "viewset"
-    serializer_class = SSHKeysSerializer
-    read_only = True
-
-    lookup_field = "instance_id"
-    lookup_url_kwarg = "pk"
-
-    def get_queryset(self):
-        queryset = queryset=Instance.objects.exclude(Q(instance_id__isnull=True) | Q(instance_id__exact=''))
-
-        node_name = self.request.query_params.get('node_name', None)
-        if node_name is not None:
-            queryset = queryset.filter(node__name = node_name)
-
-        return queryset
-
-
diff --git a/xos/api/utility/synchronizer.py b/xos/api/utility/synchronizer.py
deleted file mode 100644
index 444fd68..0000000
--- a/xos/api/utility/synchronizer.py
+++ /dev/null
@@ -1,77 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework.exceptions import APIException
-from core.models import *
-from django.forms import widgets
-from core.xoslib.objects.sliceplus import SlicePlus
-from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
-import json
-from core.models import Slice, SlicePrivilege, SliceRole, Instance, Site, Node, User
-from operator import itemgetter, attrgetter
-from api.xosapi_helpers import PlusObjectMixin, PlusModelSerializer
-
-IdField = serializers.ReadOnlyField
-
-
-class SynchronizerSerializer(PlusModelSerializer):
-    id = IdField()
-
-    name = serializers.CharField(required=False)
-
-    class Meta:
-        model = Diag
-        fields = ('id', 'name', 'backend_status', 'backend_register')
-
-
-class SynchronizerList(XOSListCreateAPIView):
-    queryset = Diag.objects.all()
-    serializer_class = SynchronizerSerializer
-
-    method_kind = "list"
-    method_name = "synchronizer"
-
-    def get_queryset(self):
-        name = self.request.query_params.get('name', False)
-
-        if (not self.request.user.is_authenticated()):
-            raise XOSPermissionDenied("You must be authenticated in order to use this API")
-        if(name):
-            return Diag.objects.filter(name=name)
-        return Diag.objects.all()
-
-
-class SynchronizerDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = Diag.objects.all()
-    serializer_class = SynchronizerSerializer
-
-    method_kind = "detail"
-    method_name = "synchronizer"
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSPermissionDenied("You must be authenticated in order to use this API")
-
-        print "kwargs"
-        print self.request
-        print self.kwargs['pk']
-
-        return Diag.objects.filter(id=self.kwargs['pk'])
diff --git a/xos/api/utility/userdetail.py b/xos/api/utility/userdetail.py
deleted file mode 100644
index 1d05178..0000000
--- a/xos/api/utility/userdetail.py
+++ /dev/null
@@ -1,84 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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 json

-import os

-import sys

-import traceback

-from django.http import HttpResponse

-from rest_framework.decorators import api_view

-from rest_framework.views import APIView

-from rest_framework.response import Response

-from rest_framework.reverse import reverse

-from rest_framework import serializers

-from rest_framework import generics

-from rest_framework import status

-from core.models import *

-from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied

-from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField

-from django.core.exceptions import PermissionDenied

-

-

-def getUserViewDict(user):

-    # compute blessed_deployments by looking for the tenant view, and seeing what

-    # deployments are attached to it.

-    site_users=[]

-    user_site_roles=[]

-    user_site_id=None

-    user_site_login_base=None

-    if not user.site:

-        pass # this is probably an error

-    else:

-        user_site_id = user.site.id

-        user_site_login_base = user.site.login_base

-        for auser in user.site.users.all():

-            site_users.append(auser)

-

-        for priv in user.site.siteprivileges.filter(user=user):

-            user_site_roles.append(priv.role.role)

-    return {"id": 0,

-            "current_user_site_id": user_site_id,

-            "current_user_login_base": user_site_login_base,

-            "current_user_site_users": [auser.id for auser in site_users],

-            "current_user_site_user_names": [auser.email for auser in site_users],

-            "current_user_can_create_slice": user.is_admin or ("pi" in user_site_roles) or ("admin" in user_site_roles),

-            "current_user_id": user.id,

-            }

-

-class UserList(APIView):

-    method_kind = "list"

-    method_name = "me"

-

-    def get(self, request, format=None):

-        if (not request.user.is_authenticated()):

-            raise PermissionDenied("You must be authenticated in order to use this API")

-        return Response( getUserViewDict(request.user) )

-

-class UserDetail(APIView):

-    method_kind = "detail"

-    method_name = "me"

-

-    def get(self, request, format=None, pk=0):

-        if (not request.user.is_authenticated()):

-            raise PermissionDenied("You must be authenticated in order to use this API")

-        return Response( [getUserViewDict(request.user)] )

-

-

-

-

-

-

-

diff --git a/xos/core/dashboard/__init__.py b/xos/core/dashboard/__init__.py
deleted file mode 100644
index 65fdf5b..0000000
--- a/xos/core/dashboard/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-
diff --git a/xos/core/dashboard/sites.py b/xos/core/dashboard/sites.py
deleted file mode 100644
index f9d9478..0000000
--- a/xos/core/dashboard/sites.py
+++ /dev/null
@@ -1,94 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-#sites.py
-
-from django.contrib.admin.sites import AdminSite
-
-
-class AdminMixin(object):
-    """Mixin for AdminSite to allow custom dashboard views."""
-
-    def __init__(self, *args, **kwargs):
-        return super(AdminMixin, self).__init__(*args, **kwargs)
-
-    def get_urls(self):
-        """Add our dashboard view to the admin urlconf. Deleted the default index."""
-        from django.conf.urls import patterns, url
-        from views import DashboardDynamicView, SimulatorView, LoggedInView, \
-                          DashboardUserSiteView,  \
-                          TenantViewData, TenantCreateSlice, TenantAddUser,TenantAddOrRemoveInstanceView, TenantPickSitesView, TenantDeleteSliceView, \
-                          TenantUpdateSlice, DashboardSliceInteractions, RequestAccessView
-
-        from views import view_urls
-
-        urls = super(AdminMixin, self).get_urls()
-        del urls[0]
-
-        # these ones are for the views that were written before we implemented
-        # the ability to get the url from the View class.
-        dashboard_urls = [
-               url(r'^$', self.admin_view(DashboardDynamicView.as_view()),
-                    name="index"),
-               url(r'^loggedin/$', self.admin_view(LoggedInView.as_view()),
-                    name="loggedin"),
-               url(r'^test/', self.admin_view(DashboardUserSiteView.as_view()),
-                    name="test"),
-               url(r'^sliceinteractions/(?P<name>\w+)/$', self.admin_view(DashboardSliceInteractions.as_view()),
-                    name="interactions"),
-               url(r'^dashboard/(?P<name>[\w|\W]+)/$', self.admin_view(DashboardDynamicView.as_view()),
-                    name="dashboard"),
-               url(r'^dashboardWholePage/(?P<name>\w+)/$', self.admin_view(DashboardDynamicView.as_view()),
-                    {"wholePage": True},
-                    name="dashboardWholePage"),
-	             # url(r'^customize/$', self.admin_view(DashboardCustomize.as_view()),
-              #       name="customize"),
-               url(r'^hpcdashuserslices/', self.admin_view(DashboardUserSiteView.as_view()),
-                    name="hpcdashuserslices"),
-               url(r'^welcome/$', self.admin_view(DashboardDynamicView.as_view()),
-                    name="welcome"),
-               url(r'^simulator/', self.admin_view(SimulatorView.as_view()),
-                    name="simulator"),
-               url(r'^tenantaddorreminstance/$', self.admin_view(TenantAddOrRemoveInstanceView.as_view()),
-                    name="tenantaddorreminstance"),
-               url(r'^tenantview/$', self.admin_view(TenantViewData.as_view()),
-                    name="tenantview"),
-               url(r'^createnewslice/$', self.admin_view(TenantCreateSlice.as_view()),
-                    name="createnewslice"),
-               url(r'^adduser/$', self.admin_view(TenantAddUser.as_view()),
-                      name="adduser"),
-               url(r'^requestaccess/$', RequestAccessView.as_view(),
-                      name="requestacces"),
-	       url(r'^updateslice/$', self.admin_view(TenantUpdateSlice.as_view()),
-                    name="updateslice"),
-               url(r'^picksites/$', self.admin_view(TenantPickSitesView.as_view()),
-                    name="picksites"),
-	       url(r'^tenantdeleteslice/$', self.admin_view(TenantDeleteSliceView.as_view()),
-                    name="tenantdeleteslice")
-        ]
-
-        # these ones are for the views that have a "url" member in the class
-        for (view_url, view_classname, view_class) in view_urls:
-            dashboard_urls.append( url(view_url, self.admin_view(view_class.as_view()), name=view_classname.lower()))
-
-        return dashboard_urls + urls
-
-
-class SitePlus(AdminMixin, AdminSite):
-    """
-    A Django AdminSite with the AdminMixin to allow registering custom
-    dashboard view.
-    """
diff --git a/xos/core/dashboard/views/__init__.py b/xos/core/dashboard/views/__init__.py
deleted file mode 100644
index 93f6f79..0000000
--- a/xos/core/dashboard/views/__init__.py
+++ /dev/null
@@ -1,59 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-#from home import DashboardWelcomeView, DashboardDynamicView
-#from tenant import TenantCreateSlice, TenantUpdateSlice, TenantDeleteSliceView, TenantAddOrRemoveInstanceView, TenantPickSitesView, TenantViewData
-#from simulator import SimulatorView
-#from cdn import DashboardSummaryAjaxView, DashboardAddOrRemoveInstanceView, DashboardAjaxView
-#from analytics import DashboardAnalyticsAjaxView
-#from interactions import DashboardSliceInteractions
-#from test import DashboardUserSiteView
-
-from django.views.generic import View
-from django.conf.urls import patterns, url
-import os, sys
-import inspect
-import importlib
-
-# Find all modules in the current directory that have descendents of the View
-# object, and add them as globals to this module. Also, build up a list of urls
-# based on the "url" field of the view classes.
-
-sys_path_save = sys.path
-try:
-    # __import__() and importlib.import_module() both import modules from
-    # sys.path. So we make sure that the path where we can find the views is
-    # the first thing in sys.path.
-    view_dir = os.path.dirname(os.path.abspath(__file__))
-    sys.path = [view_dir] + sys.path
-    view_urls = []
-    for fn in os.listdir(view_dir):
-        pathname = os.path.join(view_dir,fn)
-        if os.path.isfile(pathname) and fn.endswith(".py") and (fn!="__init__.py"):
-            #module = imp.load_source(fn[:-3],pathname)
-            #module = importlib.import_module(fn[:-3])
-            module = __import__(fn[:-3])
-            for classname in dir(module):
-                c = getattr(module, classname, None)
-
-                if inspect.isclass(c) and issubclass(c, View) and (classname not in globals()):
-                    globals()[classname] = c
-
-                    view_url = getattr(c, "url", None)
-                    if view_url:
-                        view_urls.append( (view_url, classname, c) )
-finally:
-    sys.path = sys_path_save
diff --git a/xos/core/dashboard/views/download_ssh_commands.py b/xos/core/dashboard/views/download_ssh_commands.py
deleted file mode 100644
index c166198..0000000
--- a/xos/core/dashboard/views/download_ssh_commands.py
+++ /dev/null
@@ -1,34 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from view_common import *
-from core.xoslib.objects.sliceplus import SlicePlus
-
-# This was intended to serve as a download feature for the tenant view. Found
-# a better way to do it. This is deprecated.
-
-class DownloadSSHCommandsView(View):
-    url = r'^sshcommands/(?P<sliceid>\d+)/$'
-
-    def get(self, request, sliceid=None, **kwargs):
-        #slice = Slices.objects.get(id=sliceid);
-        #for instance in slice.instances.all():
-        #    if (instance.instance_id && instance.instance_name):
-
-        slice = SlicePlus.objects.get(id=sliceid)
-
-        return HttpResponse(slice.getSliceInfo()["sshCommands"], content_type='text/text')
-
diff --git a/xos/core/dashboard/views/home.py b/xos/core/dashboard/views/home.py
deleted file mode 100644
index 6b10ca1..0000000
--- a/xos/core/dashboard/views/home.py
+++ /dev/null
@@ -1,222 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from view_common import *
-from django.http import HttpResponseRedirect
-import sys
-
-
-def isInt(s):
-    try:
-        int(s)
-        return True
-    except ValueError:
-        return False
-
-
-class LoggedInView(TemplateView):
-    def get(self, request, name="root", *args, **kwargs):
-        if request.user.login_page:
-            return HttpResponseRedirect(request.user.login_page)
-        else:
-            return HttpResponseRedirect("/admin/")
-
-
-class DashboardDynamicView(TemplateView):
-    head_template = r"""{% extends "admin/dashboard/dashboard_base.html" %}
-       {% load admin_static %}
-       {% block content %}
-    """
-
-    head_wholePage_template = r"""{% extends "admin/wholePage.html" %}
-       {% load admin_static %}
-       {% block content %}
-    """
-
-    tail_template = r"{% endblock %}"
-
-    def get(self, request, name="root", *args, **kwargs):
-        context = self.get_context_data(**kwargs)
-        context = getDashboardContext(request.user, context)
-
-        if name == "root":
-            # maybe it is a bit hacky, didn't want to mess up everything @teone
-            user_dashboards = request.user.get_dashboards()
-            first_dasboard_name = user_dashboards[0].id
-            return self.singleDashboardView(request, first_dasboard_name, context)
-            # return self.multiDashboardView(request, context)
-        elif kwargs.get("wholePage", None):
-            return self.singleFullView(request, name, context)
-        else:
-            return self.singleDashboardView(request, name, context)
-
-    def readTemplate(self, fn):
-        dashboards_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '../')
-        xoslib_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '../../xoslib/dashboards/')
-        TEMPLATE_DIRS = [dashboards_dir,
-                         xoslib_dir]
-
-        for template_dir in TEMPLATE_DIRS:
-            pathname = os.path.join(template_dir, fn) + ".html"
-            if os.path.exists(pathname):
-                break
-        else:
-            return "failed to find %s in %s" % (fn, TEMPLATE_DIRS)
-
-        template = open(pathname, "r").read()
-        if (fn == "tenant"):
-            # fix for tenant view - it writes html to a div called tabs-5
-            template = '<div id="tabs-5"></div>' + template
-        return template
-
-    def embedDashboardUrl(self, url):
-        if url.startswith("template:"):
-            fn = url[9:]
-            return self.readTemplate(fn)
-        elif url.startswith("http"):
-            return '<iframe src="%s" width="100%%" height="100%%" style="min-height: 1024px;" frameBorder="0"></iframe>' % url
-        else:
-            return "don't know how to load dashboard %s" % url
-
-    def embedDashboardView(self, view, i=0):
-        body = ""
-        url = view.url
-        if (view.controllers.all().count() > 0):
-            body = body + 'Controller: <select id="dashselect-%d">' % i
-            body = body + '<option value="None">(select a controller)</option>'
-            for j, controllerdashboard in enumerate(view.controllerdashboardviews.all()):
-                body = body + '<option value="%d">%s</option>' % (j, controllerdashboard.controller.name)
-            body = body + '</select><hr>'
-
-            for j, controllerdashboard in enumerate(view.controllerdashboardviews.all()):
-                body = body + '<script type="text/template" id="dashtemplate-%d-%d">\n%s\n</script>\n' % (i,j, self.embedDashboardUrl(controllerdashboard.url));
-
-            body = body + '<div id="dashcontent-%d" class="dashcontent"></div>\n' % i
-
-            body = body + """<script>
-                             $("#dashselect-%d").change(function() {
-                                 v=$("#dashselect-%d").val();
-                                 if (v=="None") {
-                                     $("#dashcontent-%d").html("");
-                                     return;
-                                 }
-                                 $("#dashcontent-%d").html( $("#dashtemplate-%d-" + v).html() );
-                             });
-                             //$("#dashcontent-%d").html( $("#dashtemplate-%d-0").html() );
-                             </script>
-                          """ % (i, i, i, i, i, i, i)
-        else:
-            body = body + self.embedDashboardUrl(url)
-        return body
-
-    def multiDashboardView(self, request, context):
-        head_template = self.head_template
-        tail_template = self.tail_template
-
-        dashboards = request.user.get_dashboards()
-
-        if not request.user.is_appuser:
-            # customize is a special dashboard they always get
-            customize = DashboardView.objects.filter(name="Customize")
-            if customize:
-                dashboards.append(customize[0])
-
-        tabs = []
-        bodies = []
-
-        i = 0
-        for view in dashboards:
-            # don't display disabled dashboards
-            if (not view.enabled):
-                continue
-
-            tabs.append('<li><a href="#dashtab-%d">%s</a></li>\n' % (i, view.name))
-            body = '<div id="dashtab-%d">%s</div>\n' % (i, self.embedDashboardView(view, i))
-
-            bodies.append(body)
-            i = i + 1
-
-        # embed content provider dashboards
-        for cp in ContentProvider.objects.all():
-            if request.user in cp.users.all():
-                tabs.append('<li><a href="#dashtab-%d">%s</a></li>\n' % (i, cp.name))
-
-                body = ""
-                body = body + '<div id="dashtab-%d">\n' % i
-                body = body + self.embedDashboardUrl("http:/admin/hpc/contentprovider/%s/%s/embeddedfilteredchange" % (cp.serviceProvider.hpcService.id, cp.id))
-                body = body + '</div>\n'
-
-                bodies.append(body)
-                i = i + 1
-
-        if (len(tabs) == 1) and (len(bodies) == 1):
-            # there is only one dashboard, so optimize out the tabbing
-            contents = bodies[0]
-        else:
-            contents = """
-             <div id="hometabs" >
-             <ul id="suit_form_tabs" class="nav nav-tabs nav-tabs-suit" data-tab-prefix="suit-tab">
-             %s
-             </ul>
-             %s
-             </div>
-            """ % ("\n".join(tabs), "\n".join(bodies))
-
-        t = template.Template(head_template + contents + self.tail_template)
-
-        response_kwargs = {}
-        response_kwargs.setdefault('content_type', self.content_type)
-        return self.response_class(
-            request=request,
-            template=t,
-            context=context,
-            **response_kwargs)
-
-    def singleDashboardView(self, request, id, context):
-        head_template = self.head_template
-        tail_template = self.tail_template
-
-        # if id is a number, load by datamodel,
-        # else look directly for the template
-        if(isInt(id)):
-            view = DashboardView.objects.get(id=id)
-            t = template.Template(head_template + self.embedDashboardView(view) + self.tail_template)
-        else:
-            t = template.Template(head_template + self.readTemplate("xos" + id) + self.tail_template)
-
-        response_kwargs = {}
-        response_kwargs.setdefault('content_type', self.content_type)
-        return self.response_class(
-            request=request,
-            template=t,
-            context=context,
-            **response_kwargs)
-
-    def singleFullView(self, request, id, context):
-        head_template = self.head_wholePage_template
-        tail_template = self.tail_template
-
-        view = DashboardView.objects.get(id=id)
-
-        t = template.Template(head_template + self.embedDashboardView(view) + self.tail_template)
-
-        response_kwargs = {}
-        response_kwargs.setdefault('content_type', self.content_type)
-        return self.response_class(
-            request=request,
-            template=t,
-            context=context,
-            **response_kwargs)
diff --git a/xos/core/dashboard/views/interactions.py b/xos/core/dashboard/views/interactions.py
deleted file mode 100644
index 22c30e6..0000000
--- a/xos/core/dashboard/views/interactions.py
+++ /dev/null
@@ -1,119 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from view_common import *
-
-class DashboardSliceInteractions(View):
-    def get(self, request, name="users", **kwargs):
-        colors = ["#005586", "#6ebe49", "orange", "#707170", "#00c4b3", "#077767", "dodgerblue", "#a79b94", "#c4e76a", "red"]
-
-        groups = []
-        matrix = []
-        slices = list(Slice.objects.all())
-
-        ids_by_slice = self.build_id_list(slices, name)
-
-        slices = [x for x in slices if (len(ids_by_slice[x])>0)]
-
-        for i,slice in enumerate(slices):
-            groups.append({"name": slice.name, "color": colors[i%len(colors)]})
-            row=self.buildMatrix(slice, slices, name, ids_by_slice)
-            matrix.append(row)
-
-        result = {"groups": groups, "matrix": matrix}
-
-        if name=="users":
-            result["title"] = "Slice interactions by user privilege"
-            result["objectName"] = "users"
-        elif name=="networks":
-            result["title"] = "Slice interactions by network membership"
-            result["objectName"] = "networks"
-        elif name=="sites":
-            result["title"] = "Slice interactions by site ownership"
-            result["objectName"] = "sites"
-        elif name=="instance_sites":
-            result["title"] = "Slice interactions by instance sites"
-            result["objectName"] = "sites"
-        elif name=="instance_nodes":
-            result["title"] = "Slice interactions by instance nodes"
-            result["objectName"] = "nodes"
-
-        return HttpResponse(json.dumps(result), content_type='application/javascript')
-
-    def build_id_list(self, slices, name):
-        ids_by_slice = {}
-        for slice in slices:
-            # build up a list of object ids that are used by each slice
-            ids_by_slice[slice] = self.getIds(slice, name)
-
-        return ids_by_slice
-
-    def buildMatrix(self, slice, slices, name, ids_by_slice):
-        not_only_my_ids = []
-
-        # build up a list of object ids that are used by other slices
-        for otherSlice in ids_by_slice.keys():
-            if (slice != otherSlice):
-                for id in ids_by_slice[otherSlice]:
-                    if not id in not_only_my_ids:
-                        not_only_my_ids.append(id)
-
-        # build up a list of ids that are used only by the slice, and not
-        # shared with any other slice
-        only_my_ids = []
-        for id in ids_by_slice[slice]:
-             if id not in not_only_my_ids:
-                  only_my_ids.append(id)
-
-        row = []
-        for otherSlice in ids_by_slice.keys():
-            if (otherSlice == slice):
-                row.append(len(only_my_ids))
-            else:
-                row.append(self.inCommonIds(ids_by_slice[slice], ids_by_slice[otherSlice]))
-
-        return row
-
-    def getIds(self, slice, name):
-        ids=[]
-        if name=="users":
-            for sp in slice.slice_privileges.all():
-                    if sp.user.id not in ids:
-                        ids.append(sp.user.id)
-        elif name=="networks":
-            for sp in slice.networkslices.all():
-                    if sp.network.id not in ids:
-                        ids.append(sp.network.id)
-        elif name=="sites":
-            ids = [slice.site.id]
-        elif name=="instance_sites":
-            for sp in slice.instances.all():
-                 if sp.node.site.id not in ids:
-                     ids.append(sp.node.site.id)
-        elif name=="instance_nodes":
-            for sp in slice.instances.all():
-                 if sp.node.id not in ids:
-                     ids.append(sp.node.id)
-        return ids
-
-    def inCommonIds(self, ids1, ids2):
-        count = 0
-        for id in ids1:
-            if id in ids2:
-                count+=1
-        return count
-
-
diff --git a/xos/core/dashboard/views/shell.py b/xos/core/dashboard/views/shell.py
deleted file mode 100644
index b13c1c3..0000000
--- a/xos/core/dashboard/views/shell.py
+++ /dev/null
@@ -1,107 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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 datetime
-import os
-import sys
-import time
-import json
-from django.http import HttpResponse, HttpResponseServerError, HttpResponseForbidden
-from django.views.generic import TemplateView, View
-from core.models import *
-from django.forms.models import model_to_dict
-
-def ensure_serializable(d):
-    d2={}
-    for (k,v) in d.items():
-        # datetime is not json serializable
-        if isinstance(v, datetime.datetime):
-            d2[k] = time.mktime(v.timetuple())
-        elif v.__class__.__name__ == "Geoposition":
-            pass
-        else:
-            d2[k] = v
-    return d2
-
-def instance_to_dict(instance):
-    d = model_to_dict(instance)
-    d["slice_id"] = instance.slice.id
-    d["node_id"] = instance.node.id
-    return d
-
-def slice_to_dict(slice):
-    d = model_to_dict(slice)
-    d["instances"] = [instance_to_dict(x) for x in slice.instances]
-    return d
-
-def node_to_dict(node):
-    d = model_to_dict(node)
-    d["instances"] = []
-
-
-class OpenCloudData:
-    def __init__(self, user):
-        self.loadAll()
-
-    def loadAll(self):
-        self.allNodes = list(Node.objects.all())
-        self.allSlices = list(Slice.objects.all())
-        self.allInstances = list(Instance.objects.all())
-        self.allSites = list(Site.objects.all())
-
-        self.site_id = {}
-        for site in self.allSites:
-            d = model_to_dict(site)
-            d["node_ids"] = []
-            d["slice_ids"] = []
-            self.site_id[site.id] = ensure_serializable(d)
-
-        self.node_id = {}
-        for node in self.allNodes:
-            d = model_to_dict(node)
-            d["instance_ids"] = []
-            self.node_id[node.id] = ensure_serializable(d)
-            self.site_id[node.site_id]["node_ids"].append(node.id)
-
-        self.slice_id = {}
-        for slice in self.allSlices:
-            d = model_to_dict(slice)
-            d["instance_ids"] = []
-            self.slice_id[slice.id] = ensure_serializable(d)
-            self.site_id[slice.site_id]["slice_ids"].append(site.id)
-
-        print self.slice_id.keys()
-
-        self.instance_id = {}
-        for instance in self.allInstances:
-            self.instance_id[instance.id] = model_to_dict(instance)
-
-            self.slice_id[instance.slice_id]["instance_ids"].append(instance.id)
-            self.node_id[instance.node_id]["instance_ids"].append(instance.id)
-
-    def get_opencloud_data(self):
-        return {"slices": self.slice_id.values(),
-                "instances": self.instance_id.values(),
-                "nodes": self.node_id.values(),
-                "sites": self.site_id.values()}
-
-class ShellDataView(View):
-    url = r'^shelldata/'
-
-    def get(self, request, **kwargs):
-        result = OpenCloudData(request.user).get_opencloud_data()
-
-        return HttpResponse(json.dumps(result), mimetype='application/json')
diff --git a/xos/core/dashboard/views/simulator.py b/xos/core/dashboard/views/simulator.py
deleted file mode 100644
index 9234b73..0000000
--- a/xos/core/dashboard/views/simulator.py
+++ /dev/null
@@ -1,34 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from view_common import *
-
-class SimulatorView(View):
-    def get(self, request, **kwargs):
-        sim = json.loads(file("/tmp/simulator.json","r").read())
-        text = "<html><head></head><body>"
-        text += "Iteration: %d<br>" % sim["iteration"]
-        text += "Elapsed since report %d<br><br>" % sim["elapsed_since_report"]
-        text += "<table border=1>"
-        text += "<tr><th>site</th><th>trend</th><th>weight</th><th>bytes_sent</th><th>hot</th></tr>"
-        for site in sim["site_load"].values():
-            text += "<tr>"
-            text += "<td>%s</td><td>%0.2f</td><td>%0.2f</td><td>%d</td><td>%0.2f</td>" % \
-                        (site["name"], site["trend"], site["weight"], site["bytes_sent"], site["load_frac"])
-            text += "</tr>"
-        text += "</table>"
-        text += "</body></html>"
-        return HttpResponse(text)
diff --git a/xos/core/dashboard/views/tenant.py b/xos/core/dashboard/views/tenant.py
deleted file mode 100644
index b1d972b..0000000
--- a/xos/core/dashboard/views/tenant.py
+++ /dev/null
@@ -1,467 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from view_common import *
-from core.models import *
-import functools
-from django.contrib.auth.models import BaseUserManager
-from django.core import serializers
-from django.core.mail import EmailMultiAlternatives
-import json
-
-BLESSED_DEPLOYMENTS = ["US-MaxPlanck", "US-GeorgiaTech", "US-Princeton", "US-Washington", "US-Stanford"]
-
-class RequestAccessView(View):
-    def post(self, request, *args, **kwargs):
-	email = request.POST.get("email", "0")
-	firstname = request.POST.get("firstname", "0")
-	lastname = request.POST.get("lastname", "0")
-	site = request.POST.get("site","0")
-        # see if it already exists
-        user=User.objects.filter(email=BaseUserManager.normalize_email(email))
-        if (user):
-             user = user[0]
-             if user.is_active:
-                 # force a new email to be sent
-                 user.is_registering=True
-                 user.save()
-                 return HttpResponse(json.dumps({"error": "already_approved"}), content_type='application/javascript')
-             else:
-                 return HttpResponse(json.dumps({"error": "already_pending"}), content_type='application/javascript')
-
-        user=User.deleted_objects.filter(email=BaseUserManager.normalize_email(email))
-        if (user):
-            return HttpResponse(json.dumps({"error": "is_deleted"}), content_type='application/javascript')
-
-	user = User(
-            email=BaseUserManager.normalize_email(email),
-            firstname=firstname,
-            lastname=lastname,
-	    is_active=False,
-            is_admin=False,
-            is_registering=True
-        )
-        user.save()
-	user.site=Site.objects.get(name=site)
-	user.save(update_fields=['site'])
-	sitePriv = SitePrivilege.objects.filter(site=user.site)
-	userId = user.id
-	userUrl = "http://"+request.get_host()+"/admin/core/user/"+str(userId)
-	for sp in sitePriv:
-		subject, from_email, to = 'Authorize OpenCloud User Account', 'support@opencloud.us', str(sp.user)
-		text_content = 'This is an important message.'
-		html_content = """<p>Please authorize the following user on site """+site+""": <br><br>User: """+firstname+""" """+lastname+"""<br>Email: """+email+"""<br><br>
-Check the checkbox next to Is Active property at <a href="""+userUrl+"""> this link</a> to authorize the user, and then click the Save button. If you do not recognize this individual, or otherwise do not want to approve this account, please ignore this email. If you do not approve this request in 48 hours, the account will automatically be deleted.</p>"""
-		msg = EmailMultiAlternatives(subject,text_content, from_email, [to])
-		msg.attach_alternative(html_content, "text/html")
-		msg.send()
-        return HttpResponse(serializers.serialize("json",[user,]), content_type='application/javascript')
-
-class TenantCreateSlice(View):
-    def post(self, request, *args, **kwargs):
-        if request.user.isReadOnlyUser():
-            return HttpResponseForbidden("User is in read-only mode")
-
-        sliceName = request.POST.get("sliceName", "0")
-        serviceClass = request.POST.get("serviceClass", "0")
-        imageName = request.POST.get("imageName", "0")
-        actionToDo = request.POST.get("actionToDo", "0")
-        networkPorts = request.POST.get("network","0")
-        mountDataSets = request.POST.get("mountDataSets","0")
-        privateVolume = request.POST.get("privateVolume","0")
-        userEmail = request.POST.get("userEmail","0")
-        if (actionToDo == "add"):
-           serviceClass = ServiceClass.objects.get(name=serviceClass)
-           site = request.user.site
-           image = Image.objects.get(name=imageName)
-           newSlice = Slice(name=sliceName,serviceClass=serviceClass,site=site,image_preference=image,mount_data_sets=mountDataSets)
-           newSlice.save()
-	   privateTemplate="Private"
-	   publicTemplate="Public shared IPv4"
-	   privateNetworkName = sliceName+"-"+privateTemplate
-	   publicNetworkName = sliceName+"-"+publicTemplate
-	   slice=Slice.objects.get(name=sliceName)
-	   addNetwork(privateNetworkName,privateTemplate,slice)
-	   addNetwork(publicNetworkName,publicTemplate,slice)
-	   addOrModifyPorts(networkPorts,sliceName)
-	   if privateVolume=="true":
-	   	privateVolForSlice(request.user,sliceName)
-	   slicePrivs=SlicePrivilege(user=User.objects.get(email=userEmail),slice=Slice.objects.get(name=sliceName),role=SliceRole.objects.get(role="admin"))
-           slicePrivs.save()
-        return HttpResponse(json.dumps("Slice created"), content_type='application/javascript')
-
-class TenantAddUser(View):
-    def post(self, request, *args, **kwargs):
-        if request.user.isReadOnlyUser():
-            return HttpResponseForbidden("User is in read-only mode")
-
-        sliceName = request.POST.get("sliceName", "0")
-        userEmail = request.POST.get("userEmail","0")
-        slicePrivs=SlicePrivilege(user=User.objects.get(email=userEmail),slice=Slice.objects.get(name=sliceName),role=SliceRole.objects.get(role="admin"))
-        slicePrivs.save()
-        return HttpResponse(json.dumps("Slice created"), content_type='application/javascript')
-
-def privateVolForSlice(user,sliceName):
-	if not hasPrivateVolume(sliceName):
-	   volumeName=createPrivateVolume(user,sliceName)
-	   readWrite="true"
-	   mountVolume(sliceName,volumeName,readWrite)
-
-class TenantUpdateSlice(View):
-    def post(self, request, *args, **kwargs):
-        if request.user.isReadOnlyUser():
-            return HttpResponseForbidden("User is in read-only mode")
-
-        sliceName = request.POST.get("sliceName", "0")
-        serviceClass = request.POST.get("serviceClass", "0")
-        imageName = request.POST.get("imageName", "0")
-        actionToDo = request.POST.get("actionToDo", "0")
-        networkPorts = request.POST.get("networkPorts","0")
-        dataSet = request.POST.get("dataSet","0")
-        privateVolume = request.POST.get("privateVolume","0")
-        slice = Slice.objects.all()
-        for entry in slice:
-                serviceClass = ServiceClass.objects.get(name=serviceClass)
-                if(entry.name==sliceName):
-                         if (actionToDo == "update"):
-                                setattr(entry,'serviceClass',serviceClass)
-                                setattr(entry,'image_preference',imageName)
-                                setattr(entry,'mount_data_sets',dataSet)
-                                entry.save()
-                                break
-	addOrModifyPorts(networkPorts,sliceName)
-	if privateVolume=="true":
-                privateVolForSlice(request.user,sliceName)
-        return HttpResponse(json.dumps("Slice updated"), content_type='application/javascript')
-
-def addNetwork(name,template,sliceName):
-	networkTemplate=NetworkTemplate.objects.get(name=template)
-	newNetwork = Network(name = name,
-                              template = networkTemplate,
-                              owner = sliceName)
-        newNetwork.save()
-	addNetworkSlice(newNetwork,sliceName)
-
-def addNetworkSlice(networkSlice,sliceName):
-	newNetworkSlice=NetworkSlice(network =networkSlice,
-				     slice=sliceName)
-	newNetworkSlice.save()
-
-def addOrModifyPorts(networkPorts,sliceName):
-	networkList = Network.objects.all()
-        networkInfo = []
-        if networkPorts:
-           for networkEntry in networkList:
-               networkSlices = networkEntry.slices.all()
-               for slice in networkSlices:
-                   if slice.name==sliceName:
-                          if networkEntry.template.name=="Public shared IPv4":
-                             setattr(networkEntry,'ports',networkPorts)
-                             networkEntry.save()
-
-def getTenantSliceInfo(user, tableFormat = False):
-    tenantSliceDetails = {}
-    tenantSliceData = getTenantInfo(user)
-    tenantServiceClassData = getServiceClassInfo(user)
-    if (tableFormat):
-       tenantSliceDetails['userSliceInfo'] = userSliceTableFormatter(tenantSliceData)
-       tenantSliceDetails['sliceServiceClass']=userSliceTableFormatter(tenantServiceClassData)
-    else:
-       tenantSliceDetails['userSliceInfo'] = tenantSliceData
-    tenantSliceDetails['sliceServiceClass']=userSliceTableFormatter(tenantServiceClassData)
-    tenantSliceDetails['image']=userSliceTableFormatter(getImageInfo(user))
-    tenantSliceDetails['deploymentSites']=userSliceTableFormatter(getDeploymentSites())
-    #tenantSliceDetails['sites'] = userSliceTableFormatter(getTenantSitesInfo())
-    tenantSliceDetails['mountDataSets'] = userSliceTableFormatter(getMountDataSets())
-    tenantSliceDetails['publicKey'] = getPublicKey(user)
-    tenantSliceDetails['availableSites']=userSliceTableFormatter(getAvailableSites())
-    tenantSliceDetails['role']=getUserRole(user)
-    tenantSliceDetails['siteUsers']=getSiteUsers(user)
-    return tenantSliceDetails
-
-def getSiteUsers(user):
-	users = User.objects.filter(site=user.site)
-	siteUsers=[]
-        for entry in users:
-		siteUsers.append(str(entry))
-	return siteUsers
-
-
-def getUserRole(user):
-	sp=SitePrivilege.objects.filter(user=user)
-	for entry in sp:
-		return str(entry.role)
-
-
-def getTenantInfo(user):
-    slices =Slice.objects.all()
-    userSliceInfo = []
-    for entry in slices:
-       if (entry.site == user.site):
-           sliceName = Slice.objects.get(id=entry.id).name
-           slice = Slice.objects.get(name=Slice.objects.get(id=entry.id).name)
-           sliceServiceClass = entry.serviceClass.name
-           preferredImage =  entry.image_preference
-           #sliceDataSet = entry.mount_data_sets
-           sliceNetwork = {}
-           numInstance = 0
-           sliceImage=""
-           sliceSite = {}
-           sliceNode = {}
-           sliceInstance= {}
-           #createPrivateVolume(user,sliceName)
-           available_sites = getAvailableSites()
-           for instance in slice.instances.all():
-                if instance.node.site.name in available_sites:
-                    sliceSite[instance.node.site.name] = sliceSite.get(instance.node.site.name,0) + 1
-                    sliceImage = instance.image.name
-                    sliceNode[str(instance)] = instance.node.name
-           numInstance = sum(sliceSite.values())
-           numSites = len(sliceSite)
-           userSliceInfo.append({'sliceName': sliceName,'sliceServiceClass': sliceServiceClass,'preferredImage':preferredImage,'numOfSites':numSites, 'sliceSite':sliceSite,'sliceImage':sliceImage,'numOfInstances':numInstance,'instanceNodePair':sliceNode})
-    return userSliceInfo
-
-def getTenantSitesInfo():
-        availableSites=getAvailableSites()
-	tenantSiteInfo=[]
-        for entry in Site.objects.all():
-            if entry.name in availableSites:
-		 tenantSiteInfo.append({'siteName':entry.name})
-	return tenantSiteInfo
-
-def getPublicKey(user):
-	users=User.objects.all()
-        for key in users:
-        	if (str(key.email)==str(user)):
-                    	sshKey = key.public_key
-        return sshKey
-
-def getServiceClassInfo(user):
-    serviceClassList = ServiceClass.objects.all()
-    sliceInfo = []
-    for entry in serviceClassList:
-          sliceInfo.append({'serviceClass':entry.name})
-    return sliceInfo
-
-def getImageInfo(user):
-    #imageList = Image.objects.all()
-    #imageInfo = []
-    #for imageEntry in imageList:
-          #imageInfo.append({'Image':imageEntry.name})
-    imageInfo = []
-    tempImageInfo = []
-    length = len(BLESSED_DEPLOYMENTS)
-    for deployment in Deployment.objects.all():
-        if deployment.name in BLESSED_DEPLOYMENTS:
-            for x in deployment.imagedeployments.all():
-                tempImageInfo.append(x.image.name)
-    temp = {}
-    for i in set(tempImageInfo):
-    	temp[i] = tempImageInfo.count(i)
-    for key in temp:
-	if temp[key]>1:
-		imageInfo.append(key)
-    return imageInfo
-
-def createPrivateVolume(user, sliceName):
-    caps = Volume.CAP_READ_DATA | Volume.CAP_WRITE_DATA | Volume.CAP_HOST_DATA
-    getattr(Volume.default_gateway_caps,"read data") | \
-           getattr(Volume.default_gateway_caps,"write data") | \
-           getattr(Volume.default_gateway_caps,"host files")
-    v = Volume(name="private_" + sliceName, owner_id=user, description="private volume for %s" % sliceName, blocksize=61440, private=True, archive=False, default_gateway_caps = caps)
-    v.save()
-    return v
-
-SYNDICATE_REPLICATE_PORTNUM = 1025
-
-def get_free_port():
-    inuse={}
-    inuse[SYNDICATE_REPLICATE_PORTNUM] = True
-    for vs in VolumeSlice.objects.all():
-        inuse[vs.peer_portnum]=True
-        inuse[vs.replicate_portnum]=True
-    for network in Network.objects.all():
-        if not network.ports:
-            continue
-        network_ports = [x.strip() for x in network.ports.split(",")]
-        for network_port in network_ports:
-            try:
-                inuse[int(network_port)] = True
-            except:
-                # in case someone has put a malformed port number in the list
-                pass
-    for i in range(1025, 65535):
-        if not inuse.get(i,False):
-            return i
-    return False
-
-def mountVolume(sliceName, volumeName, readWrite):
-    slice = Slice.objects.get(name=sliceName)
-    volume = Volume.objects.get(name=volumeName)
-    # choose some unused port numbers
-    flags = Volume.CAP_READ_DATA
-    if readWrite:
-        flags = flags | Volume.CAP_WRITE_DATA
-    vs = VolumeSlice(volume_id = volume, slice_id = slice, gateway_caps=flags, peer_portnum = get_free_port(), replicate_portnum = SYNDICATE_REPLICATE_PORTNUM)
-    vs.save()
-
-def hasPrivateVolume(sliceName):
-     slice = Slice.objects.get(name=sliceName)
-     for vs in VolumeSlice.objects.filter(slice_id=slice):
-         if vs.volume_id.private:
-             return True
-     return False
-
-def getMountDataSets():
-        dataSetInfo=[]
-        for volume in Volume.objects.all():
-            if not volume.private:
-                dataSetInfo.append({'DataSet': volume.name})
-
-        return dataSetInfo
-
-def getDeploymentSites():
-    deploymentList = Deployment.objects.all()
-    deploymentInfo = []
-    for entry in deploymentList:
-        deploymentInfo.append({'DeploymentSite':entry.name})
-    return deploymentInfo
-
-def getAvailableSites():
-    available_sites = []
-    for deployment in Deployment.objects.all():
-        if deployment.name in BLESSED_DEPLOYMENTS:
-            for x in deployment.sitedeployments.all():
-		if x.site.nodes.all():
-                	available_sites.append(x.site.name)
-    return list(set(available_sites))
-
-class TenantDeleteSliceView(View):
-        def post(self,request):
-                if request.user.isReadOnlyUser():
-                    return HttpResponseForbidden("User is in read-only mode")
-                sliceName = request.POST.get("sliceName",None)
-                slice = Slice.objects.get(name=sliceName)
-                #print slice, slice.id
-                sliceToDel=Slice(name=sliceName, id=slice.id)
-                sliceToDel.delete()
-                return HttpResponse(json.dumps("Slice deleted"), content_type='application/javascript')
-
-class TenantAddOrRemoveInstanceView(View):
-    """ Add or remove instances from a Slice
-
-        Arguments:
-            siteName - name of site. If not specified, XOS will pick the
-                       best site.,
-            actionToDo - [add | rem]
-            count - number of instances to add or remove
-            sliceName - name of slice
-            noAct - if set, no changes will be made to db, but result will still
-                    show which sites would have been modified.
-
-        Returns:
-            Dictionary of sites that were modified, and the count of nodes
-            that were added or removed at each site.
-    """
-    def post(self, request, *args, **kwargs):
-        siteName = request.POST.get("siteName", None)
-        actionToDo = request.POST.get("actionToDo", None)
-        count = int(request.POST.get("count","0"))
-	sliceName = request.POST.get("slice", None)
-	imageName = request.POST.get("image",None)
-        noAct = request.POST.get("noAct", False)
-
-        if not sliceName:
-            return HttpResponseServerError("No slice name given")
-
-        slice = Slice.objects.get(name=sliceName)
-	image = Image.objects.get(name=imageName)
-
-        if siteName:
-            siteList = [Site.objects.get(name=siteName)]
-        else:
-            siteList = None
-
-        if (actionToDo == "add"):
-            user_ip = request.GET.get("ip", get_ip(request))
-            if (siteList is None):
-                siteList = tenant_pick_sites(user, user_ip, slice, count)
-
-            sitesChanged = slice_increase_instances(request.user, user_ip, siteList, slice, image, count, noAct)
-        elif (actionToDo == "rem"):
-            sitesChanged = slice_decrease_instances(request.user, siteList, slice, count, noAct)
-        else:
-            return HttpResponseServerError("Unknown actionToDo %s" % actionToDo)
-
-        return HttpResponse(json.dumps(sitesChanged), content_type='application/javascript')
-
-    def get(self, request, *args, **kwargs):
-        request.POST = request.GET
-        return self.post(request, *args, **kwargs)  # for testing REST in browser
-        #return HttpResponseServerError("GET is not supported")
-
-class TenantPickSitesView(View):
-    """ primarily just for testing purposes """
-    def get(self, request, *args, **kwargs):
-        count = request.GET.get("count","0")
-	slice = request.GET.get("slice",None)
-        if slice:
-            slice = Slice.objects.get(name=slice)
-        ip = request.GET.get("ip", get_ip(request))
-        sites = tenant_pick_sites(request.user, user_ip=ip, count=0, slice=slice)
-        sites = [x.name for x in sites]
-        return HttpResponse(json.dumps(sites), content_type='application/javascript')
-
-def siteSortKey(site, slice=None, count=None, lat=None, lon=None):
-    # try to pick a site we're already using
-    has_instances_here=False
-    if slice:
-        for instance in slice.instances.all():
-            if instance.node.site.name == site.name:
-                has_instances_here=True
-
-    # Haversine method
-    d = haversine(site.location.latitude, site.location.longitude, lat, lon)
-
-    return (-has_instances_here, d)
-
-def tenant_pick_sites(user, user_ip=None, slice=None, count=None):
-    """ Returns list of sites, sorted from most favorable to least favorable """
-    lat=None
-    lon=None
-    try:
-        client_geo = GeoIP().city(user_ip)
-        if client_geo:
-            lat=float(client_geo["latitude"])
-            lon=float(client_geo["longitude"])
-    except:
-        print "exception in geo code"
-        traceback.print_exc()
-
-    available_sites = getAvailableSites()
-    sites = Site.objects.all()
-    sites = [x for x in sites if x.name in available_sites]
-    sites = sorted(sites, key=functools.partial(siteSortKey, slice=slice, count=count, lat=lat, lon=lon))
-
-    return sites
-
-class TenantViewData(View):
-    def get(self, request, **kwargs):
-        return HttpResponse(json.dumps(getTenantSliceInfo(request.user, True)), content_type='application/javascript')
-
-class RequestAccountView(View):
-    def get(self, request, **kwargs):
-        return HttpResponse()
diff --git a/xos/core/dashboard/views/test.py b/xos/core/dashboard/views/test.py
deleted file mode 100644
index 8aa6931..0000000
--- a/xos/core/dashboard/views/test.py
+++ /dev/null
@@ -1,21 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from view_common import *
-
-class DashboardUserSiteView(View):
-    def get(self, request, **kwargs):
-        return HttpResponse(json.dumps(getDashboardContext(request.user, tableFormat=True)), content_type='application/javascript')
diff --git a/xos/core/dashboard/views/view_common.py b/xos/core/dashboard/views/view_common.py
deleted file mode 100644
index 3a82062..0000000
--- a/xos/core/dashboard/views/view_common.py
+++ /dev/null
@@ -1,184 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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 os
-import sys
-from django.views.generic import TemplateView, View
-import datetime
-from pprint import pprint
-import json
-from services.syndicate_storage.models import *
-from core.models import *
-from operator import attrgetter
-from django import template
-from django.views.decorators.csrf import csrf_exempt
-from django.http import HttpResponse, HttpResponseServerError, HttpResponseForbidden
-from django.core import urlresolvers
-from django.contrib.gis.geoip import GeoIP
-from django.db.models import Q
-from ipware.ip import get_ip
-from operator import itemgetter, attrgetter
-import traceback
-import math
-
-def getDashboardContext(user, context={}, tableFormat = False):
-        context = {}
-
-        userSliceData = getSliceInfo(user)
-        if (tableFormat):
-            context['userSliceInfo'] = userSliceTableFormatter(userSliceData)
-        else:
-            context['userSliceInfo'] = userSliceData
-
-        (dashboards, unusedDashboards)= getDashboards(user)
-        unusedDashboards=[x for x in unusedDashboards if x!="Customize"]
-        context['dashboards'] = dashboards
-        context['unusedDashboards'] = unusedDashboards
-
-        return context
-
-def getDashboards(user):
-    dashboards = user.get_dashboards()
-
-    dashboard_names = [d.name for d in dashboards]
-
-    unused_dashboard_names = []
-    for dashboardView in DashboardView.objects.all():
-        # do not show disabled dashboard views
-        if not dashboardView.enabled:
-            continue
-        if not dashboardView.name in dashboard_names:
-            unused_dashboard_names.append(dashboardView.name)
-
-    return (dashboard_names, unused_dashboard_names)
-
-def getSliceInfo(user):
-    sliceList = Slice.objects.all()
-    slicePrivs = SlicePrivilege.objects.filter(user=user)
-    userSliceInfo = []
-    for entry in slicePrivs:
-
-        slice = Slice.objects.filter(id=entry.slice.id)
-        if not slice:
-            # the privilege is to a slice that doesn't exist
-            print "data model consistency problem, slice %s doesn't exist" % entry.slice.id
-            continue
-        slice = slice[0]
-        slicename = slice.name
-        instanceList=Instance.objects.all()
-        sites_used = {}
-        for instance in slice.instances.all():
-             #sites_used['deploymentSites'] = instance.node.deployment.name
-             # sites_used[instance.image.name] = instance.image.name
-             sites_used[instance.node.site_deployment.site] = 1 #instance.numberCores
-        sliceid = Slice.objects.get(id=entry.slice.id).id
-        try:
-            instanceList = Instance.objects.filter(slice=entry.slice.id)
-            siteList = {}
-            for x in instanceList:
-               if x.node.site_deployment.site not in siteList:
-                  siteList[x.node.site_deployment.site] = 1
-            instancecount = len(instanceList)
-            sitecount = len(siteList)
-        except:
-            traceback.print_exc()
-            instancecount = 0
-            sitecount = 0
-
-        userSliceInfo.append({'slicename': slicename, 'sliceid':sliceid,
-                              'sitesUsed':sites_used,
-                              'role': SliceRole.objects.get(id=entry.role.id).role,
-                              'instancecount': instancecount,
-                              'sitecount':sitecount})
-
-    return userSliceInfo
-
-def slice_increase_instances(user, user_ip, siteList, slice, image, count, noAct=False):
-    sitesChanged = {}
-
-    # let's compute how many instances are in use in each node of each site
-    for site in siteList:
-        site.nodeList = list(site.nodes.all())
-        for node in site.nodeList:
-            node.instanceCount = 0
-            for instance in node.instances.all():
-                 if instance.slice.id == slice.id:
-                     node.instanceCount = node.instanceCount + 1
-
-    # Allocate instances to nodes
-    # for now, assume we want to allocate all instances from the same site
-    nodes = siteList[0].nodeList
-    while (count>0):
-        # Sort the node list by number of instances per node, then pick the
-        # node with the least number of instances.
-        nodes = sorted(nodes, key=attrgetter("instanceCount"))
-        node = nodes[0]
-
-        print "adding instance at node", node.name, "of site", node.site.name
-
-        if not noAct:
-            instance = Instance(name=node.name,
-                        slice=slice,
-                        node=node,
-                        image = image,
-                        creator = User.objects.get(email=user),
-                        deploymentNetwork=node.deployment)
-            instance.save()
-
-        node.instanceCount = node.instanceCount + 1
-
-        count = count - 1
-
-        sitesChanged[node.site.name] = sitesChanged.get(node.site.name,0) + 1
-
-    return sitesChanged
-
-def slice_decrease_instances(user, siteList, slice, count, noAct=False):
-    sitesChanged = {}
-    if siteList:
-        siteNames = [site.name for site in siteList]
-    else:
-        siteNames = None
-
-    for instance in list(slice.instances.all()):
-        if count>0:
-            if(not siteNames) or (instance.node.site.name in siteNames):
-                instance.delete()
-                print "deleting instance",instance.name,"at node",instance.node.name
-                count=count-1
-                sitesChanged[instance.node.site.name] = sitesChanged.get(instance.node.site.name,0) - 1
-
-    return sitesChanged
-
-def haversine(site_lat, site_lon, lat, lon):
-    d=0
-    if lat and lon and site_lat and site_lon:
-        site_lat = float(site_lat)
-        site_lon = float(site_lon)
-        lat = float(lat)
-        lon = float(lon)
-        R = 6378.1
-        a = math.sin( math.radians((lat - site_lat)/2.0) )**2 + math.cos( math.radians(lat) )*math.cos( math.radians(site_lat) )*(math.sin( math.radians((lon - site_lon)/2.0 ) )**2)
-        c = 2 * math.atan2( math.sqrt(a), math.sqrt(1 - a) )
-        d = R * c
-
-    return d
-
-def userSliceTableFormatter(data):
-    formattedData = {
-                     'rows' : data
-                    }
-    return formattedData
diff --git a/xos/core/fixtures/__init__.py b/xos/core/fixtures/__init__.py
deleted file mode 100644
index d4e8062..0000000
--- a/xos/core/fixtures/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
diff --git a/xos/core/fixtures/core_initial_data.json b/xos/core/fixtures/core_initial_data.json
deleted file mode 100644
index 01ff999..0000000
--- a/xos/core/fixtures/core_initial_data.json
+++ /dev/null
@@ -1,22 +0,0 @@
-[
-{
-    "fields": {
-        "updated": "2015-02-17T22:06:39.361Z",
-        "membershipFee": 0,
-        "policed": null,
-        "membershipFeeMonths": 12,
-        "created": "2015-02-17T22:06:39.361Z",
-        "deleted": false,
-        "description": "Best Effort",
-        "upgradeFrom": [],
-        "commitment": 365,
-        "name": "Best Effort",
-        "backend_register": "{}",
-        "backend_status": "0 - Provisioning in progress",
-        "upgradeRequiresApproval": false,
-        "enacted": null
-    },
-    "model": "core.serviceclass",
-    "pk": 1
-}
-]
diff --git a/xos/core/fixtures/demo_data.json b/xos/core/fixtures/demo_data.json
deleted file mode 100644
index 1045378..0000000
--- a/xos/core/fixtures/demo_data.json
+++ /dev/null
@@ -1,57634 +0,0 @@
-[
-{
-    "pk": 3, 
-    "model": "core.service", 
-    "fields": {
-        "updated": "2013-11-26T12:45:24.212Z", 
-        "description": "Used to help accelerate delivery of content through the CDN.", 
-        "created": "2013-11-26T12:45:24.212Z", 
-        "deleted": true, 
-        "enabled": true, 
-        "name": "HPC Service", 
-        "versionNumber": "1.0", 
-        "published": true, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.service", 
-    "fields": {
-        "updated": "2013-11-26T12:45:59.003Z", 
-        "description": "Service to help load balance and direct traffic flow to content within the CDN", 
-        "created": "2013-11-26T12:45:59.003Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "name": "Request Router Service", 
-        "versionNumber": "1.0", 
-        "published": true, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.service", 
-    "fields": {
-        "updated": "2013-12-04T22:51:07.137Z", 
-        "description": "Syndicate Shared Filesystem.", 
-        "created": "2013-12-04T22:51:07.137Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "name": "Syndicate", 
-        "versionNumber": "", 
-        "published": true, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.service", 
-    "fields": {
-        "updated": "2013-12-13T21:48:58.304Z", 
-        "description": "A provisioning service for long-term experiments.", 
-        "created": "2013-12-13T21:48:58.304Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "name": "Raven", 
-        "versionNumber": "1.0", 
-        "published": true, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 11, 
-    "model": "core.service", 
-    "fields": {
-        "updated": "2014-05-20T18:56:51.847Z", 
-        "description": "Cassandra distributed database management system", 
-        "created": "2014-05-20T18:56:51.847Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "name": "Cassandra", 
-        "versionNumber": "2.0.7", 
-        "published": true, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 12, 
-    "model": "core.service", 
-    "fields": {
-        "updated": "2014-05-20T18:57:33.778Z", 
-        "description": "KairosDB Time Series Database Service", 
-        "created": "2014-05-20T18:57:33.778Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "name": "KairosDB", 
-        "versionNumber": "0.9.3", 
-        "published": true, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 13, 
-    "model": "core.service", 
-    "fields": {
-        "updated": "2014-05-20T18:58:53.563Z", 
-        "description": "Nagios Monitoring Service", 
-        "created": "2014-05-20T18:58:53.563Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "name": "Nagios", 
-        "versionNumber": "4.0.6", 
-        "published": true, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 14, 
-    "model": "core.service", 
-    "fields": {
-        "updated": "2014-08-27T22:33:02.231Z", 
-        "description": "", 
-        "created": "2014-08-27T22:33:02.231Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "name": "HPC Service", 
-        "versionNumber": "2.9", 
-        "published": true, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-12-17T18:00:47.910Z", 
-        "name": "Stanford", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.stanford.edu/", 
-        "login_base": "stanford", 
-        "location": "37.4294,-122.17200000000003", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 9, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-12-17T18:00:38.431Z", 
-        "name": "Washington", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "https://www.washington.edu/", 
-        "login_base": "wash", 
-        "location": "47.6531,-122.31299999999999", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 10, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-12-17T18:00:28.495Z", 
-        "name": "Princeton", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://princeton.edu/", 
-        "login_base": "princeton", 
-        "location": "40.3502,-74.6524", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 11, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-12-17T18:00:18.964Z", 
-        "name": "GeorgiaTech", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.gatech.edu/", 
-        "login_base": "gt", 
-        "location": "33.7772,-84.39760000000001", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 12, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-12-17T18:00:07.704Z", 
-        "name": "MaxPlanck", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.mpi-sws.mpg.de/", 
-        "login_base": "mpisws", 
-        "location": "49.14,6.588999999999942", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 13, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "I2 Atlanta", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.internet2.edu", 
-        "login_base": "i2atlanta", 
-        "location": "33.0075,-84.0038", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 14, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "I2 Chicago", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.internet2.edu", 
-        "login_base": "i2chic", 
-        "location": "41.0085,-87.0065", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 15, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "I2 Houston", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.internet2.edu", 
-        "login_base": "i2hous", 
-        "location": "29.0077,-95.0037", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 16, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "I2 Kansas City", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.internet2.edu", 
-        "login_base": "i2kans", 
-        "location": "39.0012,-94.0063", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 17, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "I2 Los Angeles", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.internet2.edu", 
-        "login_base": "i2losa", 
-        "location": "33.2505,-117.503", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 18, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "I2 New York", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.internet2.edu", 
-        "login_base": "i2newy", 
-        "location": "40.72,-73.99", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 19, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "I2 Salt Lake City", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.internet2.edu", 
-        "login_base": "i2salt", 
-        "location": "40.7659,-111.844", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 20, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2014-03-22T06:27:07.824Z", 
-        "name": "I2 Seattle", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.internet2.edu/", 
-        "login_base": "i2seat", 
-        "location": "47.6531,-122.31299999999999", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 21, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "I2 Washington DC", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.internet2.edu", 
-        "login_base": "i2wash", 
-        "location": "38.009,-77.0003", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 22, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-12-17T17:30:14.491Z", 
-        "name": "ON.Lab", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.onlab.us/", 
-        "login_base": "onlab", 
-        "location": "37.452955,-122.18176599999998", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 23, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-12-17T18:21:43.870Z", 
-        "name": "I2 Singapore", 
-        "created": "2013-12-17T17:08:49.669Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.internet2.edu/", 
-        "login_base": "i2singapore", 
-        "location": "1.33544,103.88999999999999", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 24, 
-    "model": "core.site", 
-    "fields": {
-        "updated": "2013-12-17T18:08:01.373Z", 
-        "name": "Arizona", 
-        "created": "2013-12-17T18:07:14.190Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "longitude": null, 
-        "site_url": "http://www.cs.arizona.edu/", 
-        "login_base": "arizona", 
-        "location": "32.2333,-110.94799999999998", 
-        "latitude": null, 
-        "is_public": true, 
-        "backend_status": "Provisioning in progress", 
-        "abbreviated_name": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.siterole", 
-    "fields": {
-        "updated": "2013-12-17T18:08:54.842Z", 
-        "created": "2013-12-17T18:08:54.842Z", 
-        "deleted": false, 
-        "role": "pi", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.siterole", 
-    "fields": {
-        "updated": "2014-04-22T11:34:09.655Z", 
-        "created": "2014-04-22T11:34:09.655Z", 
-        "deleted": false, 
-        "role": "admin", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.siterole", 
-    "fields": {
-        "updated": "2014-04-22T11:34:27.403Z", 
-        "created": "2014-04-22T11:34:27.403Z", 
-        "deleted": false, 
-        "role": "tech", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.siterole", 
-    "fields": {
-        "updated": "2014-04-22T11:34:39.770Z", 
-        "created": "2014-04-22T11:34:39.770Z", 
-        "deleted": false, 
-        "role": "billing", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.deployment", 
-    "fields": {
-        "accessControl": "allow all", 
-        "updated": "2013-04-03T22:57:23.015Z", 
-        "admin_user": null, 
-        "name": "US-Stanford", 
-        "created": "2013-04-03T22:57:23.015Z", 
-        "deleted": false, 
-        "auth_url": null, 
-        "admin_password": null, 
-        "backend_status": "Provisioning in progress", 
-        "admin_tenant": null, 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "core.deployment", 
-    "fields": {
-        "accessControl": "allow all", 
-        "updated": "2013-04-03T22:57:23.015Z", 
-        "admin_user": null, 
-        "name": "US-Washington", 
-        "created": "2013-04-03T22:57:23.015Z", 
-        "deleted": false, 
-        "auth_url": null, 
-        "admin_password": null, 
-        "backend_status": "Provisioning in progress", 
-        "admin_tenant": null, 
-        "enacted": null
-    }
-},
-{
-    "pk": 7, 
-    "model": "core.deployment", 
-    "fields": {
-        "accessControl": "allow all", 
-        "updated": "2013-04-03T22:57:23.015Z", 
-        "admin_user": null, 
-        "name": "US-Princeton", 
-        "created": "2013-04-03T22:57:23.015Z", 
-        "deleted": false, 
-        "auth_url": null, 
-        "admin_password": null, 
-        "backend_status": "Provisioning in progress", 
-        "admin_tenant": null, 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.deployment", 
-    "fields": {
-        "accessControl": "allow all", 
-        "updated": "2013-04-03T22:57:23.015Z", 
-        "admin_user": null, 
-        "name": "US-GeorgiaTech", 
-        "created": "2013-04-03T22:57:23.015Z", 
-        "deleted": false, 
-        "auth_url": null, 
-        "admin_password": null, 
-        "backend_status": "Provisioning in progress", 
-        "admin_tenant": null, 
-        "enacted": null
-    }
-},
-{
-    "pk": 9, 
-    "model": "core.deployment", 
-    "fields": {
-        "accessControl": "allow all", 
-        "updated": "2013-04-03T22:57:23.015Z", 
-        "admin_user": null, 
-        "name": "EU-MaxPlanck", 
-        "created": "2013-04-03T22:57:23.015Z", 
-        "deleted": false, 
-        "auth_url": null, 
-        "admin_password": null, 
-        "backend_status": "Provisioning in progress", 
-        "admin_tenant": null, 
-        "enacted": null
-    }
-},
-{
-    "pk": 10, 
-    "model": "core.deployment", 
-    "fields": {
-        "accessControl": "allow all", 
-        "updated": "2013-04-03T22:57:23.015Z", 
-        "admin_user": null, 
-        "name": "Internet2", 
-        "created": "2013-04-03T22:57:23.015Z", 
-        "deleted": false, 
-        "auth_url": null, 
-        "admin_password": null, 
-        "backend_status": "Provisioning in progress", 
-        "admin_tenant": null, 
-        "enacted": null
-    }
-},
-{
-    "pk": 11, 
-    "model": "core.deployment", 
-    "fields": {
-        "accessControl": "allow all", 
-        "updated": "2014-05-22T22:49:27.623Z", 
-        "admin_user": null, 
-        "name": "Amazon EC2", 
-        "created": "2014-05-22T22:49:27.623Z", 
-        "deleted": false, 
-        "auth_url": null, 
-        "admin_password": null, 
-        "backend_status": "Provisioning in progress", 
-        "admin_tenant": null, 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-07T23:52:01.453Z", 
-        "created": "2014-05-07T23:52:01.453Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 22, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-07T23:52:01.455Z", 
-        "created": "2014-05-07T23:52:01.455Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 22, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-07T23:52:01.456Z", 
-        "created": "2014-05-07T23:52:01.456Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 22, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-07T23:52:01.457Z", 
-        "created": "2014-05-07T23:52:01.456Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 22, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-07T23:52:01.457Z", 
-        "created": "2014-05-07T23:52:01.457Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 22, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-07T23:52:01.458Z", 
-        "created": "2014-05-07T23:52:01.458Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 22, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 7, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:00:37.305Z", 
-        "created": "2014-05-08T00:00:37.305Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 23, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:01:18.181Z", 
-        "created": "2014-05-08T00:01:18.181Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 21, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 9, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:01:29.768Z", 
-        "created": "2014-05-08T00:01:29.768Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 20, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 10, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:01:52.173Z", 
-        "created": "2014-05-08T00:01:52.173Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 19, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 11, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:02:03.435Z", 
-        "created": "2014-05-08T00:02:03.435Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 18, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 12, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:02:16.038Z", 
-        "created": "2014-05-08T00:02:16.038Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 17, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 13, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:02:33.626Z", 
-        "created": "2014-05-08T00:02:33.626Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 16, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 14, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:02:46.549Z", 
-        "created": "2014-05-08T00:02:46.549Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 15, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 15, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:03:01.445Z", 
-        "created": "2014-05-08T00:03:01.445Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 14, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 16, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:03:18.238Z", 
-        "created": "2014-05-08T00:03:18.238Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 13, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 17, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:03:32.156Z", 
-        "created": "2014-05-08T00:03:32.156Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 18, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:03:45.449Z", 
-        "created": "2014-05-08T00:03:45.448Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 19, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:03:59.510Z", 
-        "created": "2014-05-08T00:03:59.510Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 20, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:04:12.516Z", 
-        "created": "2014-05-08T00:04:12.516Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 21, 
-    "model": "core.sitedeployment", 
-    "fields": {
-        "updated": "2014-05-08T00:04:25.576Z", 
-        "created": "2014-05-08T00:04:25.576Z", 
-        "deleted": false, 
-        "tenant_id": null, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.dashboardview", 
-    "fields": {
-        "updated": "2014-08-28T22:16:18.642Z", 
-        "name": "Developer", 
-        "created": "2014-05-19T22:11:11.408Z", 
-        "deleted": false, 
-        "url": "template:xosDeveloper_datatables", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.dashboardview", 
-    "fields": {
-        "updated": "2014-05-19T22:11:32.782Z", 
-        "name": "CDN Operations", 
-        "created": "2014-05-19T22:11:32.781Z", 
-        "deleted": false, 
-        "url": "template:cdnoperations", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.dashboardview", 
-    "fields": {
-        "updated": "2014-05-19T22:11:46.731Z", 
-        "name": "Tenant", 
-        "created": "2014-05-19T22:11:46.731Z", 
-        "deleted": false, 
-        "url": "template:tenant", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.dashboardview", 
-    "fields": {
-        "updated": "2014-05-19T22:11:59.956Z", 
-        "name": "Historical", 
-        "created": "2014-05-19T22:11:59.956Z", 
-        "deleted": false, 
-        "url": "template:hpc_historical", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.dashboardview", 
-    "fields": {
-        "updated": "2014-05-20T00:32:44.462Z", 
-        "name": "Customize", 
-        "created": "2014-05-20T00:32:44.462Z", 
-        "deleted": false, 
-        "url": "template:customize", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "core.dashboardview", 
-    "fields": {
-        "updated": "2014-05-20T00:33:32.454Z", 
-        "name": "Slice Interactions", 
-        "created": "2014-05-20T00:33:32.454Z", 
-        "deleted": false, 
-        "url": "template:slice_interactions", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 7, 
-    "model": "core.dashboardview", 
-    "fields": {
-        "updated": "2014-05-26T23:12:15.410Z", 
-        "name": "CDN Nodes", 
-        "created": "2014-05-20T00:33:52.101Z", 
-        "deleted": false, 
-        "url": "template:cdn_nodes", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.dashboardview", 
-    "fields": {
-        "updated": "2014-06-18T00:00:43.149Z", 
-        "name": "nagios", 
-        "created": "2014-06-18T00:00:43.149Z", 
-        "deleted": false, 
-        "url": "http://nagiosadmin:letmein@node52.princeton.vicci.org:8088/nagios/cgi-bin/status.cgi?host=all", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 9, 
-    "model": "core.dashboardview", 
-    "fields": {
-        "updated": "2014-06-19T01:34:07.897Z", 
-        "name": "shell", 
-        "created": "2014-06-19T01:34:07.897Z", 
-        "deleted": false, 
-        "url": "template:shell", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.user", 
-    "fields": {
-        "username": "padmin@vicci.org", 
-        "public_key": null, 
-        "updated": "2013-11-26T12:36:49.829Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "OpenCloud", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Admin", 
-        "created": "2013-11-26T12:36:49.816Z", 
-        "is_active": true, 
-        "site": null, 
-        "phone": null, 
-        "is_staff": true, 
-        "last_login": "2014-06-17T11:07:08.691Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$v5qKhIyhSQ2N$V8vh2mkqYdjQib6d2jBkpwV57eMBfhd/9eiXqaDLUWg=", 
-        "email": "padmin@vicci.org", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.user", 
-    "fields": {
-        "username": "tmack@cs.princeton.edu", 
-        "public_key": "", 
-        "updated": "2014-03-23T23:10:57.378Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Tony", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Mack", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 10, 
-        "phone": "", 
-        "is_staff": true, 
-        "last_login": "2013-12-14T03:21:24.872Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", 
-        "email": "tmack@cs.princeton.edu", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.user", 
-    "fields": {
-        "username": "mhw@cs.princeton.edu", 
-        "public_key": "", 
-        "updated": "2014-03-23T23:10:01.387Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Mike", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Wawrzoniak", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 10, 
-        "phone": "", 
-        "is_staff": true, 
-        "last_login": "2013-12-04T20:46:15.904Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", 
-        "email": "mhw@cs.princeton.edu", 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.user", 
-    "fields": {
-        "username": "acb@cs.princeton.edu", 
-        "public_key": "", 
-        "updated": "2014-03-23T23:09:34.844Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Andy", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Bavier", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 10, 
-        "phone": "", 
-        "is_staff": true, 
-        "last_login": "2014-05-28T14:02:29.996Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", 
-        "email": "acb@cs.princeton.edu", 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.user", 
-    "fields": {
-        "username": "sapanb@cs.princeton.edu", 
-        "public_key": "", 
-        "updated": "2014-03-23T23:10:35.450Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Sapan", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Bhatia", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 10, 
-        "phone": "", 
-        "is_staff": true, 
-        "last_login": "2014-05-28T01:03:05.136Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", 
-        "email": "sapanb@cs.princeton.edu", 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "core.user", 
-    "fields": {
-        "username": "jcnelson@cs.princeton.edu", 
-        "public_key": "", 
-        "updated": "2013-12-16T15:44:27.429Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Jude", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Nelson", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 10, 
-        "phone": "", 
-        "is_staff": true, 
-        "last_login": "2014-05-29T21:59:40.654Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", 
-        "email": "jcnelson@cs.princeton.edu", 
-        "enacted": null
-    }
-},
-{
-    "pk": 7, 
-    "model": "core.user", 
-    "fields": {
-        "username": "llp@onlab.us", 
-        "public_key": "xxx", 
-        "updated": "2014-05-27T01:55:57.760Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Larry", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Peterson", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 22, 
-        "phone": "", 
-        "is_staff": true, 
-        "last_login": "2014-06-06T15:40:08.702Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$EOrqG6KzVO8z$4jSJMN/35PKPmJkDEHjAY1c/mDpBfoW1U8XAfk1eDLk=", 
-        "email": "llp@onlab.us", 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.user", 
-    "fields": {
-        "username": "scott@onlab.us", 
-        "public_key": null, 
-        "updated": "2013-09-22T21:47:30.993Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Scott", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Baker", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 22, 
-        "phone": null, 
-        "is_staff": true, 
-        "last_login": "2014-08-28T22:15:47.068Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$12000$UBSotlGIN3iy$qqjsuWO+n//Fh/N5VIrnV6pnCNkxrTnRddCnSsAL3Dk=", 
-        "email": "scott@onlab.us", 
-        "enacted": null
-    }
-},
-{
-    "pk": 9, 
-    "model": "core.user", 
-    "fields": {
-        "username": "ali@onlab.us", 
-        "public_key": null, 
-        "updated": "2013-09-22T21:47:30.993Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Ali", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Al-Shabibi", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 22, 
-        "phone": null, 
-        "is_staff": true, 
-        "last_login": "2013-09-22T21:48:01.047Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", 
-        "email": "ali@onlab.us", 
-        "enacted": null
-    }
-},
-{
-    "pk": 10, 
-    "model": "core.user", 
-    "fields": {
-        "username": "bill@onlab.us", 
-        "public_key": null, 
-        "updated": "2013-09-22T21:47:30.993Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Bill", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Snow", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 22, 
-        "phone": null, 
-        "is_staff": true, 
-        "last_login": "2013-09-22T21:48:01.047Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", 
-        "email": "bill@onlab.us", 
-        "enacted": null
-    }
-},
-{
-    "pk": 11, 
-    "model": "core.user", 
-    "fields": {
-        "username": "guru@onlab.us", 
-        "public_key": null, 
-        "updated": "2013-09-22T21:47:30.993Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Guru", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Parulkar", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 22, 
-        "phone": null, 
-        "is_staff": true, 
-        "last_login": "2013-09-22T21:48:01.047Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", 
-        "email": "guru@onlab.us", 
-        "enacted": null
-    }
-},
-{
-    "pk": 12, 
-    "model": "core.user", 
-    "fields": {
-        "username": "marc@onlab.us", 
-        "public_key": null, 
-        "updated": "2013-09-22T21:47:30.993Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Marc", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Fiuczynski", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 22, 
-        "phone": null, 
-        "is_staff": true, 
-        "last_login": "2013-09-22T21:48:01.047Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", 
-        "email": "marc@onlab.us", 
-        "enacted": null
-    }
-},
-{
-    "pk": 13, 
-    "model": "core.user", 
-    "fields": {
-        "username": "siobhan@onlab.us", 
-        "public_key": null, 
-        "updated": "2013-09-22T21:47:30.993Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Siobhan", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Tully", 
-        "created": "2013-09-22T21:47:30.959Z", 
-        "is_active": true, 
-        "site": 22, 
-        "phone": null, 
-        "is_staff": true, 
-        "last_login": "2013-09-22T21:48:01.047Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", 
-        "email": "siobhan@onlab.us", 
-        "enacted": null
-    }
-},
-{
-    "pk": 14, 
-    "model": "core.user", 
-    "fields": {
-        "username": "demo@onlab.us", 
-        "public_key": "", 
-        "updated": "2014-05-29T22:27:54.841Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": true, 
-        "firstname": "Demo", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "OpenCloud", 
-        "created": "2013-12-06T11:25:41.211Z", 
-        "is_active": true, 
-        "site": 22, 
-        "phone": "", 
-        "is_staff": true, 
-        "last_login": "2014-06-18T08:35:13.300Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$jaLSTW2ksHEN$HDpjDKieFDjMvtV5wbF/ow3zfq8EqcFtNXLfuo+150s=", 
-        "email": "demo@onlab.us", 
-        "enacted": null
-    }
-},
-{
-    "pk": 15, 
-    "model": "core.user", 
-    "fields": {
-        "username": "jhh@cs.arizona.edu", 
-        "public_key": "", 
-        "updated": "2013-12-17T18:08:58.288Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "John", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Hartman", 
-        "created": "2013-12-17T18:08:01.381Z", 
-        "is_active": true, 
-        "site": 24, 
-        "phone": "", 
-        "is_staff": true, 
-        "last_login": "2013-12-17T18:08:01.356Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "!", 
-        "email": "jhh@cs.arizona.edu", 
-        "enacted": null
-    }
-},
-{
-    "pk": 16, 
-    "model": "core.user", 
-    "fields": {
-        "username": "parichar@akamai.com", 
-        "public_key": "", 
-        "updated": "2014-05-27T15:18:09.991Z", 
-        "backend_status": "Provisioning in progress", 
-        "is_readonly": false, 
-        "firstname": "Patrick", 
-        "user_url": null, 
-        "deleted": false, 
-        "lastname": "Richardson", 
-        "created": "2014-05-27T15:17:26.928Z", 
-        "is_active": true, 
-        "site": 22, 
-        "phone": "", 
-        "is_staff": true, 
-        "last_login": "2014-05-27T15:25:28.998Z", 
-        "timezone": "America/New_York", 
-        "is_admin": true, 
-        "password": "pbkdf2_sha256$10000$mEYJIb6cxVqC$cA/LHCpZdYPGvnSs9wCHrgyyenBrK8Y/diHBKhFOnO0=", 
-        "email": "parichar@akamai.com", 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-29T22:27:54.890Z", 
-        "created": "2014-05-23T22:03:14.097Z", 
-        "deleted": false, 
-        "dashboardView": 1, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "order": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-29T22:27:54.910Z", 
-        "created": "2014-05-23T22:03:14.102Z", 
-        "deleted": false, 
-        "dashboardView": 2, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "order": 2, 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-29T22:27:54.919Z", 
-        "created": "2014-05-23T22:03:14.106Z", 
-        "deleted": false, 
-        "dashboardView": 4, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "order": 3, 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-29T22:27:54.927Z", 
-        "created": "2014-05-23T22:03:14.110Z", 
-        "deleted": false, 
-        "dashboardView": 6, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "order": 4, 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-29T22:27:54.936Z", 
-        "created": "2014-05-23T22:03:14.115Z", 
-        "deleted": false, 
-        "dashboardView": 3, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "order": 0, 
-        "enacted": null
-    }
-},
-{
-    "pk": 24, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-27T15:31:48.271Z", 
-        "created": "2014-05-27T15:31:48.271Z", 
-        "deleted": false, 
-        "dashboardView": 3, 
-        "user": 16, 
-        "backend_status": "Provisioning in progress", 
-        "order": 0, 
-        "enacted": null
-    }
-},
-{
-    "pk": 25, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-27T15:31:48.316Z", 
-        "created": "2014-05-27T15:31:48.316Z", 
-        "deleted": false, 
-        "dashboardView": 2, 
-        "user": 16, 
-        "backend_status": "Provisioning in progress", 
-        "order": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 26, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-27T15:31:48.366Z", 
-        "created": "2014-05-27T15:31:48.366Z", 
-        "deleted": false, 
-        "dashboardView": 7, 
-        "user": 16, 
-        "backend_status": "Provisioning in progress", 
-        "order": 2, 
-        "enacted": null
-    }
-},
-{
-    "pk": 36, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-31T00:22:19.941Z", 
-        "created": "2014-05-31T00:22:19.941Z", 
-        "deleted": false, 
-        "dashboardView": 3, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "order": 0, 
-        "enacted": null
-    }
-},
-{
-    "pk": 37, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-31T00:22:19.987Z", 
-        "created": "2014-05-31T00:22:19.987Z", 
-        "deleted": false, 
-        "dashboardView": 1, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "order": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 38, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-31T00:22:20.028Z", 
-        "created": "2014-05-31T00:22:20.028Z", 
-        "deleted": false, 
-        "dashboardView": 2, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "order": 2, 
-        "enacted": null
-    }
-},
-{
-    "pk": 39, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-31T00:22:20.069Z", 
-        "created": "2014-05-31T00:22:20.069Z", 
-        "deleted": false, 
-        "dashboardView": 7, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "order": 3, 
-        "enacted": null
-    }
-},
-{
-    "pk": 40, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-05-31T00:22:20.111Z", 
-        "created": "2014-05-31T00:22:20.111Z", 
-        "deleted": false, 
-        "dashboardView": 4, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "order": 4, 
-        "enacted": null
-    }
-},
-{
-    "pk": 41, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-06-17T11:07:32.639Z", 
-        "created": "2014-06-17T11:07:32.639Z", 
-        "deleted": false, 
-        "dashboardView": 3, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "order": 0, 
-        "enacted": null
-    }
-},
-{
-    "pk": 42, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-06-17T11:07:32.776Z", 
-        "created": "2014-06-17T11:07:32.776Z", 
-        "deleted": false, 
-        "dashboardView": 6, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "order": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 43, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-06-19T23:54:01.961Z", 
-        "created": "2014-06-19T23:54:01.961Z", 
-        "deleted": false, 
-        "dashboardView": 3, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "order": 0, 
-        "enacted": null
-    }
-},
-{
-    "pk": 44, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-06-19T23:54:02.007Z", 
-        "created": "2014-06-19T23:54:02.006Z", 
-        "deleted": false, 
-        "dashboardView": 7, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "order": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 45, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-06-19T23:54:02.056Z", 
-        "created": "2014-06-19T23:54:02.056Z", 
-        "deleted": false, 
-        "dashboardView": 6, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "order": 2, 
-        "enacted": null
-    }
-},
-{
-    "pk": 46, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-06-19T23:54:02.106Z", 
-        "created": "2014-06-19T23:54:02.106Z", 
-        "deleted": false, 
-        "dashboardView": 4, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "order": 3, 
-        "enacted": null
-    }
-},
-{
-    "pk": 47, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-06-19T23:54:02.156Z", 
-        "created": "2014-06-19T23:54:02.156Z", 
-        "deleted": false, 
-        "dashboardView": 1, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "order": 4, 
-        "enacted": null
-    }
-},
-{
-    "pk": 48, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-06-19T23:54:02.207Z", 
-        "created": "2014-06-19T23:54:02.207Z", 
-        "deleted": false, 
-        "dashboardView": 2, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "order": 5, 
-        "enacted": null
-    }
-},
-{
-    "pk": 49, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-06-19T23:54:02.248Z", 
-        "created": "2014-06-19T23:54:02.248Z", 
-        "deleted": false, 
-        "dashboardView": 8, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "order": 6, 
-        "enacted": null
-    }
-},
-{
-    "pk": 50, 
-    "model": "core.userdashboardview", 
-    "fields": {
-        "updated": "2014-06-19T23:54:02.349Z", 
-        "created": "2014-06-19T23:54:02.349Z", 
-        "deleted": false, 
-        "dashboardView": 9, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "order": 7, 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.serviceclass", 
-    "fields": {
-        "updated": "2013-05-10T23:30:52.931Z", 
-        "membershipFee": 0, 
-        "name": "Best Effort", 
-        "membershipFeeMonths": 0, 
-        "created": "2013-05-10T23:30:52.931Z", 
-        "deleted": false, 
-        "description": "Best Effort", 
-        "upgradeFrom": [
-            2, 
-            3
-        ], 
-        "commitment": 0, 
-        "backend_status": "Provisioning in progress", 
-        "upgradeRequiresApproval": false, 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.serviceclass", 
-    "fields": {
-        "updated": "2013-05-10T23:35:51.694Z", 
-        "membershipFee": 100, 
-        "name": "Silver", 
-        "membershipFeeMonths": 1, 
-        "created": "2013-05-10T23:33:24.930Z", 
-        "deleted": false, 
-        "description": "Silver", 
-        "upgradeFrom": [
-            1, 
-            3
-        ], 
-        "commitment": 365, 
-        "backend_status": "Provisioning in progress", 
-        "upgradeRequiresApproval": false, 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.serviceclass", 
-    "fields": {
-        "updated": "2013-05-10T23:34:01.320Z", 
-        "membershipFee": 18000, 
-        "name": "Gold", 
-        "membershipFeeMonths": 12, 
-        "created": "2013-05-10T23:34:01.320Z", 
-        "deleted": false, 
-        "description": "Gold", 
-        "upgradeFrom": [
-            1, 
-            2
-        ], 
-        "commitment": 365, 
-        "backend_status": "Provisioning in progress", 
-        "upgradeRequiresApproval": false, 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.slice", 
-    "fields": {
-        "updated": "2014-08-27T22:40:05.088Z", 
-        "image_preference": "Ubuntu 12.04 LTS", 
-        "name": "HyperCache", 
-        "service": 14, 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "slice_url": "", 
-        "description": "HyperCache slice for HyperCache service.", 
-        "serviceClass": 1, 
-        "enabled": true, 
-        "site": 22, 
-        "omf_friendly": false, 
-        "network": "Private Only", 
-        "max_instances": 10, 
-        "mount_data_sets": "GenBank", 
-        "backend_status": "Provisioning in progress", 
-        "creator": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "core.slice", 
-    "fields": {
-        "updated": "2014-03-23T23:12:27.541Z", 
-        "image_preference": "Ubuntu 12.04 LTS", 
-        "name": "Syndicate", 
-        "service": 5, 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "slice_url": "", 
-        "description": "", 
-        "serviceClass": 1, 
-        "enabled": true, 
-        "site": 10, 
-        "omf_friendly": false, 
-        "network": "Private Only", 
-        "max_instances": 10, 
-        "mount_data_sets": "GenBank", 
-        "backend_status": "Provisioning in progress", 
-        "creator": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.slice", 
-    "fields": {
-        "updated": "2014-03-23T23:17:33.686Z", 
-        "image_preference": "Ubuntu 12.04 LTS", 
-        "name": "DnsRedir", 
-        "service": 4, 
-        "created": "2013-12-04T22:48:35.584Z", 
-        "deleted": false, 
-        "slice_url": "", 
-        "description": "DNS Redirection slice for RequestRouter service.", 
-        "serviceClass": 2, 
-        "enabled": true, 
-        "site": 22, 
-        "omf_friendly": false, 
-        "network": "Private Only", 
-        "max_instances": 10, 
-        "mount_data_sets": "GenBank", 
-        "backend_status": "Provisioning in progress", 
-        "creator": 8, 
-        "enacted": null
-    }
-},
-{
-    "pk": 9, 
-    "model": "core.slice", 
-    "fields": {
-        "updated": "2014-03-23T23:18:00.528Z", 
-        "image_preference": "Ubuntu 12.04 LTS", 
-        "name": "DnsDemux", 
-        "service": 4, 
-        "created": "2013-12-04T22:49:23.051Z", 
-        "deleted": false, 
-        "slice_url": "", 
-        "description": "DNS Demultiplexing slice for RequestRouter service. ", 
-        "serviceClass": 2, 
-        "enabled": true, 
-        "site": 22, 
-        "omf_friendly": false, 
-        "network": "Private Only", 
-        "max_instances": 10, 
-        "mount_data_sets": "GenBank", 
-        "backend_status": "Provisioning in progress", 
-        "creator": 8, 
-        "enacted": null
-    }
-},
-{
-    "pk": 10, 
-    "model": "core.slice", 
-    "fields": {
-        "updated": "2014-03-23T23:19:56.253Z", 
-        "image_preference": "Ubuntu 12.04 LTS", 
-        "name": "Infrastructure", 
-        "service": null, 
-        "created": "2013-12-09T14:13:15.392Z", 
-        "deleted": false, 
-        "slice_url": "", 
-        "description": "", 
-        "serviceClass": 1, 
-        "enabled": true, 
-        "site": 22, 
-        "omf_friendly": false, 
-        "network": "Private Only", 
-        "max_instances": 10, 
-        "mount_data_sets": "GenBank", 
-        "backend_status": "Provisioning in progress", 
-        "creator": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 11, 
-    "model": "core.slice", 
-    "fields": {
-        "updated": "2014-03-23T23:15:29.953Z", 
-        "image_preference": "Ubuntu 12.04 LTS", 
-        "name": "Stork", 
-        "service": 8, 
-        "created": "2013-12-13T21:49:59.476Z", 
-        "deleted": false, 
-        "slice_url": "", 
-        "description": "The Stork Package Management Service", 
-        "serviceClass": 1, 
-        "enabled": true, 
-        "site": 24, 
-        "omf_friendly": false, 
-        "network": "Private Only", 
-        "max_instances": 10, 
-        "mount_data_sets": "GenBank", 
-        "backend_status": "Provisioning in progress", 
-        "creator": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 12, 
-    "model": "core.slice", 
-    "fields": {
-        "updated": "2014-03-23T23:16:01.742Z", 
-        "image_preference": "Ubuntu 12.04 LTS", 
-        "name": "Owl", 
-        "service": 8, 
-        "created": "2013-12-13T21:52:15.590Z", 
-        "deleted": false, 
-        "slice_url": "", 
-        "description": "The Owl Data Collection service", 
-        "serviceClass": 1, 
-        "enabled": true, 
-        "site": 24, 
-        "omf_friendly": false, 
-        "network": "Private Only", 
-        "max_instances": 10, 
-        "mount_data_sets": "GenBank", 
-        "backend_status": "Provisioning in progress", 
-        "creator": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 13, 
-    "model": "core.slice", 
-    "fields": {
-        "updated": "2014-03-23T23:15:02.712Z", 
-        "image_preference": "Ubuntu 12.04 LTS", 
-        "name": "Hadoop", 
-        "service": null, 
-        "created": "2013-12-13T21:54:20.895Z", 
-        "deleted": false, 
-        "slice_url": "", 
-        "description": "Hadoop map-reduce service", 
-        "serviceClass": 2, 
-        "enabled": true, 
-        "site": 22, 
-        "omf_friendly": false, 
-        "network": "Private Only", 
-        "max_instances": 10, 
-        "mount_data_sets": "GenBank", 
-        "backend_status": "Provisioning in progress", 
-        "creator": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 14, 
-    "model": "core.slice", 
-    "fields": {
-        "updated": "2014-03-23T23:14:27.648Z", 
-        "image_preference": "Ubuntu 12.04 LTS", 
-        "name": "test", 
-        "service": null, 
-        "created": "2013-12-13T21:56:57.299Z", 
-        "deleted": false, 
-        "slice_url": "", 
-        "description": "Test slice number one.", 
-        "serviceClass": 1, 
-        "enabled": true, 
-        "site": 10, 
-        "omf_friendly": false, 
-        "network": "Private Only", 
-        "max_instances": 10, 
-        "mount_data_sets": "GenBank", 
-        "backend_status": "Provisioning in progress", 
-        "creator": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 15, 
-    "model": "core.slice", 
-    "fields": {
-        "updated": "2014-03-23T23:14:00.911Z", 
-        "image_preference": "Ubuntu 12.04 LTS", 
-        "name": "test2", 
-        "service": null, 
-        "created": "2013-12-13T22:00:03.049Z", 
-        "deleted": false, 
-        "slice_url": "", 
-        "description": "test slice number two.", 
-        "serviceClass": 1, 
-        "enabled": true, 
-        "site": 10, 
-        "omf_friendly": false, 
-        "network": "Private Only", 
-        "max_instances": 10, 
-        "mount_data_sets": "GenBank", 
-        "backend_status": "Provisioning in progress", 
-        "creator": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 16, 
-    "model": "core.slice", 
-    "fields": {
-        "updated": "2014-05-27T14:05:40.950Z", 
-        "image_preference": "Hadoop 2.4.0", 
-        "name": "Analytics", 
-        "service": null, 
-        "created": "2014-05-20T17:54:07.100Z", 
-        "deleted": false, 
-        "slice_url": "", 
-        "description": "Analytics ", 
-        "serviceClass": 1, 
-        "enabled": true, 
-        "site": 22, 
-        "omf_friendly": false, 
-        "network": "Private Only", 
-        "max_instances": 10, 
-        "mount_data_sets": "GenBank-11-2013", 
-        "backend_status": "Provisioning in progress", 
-        "creator": 8, 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.slicerole", 
-    "fields": {
-        "updated": "2013-12-18T21:09:27.717Z", 
-        "created": "2013-12-18T21:09:27.717Z", 
-        "deleted": false, 
-        "role": "admin", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.slicerole", 
-    "fields": {
-        "updated": "2013-12-18T21:09:35.074Z", 
-        "created": "2013-12-18T21:09:35.074Z", 
-        "deleted": false, 
-        "role": "default", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.713Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.713Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 2, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.729Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.729Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 3, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.739Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.739Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 4, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.752Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.752Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.771Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.771Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.790Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.789Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 7, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.808Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.808Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.835Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.835Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 9, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.862Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.862Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 11, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 10, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.890Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.890Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 12, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 11, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.925Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.925Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 13, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 12, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.960Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.960Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 13, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:37.996Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:37.996Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 15, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 14, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.038Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:38.038Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 15, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.092Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:21:38.091Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 16, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.103Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.103Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 2, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 17, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.111Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.111Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 3, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 18, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.122Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.122Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 4, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 19, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.141Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.141Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 20, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.160Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.160Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 21, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.179Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.179Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 22, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.206Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.206Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 23, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.233Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.233Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 24, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.260Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.260Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 11, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 25, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.287Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.287Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 12, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 26, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.322Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.322Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 13, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 27, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.358Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.358Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 28, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.393Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.393Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 15, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 29, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.428Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.428Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 30, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.472Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:21:38.472Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 31, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.484Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.484Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 2, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 32, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.492Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.492Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 3, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 33, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.503Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.503Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 4, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 34, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.522Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.522Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 35, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.540Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.540Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 36, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.559Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.559Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 37, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.578Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.578Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 38, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.605Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.605Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 39, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.632Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.632Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 11, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 40, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.660Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.660Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 12, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 41, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.695Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.695Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 13, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 42, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.731Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.731Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 43, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.766Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.766Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 15, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 44, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.801Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.801Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 45, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.845Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:21:38.845Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 46, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.857Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:38.857Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 2, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 47, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.865Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:38.864Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 3, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 48, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.875Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:38.875Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 4, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 49, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.894Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:38.894Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 50, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.913Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:38.913Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 51, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.932Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:38.932Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 52, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.951Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:38.951Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 53, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:38.978Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:38.978Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 54, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.005Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:39.005Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 11, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 55, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.032Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:39.032Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 12, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 56, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.068Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:39.067Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 13, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 57, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.103Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:39.103Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 58, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.139Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:39.139Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 15, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.175Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:39.175Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.219Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:21:39.219Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.229Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.229Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 2, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 62, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.238Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.238Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 3, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 63, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.248Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.248Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 4, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 64, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.267Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.267Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 65, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.286Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.286Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 66, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.304Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.304Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 67, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.324Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.324Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 68, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.351Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.351Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 69, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.378Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.378Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 11, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 70, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.405Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.405Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 12, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 71, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.440Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.440Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 13, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 72, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.476Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.476Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 73, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.511Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.511Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 15, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 74, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.547Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.547Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 75, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.590Z", 
-        "slice": 10, 
-        "created": "2013-12-18T21:21:39.590Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 76, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.602Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.602Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 2, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 77, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.610Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.610Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 3, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 78, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.621Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.621Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 4, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 79, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.640Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.640Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 80, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.659Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.659Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 81, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.678Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.678Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 82, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.705Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.705Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 83, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.732Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.732Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 84, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.759Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.759Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 11, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 85, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.786Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.786Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 12, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 86, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.821Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.821Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 13, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 87, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.857Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.857Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 88, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.891Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.891Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 15, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 89, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.927Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.927Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 90, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.971Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:21:39.971Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 91, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.983Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:39.983Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 2, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 92, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:39.991Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:39.991Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 3, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 93, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.002Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.002Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 4, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 94, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.020Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.020Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 95, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.039Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.039Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 96, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.058Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.058Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 97, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.077Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.077Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 98, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.104Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.104Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 99, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.131Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.131Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 11, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 100, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.159Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.159Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 12, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 101, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.194Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.194Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 13, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 102, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.230Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.230Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 103, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.265Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.265Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 15, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 104, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.300Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.300Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 105, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.344Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:21:40.344Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 106, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.356Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.355Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 2, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 107, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.364Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.364Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 3, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 108, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.374Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.374Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 4, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 109, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.393Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.393Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 110, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.412Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.412Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 111, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.431Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.431Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 112, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.450Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.450Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 113, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.477Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.477Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 114, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.504Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.504Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 11, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 115, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.531Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.531Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 12, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 116, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.566Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.566Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 13, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 117, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.602Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.602Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 118, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.637Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.637Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 15, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 119, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.673Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.673Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 120, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.717Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:21:40.717Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 121, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.728Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.728Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 2, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 122, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.736Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.736Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 3, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 123, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.747Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.747Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 4, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 124, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.766Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.766Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 125, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.784Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.784Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 126, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.803Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.803Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 127, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.822Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.822Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 128, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.849Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.849Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 129, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.877Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.877Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 11, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 130, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.903Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.903Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 12, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 131, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.939Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.939Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 13, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 132, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:40.975Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:40.975Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 133, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.010Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:41.010Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 15, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 134, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.045Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:41.045Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 135, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.089Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:21:41.089Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 136, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.101Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.101Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 2, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 137, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.109Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.109Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 3, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 138, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.119Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.119Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 4, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 139, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.138Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.138Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 140, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.157Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.157Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 141, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.176Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.176Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 142, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.204Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.203Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 143, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.231Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.231Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 144, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.258Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.258Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 11, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 145, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.285Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.285Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 12, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 146, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.320Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.320Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 13, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 147, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.356Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.356Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 14, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 148, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.391Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.391Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 15, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 149, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.426Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.426Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 1, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 150, 
-    "model": "core.sliceprivilege", 
-    "fields": {
-        "updated": "2013-12-18T21:21:41.470Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:21:41.470Z", 
-        "deleted": false, 
-        "role": 1, 
-        "user": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.image", 
-    "fields": {
-        "updated": "2013-12-09T14:26:56.787Z", 
-        "name": "Fedora 16 LXC rev 1.3", 
-        "created": "2013-12-09T14:26:56.787Z", 
-        "deleted": false, 
-        "container_format": "bare", 
-        "disk_format": "raw", 
-        "path": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.image", 
-    "fields": {
-        "updated": "2014-04-23T04:10:59.634Z", 
-        "name": "Ubuntu 12.04 LTS", 
-        "created": "2014-04-23T04:10:59.634Z", 
-        "deleted": false, 
-        "container_format": "bare", 
-        "disk_format": "raw", 
-        "path": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.image", 
-    "fields": {
-        "updated": "2014-04-23T04:11:24.968Z", 
-        "name": "Hadoop 2.4.0", 
-        "created": "2014-04-23T04:11:24.968Z", 
-        "deleted": false, 
-        "container_format": "bare", 
-        "disk_format": "raw", 
-        "path": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.image", 
-    "fields": {
-        "updated": "2014-04-23T04:11:37.141Z", 
-        "name": "MPI 1.8", 
-        "created": "2014-04-23T04:11:37.141Z", 
-        "deleted": false, 
-        "container_format": "bare", 
-        "disk_format": "raw", 
-        "path": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 384, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 385, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 386, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node3.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 387, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node4.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 388, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node5.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 389, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node6.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 390, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node7.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 391, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node8.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 392, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node9.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 393, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node10.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 394, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node11.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 395, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node12.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 396, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node13.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 397, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node14.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 398, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node15.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 399, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node16.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 400, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node17.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 401, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node18.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 402, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node19.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 403, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node20.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 404, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node21.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 405, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node22.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 406, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node23.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 407, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node24.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 408, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node25.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 409, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node26.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 410, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node27.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 411, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node28.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 412, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node29.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 413, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node30.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 414, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node31.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 415, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node32.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 416, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node33.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 417, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node34.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 418, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node35.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 419, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node36.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 420, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node37.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 421, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node38.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 422, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node39.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 423, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node40.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 424, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node41.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 425, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node42.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 426, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node43.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 427, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node44.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 428, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node45.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 429, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node46.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 430, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node47.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 431, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node48.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 432, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node49.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 433, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node50.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 434, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node51.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 435, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node52.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 436, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node53.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 437, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node54.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 438, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node55.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 439, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node56.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 440, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node57.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 441, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node58.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 442, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node59.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 443, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node60.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 444, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node61.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 445, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node62.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 446, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node63.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 447, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node64.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 448, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node65.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 449, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node66.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 450, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node67.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 451, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node68.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 452, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node69.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 453, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node70.stanford.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 8, 
-        "deployment": 5, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 454, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 455, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 456, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node3.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 457, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node4.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 458, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node5.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 459, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node6.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 460, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node7.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 461, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node8.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 462, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node9.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 463, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node10.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 464, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node11.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 465, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node12.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 466, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node13.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 467, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node14.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 468, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node15.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 469, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node16.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 470, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node17.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 471, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node18.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 472, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node19.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 473, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node20.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 474, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node21.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 475, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node22.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 476, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node23.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 477, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node24.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 478, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node25.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 479, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node26.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 480, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node27.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 481, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node28.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 482, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node29.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 483, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node30.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 484, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node31.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 485, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node32.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 486, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node33.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 487, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node34.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 488, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node35.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 489, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node36.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 490, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node37.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 491, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node38.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 492, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node39.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 493, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node40.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 494, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node41.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 495, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node42.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 496, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node43.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 497, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node44.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 498, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node45.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 499, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node46.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 500, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node47.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 501, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node48.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 502, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node49.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 503, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node50.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 504, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node51.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 505, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node52.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 506, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node53.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 507, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node54.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 508, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node55.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 509, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node56.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 510, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node57.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 511, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node58.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 512, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node59.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 513, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node60.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 514, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node61.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 515, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node62.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 516, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node63.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 517, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node64.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 518, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node65.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 519, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node66.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 520, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node67.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 521, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node68.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 522, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node69.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 523, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node70.washington.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 9, 
-        "deployment": 6, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 524, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 525, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 526, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node3.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 527, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node4.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 528, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node5.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 529, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node6.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 530, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node7.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 531, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node8.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 532, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node9.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 533, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node10.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 534, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node11.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 535, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node12.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 536, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node13.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 537, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node14.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 538, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node15.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 539, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node16.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 540, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node17.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 541, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node18.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 542, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node19.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 543, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node20.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 544, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node21.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 545, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node22.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 546, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node23.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 547, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node24.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 548, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node25.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 549, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node26.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 550, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node27.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 551, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node28.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 552, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node29.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 553, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node30.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 554, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node31.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 555, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node32.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 556, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node33.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 557, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node34.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 558, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node35.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 559, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node36.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 560, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node37.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 561, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node38.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 562, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node39.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 563, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node40.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 564, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node41.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 565, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node42.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 566, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node43.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 567, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node44.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 568, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node45.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 569, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node46.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 570, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node47.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 571, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node48.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 572, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node49.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 573, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node50.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 574, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node51.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 575, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node52.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 576, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node53.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 577, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node54.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 578, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node55.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 579, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node56.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 580, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node57.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 581, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node58.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 582, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node59.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 583, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node60.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 584, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node61.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 585, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node62.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 586, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node63.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 587, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node64.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 588, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node65.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 589, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node66.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 590, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node67.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 591, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node68.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 592, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node69.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 593, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node70.princeton.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 10, 
-        "deployment": 7, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 594, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 595, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 596, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node3.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 597, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node4.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 598, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node5.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 599, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node6.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 600, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node7.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 601, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node8.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 602, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node9.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 603, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node10.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 604, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node11.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 605, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node12.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 606, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node13.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 607, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node14.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 608, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node15.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 609, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node16.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 610, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node17.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 611, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node18.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 612, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node19.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 613, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node20.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 614, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node21.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 615, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node22.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 616, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node23.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 617, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node24.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 618, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node25.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 619, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node26.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 620, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node27.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 621, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node28.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 622, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node29.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 623, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node30.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 624, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node31.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 625, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node32.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 626, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node33.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 627, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node34.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 628, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node35.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 629, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node36.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 630, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node37.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 631, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node38.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 632, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node39.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 633, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node40.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 634, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node41.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 635, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node42.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 636, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node43.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 637, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node44.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 638, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node45.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 639, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node46.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 640, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node47.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 641, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node48.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 642, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node49.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 643, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node50.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 644, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node51.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 645, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node52.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 646, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node53.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 647, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node54.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 648, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node55.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 649, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node56.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 650, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node57.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 651, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node58.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 652, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node59.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 653, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node60.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 654, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node61.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 655, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node62.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 656, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node63.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 657, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node64.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 658, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node65.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 659, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node66.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 660, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node67.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 661, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node68.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 662, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node69.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 663, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node70.gt.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 11, 
-        "deployment": 8, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 664, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 665, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 666, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node3.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 667, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node4.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 668, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node5.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 669, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node6.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 670, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node7.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 671, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node8.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 672, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node9.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 673, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node10.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 674, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node11.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 675, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node12.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 676, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node13.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 677, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node14.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 678, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node15.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 679, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node16.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 680, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node17.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 681, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node18.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 682, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node19.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 683, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node20.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 684, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node21.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 685, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node22.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 686, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node23.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 687, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node24.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 688, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node25.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 689, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node26.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 690, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node27.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 691, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node28.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 692, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node29.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 693, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node30.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 694, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node31.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 695, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node32.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 696, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node33.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 697, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node34.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 698, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node35.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 699, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node36.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 700, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node37.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 701, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node38.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 702, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node39.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 703, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node40.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 704, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node41.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 705, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node42.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 706, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node43.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 707, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node44.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 708, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node45.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 709, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node46.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 710, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node47.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 711, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node48.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 712, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node49.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 713, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node50.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 714, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node51.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 715, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node52.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 716, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node53.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 717, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node54.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 718, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node55.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 719, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node56.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 720, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node57.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 721, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node58.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 722, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node59.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 723, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node60.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 724, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node61.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 725, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node62.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 726, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node63.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 727, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node64.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 728, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node65.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 729, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node66.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 730, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node67.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 731, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node68.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 732, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node69.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 733, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node70.mpisws.vicci.org", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 12, 
-        "deployment": 9, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 734, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.atla.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 13, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 735, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.atla.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 13, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 736, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.chic.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 14, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 737, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.chic.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 14, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 738, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.hous.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 15, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 739, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.hous.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 15, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 740, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.kans.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 16, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 741, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.kans.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 16, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 742, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.losa.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 17, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 743, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.losa.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 17, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 744, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.newy.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 18, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 745, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.newy.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 18, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 746, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.salt.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 19, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 747, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.salt.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 19, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 748, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.seat.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 20, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 749, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.seat.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 20, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 750, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node1.wash.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 21, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 751, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-06-21T21:17:13.982Z", 
-        "name": "node2.wash.internet2.vini-veritas.net", 
-        "created": "2013-04-03T23:14:11.072Z", 
-        "deleted": false, 
-        "site": 21, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 752, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-12-17T17:10:48.740Z", 
-        "name": "opencloud0.sing.internet2.edu", 
-        "created": "2013-12-17T17:10:48.740Z", 
-        "deleted": false, 
-        "site": 23, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 753, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-12-17T17:10:48.742Z", 
-        "name": "opencloud1.sing.internet2.edu", 
-        "created": "2013-12-17T17:10:48.741Z", 
-        "deleted": false, 
-        "site": 23, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 754, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-12-17T17:10:48.742Z", 
-        "name": "opencloud2.sing.internet2.edu", 
-        "created": "2013-12-17T17:10:48.742Z", 
-        "deleted": false, 
-        "site": 23, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 755, 
-    "model": "core.node", 
-    "fields": {
-        "updated": "2013-12-17T17:10:48.743Z", 
-        "name": "opencloud3.sing.internet2.edu", 
-        "created": "2013-12-17T17:10:48.743Z", 
-        "deleted": false, 
-        "site": 23, 
-        "deployment": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.serviceresource", 
-    "fields": {
-        "updated": "2013-12-11T22:18:00.040Z", 
-        "bucketInRate": 0, 
-        "name": "Cycles", 
-        "bucketMaxSize": 0, 
-        "created": "2013-12-11T22:18:00.040Z", 
-        "deleted": false, 
-        "serviceClass": 1, 
-        "maxUnitsDeployment": 0, 
-        "calendarReservable": false, 
-        "maxDuration": 0, 
-        "cost": 7, 
-        "backend_status": "Provisioning in progress", 
-        "maxUnitsNode": 0, 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.serviceresource", 
-    "fields": {
-        "updated": "2013-12-11T22:18:00.045Z", 
-        "bucketInRate": 0, 
-        "name": "Cycles", 
-        "bucketMaxSize": 0, 
-        "created": "2013-12-11T22:18:00.045Z", 
-        "deleted": false, 
-        "serviceClass": 2, 
-        "maxUnitsDeployment": 0, 
-        "calendarReservable": false, 
-        "maxDuration": 0, 
-        "cost": 7, 
-        "backend_status": "Provisioning in progress", 
-        "maxUnitsNode": 0, 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "core.serviceresource", 
-    "fields": {
-        "updated": "2013-12-11T22:18:00.053Z", 
-        "bucketInRate": 0, 
-        "name": "Cycles", 
-        "bucketMaxSize": 0, 
-        "created": "2013-12-11T22:18:00.053Z", 
-        "deleted": false, 
-        "serviceClass": 3, 
-        "maxUnitsDeployment": 0, 
-        "calendarReservable": false, 
-        "maxDuration": 0, 
-        "cost": 7, 
-        "backend_status": "Provisioning in progress", 
-        "maxUnitsNode": 0, 
-        "enacted": null
-    }
-},
-{
-    "pk": 7, 
-    "model": "core.serviceresource", 
-    "fields": {
-        "updated": "2013-12-11T22:18:00.064Z", 
-        "bucketInRate": 0, 
-        "name": "numberCores", 
-        "bucketMaxSize": 0, 
-        "created": "2013-12-11T22:18:00.064Z", 
-        "deleted": false, 
-        "serviceClass": 3, 
-        "maxUnitsDeployment": 210, 
-        "calendarReservable": true, 
-        "maxDuration": 8760, 
-        "cost": 0, 
-        "backend_status": "Provisioning in progress", 
-        "maxUnitsNode": 6, 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.serviceresource", 
-    "fields": {
-        "updated": "2013-12-11T22:18:00.072Z", 
-        "bucketInRate": 10, 
-        "name": "numberCores", 
-        "bucketMaxSize": 210, 
-        "created": "2013-12-11T22:18:00.072Z", 
-        "deleted": false, 
-        "serviceClass": 2, 
-        "maxUnitsDeployment": 210, 
-        "calendarReservable": true, 
-        "maxDuration": 168, 
-        "cost": 7, 
-        "backend_status": "Provisioning in progress", 
-        "maxUnitsNode": 6, 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.flavor", 
-    "fields": {
-        "updated": "2014-09-02T20:38:23.122Z", 
-        "name": "m1.tiny", 
-        "created": "2014-09-02T20:38:23.122Z", 
-        "deleted": false, 
-        "description": "openstack tiny instance", 
-        "deployments": [
-            7, 
-            10, 
-            9, 
-            8, 
-            6, 
-            5
-        ], 
-        "default": false, 
-        "flavor": "m1.tiny", 
-        "backend_status": "Provisioning in progress", 
-        "order": 0, 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.flavor", 
-    "fields": {
-        "updated": "2014-09-02T20:59:40.518Z", 
-        "name": "m1.small", 
-        "created": "2014-09-02T20:59:40.518Z", 
-        "deleted": false, 
-        "description": "small openstack instance", 
-        "deployments": [
-            7, 
-            10, 
-            9, 
-            8, 
-            6, 
-            5, 
-            11
-        ], 
-        "default": true, 
-        "flavor": "m1.small", 
-        "backend_status": "Provisioning in progress", 
-        "order": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.flavor", 
-    "fields": {
-        "updated": "2014-09-02T21:00:28.795Z", 
-        "name": "m1.medium", 
-        "created": "2014-09-02T21:00:28.795Z", 
-        "deleted": false, 
-        "description": "medium openstack flavor", 
-        "deployments": [
-            7, 
-            10, 
-            9, 
-            8, 
-            6, 
-            5, 
-            11
-        ], 
-        "default": false, 
-        "flavor": "m1.medium", 
-        "backend_status": "Provisioning in progress", 
-        "order": 2, 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.flavor", 
-    "fields": {
-        "updated": "2014-09-02T21:00:57.360Z", 
-        "name": "m1.large", 
-        "created": "2014-09-02T21:00:49.945Z", 
-        "deleted": false, 
-        "description": "large openstack flavor", 
-        "deployments": [
-            7, 
-            10, 
-            9, 
-            8, 
-            6, 
-            5, 
-            11
-        ], 
-        "default": false, 
-        "flavor": "m1.large", 
-        "backend_status": "Provisioning in progress", 
-        "order": 3, 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.flavor", 
-    "fields": {
-        "updated": "2014-09-02T21:01:15.285Z", 
-        "name": "m1.xlarge", 
-        "created": "2014-09-02T21:01:15.285Z", 
-        "deleted": false, 
-        "description": "extra large openstack flavor", 
-        "deployments": [
-            7, 
-            10, 
-            9, 
-            8, 
-            6, 
-            5, 
-            11
-        ], 
-        "default": false, 
-        "flavor": "m1.xlarge", 
-        "backend_status": "Provisioning in progress", 
-        "order": 4, 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "core.flavor", 
-    "fields": {
-        "updated": "2014-09-03T00:25:30.120Z", 
-        "name": "m3.medium", 
-        "created": "2014-09-03T00:25:30.120Z", 
-        "deleted": false, 
-        "description": "ec2 flavor m3.medium", 
-        "deployments": [
-            11
-        ], 
-        "default": false, 
-        "flavor": "m3.medium", 
-        "backend_status": "Provisioning in progress", 
-        "order": 33, 
-        "enacted": null
-    }
-},
-{
-    "pk": 7, 
-    "model": "core.flavor", 
-    "fields": {
-        "updated": "2014-09-03T00:25:50.419Z", 
-        "name": "m3.large", 
-        "created": "2014-09-03T00:25:50.419Z", 
-        "deleted": false, 
-        "description": "ec2 flavor m3.large", 
-        "deployments": [
-            11
-        ], 
-        "default": false, 
-        "flavor": "m3.large", 
-        "backend_status": "Provisioning in progress", 
-        "order": 34, 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.flavor", 
-    "fields": {
-        "updated": "2014-09-03T00:26:11.770Z", 
-        "name": "m3.2xlarge", 
-        "created": "2014-09-03T00:26:11.770Z", 
-        "deleted": false, 
-        "description": "ec2 flavor m3.2xlarge", 
-        "deployments": [
-            11
-        ], 
-        "default": false, 
-        "flavor": "m3.2xlarge", 
-        "backend_status": "Provisioning in progress", 
-        "order": 35, 
-        "enacted": null
-    }
-},
-{
-    "pk": 40, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 613, 
-        "instance_name": "instance-000003e8", 
-        "updated": "2013-12-12T17:55:32.455Z", 
-        "slice": 4, 
-        "deploymentNetwork": 8, 
-        "name": "node20.gt.vicci.org", 
-        "created": "2013-12-12T17:55:32.455Z", 
-        "deleted": false, 
-        "ip": "130.207.98.29", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 41, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 615, 
-        "instance_name": "instance-000003e9", 
-        "updated": "2013-12-12T17:55:32.478Z", 
-        "slice": 4, 
-        "deploymentNetwork": 8, 
-        "name": "node22.gt.vicci.org", 
-        "created": "2013-12-12T17:55:32.478Z", 
-        "deleted": false, 
-        "ip": "130.207.98.31", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 42, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 617, 
-        "instance_name": "instance-000003ea", 
-        "updated": "2013-12-12T17:55:32.495Z", 
-        "slice": 4, 
-        "deploymentNetwork": 8, 
-        "name": "node24.gt.vicci.org", 
-        "created": "2013-12-12T17:55:32.495Z", 
-        "deleted": false, 
-        "ip": "130.207.98.33", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 43, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 622, 
-        "instance_name": "instance-000003eb", 
-        "updated": "2013-12-12T17:55:32.512Z", 
-        "slice": 4, 
-        "deploymentNetwork": 8, 
-        "name": "node29.gt.vicci.org", 
-        "created": "2013-12-12T17:55:32.511Z", 
-        "deleted": false, 
-        "ip": "130.207.98.38", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 44, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 623, 
-        "instance_name": "instance-000003ec", 
-        "updated": "2013-12-12T17:55:32.528Z", 
-        "slice": 4, 
-        "deploymentNetwork": 8, 
-        "name": "node30.gt.vicci.org", 
-        "created": "2013-12-12T17:55:32.528Z", 
-        "deleted": false, 
-        "ip": "130.207.98.39", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 46, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 625, 
-        "instance_name": "instance-000003ee", 
-        "updated": "2013-12-12T17:55:32.561Z", 
-        "slice": 4, 
-        "deploymentNetwork": 8, 
-        "name": "node32.gt.vicci.org", 
-        "created": "2013-12-12T17:55:32.561Z", 
-        "deleted": false, 
-        "ip": "130.207.98.41", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 47, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 630, 
-        "instance_name": "instance-000003ef", 
-        "updated": "2013-12-12T17:55:32.577Z", 
-        "slice": 4, 
-        "deploymentNetwork": 8, 
-        "name": "node37.gt.vicci.org", 
-        "created": "2013-12-12T17:55:32.577Z", 
-        "deleted": false, 
-        "ip": "130.207.98.46", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 48, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 666, 
-        "instance_name": "instance-000003f0", 
-        "updated": "2013-12-12T17:55:32.594Z", 
-        "slice": 4, 
-        "deploymentNetwork": 9, 
-        "name": "node3.mpisws.vicci.org", 
-        "created": "2013-12-12T17:55:32.594Z", 
-        "deleted": false, 
-        "ip": "141.39.220.13", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 49, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 683, 
-        "instance_name": "instance-000003f1", 
-        "updated": "2013-12-12T17:55:32.611Z", 
-        "slice": 4, 
-        "deploymentNetwork": 9, 
-        "name": "node20.mpisws.vicci.org", 
-        "created": "2013-12-12T17:55:32.610Z", 
-        "deleted": false, 
-        "ip": "141.39.220.30", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 50, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 684, 
-        "instance_name": "instance-000003f2", 
-        "updated": "2013-12-12T17:55:32.627Z", 
-        "slice": 4, 
-        "deploymentNetwork": 9, 
-        "name": "node21.mpisws.vicci.org", 
-        "created": "2013-12-12T17:55:32.627Z", 
-        "deleted": false, 
-        "ip": "141.39.220.31", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 51, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 686, 
-        "instance_name": "instance-000003f3", 
-        "updated": "2013-12-12T17:55:32.644Z", 
-        "slice": 4, 
-        "deploymentNetwork": 9, 
-        "name": "node23.mpisws.vicci.org", 
-        "created": "2013-12-12T17:55:32.644Z", 
-        "deleted": false, 
-        "ip": "141.39.220.33", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 52, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 687, 
-        "instance_name": "instance-000003f4", 
-        "updated": "2013-12-12T17:55:32.660Z", 
-        "slice": 4, 
-        "deploymentNetwork": 9, 
-        "name": "node24.mpisws.vicci.org", 
-        "created": "2013-12-12T17:55:32.660Z", 
-        "deleted": false, 
-        "ip": "141.39.220.34", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 53, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 691, 
-        "instance_name": "instance-000003f5", 
-        "updated": "2013-12-12T17:55:32.677Z", 
-        "slice": 4, 
-        "deploymentNetwork": 9, 
-        "name": "node28.mpisws.vicci.org", 
-        "created": "2013-12-12T17:55:32.677Z", 
-        "deleted": false, 
-        "ip": "141.39.220.38", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 54, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 693, 
-        "instance_name": "instance-000003f6", 
-        "updated": "2013-12-12T17:55:32.693Z", 
-        "slice": 4, 
-        "deploymentNetwork": 9, 
-        "name": "node30.mpisws.vicci.org", 
-        "created": "2013-12-12T17:55:32.693Z", 
-        "deleted": false, 
-        "ip": "141.39.220.40", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 55, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 694, 
-        "instance_name": "instance-000003f7", 
-        "updated": "2013-12-12T17:55:32.710Z", 
-        "slice": 4, 
-        "deploymentNetwork": 9, 
-        "name": "node31.mpisws.vicci.org", 
-        "created": "2013-12-12T17:55:32.710Z", 
-        "deleted": false, 
-        "ip": "141.39.220.41", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 58, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 561, 
-        "instance_name": "instance-000003fa", 
-        "updated": "2013-12-12T17:55:32.760Z", 
-        "slice": 4, 
-        "deploymentNetwork": 7, 
-        "name": "node38.princeton.vicci.org", 
-        "created": "2013-12-12T17:55:32.759Z", 
-        "deleted": false, 
-        "ip": "128.112.171.94", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 562, 
-        "instance_name": "instance-000003fb", 
-        "updated": "2013-12-12T17:55:32.776Z", 
-        "slice": 4, 
-        "deploymentNetwork": 7, 
-        "name": "node39.princeton.vicci.org", 
-        "created": "2013-12-12T17:55:32.776Z", 
-        "deleted": false, 
-        "ip": "128.112.171.96", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 563, 
-        "instance_name": "instance-000003fc", 
-        "updated": "2013-12-12T17:55:32.792Z", 
-        "slice": 4, 
-        "deploymentNetwork": 7, 
-        "name": "node40.princeton.vicci.org", 
-        "created": "2013-12-12T17:55:32.792Z", 
-        "deleted": false, 
-        "ip": "128.112.171.98", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 565, 
-        "instance_name": "instance-000003fd", 
-        "updated": "2013-12-12T17:55:32.809Z", 
-        "slice": 4, 
-        "deploymentNetwork": 7, 
-        "name": "node42.princeton.vicci.org", 
-        "created": "2013-12-12T17:55:32.809Z", 
-        "deleted": false, 
-        "ip": "128.112.171.102", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 62, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 566, 
-        "instance_name": "instance-000003fe", 
-        "updated": "2013-12-12T17:55:32.826Z", 
-        "slice": 4, 
-        "deploymentNetwork": 7, 
-        "name": "node43.princeton.vicci.org", 
-        "created": "2013-12-12T17:55:32.826Z", 
-        "deleted": false, 
-        "ip": "128.112.171.104", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 63, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 568, 
-        "instance_name": "instance-000003ff", 
-        "updated": "2013-12-12T17:55:32.842Z", 
-        "slice": 4, 
-        "deploymentNetwork": 7, 
-        "name": "node45.princeton.vicci.org", 
-        "created": "2013-12-12T17:55:32.842Z", 
-        "deleted": false, 
-        "ip": "128.112.171.108", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 64, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 404, 
-        "instance_name": "instance-00000400", 
-        "updated": "2013-12-12T17:55:32.859Z", 
-        "slice": 4, 
-        "deploymentNetwork": 5, 
-        "name": "node21.stanford.vicci.org", 
-        "created": "2013-12-12T17:55:32.859Z", 
-        "deleted": false, 
-        "ip": "171.67.92.159", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 65, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 405, 
-        "instance_name": "instance-00000401", 
-        "updated": "2013-12-12T17:55:32.875Z", 
-        "slice": 4, 
-        "deploymentNetwork": 5, 
-        "name": "node22.stanford.vicci.org", 
-        "created": "2013-12-12T17:55:32.875Z", 
-        "deleted": false, 
-        "ip": "171.67.92.160", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 66, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 406, 
-        "instance_name": "instance-00000402", 
-        "updated": "2013-12-12T17:55:32.892Z", 
-        "slice": 4, 
-        "deploymentNetwork": 5, 
-        "name": "node23.stanford.vicci.org", 
-        "created": "2013-12-12T17:55:32.892Z", 
-        "deleted": false, 
-        "ip": "171.67.92.161", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 67, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 407, 
-        "instance_name": "instance-00000403", 
-        "updated": "2013-12-12T17:55:32.909Z", 
-        "slice": 4, 
-        "deploymentNetwork": 5, 
-        "name": "node24.stanford.vicci.org", 
-        "created": "2013-12-12T17:55:32.909Z", 
-        "deleted": false, 
-        "ip": "171.67.92.162", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 68, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 408, 
-        "instance_name": "instance-00000404", 
-        "updated": "2013-12-12T17:55:32.925Z", 
-        "slice": 4, 
-        "deploymentNetwork": 5, 
-        "name": "node25.stanford.vicci.org", 
-        "created": "2013-12-12T17:55:32.925Z", 
-        "deleted": false, 
-        "ip": "171.67.92.163", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 69, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 409, 
-        "instance_name": "instance-00000405", 
-        "updated": "2013-12-12T17:55:32.942Z", 
-        "slice": 4, 
-        "deploymentNetwork": 5, 
-        "name": "node26.stanford.vicci.org", 
-        "created": "2013-12-12T17:55:32.942Z", 
-        "deleted": false, 
-        "ip": "171.67.92.164", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 70, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 412, 
-        "instance_name": "instance-00000406", 
-        "updated": "2013-12-12T17:55:32.958Z", 
-        "slice": 4, 
-        "deploymentNetwork": 5, 
-        "name": "node29.stanford.vicci.org", 
-        "created": "2013-12-12T17:55:32.958Z", 
-        "deleted": false, 
-        "ip": "171.67.92.167", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 71, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 413, 
-        "instance_name": "instance-00000407", 
-        "updated": "2013-12-12T17:55:32.975Z", 
-        "slice": 4, 
-        "deploymentNetwork": 5, 
-        "name": "node30.stanford.vicci.org", 
-        "created": "2013-12-12T17:55:32.975Z", 
-        "deleted": false, 
-        "ip": "171.67.92.168", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 72, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 460, 
-        "instance_name": "instance-00000408", 
-        "updated": "2013-12-12T17:55:32.992Z", 
-        "slice": 4, 
-        "deploymentNetwork": 6, 
-        "name": "node7.washington.vicci.org", 
-        "created": "2013-12-12T17:55:32.992Z", 
-        "deleted": false, 
-        "ip": "128.95.1.112", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 73, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 467, 
-        "instance_name": "instance-00000409", 
-        "updated": "2013-12-12T17:55:33.008Z", 
-        "slice": 4, 
-        "deploymentNetwork": 6, 
-        "name": "node14.washington.vicci.org", 
-        "created": "2013-12-12T17:55:33.008Z", 
-        "deleted": false, 
-        "ip": "128.95.1.119", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 76, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 470, 
-        "instance_name": "instance-0000040c", 
-        "updated": "2013-12-12T17:55:33.058Z", 
-        "slice": 4, 
-        "deploymentNetwork": 6, 
-        "name": "node17.washington.vicci.org", 
-        "created": "2013-12-12T17:55:33.058Z", 
-        "deleted": false, 
-        "ip": "128.95.1.122", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 77, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 553, 
-        "instance_name": "instance-0000040d", 
-        "updated": "2013-12-12T17:55:33.110Z", 
-        "slice": 8, 
-        "deploymentNetwork": 7, 
-        "name": "node30.princeton.vicci.org", 
-        "created": "2013-12-12T17:55:33.110Z", 
-        "deleted": false, 
-        "ip": "128.112.171.78", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 78, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 553, 
-        "instance_name": "instance-0000040e", 
-        "updated": "2013-12-12T17:55:33.142Z", 
-        "slice": 9, 
-        "deploymentNetwork": 7, 
-        "name": "node30.princeton.vicci.org", 
-        "created": "2013-12-12T17:55:33.142Z", 
-        "deleted": false, 
-        "ip": "128.112.171.78", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 79, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 469, 
-        "instance_name": null, 
-        "updated": "2013-12-13T21:51:36.927Z", 
-        "slice": 11, 
-        "deploymentNetwork": 6, 
-        "name": "Stork", 
-        "created": "2013-12-13T21:51:36.927Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 0, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 80, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 438, 
-        "instance_name": null, 
-        "updated": "2013-12-13T21:53:35.001Z", 
-        "slice": 12, 
-        "deploymentNetwork": 5, 
-        "name": "Owl", 
-        "created": "2013-12-13T21:53:35.001Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 0, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 81, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 588, 
-        "instance_name": null, 
-        "updated": "2013-12-18T22:21:36.513Z", 
-        "slice": 14, 
-        "deploymentNetwork": 7, 
-        "name": "test-slice-1", 
-        "created": "2013-12-13T21:58:13.897Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 0, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 82, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 589, 
-        "instance_name": null, 
-        "updated": "2013-12-18T22:21:36.522Z", 
-        "slice": 14, 
-        "deploymentNetwork": 7, 
-        "name": "test-slice-1", 
-        "created": "2013-12-13T21:58:44.349Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 0, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 83, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 590, 
-        "instance_name": null, 
-        "updated": "2013-12-18T22:21:36.530Z", 
-        "slice": 14, 
-        "deploymentNetwork": 7, 
-        "name": "test-slice-1", 
-        "created": "2013-12-13T21:58:44.350Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 0, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 84, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 384, 
-        "instance_name": null, 
-        "updated": "2013-12-13T21:59:36.723Z", 
-        "slice": 13, 
-        "deploymentNetwork": 5, 
-        "name": "Hadoop", 
-        "created": "2013-12-13T21:59:36.723Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 0, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 85, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 473, 
-        "instance_name": null, 
-        "updated": "2013-12-13T21:59:36.725Z", 
-        "slice": 13, 
-        "deploymentNetwork": 6, 
-        "name": "Hadoop", 
-        "created": "2013-12-13T21:59:36.725Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 0, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 86, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 535, 
-        "instance_name": null, 
-        "updated": "2013-12-13T21:59:36.726Z", 
-        "slice": 13, 
-        "deploymentNetwork": 7, 
-        "name": "Hadoop", 
-        "created": "2013-12-13T21:59:36.726Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 0, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 87, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 592, 
-        "instance_name": null, 
-        "updated": "2013-12-18T22:22:04.726Z", 
-        "slice": 15, 
-        "deploymentNetwork": 7, 
-        "name": "test-slice-2", 
-        "created": "2013-12-13T22:01:30.192Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 0, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 88, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 593, 
-        "instance_name": null, 
-        "updated": "2013-12-18T22:22:04.734Z", 
-        "slice": 15, 
-        "deploymentNetwork": 7, 
-        "name": "test-slice-2", 
-        "created": "2013-12-13T22:01:49.742Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 0, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 288, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 433, 
-        "instance_name": "instance-000005dc", 
-        "updated": "2013-12-18T21:41:49.275Z", 
-        "slice": 6, 
-        "deploymentNetwork": 5, 
-        "name": "node50.stanford.vicci.org", 
-        "created": "2013-12-18T21:41:49.275Z", 
-        "deleted": false, 
-        "ip": "171.67.92.188", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 289, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 643, 
-        "instance_name": "instance-000005dd", 
-        "updated": "2013-12-18T21:41:49.293Z", 
-        "slice": 6, 
-        "deploymentNetwork": 8, 
-        "name": "node50.gt.vicci.org", 
-        "created": "2013-12-18T21:41:49.293Z", 
-        "deleted": false, 
-        "ip": "130.207.98.59", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 290, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 713, 
-        "instance_name": "instance-000005de", 
-        "updated": "2013-12-18T21:41:49.310Z", 
-        "slice": 6, 
-        "deploymentNetwork": 9, 
-        "name": "node50.mpisws.vicci.org", 
-        "created": "2013-12-18T21:41:49.310Z", 
-        "deleted": false, 
-        "ip": "141.39.220.60", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 291, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 503, 
-        "instance_name": "instance-000005df", 
-        "updated": "2013-12-18T21:41:49.326Z", 
-        "slice": 6, 
-        "deploymentNetwork": 6, 
-        "name": "node50.washington.vicci.org", 
-        "created": "2013-12-18T21:41:49.326Z", 
-        "deleted": false, 
-        "ip": "128.95.1.155", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 292, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 513, 
-        "instance_name": "instance-000005e0", 
-        "updated": "2013-12-18T21:41:49.343Z", 
-        "slice": 6, 
-        "deploymentNetwork": 6, 
-        "name": "node60.washington.vicci.org", 
-        "created": "2013-12-18T21:41:49.343Z", 
-        "deleted": false, 
-        "ip": "128.95.1.165", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 293, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 723, 
-        "instance_name": "instance-000005e1", 
-        "updated": "2013-12-18T21:41:49.359Z", 
-        "slice": 6, 
-        "deploymentNetwork": 9, 
-        "name": "node60.mpisws.vicci.org", 
-        "created": "2013-12-18T21:41:49.359Z", 
-        "deleted": false, 
-        "ip": "141.39.220.70", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 294, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 603, 
-        "instance_name": "instance-000005e2", 
-        "updated": "2013-12-18T21:41:49.376Z", 
-        "slice": 6, 
-        "deploymentNetwork": 8, 
-        "name": "node10.gt.vicci.org", 
-        "created": "2013-12-18T21:41:49.376Z", 
-        "deleted": false, 
-        "ip": "130.207.98.19", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 295, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 559, 
-        "instance_name": "instance-000005e3", 
-        "updated": "2013-12-18T21:41:49.393Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node36.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.393Z", 
-        "deleted": false, 
-        "ip": "128.112.171.90", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 296, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 560, 
-        "instance_name": "instance-000005e4", 
-        "updated": "2013-12-18T21:41:49.409Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node37.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.409Z", 
-        "deleted": false, 
-        "ip": "128.112.171.92", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 297, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 561, 
-        "instance_name": "instance-000005e5", 
-        "updated": "2013-12-18T21:41:49.426Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node38.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.426Z", 
-        "deleted": false, 
-        "ip": "128.112.171.94", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 298, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 562, 
-        "instance_name": "instance-000005e6", 
-        "updated": "2013-12-18T21:41:49.442Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node39.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.442Z", 
-        "deleted": false, 
-        "ip": "128.112.171.96", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 299, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 563, 
-        "instance_name": "instance-000005e7", 
-        "updated": "2013-12-18T21:41:49.459Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node40.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.459Z", 
-        "deleted": false, 
-        "ip": "128.112.171.98", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 300, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 564, 
-        "instance_name": "instance-000005e8", 
-        "updated": "2013-12-18T21:41:49.476Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node41.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.475Z", 
-        "deleted": false, 
-        "ip": "128.112.171.100", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 301, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 565, 
-        "instance_name": "instance-000005e9", 
-        "updated": "2013-12-18T21:41:49.492Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node42.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.492Z", 
-        "deleted": false, 
-        "ip": "128.112.171.102", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 302, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 566, 
-        "instance_name": "instance-000005ea", 
-        "updated": "2013-12-18T21:41:49.508Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node43.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.508Z", 
-        "deleted": false, 
-        "ip": "128.112.171.104", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 303, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 567, 
-        "instance_name": "instance-000005eb", 
-        "updated": "2013-12-18T21:41:49.525Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node44.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.525Z", 
-        "deleted": false, 
-        "ip": "128.112.171.106", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 304, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 568, 
-        "instance_name": "instance-000005ec", 
-        "updated": "2013-12-18T21:41:49.542Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node45.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.542Z", 
-        "deleted": false, 
-        "ip": "128.112.171.108", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 305, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 569, 
-        "instance_name": "instance-000005ed", 
-        "updated": "2013-12-18T21:41:49.558Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node46.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.558Z", 
-        "deleted": false, 
-        "ip": "128.112.171.110", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 306, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 570, 
-        "instance_name": "instance-000005ee", 
-        "updated": "2013-12-18T21:41:49.575Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node47.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.575Z", 
-        "deleted": false, 
-        "ip": "128.112.171.112", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 307, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 571, 
-        "instance_name": "instance-000005ef", 
-        "updated": "2013-12-18T21:41:49.591Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node48.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.591Z", 
-        "deleted": false, 
-        "ip": "128.112.171.114", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 308, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 572, 
-        "instance_name": "instance-000005f0", 
-        "updated": "2013-12-18T21:41:49.608Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node49.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.608Z", 
-        "deleted": false, 
-        "ip": "128.112.171.116", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 309, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 573, 
-        "instance_name": "instance-000005f1", 
-        "updated": "2013-12-18T21:41:49.625Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node50.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.625Z", 
-        "deleted": false, 
-        "ip": "128.112.171.118", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 310, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 574, 
-        "instance_name": "instance-000005f2", 
-        "updated": "2013-12-18T21:41:49.641Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node51.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.641Z", 
-        "deleted": false, 
-        "ip": "128.112.171.120", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 311, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 575, 
-        "instance_name": "instance-000005f3", 
-        "updated": "2013-12-18T21:41:49.658Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node52.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.658Z", 
-        "deleted": false, 
-        "ip": "128.112.171.122", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 312, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 576, 
-        "instance_name": "instance-000005f4", 
-        "updated": "2013-12-18T21:41:49.674Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node53.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.674Z", 
-        "deleted": false, 
-        "ip": "128.112.171.124", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 313, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 577, 
-        "instance_name": "instance-000005f5", 
-        "updated": "2013-12-18T21:41:49.691Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node54.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.691Z", 
-        "deleted": false, 
-        "ip": "128.112.171.126", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 314, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 578, 
-        "instance_name": "instance-000005f6", 
-        "updated": "2013-12-18T21:41:49.707Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node55.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.707Z", 
-        "deleted": false, 
-        "ip": "128.112.171.128", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 315, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 579, 
-        "instance_name": "instance-000005f7", 
-        "updated": "2013-12-18T21:41:49.724Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node56.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.724Z", 
-        "deleted": false, 
-        "ip": "128.112.171.130", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 316, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 580, 
-        "instance_name": "instance-000005f8", 
-        "updated": "2013-12-18T21:41:49.741Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node57.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.740Z", 
-        "deleted": false, 
-        "ip": "128.112.171.132", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 317, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 581, 
-        "instance_name": "instance-000005f9", 
-        "updated": "2013-12-18T21:41:49.757Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node58.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.757Z", 
-        "deleted": false, 
-        "ip": "128.112.171.134", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 318, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 582, 
-        "instance_name": "instance-000005fa", 
-        "updated": "2013-12-18T21:41:49.774Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node59.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.774Z", 
-        "deleted": false, 
-        "ip": "128.112.171.136", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 319, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 583, 
-        "instance_name": "instance-000005fb", 
-        "updated": "2013-12-18T21:41:49.790Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node60.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.790Z", 
-        "deleted": false, 
-        "ip": "128.112.171.138", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 320, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 584, 
-        "instance_name": "instance-000005fc", 
-        "updated": "2013-12-18T21:41:49.807Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node61.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.807Z", 
-        "deleted": false, 
-        "ip": "128.112.171.140", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 321, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 585, 
-        "instance_name": "instance-000005fd", 
-        "updated": "2013-12-18T21:41:49.823Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node62.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.823Z", 
-        "deleted": false, 
-        "ip": "128.112.171.142", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 322, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 586, 
-        "instance_name": "instance-000005fe", 
-        "updated": "2013-12-18T21:41:49.840Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node63.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.840Z", 
-        "deleted": false, 
-        "ip": "128.112.171.144", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 323, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 587, 
-        "instance_name": "instance-000005ff", 
-        "updated": "2013-12-18T21:41:49.856Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node64.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.856Z", 
-        "deleted": false, 
-        "ip": "128.112.171.146", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 324, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 588, 
-        "instance_name": "instance-00000600", 
-        "updated": "2013-12-18T21:41:49.873Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node65.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.873Z", 
-        "deleted": false, 
-        "ip": "128.112.171.148", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 325, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 589, 
-        "instance_name": "instance-00000601", 
-        "updated": "2013-12-18T21:41:49.890Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node66.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.890Z", 
-        "deleted": false, 
-        "ip": "128.112.171.150", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 326, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 590, 
-        "instance_name": "instance-00000602", 
-        "updated": "2013-12-18T21:41:49.906Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node67.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.906Z", 
-        "deleted": false, 
-        "ip": "128.112.171.152", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 327, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 591, 
-        "instance_name": "instance-00000603", 
-        "updated": "2013-12-18T21:41:49.923Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node68.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.923Z", 
-        "deleted": false, 
-        "ip": "128.112.171.154", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 328, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 592, 
-        "instance_name": "instance-00000604", 
-        "updated": "2013-12-18T21:41:49.939Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node69.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.939Z", 
-        "deleted": false, 
-        "ip": "128.112.171.156", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 329, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 593, 
-        "instance_name": "instance-00000605", 
-        "updated": "2013-12-18T21:41:49.956Z", 
-        "slice": 6, 
-        "deploymentNetwork": 7, 
-        "name": "node70.princeton.vicci.org", 
-        "created": "2013-12-18T21:41:49.956Z", 
-        "deleted": false, 
-        "ip": "128.112.171.158", 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 330, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 453, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:07.852Z", 
-        "slice": 13, 
-        "deploymentNetwork": 5, 
-        "name": "node70.stanford.vicci.org", 
-        "created": "2014-05-20T16:19:07.852Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 331, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 523, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:07.940Z", 
-        "slice": 13, 
-        "deploymentNetwork": 6, 
-        "name": "node70.washington.vicci.org", 
-        "created": "2014-05-20T16:19:07.940Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 332, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 452, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.011Z", 
-        "slice": 13, 
-        "deploymentNetwork": 5, 
-        "name": "node69.stanford.vicci.org", 
-        "created": "2014-05-20T16:19:08.011Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 333, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 522, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.076Z", 
-        "slice": 13, 
-        "deploymentNetwork": 6, 
-        "name": "node69.washington.vicci.org", 
-        "created": "2014-05-20T16:19:08.076Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 334, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 451, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.160Z", 
-        "slice": 13, 
-        "deploymentNetwork": 5, 
-        "name": "node68.stanford.vicci.org", 
-        "created": "2014-05-20T16:19:08.159Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 335, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 521, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.244Z", 
-        "slice": 13, 
-        "deploymentNetwork": 6, 
-        "name": "node68.washington.vicci.org", 
-        "created": "2014-05-20T16:19:08.244Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 336, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 450, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.305Z", 
-        "slice": 13, 
-        "deploymentNetwork": 5, 
-        "name": "node67.stanford.vicci.org", 
-        "created": "2014-05-20T16:19:08.305Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 337, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 593, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.403Z", 
-        "slice": 13, 
-        "deploymentNetwork": 7, 
-        "name": "node70.princeton.vicci.org", 
-        "created": "2014-05-20T16:19:08.397Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 338, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 520, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.421Z", 
-        "slice": 13, 
-        "deploymentNetwork": 6, 
-        "name": "node67.washington.vicci.org", 
-        "created": "2014-05-20T16:19:08.421Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 339, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 449, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.465Z", 
-        "slice": 13, 
-        "deploymentNetwork": 5, 
-        "name": "node66.stanford.vicci.org", 
-        "created": "2014-05-20T16:19:08.465Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 340, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 592, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.555Z", 
-        "slice": 13, 
-        "deploymentNetwork": 7, 
-        "name": "node69.princeton.vicci.org", 
-        "created": "2014-05-20T16:19:08.555Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 341, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 519, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.567Z", 
-        "slice": 13, 
-        "deploymentNetwork": 6, 
-        "name": "node66.washington.vicci.org", 
-        "created": "2014-05-20T16:19:08.567Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 342, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 591, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.788Z", 
-        "slice": 13, 
-        "deploymentNetwork": 7, 
-        "name": "node68.princeton.vicci.org", 
-        "created": "2014-05-20T16:19:08.788Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 343, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 590, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.903Z", 
-        "slice": 13, 
-        "deploymentNetwork": 7, 
-        "name": "node67.princeton.vicci.org", 
-        "created": "2014-05-20T16:19:08.903Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 344, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 589, 
-        "instance_name": null, 
-        "updated": "2014-05-20T16:19:08.995Z", 
-        "slice": 13, 
-        "deploymentNetwork": 7, 
-        "name": "node66.princeton.vicci.org", 
-        "created": "2014-05-20T16:19:08.995Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 345, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 535, 
-        "instance_name": null, 
-        "updated": "2014-05-20T17:55:00.654Z", 
-        "slice": 16, 
-        "deploymentNetwork": 7, 
-        "name": "Analytics", 
-        "created": "2014-05-20T17:55:00.654Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 0, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 346, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 384, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.304Z", 
-        "slice": 16, 
-        "deploymentNetwork": 5, 
-        "name": "node1.stanford.vicci.org", 
-        "created": "2014-05-20T23:45:35.304Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 347, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 454, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.322Z", 
-        "slice": 16, 
-        "deploymentNetwork": 6, 
-        "name": "node1.washington.vicci.org", 
-        "created": "2014-05-20T23:45:35.322Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 348, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 385, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.397Z", 
-        "slice": 16, 
-        "deploymentNetwork": 5, 
-        "name": "node2.stanford.vicci.org", 
-        "created": "2014-05-20T23:45:35.397Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 349, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 455, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.436Z", 
-        "slice": 16, 
-        "deploymentNetwork": 6, 
-        "name": "node2.washington.vicci.org", 
-        "created": "2014-05-20T23:45:35.436Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 350, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 524, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.461Z", 
-        "slice": 16, 
-        "deploymentNetwork": 7, 
-        "name": "node1.princeton.vicci.org", 
-        "created": "2014-05-20T23:45:35.461Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 351, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 386, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.472Z", 
-        "slice": 16, 
-        "deploymentNetwork": 5, 
-        "name": "node3.stanford.vicci.org", 
-        "created": "2014-05-20T23:45:35.472Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 352, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 456, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.508Z", 
-        "slice": 16, 
-        "deploymentNetwork": 6, 
-        "name": "node3.washington.vicci.org", 
-        "created": "2014-05-20T23:45:35.508Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 353, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 525, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.565Z", 
-        "slice": 16, 
-        "deploymentNetwork": 7, 
-        "name": "node2.princeton.vicci.org", 
-        "created": "2014-05-20T23:45:35.565Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 354, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 457, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.707Z", 
-        "slice": 16, 
-        "deploymentNetwork": 6, 
-        "name": "node4.washington.vicci.org", 
-        "created": "2014-05-20T23:45:35.706Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 355, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 526, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.812Z", 
-        "slice": 16, 
-        "deploymentNetwork": 7, 
-        "name": "node3.princeton.vicci.org", 
-        "created": "2014-05-20T23:45:35.812Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 356, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 458, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.860Z", 
-        "slice": 16, 
-        "deploymentNetwork": 6, 
-        "name": "node5.washington.vicci.org", 
-        "created": "2014-05-20T23:45:35.860Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 357, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 527, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.887Z", 
-        "slice": 16, 
-        "deploymentNetwork": 7, 
-        "name": "node4.princeton.vicci.org", 
-        "created": "2014-05-20T23:45:35.887Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 358, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 459, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.926Z", 
-        "slice": 16, 
-        "deploymentNetwork": 6, 
-        "name": "node6.washington.vicci.org", 
-        "created": "2014-05-20T23:45:35.926Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 359, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 528, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:45:35.961Z", 
-        "slice": 16, 
-        "deploymentNetwork": 7, 
-        "name": "node5.princeton.vicci.org", 
-        "created": "2014-05-20T23:45:35.961Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 360, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 387, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:46:01.919Z", 
-        "slice": 16, 
-        "deploymentNetwork": 5, 
-        "name": "node4.stanford.vicci.org", 
-        "created": "2014-05-20T23:46:01.919Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 361, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 388, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:46:01.987Z", 
-        "slice": 16, 
-        "deploymentNetwork": 5, 
-        "name": "node5.stanford.vicci.org", 
-        "created": "2014-05-20T23:46:01.987Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 362, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 389, 
-        "instance_name": null, 
-        "updated": "2014-05-20T23:46:02.054Z", 
-        "slice": 16, 
-        "deploymentNetwork": 5, 
-        "name": "node6.stanford.vicci.org", 
-        "created": "2014-05-20T23:46:02.054Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 2, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 363, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 663, 
-        "instance_name": null, 
-        "updated": "2014-05-27T15:29:38.516Z", 
-        "slice": 4, 
-        "deploymentNetwork": 8, 
-        "name": "node70.gt.vicci.org", 
-        "created": "2014-05-27T15:29:38.516Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 16, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 365, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 661, 
-        "instance_name": null, 
-        "updated": "2014-05-27T15:30:14.655Z", 
-        "slice": 4, 
-        "deploymentNetwork": 8, 
-        "name": "node68.gt.vicci.org", 
-        "created": "2014-05-27T15:30:14.655Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 16, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 366, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 593, 
-        "instance_name": null, 
-        "updated": "2014-05-28T10:01:53.533Z", 
-        "slice": 4, 
-        "deploymentNetwork": 7, 
-        "name": "node70.princeton.vicci.org", 
-        "created": "2014-05-28T10:01:53.533Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 16, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 368, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 453, 
-        "instance_name": null, 
-        "updated": "2014-05-28T12:15:02.758Z", 
-        "slice": 4, 
-        "deploymentNetwork": 5, 
-        "name": "node70.stanford.vicci.org", 
-        "created": "2014-05-28T12:15:02.758Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 16, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 369, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 452, 
-        "instance_name": null, 
-        "updated": "2014-05-28T12:15:49.381Z", 
-        "slice": 4, 
-        "deploymentNetwork": 5, 
-        "name": "node69.stanford.vicci.org", 
-        "created": "2014-05-28T12:15:49.381Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 16, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 370, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 660, 
-        "instance_name": null, 
-        "updated": "2014-05-28T12:44:22.130Z", 
-        "slice": 4, 
-        "deploymentNetwork": 8, 
-        "name": "node67.gt.vicci.org", 
-        "created": "2014-05-28T12:44:22.130Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 16, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 371, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 523, 
-        "instance_name": null, 
-        "updated": "2014-05-28T12:51:19.616Z", 
-        "slice": 4, 
-        "deploymentNetwork": 6, 
-        "name": "node70.washington.vicci.org", 
-        "created": "2014-05-28T12:51:19.616Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 16, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 372, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 522, 
-        "instance_name": null, 
-        "updated": "2014-05-29T17:07:47.912Z", 
-        "slice": 4, 
-        "deploymentNetwork": 6, 
-        "name": "node69.washington.vicci.org", 
-        "created": "2014-05-29T17:07:47.912Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 8, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 373, 
-    "model": "core.instance", 
-    "fields": {
-        "node": 733, 
-        "instance_name": null, 
-        "updated": "2014-06-04T00:34:59.093Z", 
-        "slice": 4, 
-        "deploymentNetwork": 9, 
-        "name": "node70.mpisws.vicci.org", 
-        "created": "2014-06-04T00:34:59.093Z", 
-        "deleted": false, 
-        "ip": null, 
-        "image": 1, 
-        "creator": 7, 
-        "numberCores": 1, 
-        "instance_id": null, 
-        "userData": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.reservation", 
-    "fields": {
-        "updated": "2013-12-18T23:32:41.619Z", 
-        "slice": 9, 
-        "created": "2013-12-18T23:32:07.665Z", 
-        "deleted": false, 
-        "startTime": "2013-12-20T20:31:42Z", 
-        "duration": 48, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.reservation", 
-    "fields": {
-        "updated": "2013-12-18T23:34:02.148Z", 
-        "slice": 8, 
-        "created": "2013-12-18T23:33:27.591Z", 
-        "deleted": false, 
-        "startTime": "2013-12-20T20:33:23Z", 
-        "duration": 48, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.reservation", 
-    "fields": {
-        "updated": "2013-12-18T23:35:45.483Z", 
-        "slice": 13, 
-        "created": "2013-12-18T23:34:55.406Z", 
-        "deleted": false, 
-        "startTime": "2013-12-20T20:34:32Z", 
-        "duration": 24, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.reservation", 
-    "fields": {
-        "updated": "2013-12-18T23:35:25.727Z", 
-        "slice": 13, 
-        "created": "2013-12-18T23:34:55.407Z", 
-        "deleted": false, 
-        "startTime": "2013-12-23T20:34:49Z", 
-        "duration": 24, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.reservedresource", 
-    "fields": {
-        "updated": "2013-12-18T23:32:41.622Z", 
-        "resource": 8, 
-        "created": "2013-12-18T23:32:41.622Z", 
-        "deleted": false, 
-        "instance": 78, 
-        "reservationSet": 1, 
-        "backend_status": "Provisioning in progress", 
-        "quantity": 5, 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.reservedresource", 
-    "fields": {
-        "updated": "2013-12-18T23:34:02.152Z", 
-        "resource": 8, 
-        "created": "2013-12-18T23:34:02.152Z", 
-        "deleted": false, 
-        "instance": 77, 
-        "reservationSet": 2, 
-        "backend_status": "Provisioning in progress", 
-        "quantity": 5, 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.reservedresource", 
-    "fields": {
-        "updated": "2013-12-18T23:35:25.731Z", 
-        "resource": 8, 
-        "created": "2013-12-18T23:35:25.731Z", 
-        "deleted": false, 
-        "instance": 84, 
-        "reservationSet": 4, 
-        "backend_status": "Provisioning in progress", 
-        "quantity": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.reservedresource", 
-    "fields": {
-        "updated": "2013-12-18T23:35:25.732Z", 
-        "resource": 8, 
-        "created": "2013-12-18T23:35:25.732Z", 
-        "deleted": false, 
-        "instance": 85, 
-        "reservationSet": 4, 
-        "backend_status": "Provisioning in progress", 
-        "quantity": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.reservedresource", 
-    "fields": {
-        "updated": "2013-12-18T23:35:25.733Z", 
-        "resource": 8, 
-        "created": "2013-12-18T23:35:25.733Z", 
-        "deleted": false, 
-        "instance": 86, 
-        "reservationSet": 4, 
-        "backend_status": "Provisioning in progress", 
-        "quantity": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "core.reservedresource", 
-    "fields": {
-        "updated": "2013-12-18T23:35:45.486Z", 
-        "resource": 8, 
-        "created": "2013-12-18T23:35:45.486Z", 
-        "deleted": false, 
-        "instance": 84, 
-        "reservationSet": 3, 
-        "backend_status": "Provisioning in progress", 
-        "quantity": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 7, 
-    "model": "core.reservedresource", 
-    "fields": {
-        "updated": "2013-12-18T23:35:45.488Z", 
-        "resource": 8, 
-        "created": "2013-12-18T23:35:45.487Z", 
-        "deleted": false, 
-        "instance": 85, 
-        "reservationSet": 3, 
-        "backend_status": "Provisioning in progress", 
-        "quantity": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.reservedresource", 
-    "fields": {
-        "updated": "2013-12-18T23:35:45.488Z", 
-        "resource": 8, 
-        "created": "2013-12-18T23:35:45.488Z", 
-        "deleted": false, 
-        "instance": 86, 
-        "reservationSet": 3, 
-        "backend_status": "Provisioning in progress", 
-        "quantity": 1, 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.networktemplate", 
-    "fields": {
-        "updated": "2014-05-12T19:23:35.239Z", 
-        "name": "Public dedicated IPv4", 
-        "created": "2013-12-09T14:15:16.899Z", 
-        "deleted": false, 
-        "description": "Connect a instance to the public network using dedicated public IPv4 address", 
-        "shared_network_name": "ext-net", 
-        "guaranteed_bandwidth": 0, 
-        "visibility": "public", 
-        "shared_network_id": "", 
-        "translation": "none", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": "2014-05-12T19:24:09Z"
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.networktemplate", 
-    "fields": {
-        "updated": "2014-05-28T14:03:07.786Z", 
-        "name": "Public shared IPv4", 
-        "created": "2013-12-09T14:17:29.551Z", 
-        "deleted": false, 
-        "description": "Connect a instance to the public network via NAT, with port forwarding", 
-        "shared_network_name": "nat-net", 
-        "guaranteed_bandwidth": 0, 
-        "visibility": "private", 
-        "shared_network_id": "", 
-        "translation": "NAT", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": "2014-05-12T19:23:54Z"
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.networktemplate", 
-    "fields": {
-        "updated": "2014-05-12T19:22:24.929Z", 
-        "name": "Private", 
-        "created": "2013-12-09T14:18:02.336Z", 
-        "deleted": false, 
-        "description": "A private virtual network", 
-        "shared_network_name": "", 
-        "guaranteed_bandwidth": 0, 
-        "visibility": "private", 
-        "shared_network_id": "", 
-        "translation": "none", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": "2014-05-12T19:23:30Z"
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "64.57.18.128/28", 
-        "updated": "2013-12-09T14:24:19.970Z", 
-        "subnet_id": "e1796711-5584-4bc1-b09b-45dff8f59f32", 
-        "name": "VINI-I2WashDC-public", 
-        "created": "2013-12-09T14:24:19.970Z", 
-        "deleted": false, 
-        "network_id": "7cb4291d-f8d3-4797-83b0-8deefd85bdf5", 
-        "permitted_slices": [], 
-        "labels": "public-net", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "64.57.18.112/28", 
-        "updated": "2013-12-09T14:31:41.605Z", 
-        "subnet_id": "1afdc262-767b-4736-9403-584265293a81", 
-        "name": "VINI-I2Seattle-public", 
-        "created": "2013-12-09T14:31:41.605Z", 
-        "deleted": false, 
-        "network_id": "810b4cb8-9d8e-4eee-becc-676785a07725", 
-        "permitted_slices": [], 
-        "labels": "public-net", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "64.57.18.96/28", 
-        "updated": "2013-12-09T14:33:10.312Z", 
-        "subnet_id": "c3582780-76f1-4979-97b0-e27f39f18daa", 
-        "name": "VINI-I2SaltLakeCity-public", 
-        "created": "2013-12-09T14:33:10.312Z", 
-        "deleted": false, 
-        "network_id": "4b37f048-11de-4ddd-acaf-2fc5e8716f0e", 
-        "permitted_slices": [], 
-        "labels": "public-net", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "64.57.18.80/28", 
-        "updated": "2013-12-09T14:34:55.754Z", 
-        "subnet_id": "c0d989f2-f42f-4b3e-a23f-a0063ac4f010", 
-        "name": "VINI-I2NewYork-public", 
-        "created": "2013-12-09T14:34:55.754Z", 
-        "deleted": false, 
-        "network_id": "684386d7-1286-4e58-acda-8ff45deac99e", 
-        "permitted_slices": [], 
-        "labels": "public-net", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "64.57.18.64/28", 
-        "updated": "2013-12-09T14:36:09.261Z", 
-        "subnet_id": "d37bab1f-7e01-417c-86c4-ea0d69e2f25d", 
-        "name": "VINI-I2LosAngeles-public", 
-        "created": "2013-12-09T14:36:09.261Z", 
-        "deleted": false, 
-        "network_id": "fa090174-ec59-4b7a-812b-9206d911fb61", 
-        "permitted_slices": [], 
-        "labels": "public-net", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "64.57.18.48/28", 
-        "updated": "2013-12-09T14:37:02.420Z", 
-        "subnet_id": "7caa4cfb-846a-4e4c-9984-8ead4091f816", 
-        "name": "VINI-I2KansasCity-public", 
-        "created": "2013-12-09T14:37:02.420Z", 
-        "deleted": false, 
-        "network_id": "017a3914-5eaf-4bcb-8609-6d17ebcdf075", 
-        "permitted_slices": [], 
-        "labels": "public-net", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 7, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "64.57.18.32/28", 
-        "updated": "2013-12-09T14:38:11.552Z", 
-        "subnet_id": "4438dfbd-099a-4229-bd86-cf29478a009b", 
-        "name": "VINI-I2Houston-public", 
-        "created": "2013-12-09T14:38:11.552Z", 
-        "deleted": false, 
-        "network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7", 
-        "permitted_slices": [], 
-        "labels": "public-net", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "64.57.18.32/28", 
-        "updated": "2013-12-09T14:39:51.262Z", 
-        "subnet_id": "4438dfbd-099a-4229-bd86-cf29478a009b", 
-        "name": "VINI-I2Houston-public", 
-        "created": "2013-12-09T14:39:51.262Z", 
-        "deleted": false, 
-        "network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7", 
-        "permitted_slices": [], 
-        "labels": "public-net", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 9, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "64.57.18.32/28", 
-        "updated": "2013-12-09T14:41:00.237Z", 
-        "subnet_id": "4438dfbd-099a-4229-bd86-cf29478a009b", 
-        "name": "VINI-I2Houston-public", 
-        "created": "2013-12-09T14:41:00.237Z", 
-        "deleted": false, 
-        "network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7", 
-        "permitted_slices": [], 
-        "labels": "public-net", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 10, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "64.57.18.16/28", 
-        "updated": "2013-12-09T14:42:03.158Z", 
-        "subnet_id": "332113b1-e6f4-492e-ad93-ce21512d3459", 
-        "name": "VINI-I2Chicago-public", 
-        "created": "2013-12-09T14:42:03.158Z", 
-        "deleted": false, 
-        "network_id": "ecdbaf66-b659-4d59-b0b7-1bf6d232ccba", 
-        "permitted_slices": [], 
-        "labels": "public-net", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 11, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "64.57.18.0/28", 
-        "updated": "2013-12-09T14:42:49.781Z", 
-        "subnet_id": "dafefd4f-2622-4987-9f30-94e9a977cfc3", 
-        "name": "VINI-I2Atlanta-public", 
-        "created": "2013-12-09T14:42:49.781Z", 
-        "deleted": false, 
-        "network_id": "ae4d42e8-a97c-440d-9533-4bcbd62dfb00", 
-        "permitted_slices": [], 
-        "labels": "public-net", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 12, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-13T21:51:04.425Z", 
-        "subnet_id": "", 
-        "name": "Stork package distribution", 
-        "created": "2013-12-13T21:51:04.425Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": true, 
-        "template": 4, 
-        "owner": 11, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 13, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-13T21:53:07.783Z", 
-        "subnet_id": "", 
-        "name": "Owl Data Collection", 
-        "created": "2013-12-13T21:53:07.783Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": true, 
-        "template": 4, 
-        "owner": 12, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 14, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-13T21:55:51.703Z", 
-        "subnet_id": "", 
-        "name": "Hadoop Shared Filesystem Access", 
-        "created": "2013-12-13T21:55:51.703Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": true, 
-        "template": 4, 
-        "owner": 13, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 15, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-13T21:57:38.995Z", 
-        "subnet_id": "", 
-        "name": "test-1-public", 
-        "created": "2013-12-13T21:57:38.995Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 14, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 16, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-13T22:00:40.549Z", 
-        "subnet_id": "", 
-        "name": "test-slice-2-nat", 
-        "created": "2013-12-13T22:00:40.549Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 3, 
-        "owner": 15, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 17, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-18T22:05:09.944Z", 
-        "subnet_id": "", 
-        "name": "infrastructure-private", 
-        "created": "2013-12-18T22:05:09.944Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 4, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 18, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-18T22:05:50.112Z", 
-        "subnet_id": "", 
-        "name": "infrastructure-public", 
-        "created": "2013-12-18T22:05:50.112Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 10, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 19, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-18T22:13:17.310Z", 
-        "subnet_id": "", 
-        "name": "dnsdemux-private", 
-        "created": "2013-12-18T22:13:17.310Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 4, 
-        "owner": 9, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 20, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-18T22:13:38.194Z", 
-        "subnet_id": "", 
-        "name": "dnsdemux-public", 
-        "created": "2013-12-18T22:13:38.194Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 9, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 21, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-18T22:16:19.797Z", 
-        "subnet_id": "", 
-        "name": "DnsRedir-private", 
-        "created": "2013-12-18T22:16:19.797Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 4, 
-        "owner": 8, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 22, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-18T22:16:38.335Z", 
-        "subnet_id": "", 
-        "name": "DnsRedir-public", 
-        "created": "2013-12-18T22:16:38.335Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 8, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 23, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-19T00:13:55.598Z", 
-        "subnet_id": "", 
-        "name": "HyperCache-private", 
-        "created": "2013-12-18T22:24:19.109Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [
-            6, 
-            8
-        ], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 4, 
-        "owner": 4, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 24, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-18T22:24:38.066Z", 
-        "subnet_id": "", 
-        "name": "HyperCache-public", 
-        "created": "2013-12-18T22:24:38.066Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 4, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 25, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-18T22:26:46.435Z", 
-        "subnet_id": "", 
-        "name": "Syndicate-private", 
-        "created": "2013-12-18T22:26:46.435Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 4, 
-        "owner": 6, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 26, 
-    "model": "core.network", 
-    "fields": {
-        "router_id": "", 
-        "subnet": "", 
-        "updated": "2013-12-18T22:27:12.647Z", 
-        "subnet_id": "", 
-        "name": "Syndicate-public", 
-        "created": "2013-12-18T22:27:12.647Z", 
-        "deleted": false, 
-        "network_id": "", 
-        "permitted_slices": [], 
-        "labels": "", 
-        "guaranteed_bandwidth": 0, 
-        "permit_all_slices": false, 
-        "template": 1, 
-        "owner": 6, 
-        "backend_status": "Provisioning in progress", 
-        "ports": "", 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-13T21:51:09.711Z", 
-        "slice": 11, 
-        "network": 12, 
-        "created": "2013-12-13T21:51:09.711Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-13T21:53:15.909Z", 
-        "slice": 12, 
-        "network": 13, 
-        "created": "2013-12-13T21:53:15.909Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-13T21:53:15.914Z", 
-        "slice": 12, 
-        "network": 12, 
-        "created": "2013-12-13T21:53:15.914Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-13T21:56:04.235Z", 
-        "slice": 13, 
-        "network": 14, 
-        "created": "2013-12-13T21:56:04.235Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-13T21:56:04.241Z", 
-        "slice": 13, 
-        "network": 12, 
-        "created": "2013-12-13T21:56:04.241Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-13T21:56:04.246Z", 
-        "slice": 13, 
-        "network": 13, 
-        "created": "2013-12-13T21:56:04.246Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 7, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-13T21:57:56.826Z", 
-        "slice": 14, 
-        "network": 15, 
-        "created": "2013-12-13T21:57:56.826Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-13T21:57:56.831Z", 
-        "slice": 14, 
-        "network": 13, 
-        "created": "2013-12-13T21:57:56.831Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 9, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-13T21:57:56.836Z", 
-        "slice": 14, 
-        "network": 12, 
-        "created": "2013-12-13T21:57:56.836Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 10, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-13T22:01:14.038Z", 
-        "slice": 15, 
-        "network": 16, 
-        "created": "2013-12-13T22:01:14.038Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 11, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-13T22:01:14.043Z", 
-        "slice": 15, 
-        "network": 14, 
-        "created": "2013-12-13T22:01:14.043Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 12, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-18T22:06:00.381Z", 
-        "slice": 10, 
-        "network": 17, 
-        "created": "2013-12-18T22:06:00.381Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 13, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-18T22:06:00.386Z", 
-        "slice": 10, 
-        "network": 18, 
-        "created": "2013-12-18T22:06:00.386Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 14, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-18T22:13:42.177Z", 
-        "slice": 9, 
-        "network": 19, 
-        "created": "2013-12-18T22:13:42.177Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 15, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-18T22:13:42.183Z", 
-        "slice": 9, 
-        "network": 20, 
-        "created": "2013-12-18T22:13:42.183Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 16, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-18T22:16:41.007Z", 
-        "slice": 8, 
-        "network": 21, 
-        "created": "2013-12-18T22:16:41.007Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 17, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-18T22:16:41.013Z", 
-        "slice": 8, 
-        "network": 22, 
-        "created": "2013-12-18T22:16:41.013Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 18, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-18T22:24:44.997Z", 
-        "slice": 4, 
-        "network": 23, 
-        "created": "2013-12-18T22:24:44.997Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 19, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-18T22:24:45.003Z", 
-        "slice": 4, 
-        "network": 24, 
-        "created": "2013-12-18T22:24:45.003Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 20, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-18T22:27:16.953Z", 
-        "slice": 6, 
-        "network": 25, 
-        "created": "2013-12-18T22:27:16.953Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 21, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-18T22:27:16.959Z", 
-        "slice": 6, 
-        "network": 26, 
-        "created": "2013-12-18T22:27:16.959Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 22, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-19T00:14:36.949Z", 
-        "slice": 6, 
-        "network": 23, 
-        "created": "2013-12-19T00:14:36.949Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 23, 
-    "model": "core.networkslice", 
-    "fields": {
-        "updated": "2013-12-19T00:15:11.362Z", 
-        "slice": 8, 
-        "network": 23, 
-        "created": "2013-12-19T00:15:11.362Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.networkparametertype", 
-    "fields": {
-        "updated": "2013-12-09T14:43:25.664Z", 
-        "name": "allocation-pool-end", 
-        "created": "2013-12-09T14:43:25.664Z", 
-        "deleted": false, 
-        "description": "End of IPv4 address allocation pool", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "core.networkparametertype", 
-    "fields": {
-        "updated": "2013-12-09T14:43:45.564Z", 
-        "name": "allocation-pool-start", 
-        "created": "2013-12-09T14:43:45.564Z", 
-        "deleted": false, 
-        "description": "Start of IPv4 address allocation pool", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "core.networkparametertype", 
-    "fields": {
-        "updated": "2013-12-09T14:44:05.513Z", 
-        "name": "cidr", 
-        "created": "2013-12-09T14:44:05.513Z", 
-        "deleted": false, 
-        "description": "CIDR block for network", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 14, 
-    "model": "core.account", 
-    "fields": {
-        "updated": "2013-12-18T21:29:00.470Z", 
-        "created": "2013-12-18T21:29:00.470Z", 
-        "deleted": false, 
-        "site": 10, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 15, 
-    "model": "core.account", 
-    "fields": {
-        "updated": "2013-12-18T21:29:00.495Z", 
-        "created": "2013-12-18T21:29:00.495Z", 
-        "deleted": false, 
-        "site": 22, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 16, 
-    "model": "core.account", 
-    "fields": {
-        "updated": "2013-12-18T21:29:00.502Z", 
-        "created": "2013-12-18T21:29:00.502Z", 
-        "deleted": false, 
-        "site": 24, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 63, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.421Z", 
-        "created": "2013-12-18T21:29:16.421Z", 
-        "deleted": false, 
-        "account": 14, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 64, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.434Z", 
-        "created": "2013-12-18T21:29:16.434Z", 
-        "deleted": false, 
-        "account": 14, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 65, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.229Z", 
-        "created": "2013-12-18T21:29:17.229Z", 
-        "deleted": false, 
-        "account": 14, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 66, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.213Z", 
-        "created": "2013-12-18T21:29:18.212Z", 
-        "deleted": false, 
-        "account": 14, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 67, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.091Z", 
-        "created": "2013-12-18T21:29:19.091Z", 
-        "deleted": false, 
-        "account": 14, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 68, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.175Z", 
-        "created": "2013-12-18T21:29:20.175Z", 
-        "deleted": false, 
-        "account": 15, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 69, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.193Z", 
-        "created": "2013-12-18T21:29:20.193Z", 
-        "deleted": false, 
-        "account": 15, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 70, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.239Z", 
-        "created": "2013-12-18T21:29:22.239Z", 
-        "deleted": false, 
-        "account": 15, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 71, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.550Z", 
-        "created": "2013-12-18T21:29:24.550Z", 
-        "deleted": false, 
-        "account": 15, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 72, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.820Z", 
-        "created": "2013-12-18T21:29:26.820Z", 
-        "deleted": false, 
-        "account": 15, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 73, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.206Z", 
-        "created": "2013-12-18T21:29:29.206Z", 
-        "deleted": false, 
-        "account": 16, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 74, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.222Z", 
-        "created": "2013-12-18T21:29:29.222Z", 
-        "deleted": false, 
-        "account": 16, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 75, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.538Z", 
-        "created": "2013-12-18T21:29:29.538Z", 
-        "deleted": false, 
-        "account": 16, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 76, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.894Z", 
-        "created": "2013-12-18T21:29:29.894Z", 
-        "deleted": false, 
-        "account": 16, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 77, 
-    "model": "core.invoice", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.251Z", 
-        "created": "2013-12-18T21:29:30.251Z", 
-        "deleted": false, 
-        "account": 16, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 104, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:00.529Z", 
-        "name": "node17.washington.vicci.org", 
-        "created": "2013-12-18T21:29:00.529Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 105, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:01.289Z", 
-        "name": "node16.washington.vicci.org", 
-        "created": "2013-12-18T21:29:01.289Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 106, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:02.189Z", 
-        "name": "node15.washington.vicci.org", 
-        "created": "2013-12-18T21:29:02.189Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 107, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.178Z", 
-        "name": "node14.washington.vicci.org", 
-        "created": "2013-12-18T21:29:03.178Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 108, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.942Z", 
-        "name": "node70.princeton.vicci.org", 
-        "created": "2013-12-18T21:29:03.942Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 109, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:04.702Z", 
-        "name": "node69.princeton.vicci.org", 
-        "created": "2013-12-18T21:29:04.702Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 110, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:05.547Z", 
-        "name": "node68.princeton.vicci.org", 
-        "created": "2013-12-18T21:29:05.547Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 111, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:06.336Z", 
-        "name": "node67.princeton.vicci.org", 
-        "created": "2013-12-18T21:29:06.336Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 112, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.101Z", 
-        "name": "node30.princeton.vicci.org", 
-        "created": "2013-12-18T21:29:07.101Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 113, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:09.453Z", 
-        "name": "node55.stanford.vicci.org", 
-        "created": "2013-12-18T21:29:09.453Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 114, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.216Z", 
-        "name": "node12.princeton.vicci.org", 
-        "created": "2013-12-18T21:29:10.216Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 115, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.975Z", 
-        "name": "node20.washington.vicci.org", 
-        "created": "2013-12-18T21:29:10.975Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 116, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:11.729Z", 
-        "name": "node1.stanford.vicci.org", 
-        "created": "2013-12-18T21:29:11.729Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 117, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:12.494Z", 
-        "name": "node33.princeton.vicci.org", 
-        "created": "2013-12-18T21:29:12.494Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 118, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:13.329Z", 
-        "name": "node15.princeton.vicci.org", 
-        "created": "2013-12-18T21:29:13.329Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 119, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.083Z", 
-        "name": "node23.princeton.vicci.org", 
-        "created": "2013-12-18T21:29:14.083Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 120, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.847Z", 
-        "name": "node10.princeton.vicci.org", 
-        "created": "2013-12-18T21:29:14.847Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 121, 
-    "model": "core.usableobject", 
-    "fields": {
-        "updated": "2013-12-18T21:29:15.609Z", 
-        "name": "node13.princeton.vicci.org", 
-        "created": "2013-12-18T21:29:15.609Z", 
-        "deleted": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 37, 
-    "model": "core.payment", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.973Z", 
-        "created": "2013-12-18T21:29:19.973Z", 
-        "deleted": false, 
-        "account": 14, 
-        "amount": 0.2968, 
-        "date": "2013-12-03T02:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 38, 
-    "model": "core.payment", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.979Z", 
-        "created": "2013-12-18T21:29:19.979Z", 
-        "deleted": false, 
-        "account": 14, 
-        "amount": 21.14, 
-        "date": "2013-12-09T02:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 39, 
-    "model": "core.payment", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.987Z", 
-        "created": "2013-12-18T21:29:19.987Z", 
-        "deleted": false, 
-        "account": 14, 
-        "amount": 24.3768, 
-        "date": "2013-12-16T02:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 40, 
-    "model": "core.payment", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.154Z", 
-        "created": "2013-12-18T21:29:29.153Z", 
-        "deleted": false, 
-        "account": 15, 
-        "amount": 0.3024, 
-        "date": "2013-12-03T02:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 41, 
-    "model": "core.payment", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.166Z", 
-        "created": "2013-12-18T21:29:29.166Z", 
-        "deleted": false, 
-        "account": 15, 
-        "amount": 86.5536, 
-        "date": "2013-12-09T02:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 42, 
-    "model": "core.payment", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.174Z", 
-        "created": "2013-12-18T21:29:29.174Z", 
-        "deleted": false, 
-        "account": 15, 
-        "amount": 96.404, 
-        "date": "2013-12-16T02:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 43, 
-    "model": "core.payment", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.620Z", 
-        "created": "2013-12-18T21:29:30.620Z", 
-        "deleted": false, 
-        "account": 16, 
-        "amount": 0.1848, 
-        "date": "2013-12-03T02:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 44, 
-    "model": "core.payment", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.626Z", 
-        "created": "2013-12-18T21:29:30.626Z", 
-        "deleted": false, 
-        "account": 16, 
-        "amount": 8.5904, 
-        "date": "2013-12-09T02:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 45, 
-    "model": "core.payment", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.634Z", 
-        "created": "2013-12-18T21:29:30.634Z", 
-        "deleted": false, 
-        "account": 16, 
-        "amount": 10.0016, 
-        "date": "2013-12-16T02:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59761, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.186Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.540Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 68, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59762, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.302Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.550Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59763, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.409Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.558Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59764, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.517Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.567Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59765, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.625Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.575Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59766, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.732Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.583Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59767, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.840Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.591Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59768, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.948Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.600Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59769, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.055Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.608Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59770, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.163Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.616Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59771, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.271Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.625Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59772, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.378Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.633Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59773, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.486Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.641Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59774, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.594Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.650Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59775, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.702Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.658Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59776, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.809Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.666Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59777, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.917Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.674Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59778, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.025Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.683Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59779, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.132Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.691Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59780, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.248Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.699Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59781, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.356Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.708Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59782, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.464Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.716Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59783, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.613Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.724Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59784, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.721Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.732Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59785, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.828Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.741Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59786, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.936Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.749Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59787, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.043Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.757Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59788, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.151Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.766Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59789, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.259Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.774Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59790, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.367Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.782Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59791, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.474Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.790Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59792, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.582Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.799Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59793, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.690Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.807Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59794, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.797Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.815Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59795, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.905Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.823Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59796, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.013Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.832Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59797, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.120Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.840Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59798, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.228Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.848Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59799, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.336Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.856Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59800, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.443Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.865Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59801, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.559Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.873Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59802, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.667Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.881Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59803, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.775Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.890Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59804, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.883Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.898Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59805, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.990Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.906Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59806, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.098Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.915Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59807, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.206Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.923Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59808, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.313Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.931Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59809, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.421Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.939Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59810, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.529Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.948Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59811, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.637Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.956Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59812, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.744Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.964Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59813, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.852Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.973Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59814, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.959Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.981Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59815, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.067Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.989Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59816, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.175Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:00.997Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59817, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.283Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.006Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59818, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.390Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.014Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59819, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.498Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.022Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59820, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.606Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.031Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59821, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.713Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.039Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59822, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.829Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.047Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59823, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.937Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.055Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59824, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.045Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.064Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59825, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.152Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.072Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59826, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.260Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.080Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59827, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.368Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.088Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59828, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.475Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.097Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59829, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.641Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.105Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59830, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.749Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.113Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59831, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.856Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.122Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59832, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.964Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.130Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59833, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.072Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.138Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59834, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.180Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.147Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59835, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.287Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.155Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59836, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.395Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.163Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59837, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.503Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.171Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59838, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.610Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.180Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59839, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.718Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.188Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59840, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.826Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.196Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59841, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.933Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.205Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59842, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.041Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.213Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 104, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59843, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:01.221Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.221Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 104, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.8, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59844, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:01.230Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.229Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 104, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.4, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59845, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:01.238Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.238Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 104, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.68, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59846, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:01.246Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.246Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 104, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.4, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59847, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:01.254Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.254Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 104, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.64, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59848, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:01.263Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.263Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 104, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.0, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59849, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:01.271Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.271Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 104, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.0, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59850, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:01.279Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.279Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 104, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.72, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59851, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.202Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.294Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59852, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.310Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.304Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59853, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.417Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.312Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59854, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.525Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.320Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59855, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.633Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.329Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59856, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.741Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.337Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59857, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.848Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.345Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59858, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.956Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.353Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59859, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.064Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.362Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59860, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.171Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.370Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59861, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.279Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.378Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59862, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.387Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.387Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59863, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.494Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.395Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59864, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.602Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.403Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59865, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.710Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.412Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59866, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.818Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.420Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59867, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.925Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.428Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59868, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.033Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.436Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59869, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.141Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.445Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59870, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.257Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.453Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59871, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.364Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.461Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59872, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.472Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.470Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59873, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.621Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.478Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59874, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.729Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.486Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59875, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.836Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.494Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59876, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.944Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.503Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59877, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.052Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.511Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59878, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.160Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.519Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59879, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.267Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.528Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59880, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.375Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.536Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59881, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.483Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.544Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59882, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.590Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.552Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59883, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.698Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.561Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59884, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.806Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.569Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59885, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.913Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.577Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59886, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.021Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.586Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59887, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.129Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.594Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59888, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.236Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.602Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59889, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.344Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.610Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59890, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.452Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.619Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59891, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.568Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.627Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59892, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.676Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.635Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59893, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.783Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.644Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59894, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.891Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.652Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59895, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.999Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.660Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59896, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.106Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.669Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59897, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.214Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.677Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59898, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.322Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.685Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59899, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.429Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.693Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59900, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.537Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.702Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59901, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.645Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.710Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59902, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.752Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.718Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59903, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.860Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.727Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59904, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.968Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.735Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59905, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.075Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.743Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59906, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.183Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.751Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59907, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.291Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.760Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59908, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.399Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.768Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59909, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.506Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.776Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59910, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.614Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.784Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59911, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.722Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.793Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59912, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.838Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.801Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59913, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.945Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.809Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59914, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.053Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.818Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59915, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.161Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.826Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59916, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.268Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.834Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59917, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.376Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.842Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59918, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.484Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.851Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59919, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.649Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.859Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59920, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.757Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.867Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59921, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.865Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.875Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59922, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.972Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.884Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59923, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.080Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.892Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59924, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.188Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.900Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59925, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.296Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.909Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59926, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.403Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.917Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59927, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.511Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.925Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59928, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.619Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.934Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59929, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.726Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.942Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59930, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.834Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.950Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59931, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.942Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:01.980Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59932, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.049Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.021Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 105, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59933, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:02.066Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.066Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 105, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.96, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59934, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:02.116Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.116Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 105, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.44, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59935, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:02.124Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.124Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 105, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.36, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59936, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:02.132Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.132Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 105, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.68, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59937, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:02.141Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.141Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 105, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.92, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59938, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:02.149Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.149Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 105, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.0, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59939, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:02.157Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.157Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 105, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.84, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59940, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:02.165Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.165Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 105, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.56, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59941, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.210Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.205Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59942, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.318Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.246Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59943, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.426Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.273Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59944, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.533Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.323Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59945, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.641Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.348Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59946, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.749Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.379Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59947, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.857Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.430Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59948, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.964Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.471Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59949, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.072Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.497Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59950, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.180Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.505Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59951, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.287Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.513Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59952, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.395Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.521Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59953, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.503Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.530Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59954, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.610Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.538Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59955, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.718Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.546Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59956, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.826Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.555Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59957, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.933Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.563Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59958, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.041Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.571Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59959, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.149Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.579Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59960, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.265Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.588Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59961, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.372Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.596Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59962, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.480Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.604Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59963, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.629Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.613Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59964, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.737Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.621Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59965, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.845Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.629Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59966, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.952Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.638Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59967, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.060Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.646Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59968, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.168Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.654Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59969, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.275Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.662Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59970, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.383Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.671Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59971, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.491Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.679Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59972, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.598Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.687Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59973, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.706Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.695Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59974, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.814Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.704Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59975, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.922Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.712Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59976, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.029Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.720Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59977, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.137Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.729Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59978, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.245Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.737Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59979, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.352Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.745Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59980, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.460Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.753Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59981, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.576Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.762Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59982, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.684Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.770Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59983, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.791Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.778Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59984, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.899Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.787Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59985, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.007Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.795Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59986, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.114Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.803Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59987, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.222Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.811Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59988, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.330Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.820Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59989, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.438Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.828Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59990, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.545Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.836Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59991, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.653Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.845Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59992, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.761Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.853Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59993, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.868Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.861Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59994, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.976Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.869Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59995, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.084Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.878Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59996, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.192Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.886Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59997, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.299Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.894Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59998, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.407Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.902Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 59999, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.514Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.911Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60000, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.622Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.919Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60001, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.730Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.927Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60002, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.846Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.936Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60003, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.953Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.944Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60004, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.061Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.952Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60005, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.169Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.960Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60006, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.277Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.969Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60007, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.384Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.977Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60008, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.492Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.985Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60009, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.658Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:02.994Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60010, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.765Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.002Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60011, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.873Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.010Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60012, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.981Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.018Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60013, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.088Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.027Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60014, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.196Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.035Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60015, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.304Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.043Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60016, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.411Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.052Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60017, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.519Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.060Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60018, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.627Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.068Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60019, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.735Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.076Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60020, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.842Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.085Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60021, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.950Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.093Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60022, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.058Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.101Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 106, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60023, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.110Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.110Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 106, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.44, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60024, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.118Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.118Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 106, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.12, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60025, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.126Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.126Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 106, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.72, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60026, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.134Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.134Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 106, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.52, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60027, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.143Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.143Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 106, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.44, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60028, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.151Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.151Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 106, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.8, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60029, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.160Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.159Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 106, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.76, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60030, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.168Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.168Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 106, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 1.68, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60031, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.219Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.183Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60032, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.326Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.193Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60033, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.434Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.201Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60034, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.542Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.209Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60035, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.650Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.217Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60036, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.757Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.226Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60037, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.865Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.234Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60038, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.973Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.242Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60039, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.080Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.251Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60040, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.188Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.259Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60041, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.296Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.267Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60042, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.403Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.275Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60043, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.511Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.284Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60044, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.619Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.292Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60045, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.726Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.300Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60046, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.834Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.308Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60047, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.942Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.317Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60048, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.049Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.325Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60049, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.157Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.333Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60050, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.273Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.342Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60051, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.381Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.350Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60052, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.488Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.358Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60053, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.638Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.366Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60054, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.745Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.375Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60055, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.853Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.383Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60056, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.961Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.391Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60057, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.068Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.400Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60058, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.176Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.408Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60059, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.284Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.416Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60060, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.391Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.424Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60061, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.499Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.433Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60062, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.607Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.441Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60063, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.715Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.449Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60064, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.822Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.457Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60065, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.930Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.466Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60066, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.038Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.474Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60067, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.145Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.482Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60068, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.253Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.491Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60069, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.361Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.499Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60070, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.468Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.507Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60071, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.584Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.516Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60072, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.692Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.524Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60073, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.800Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.532Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60074, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.907Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.541Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60075, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.015Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.549Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60076, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.123Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.557Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60077, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.231Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.565Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60078, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.338Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.574Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60079, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.446Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.582Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60080, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.554Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.590Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60081, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.661Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.598Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60082, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.769Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.607Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60083, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.877Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.615Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60084, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.984Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.623Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60085, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.092Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.631Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60086, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.200Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.640Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60087, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.307Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.648Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60088, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.415Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.657Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60089, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.523Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.665Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60090, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.630Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.673Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60091, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.738Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.681Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60092, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.854Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.690Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60093, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.962Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.698Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60094, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.069Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.706Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60095, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.177Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.714Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60096, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.285Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.723Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60097, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.393Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.731Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60098, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.500Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.739Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60099, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.666Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.748Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60100, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.774Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.756Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60101, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.881Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.764Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60102, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.989Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.773Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60103, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.097Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.781Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60104, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.204Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.789Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60105, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.312Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.797Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60106, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.420Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.806Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60107, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.527Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.814Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60108, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.635Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.822Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60109, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.743Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.830Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60110, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.851Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.839Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60111, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.958Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.847Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60112, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.066Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.855Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 107, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60113, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.864Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.864Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 107, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.0, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60114, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.872Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.872Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 107, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.6, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60115, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.880Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.880Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 107, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.0, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60116, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.888Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.888Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 107, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.32, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60117, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.897Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.897Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 107, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.92, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60118, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.905Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.905Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 107, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.0, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60119, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.913Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.913Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 107, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.44, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60120, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:03.921Z", 
-        "slice": 4, 
-        "created": "2013-12-18T21:29:03.921Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 107, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.4, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60121, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.227Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:03.953Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60122, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.335Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:03.963Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60123, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.442Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:03.971Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60124, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.550Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:03.979Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60125, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.658Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:03.988Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60126, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.765Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:03.996Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60127, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.873Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.004Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60128, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.981Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.013Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60129, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.088Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.021Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60130, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.196Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.029Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60131, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.304Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.037Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60132, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.412Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.046Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60133, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.519Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.054Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60134, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.627Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.062Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60135, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.735Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.071Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60136, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.842Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.079Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60137, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.950Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.087Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60138, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.058Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.095Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60139, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.166Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.104Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60140, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.281Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.112Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60141, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.389Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.120Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60142, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.497Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.129Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60143, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.646Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.137Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60144, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.754Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.145Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60145, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.861Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.154Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60146, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.969Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.162Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60147, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.077Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.170Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60148, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.184Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.178Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60149, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.292Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.187Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60150, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.400Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.195Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60151, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.507Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.203Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60152, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.615Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.212Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60153, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.723Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.220Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60154, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.831Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.228Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60155, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.938Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.236Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60156, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.046Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.245Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60157, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.154Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.253Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60158, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.261Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.261Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60159, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.369Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.269Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60160, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.477Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.278Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60161, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.593Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.286Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60162, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.700Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.294Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60163, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.808Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.303Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60164, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.916Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.311Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60165, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.023Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.319Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60166, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.131Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.327Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60167, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.239Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.336Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60168, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.346Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.344Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60169, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.454Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.352Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60170, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.562Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.361Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60171, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.670Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.369Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60172, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.777Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.377Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60173, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.885Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.385Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60174, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.993Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.394Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60175, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.100Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.402Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60176, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.208Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.410Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60177, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.316Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.419Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60178, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.423Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.427Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60179, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.531Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.435Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60180, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.639Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.443Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60181, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.746Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.452Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60182, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.862Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.460Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60183, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.970Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.468Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60184, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.078Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.476Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60185, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.186Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.485Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60186, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.293Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.493Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60187, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.401Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.501Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60188, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.509Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.510Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60189, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.674Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.518Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60190, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.782Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.526Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60191, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.890Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.535Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60192, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.997Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.543Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60193, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.105Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.551Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60194, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.213Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.559Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60195, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.320Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.568Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60196, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.428Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.576Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60197, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.536Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.584Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60198, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.644Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.593Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60199, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.751Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.601Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60200, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.859Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.609Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60201, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.967Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.617Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60202, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.074Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.626Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 108, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60203, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:04.634Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.634Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 108, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.84, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60204, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:04.642Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.642Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 108, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.0, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60205, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:04.651Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.651Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 108, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.0, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60206, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:04.659Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.659Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 108, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.36, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60207, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:04.667Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.667Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 108, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.64, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60208, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:04.676Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.676Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 108, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.84, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60209, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:04.684Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.684Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 108, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.12, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60210, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:04.692Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.692Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 108, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 1.68, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60211, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.235Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.707Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60212, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.343Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.717Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60213, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.451Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.725Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60214, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.558Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.733Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60215, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.666Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.742Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60216, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.774Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.750Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60217, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.881Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.758Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60218, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.989Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.767Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60219, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.097Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.775Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60220, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.205Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.783Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60221, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.312Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.791Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60222, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.420Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.800Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60223, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.528Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.808Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60224, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.636Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.816Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60225, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.743Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.825Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60226, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.851Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.833Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60227, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.958Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.841Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60228, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.066Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.849Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60229, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.174Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.858Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60230, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.290Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.866Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60231, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.397Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.874Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60232, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.505Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.883Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60233, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.654Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.891Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60234, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.762Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.899Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60235, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.870Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.907Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60236, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.977Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.915Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60237, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.085Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.924Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60238, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.193Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.932Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60239, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.300Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.940Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60240, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.408Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.949Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60241, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.516Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.957Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60242, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.623Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.965Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60243, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.731Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.974Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60244, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.839Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.982Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60245, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.947Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.990Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60246, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.054Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:04.998Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60247, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.162Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.007Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60248, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.270Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.015Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60249, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.377Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.023Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60250, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.485Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.032Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60251, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.601Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.040Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60252, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.709Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.048Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60253, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.816Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.056Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60254, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.924Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.065Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60255, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.032Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.073Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60256, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.139Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.081Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60257, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.247Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.090Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60258, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.355Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.098Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60259, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.462Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.106Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60260, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.570Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.114Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60261, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.678Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.123Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60262, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.786Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.131Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60263, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.893Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.140Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60264, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.001Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.148Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60265, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.109Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.156Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60266, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.216Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.164Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60267, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.324Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.173Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60268, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.432Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.181Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60269, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.539Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.189Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60270, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.647Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.197Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60271, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.755Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.206Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60272, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.871Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.214Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60273, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.978Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.222Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60274, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.086Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.231Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60275, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.194Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.253Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60276, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.301Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.331Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60277, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.409Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.346Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60278, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.517Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.355Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60279, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.683Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.363Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60280, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.790Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.371Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60281, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.898Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.380Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60282, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.006Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.388Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60283, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.113Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.396Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60284, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.221Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.404Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60285, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.329Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.413Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60286, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.436Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.421Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60287, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.544Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.429Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60288, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.652Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.438Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60289, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.759Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.446Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60290, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.867Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.454Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60291, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.975Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.462Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60292, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.083Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.471Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 109, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60293, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:05.479Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.479Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 109, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.76, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60294, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:05.487Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.487Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 109, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.48, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60295, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:05.496Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.495Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 109, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.64, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60296, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:05.504Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.504Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 109, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 1.92, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60297, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:05.512Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.512Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 109, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.32, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60298, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:05.520Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.520Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 109, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.24, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60299, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:05.529Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.529Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 109, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 1.76, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60300, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:05.537Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.537Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 109, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.28, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60301, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.244Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.552Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60302, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.351Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.562Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60303, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.459Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.570Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60304, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.567Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.578Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60305, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.674Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.587Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60306, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.782Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.595Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60307, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.890Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.603Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60308, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.997Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.611Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60309, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.105Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.620Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60310, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.213Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.630Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60311, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.321Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.645Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60312, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.428Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.655Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60313, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.536Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.670Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60314, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.644Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.680Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60315, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.751Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.694Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60316, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.859Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.705Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60317, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.967Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.719Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60318, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.074Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.730Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60319, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.182Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.738Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60320, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.298Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.747Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60321, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.406Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.755Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60322, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.513Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.763Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60323, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.663Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.771Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60324, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.770Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.780Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60325, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.878Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.788Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60326, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.986Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.796Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60327, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.093Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.804Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60328, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.201Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.813Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60329, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.309Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.821Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60330, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.416Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.829Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60331, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.524Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.838Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60332, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.632Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.846Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60333, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.739Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.854Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60334, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.847Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.862Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60335, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.955Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.871Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60336, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.062Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.879Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60337, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.170Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.887Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60338, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.278Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.896Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60339, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.385Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.904Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60340, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.493Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.912Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60341, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.609Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.921Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60342, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.717Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.929Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60343, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.825Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.937Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60344, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.932Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.945Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60345, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.040Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.954Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60346, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.148Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.962Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60347, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.255Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.970Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60348, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.363Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.978Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60349, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.471Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.987Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60350, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.578Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:05.995Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60351, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.686Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.003Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60352, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.794Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.012Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60353, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.902Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.020Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60354, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.009Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.028Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60355, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.117Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.036Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60356, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.225Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.045Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60357, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.332Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.053Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60358, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.440Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.061Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60359, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.548Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.070Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60360, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.655Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.078Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60361, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.763Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.086Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60362, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.879Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.094Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60363, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.987Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.103Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60364, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.094Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.111Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60365, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.202Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.119Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60366, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.310Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.128Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60367, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.418Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.136Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60368, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.525Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.144Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60369, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.691Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.153Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60370, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.798Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.161Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60371, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.906Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.169Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60372, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.014Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.177Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60373, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.122Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.186Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60374, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.229Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.194Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60375, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.337Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.202Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60376, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.445Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.210Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60377, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.552Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.219Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60378, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.660Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.227Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60379, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.768Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.235Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60380, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.875Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.244Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60381, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.983Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.252Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60382, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.091Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.260Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 110, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60383, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:06.269Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.268Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 110, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.72, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60384, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:06.277Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.277Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 110, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.64, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60385, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:06.285Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.285Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 110, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.0, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60386, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:06.293Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.293Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 110, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 1.68, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60387, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:06.302Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.302Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 110, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.88, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60388, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:06.310Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.310Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 110, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 3.68, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60389, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:06.318Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.318Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 110, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.8, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60390, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:06.326Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.326Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 110, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.64, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60391, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.252Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.341Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60392, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.360Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.351Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60393, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.467Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.360Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60394, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.575Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.368Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60395, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.683Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.376Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60396, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.790Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.384Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60397, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.898Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.393Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60398, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.006Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.401Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60399, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.113Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.409Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60400, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.221Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.417Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60401, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.329Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.426Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60402, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.436Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.434Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60403, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.544Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.442Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60404, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.652Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.451Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60405, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.760Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.459Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60406, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.867Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.467Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60407, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.975Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.475Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60408, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.083Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.484Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60409, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.190Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.492Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60410, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.306Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.500Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60411, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.414Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.509Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60412, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.522Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.517Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60413, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.671Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.525Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60414, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.779Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.534Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60415, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.886Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.542Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60416, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.994Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.550Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60417, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.102Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.558Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60418, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.209Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.567Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60419, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.317Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.575Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60420, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.425Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.583Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60421, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.532Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.591Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60422, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.640Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.600Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60423, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.748Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.608Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60424, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.855Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.616Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60425, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.963Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.625Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60426, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.071Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.633Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60427, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.178Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.641Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60428, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.286Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.650Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60429, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.394Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.658Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60430, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.501Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.666Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60431, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.617Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.674Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60432, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.725Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.683Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60433, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.833Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.691Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60434, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.941Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.699Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60435, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.048Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.708Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60436, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.156Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.716Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60437, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.264Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.724Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60438, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.371Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.732Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60439, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.479Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.741Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60440, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.587Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.749Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60441, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.694Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.757Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60442, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.802Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.766Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60443, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.910Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.774Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60444, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.017Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.782Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60445, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.125Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.790Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60446, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.233Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.799Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60447, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.341Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.807Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60448, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.448Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.815Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60449, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.556Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.823Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60450, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.664Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.832Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60451, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.771Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.840Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60452, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.887Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.848Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60453, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.995Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.857Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60454, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.103Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.865Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60455, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.210Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.873Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60456, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.318Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.881Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60457, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.426Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.890Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60458, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.533Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.898Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60459, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.699Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.906Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60460, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.807Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.915Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60461, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.914Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.923Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60462, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.022Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.931Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60463, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.130Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.939Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60464, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.238Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.948Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60465, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.345Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.956Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60466, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.453Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.964Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60467, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.561Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.972Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60468, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.668Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.981Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60469, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.776Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.989Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60470, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.884Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:06.997Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60471, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.991Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:07.006Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60472, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.099Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:07.014Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 111, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60473, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.022Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:07.022Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 111, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.4, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60474, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.031Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:07.031Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 111, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.0, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60475, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.039Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:07.039Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 111, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 1.92, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60476, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.047Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:07.047Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 111, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 2.8, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60477, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.055Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:07.055Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 111, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.8, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60478, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.064Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:07.064Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 111, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.64, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60479, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.072Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:07.072Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 111, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.16, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60480, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.080Z", 
-        "slice": 6, 
-        "created": "2013-12-18T21:29:07.080Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 111, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 4.0, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60481, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.260Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.112Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60482, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.368Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.122Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60483, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.476Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.130Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60484, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.583Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.138Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60485, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.691Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.147Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60486, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.799Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.155Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60487, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.906Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.163Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60488, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.014Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.171Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60489, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.122Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.180Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60490, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.229Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.188Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60491, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.337Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.196Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60492, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.445Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.205Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60493, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.552Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.213Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60494, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.660Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.221Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60495, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.768Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.230Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60496, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.876Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.238Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60497, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.983Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.246Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60498, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.091Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.254Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60499, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.199Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.262Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60500, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.315Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.271Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60501, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.422Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.279Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60502, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.530Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.287Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60503, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.679Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.296Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60504, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.787Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.304Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60505, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.894Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.312Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60506, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.002Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.321Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60507, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.110Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.329Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60508, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.218Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.337Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60509, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.325Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.345Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60510, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.433Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.354Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60511, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.541Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.362Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60512, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.648Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.370Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60513, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.756Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.378Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60514, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.864Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.387Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60515, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.971Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.395Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60516, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.079Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.403Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60517, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.187Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.412Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60518, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.294Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.420Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60519, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.402Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.428Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60520, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.510Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.436Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60521, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.626Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.445Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60522, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.734Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.453Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60523, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.841Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.461Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60524, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.949Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.470Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60525, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.057Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.478Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60526, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.164Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.497Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60527, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.272Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.547Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60528, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.380Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.561Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60529, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.487Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.569Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60530, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.595Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.577Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60531, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.703Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.586Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60532, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.810Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.594Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60533, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.918Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.602Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60534, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.026Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.610Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60535, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.133Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.619Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60536, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.241Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.627Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60537, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.349Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.635Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60538, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.456Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.644Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60539, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.564Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.652Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60540, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.672Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.660Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60541, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.780Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.669Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60542, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.896Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.677Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60543, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.003Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.685Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60544, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.111Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.693Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60545, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.219Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.702Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60546, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.326Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.710Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60547, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.434Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.718Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60548, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.542Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.726Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60549, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.708Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.735Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60550, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.815Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.743Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60551, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.923Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.751Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60552, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.030Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.760Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60553, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.138Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.768Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60554, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.246Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.776Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60555, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.354Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.784Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60556, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.461Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.793Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60557, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.569Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.801Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60558, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.677Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.809Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60559, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.784Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.817Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60560, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.892Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.826Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60561, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.834Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60562, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.107Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.842Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60563, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.851Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.851Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60564, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.859Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.859Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60565, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.867Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.867Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60566, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.875Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.875Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60567, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.884Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.884Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60568, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.892Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.892Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60569, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.900Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.900Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60570, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:07.909Z", 
-        "slice": 8, 
-        "created": "2013-12-18T21:29:07.909Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60571, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.268Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:07.929Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60572, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.376Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:07.942Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60573, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.484Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:07.950Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60574, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.591Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:07.958Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60575, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.699Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:07.967Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60576, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.807Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:07.975Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60577, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.914Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:07.983Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60578, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.022Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:07.991Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60579, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.130Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60580, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.238Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.008Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60581, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.345Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.016Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60582, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.453Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.025Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60583, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.561Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.033Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60584, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.668Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.041Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60585, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.776Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.049Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60586, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.884Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.058Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60587, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.991Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.066Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60588, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.099Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.074Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60589, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.207Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.082Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60590, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.323Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.091Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60591, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.431Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.099Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60592, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.538Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.107Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60593, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.687Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.116Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60594, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.795Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.124Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60595, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.903Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.132Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60596, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.010Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.141Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60597, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.118Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.149Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60598, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.226Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.157Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60599, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.333Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.166Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60600, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.441Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.174Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60601, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.549Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.182Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60602, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.657Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.190Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60603, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.764Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.199Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60604, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.872Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.207Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60605, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.980Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.215Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60606, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.087Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.224Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60607, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.195Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.232Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60608, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.303Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.240Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60609, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.410Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.249Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60610, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.518Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.257Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60611, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.634Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.265Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60612, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.742Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.273Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60613, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.849Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.282Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60614, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.957Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.290Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60615, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.065Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.298Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60616, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.173Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.306Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60617, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.280Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.315Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60618, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.388Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.323Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60619, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.496Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.331Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60620, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.603Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.339Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60621, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.711Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.348Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60622, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.819Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.356Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60623, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.926Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.364Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60624, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.034Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.373Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60625, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.142Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.381Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60626, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.249Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.389Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60627, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.357Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.397Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60628, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.465Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.406Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60629, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.572Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.414Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60630, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.680Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.422Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60631, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.788Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.431Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60632, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.904Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.439Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60633, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.011Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.447Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60634, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.119Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.455Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60635, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.227Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.464Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60636, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.335Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.472Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60637, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.442Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.480Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60638, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.550Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.489Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60639, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.716Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.497Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60640, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.823Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.505Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60641, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.931Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.513Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60642, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.039Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.522Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60643, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.147Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.530Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60644, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.254Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.538Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60645, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.362Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.546Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60646, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.469Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.555Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60647, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.577Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.563Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60648, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.685Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.571Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60649, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.793Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.580Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60650, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.900Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.588Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60651, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.008Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.596Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60652, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.116Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.605Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60653, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:08.613Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.613Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60654, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:08.621Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.621Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60655, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:08.630Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.629Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60656, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:08.638Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.638Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60657, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:08.646Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.646Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60658, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:08.654Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.654Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60659, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:08.663Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.663Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60660, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:08.671Z", 
-        "slice": 9, 
-        "created": "2013-12-18T21:29:08.671Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 112, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60661, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.215Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.698Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 73, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60662, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.240Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.704Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 74, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60663, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.256Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.712Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 74, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60664, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.273Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.721Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 74, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60665, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.290Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.729Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 74, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60666, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.306Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.737Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 74, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60667, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.323Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.745Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 74, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60668, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.339Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.754Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 74, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60669, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.356Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.762Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 74, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60670, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.372Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.770Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 74, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60671, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.389Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.779Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 74, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60672, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.406Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.787Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 74, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60673, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.424Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.795Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 74, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60674, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.440Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.803Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 74, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60675, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.457Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.812Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 74, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60676, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.473Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.820Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 74, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60677, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.490Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.828Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 74, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60678, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.507Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.837Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 74, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60679, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.523Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.845Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 74, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60680, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.548Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.853Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 75, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60681, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.565Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.861Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 75, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60682, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.581Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.870Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 75, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60683, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.598Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.878Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 75, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60684, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.614Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.886Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 75, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60685, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.631Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.894Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 75, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60686, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.648Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.903Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 75, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60687, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.664Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.911Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 75, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60688, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.681Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.919Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 75, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60689, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.697Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.928Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 75, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60690, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.714Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.936Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 75, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60691, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.730Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.944Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 75, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60692, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.747Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.952Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 75, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60693, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.763Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.961Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 75, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60694, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.780Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.969Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 75, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60695, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.797Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.977Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 75, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60696, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.813Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.986Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 75, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60697, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.830Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:08.994Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 75, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60698, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.846Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.002Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 75, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60699, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.863Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.010Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 75, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60700, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.879Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.019Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 75, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60701, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.904Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.027Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 76, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60702, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.921Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.035Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 76, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60703, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.937Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.044Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 76, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60704, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.954Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.054Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 76, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60705, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.971Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.060Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 76, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60706, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.987Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.068Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 76, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60707, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.004Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.077Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 76, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60708, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.020Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.085Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 76, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60709, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.037Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.093Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 76, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60710, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.053Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.102Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 76, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60711, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.070Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.110Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 76, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60712, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.087Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.118Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 76, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60713, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.103Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.126Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 76, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60714, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.120Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.135Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 76, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60715, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.136Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.143Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 76, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60716, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.153Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.151Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 76, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60717, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.169Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.160Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 76, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60718, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.186Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.168Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 76, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60719, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.203Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.176Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 76, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60720, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.219Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.185Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 76, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60721, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.236Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.193Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 76, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60722, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.260Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.201Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 77, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60723, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.277Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.209Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 77, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60724, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.294Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.218Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 77, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60725, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.319Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.226Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 77, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60726, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.335Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.234Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 77, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60727, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.352Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.243Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 77, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60728, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.369Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.251Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 77, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60729, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.385Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.259Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 77, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60730, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.402Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.267Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 77, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60731, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.418Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.276Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 77, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60732, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.435Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.284Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 77, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60733, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.451Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.292Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 77, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60734, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.468Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.300Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 77, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60735, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.485Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.309Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 77, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60736, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.501Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.317Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 77, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60737, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.518Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.325Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 77, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60738, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.534Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.334Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 77, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60739, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.551Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.342Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 77, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60740, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.567Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.350Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 77, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60741, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.584Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.358Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 77, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60742, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.601Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.367Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 105, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 77, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60743, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:09.375Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.375Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 105, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 1.68, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60744, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:09.383Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.383Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 105, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 3.04, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60745, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:09.392Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.392Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 105, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 4.0, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60746, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:09.400Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.400Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 105, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 3.2, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60747, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:09.408Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.408Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 105, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 3.12, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60748, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:09.416Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.416Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 105, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 3.52, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60749, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:09.425Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.425Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 105, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 4.4, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60750, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:09.433Z", 
-        "slice": 11, 
-        "created": "2013-12-18T21:29:09.433Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 105, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 4.32, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60751, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.232Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.456Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 74, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60752, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.248Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.466Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 74, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60753, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.265Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.474Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 74, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60754, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.281Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.483Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 74, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60755, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.298Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.491Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 74, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60756, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.314Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.499Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 74, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60757, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.331Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.508Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 74, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60758, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.347Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.516Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 74, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60759, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.364Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.524Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 74, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60760, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.381Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.532Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 74, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60761, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.397Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.541Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 74, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60762, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.414Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.549Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 74, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60763, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.432Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.557Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 74, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60764, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.448Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.565Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 74, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60765, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.465Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.574Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 74, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60766, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.482Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.582Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 74, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60767, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.498Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.590Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 74, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60768, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.515Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.599Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 74, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60769, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.531Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.607Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 74, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60770, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.556Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.615Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 75, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60771, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.573Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.623Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 75, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60772, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.589Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.632Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 75, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60773, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.606Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.640Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 75, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60774, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.623Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.649Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 75, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60775, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.639Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.657Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 75, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60776, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.656Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.665Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 75, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60777, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.672Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.673Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 75, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60778, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.689Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.682Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 75, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60779, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.706Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.690Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 75, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60780, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.722Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.698Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 75, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60781, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.739Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.706Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 75, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60782, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.755Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.715Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 75, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60783, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.772Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.723Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 75, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60784, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.788Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.731Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 75, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60785, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.805Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.740Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 75, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60786, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.821Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.748Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 75, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60787, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.838Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.756Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 75, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60788, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.855Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.764Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 75, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60789, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.871Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.773Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 75, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60790, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.888Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.781Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 75, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60791, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.913Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.789Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 76, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60792, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.929Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.798Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 76, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60793, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.946Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.806Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 76, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60794, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.962Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.814Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 76, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60795, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.979Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.822Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 76, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60796, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.995Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.831Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 76, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60797, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.012Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.839Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 76, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60798, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.029Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.847Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 76, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60799, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.045Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.855Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 76, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60800, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.062Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.864Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 76, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60801, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.078Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.872Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 76, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60802, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.095Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.880Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 76, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60803, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.111Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.889Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 76, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60804, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.128Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.897Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 76, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60805, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.145Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.905Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 76, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60806, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.161Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.913Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 76, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60807, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.178Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.922Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 76, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60808, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.194Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.930Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 76, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60809, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.211Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.938Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 76, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60810, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.227Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.947Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 76, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60811, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.244Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.955Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 76, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60812, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.269Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.963Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 77, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60813, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.285Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.971Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 77, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60814, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.302Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.980Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 77, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60815, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.327Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.988Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 77, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60816, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.344Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:09.996Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 77, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60817, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.360Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.005Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 77, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60818, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.377Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.013Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 77, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60819, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.393Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.021Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 77, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60820, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.410Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.029Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 77, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60821, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.427Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.038Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 77, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60822, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.443Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.046Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 77, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60823, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.460Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.054Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 77, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60824, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.476Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.063Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 77, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60825, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.493Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.071Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 77, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60826, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.509Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.079Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 77, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60827, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.526Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.087Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 77, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60828, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.543Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.096Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 77, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60829, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.559Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.104Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 77, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60830, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.576Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.112Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 77, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60831, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.592Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.120Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 77, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60832, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:30.609Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.129Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 113, 
-        "account": 16, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 77, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60833, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.137Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.137Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 113, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 2.0, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60834, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.146Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.146Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 113, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 2.0, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60835, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.154Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.154Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 113, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 3.12, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60836, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.162Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.162Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 113, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 2.72, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60837, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.170Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.170Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 113, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 2.32, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60838, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.179Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.179Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 113, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 3.6, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60839, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.187Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.187Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 113, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 2.72, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60840, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.195Z", 
-        "slice": 12, 
-        "created": "2013-12-18T21:29:10.195Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 113, 
-        "account": 16, 
-        "state": "pending", 
-        "coreHours": 3.2, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60841, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.277Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.227Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60842, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.384Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.237Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60843, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.492Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.245Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60844, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.600Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.253Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60845, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.707Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.262Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60846, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.815Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.270Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60847, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.923Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.278Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60848, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.031Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.286Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60849, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.138Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.295Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60850, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.246Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.303Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60851, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.354Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.311Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60852, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.461Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.319Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60853, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.569Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.328Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60854, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.677Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.336Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60855, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.784Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.344Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60856, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.892Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.352Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60857, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.361Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60858, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.107Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.369Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60859, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.215Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.377Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60860, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.331Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.386Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60861, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.439Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.394Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60862, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.559Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.402Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60863, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.696Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.410Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60864, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.803Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.419Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60865, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.911Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.427Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60866, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.019Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.435Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60867, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.126Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.444Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60868, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.234Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.452Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60869, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.342Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.460Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60870, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.449Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.468Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60871, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.557Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.477Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60872, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.665Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.485Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60873, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.773Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.493Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60874, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.880Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.502Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60875, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.988Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.510Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60876, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.096Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.518Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60877, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.203Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.526Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60878, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.311Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.535Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60879, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.419Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.543Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60880, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.526Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.551Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60881, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.642Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.560Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60882, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.750Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.568Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60883, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.858Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.576Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60884, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.965Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.584Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60885, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.073Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.593Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60886, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.181Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.601Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60887, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.289Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.609Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60888, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.396Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.618Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60889, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.504Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.626Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60890, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.612Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.634Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60891, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.719Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.643Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60892, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.827Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.651Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60893, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.935Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.659Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60894, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.042Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.668Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60895, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.150Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.676Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60896, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.258Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.684Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60897, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.365Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.692Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60898, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.473Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.701Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60899, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.581Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.709Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60900, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.689Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.717Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60901, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.796Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.725Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60902, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.912Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.734Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60903, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.020Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.742Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60904, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.127Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.750Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60905, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.235Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.759Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60906, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.343Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.767Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60907, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.451Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.775Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60908, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.558Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.783Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60909, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.724Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.792Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60910, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.832Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.800Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60911, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.939Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.808Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60912, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.047Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.816Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60913, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.155Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.825Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60914, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.262Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.833Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60915, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.370Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.841Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60916, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.478Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.850Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60917, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.585Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.858Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60918, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.693Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.866Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60919, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.801Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.874Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60920, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.909Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.883Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60921, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.016Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.891Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60922, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.124Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.899Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60923, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.908Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.908Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60924, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.916Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.916Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60925, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.924Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.924Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60926, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.932Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.932Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60927, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.941Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.941Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60928, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.949Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.949Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60929, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.957Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.957Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60930, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:10.966Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.966Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 114, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60931, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.285Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.981Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60932, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.393Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.990Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60933, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.500Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:10.999Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60934, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.608Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.007Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60935, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.716Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.015Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60936, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.823Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.024Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60937, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.931Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.032Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60938, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.039Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.040Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60939, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.147Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.048Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60940, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.254Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.057Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60941, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.362Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.065Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60942, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.470Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.073Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60943, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.577Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.081Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60944, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.685Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.090Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60945, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.793Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.098Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60946, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.900Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.106Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60947, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.008Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.115Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60948, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.116Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.123Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60949, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.223Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.131Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60950, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.339Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.140Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60951, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.447Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.148Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60952, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.596Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.156Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60953, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.704Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.164Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60954, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.812Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.173Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60955, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.919Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.181Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60956, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.027Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.189Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60957, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.135Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.197Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60958, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.242Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.206Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60959, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.350Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.214Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60960, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.458Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.222Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60961, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.565Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.231Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60962, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.673Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.239Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60963, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.781Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.247Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60964, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.889Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.255Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60965, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.996Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.264Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60966, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.104Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.272Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60967, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.212Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.280Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60968, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.319Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.289Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60969, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.427Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.297Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60970, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.535Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.305Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60971, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.651Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.313Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60972, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.758Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.322Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60973, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.866Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.330Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60974, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.974Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.338Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60975, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.081Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.346Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60976, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.189Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.355Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60977, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.297Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.363Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60978, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.404Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.371Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60979, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.512Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.380Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60980, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.620Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.388Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60981, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.728Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.396Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60982, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.835Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.404Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60983, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.943Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.413Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60984, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.051Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.421Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60985, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.158Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.429Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60986, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.266Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.438Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60987, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.374Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.446Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60988, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.481Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.454Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60989, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.589Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.463Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60990, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.697Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.471Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60991, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.804Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.479Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60992, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.920Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.487Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60993, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.028Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.496Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60994, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.136Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.504Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60995, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.244Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.512Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60996, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.351Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.521Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60997, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.459Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.529Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60998, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.584Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.537Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 60999, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.732Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.545Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61000, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.840Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.554Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61001, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.948Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.562Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61002, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.055Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.570Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61003, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.163Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.579Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61004, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.271Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.587Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61005, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.378Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.595Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61006, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.486Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.603Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61007, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.594Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.612Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61008, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.702Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.620Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61009, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.809Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.628Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61010, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.917Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.637Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61011, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.024Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.645Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61012, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.132Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.653Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61013, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:11.662Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.662Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61014, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:11.670Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.670Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61015, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:11.678Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.678Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61016, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:11.686Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.686Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61017, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:11.695Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.695Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61018, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:11.703Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.703Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61019, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:11.711Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.711Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61020, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:11.719Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.719Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 115, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61021, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.293Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.734Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61022, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.401Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.744Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61023, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.509Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.753Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61024, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.616Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.761Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61025, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.724Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.769Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61026, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.832Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.777Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61027, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:20.939Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.786Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61028, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.047Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.794Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61029, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.155Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.802Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61030, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.262Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.810Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61031, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.370Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.819Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61032, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.478Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.827Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61033, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.586Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.835Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61034, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.693Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.844Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61035, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.801Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.852Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61036, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:21.909Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.860Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61037, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.016Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.868Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61038, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.124Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.877Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61039, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.232Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.885Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 69, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61040, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.348Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.893Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61041, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.455Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.902Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61042, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.604Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.910Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61043, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.712Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.918Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61044, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.820Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.927Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61045, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:22.928Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.935Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61046, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.035Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.943Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61047, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.143Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.951Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61048, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.251Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.960Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61049, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.358Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.968Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61050, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.466Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.976Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61051, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.574Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.984Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61052, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.681Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:11.993Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61053, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.789Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.001Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61054, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:23.897Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.009Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61055, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.004Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.018Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61056, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.112Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.026Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61057, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.220Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.034Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61058, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.328Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.042Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61059, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.435Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.051Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61060, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.543Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.059Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 70, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61061, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.659Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.067Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61062, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.767Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.076Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61063, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.874Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.084Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61064, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:24.982Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.092Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61065, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.090Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.100Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61066, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.197Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.109Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61067, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.305Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.117Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61068, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.413Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.125Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61069, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.520Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.134Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61070, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.628Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.142Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61071, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.736Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.150Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61072, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.844Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.159Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61073, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:25.951Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.167Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61074, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.059Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.175Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61075, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.167Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.183Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61076, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.274Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.192Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61077, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.382Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.200Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61078, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.490Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.208Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61079, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.597Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.217Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61080, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.705Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.225Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61081, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.813Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.233Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 71, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61082, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:26.929Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.242Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61083, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.036Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.250Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61084, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.144Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.258Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61085, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.252Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.266Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61086, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.359Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.275Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61087, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.467Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.283Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61088, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.628Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.291Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61089, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.741Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.299Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61090, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.848Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.308Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61091, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:27.956Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.316Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61092, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.064Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.324Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61093, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.171Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.333Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61094, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.279Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.341Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61095, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.387Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.349Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61096, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.494Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.357Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61097, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.602Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.366Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61098, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.710Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.374Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61099, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.817Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.382Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61100, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:28.925Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.391Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61101, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.033Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.399Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61102, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:29.141Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.407Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "invoiced", 
-        "coreHours": 8.0, 
-        "invoice": 72, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61103, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:12.415Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.415Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61104, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:12.424Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.424Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61105, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:12.432Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.432Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61106, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:12.440Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.440Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61107, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:12.449Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.448Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61108, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:12.457Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.457Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61109, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:12.465Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.465Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61110, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:12.473Z", 
-        "slice": 13, 
-        "created": "2013-12-18T21:29:12.473Z", 
-        "deleted": false, 
-        "amount": 0.56, 
-        "object": 116, 
-        "account": 15, 
-        "state": "pending", 
-        "coreHours": 8.0, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "reservation", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61111, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.468Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.505Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 64, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61112, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.510Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.565Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 64, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61113, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.551Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.573Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 64, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61114, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.593Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.581Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 64, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61115, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.634Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.589Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 64, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61116, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.675Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.598Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 64, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61117, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.717Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.606Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 64, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61118, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.758Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.614Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 64, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61119, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.800Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.622Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 64, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61120, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.841Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.631Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 64, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61121, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.883Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.639Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 64, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61122, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.924Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.647Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 64, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61123, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.966Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.656Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 64, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61124, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.007Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.664Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 64, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61125, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.048Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.672Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 64, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61126, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.090Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.680Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 64, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61127, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.131Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.689Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 64, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61128, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.173Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.697Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 64, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61129, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.220Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.705Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 64, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61130, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.289Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.714Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 65, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61131, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.344Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.722Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 65, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61132, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.385Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.730Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 65, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61133, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.427Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.739Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 65, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61134, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.468Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.747Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 65, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61135, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.510Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.755Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 65, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61136, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.626Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.763Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 65, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61137, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.667Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.772Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 65, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61138, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.709Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.780Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 65, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61139, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.750Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.788Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 65, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61140, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.791Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.797Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 65, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61141, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.833Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.805Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 65, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61142, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.874Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.813Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 65, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61143, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.916Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.821Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 65, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61144, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.957Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.830Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 65, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61145, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.999Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.838Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 65, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61146, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.040Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.846Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 65, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61147, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.081Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.854Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 65, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61148, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.123Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.863Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 65, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61149, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.164Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.871Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 65, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61150, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.206Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.879Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 65, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61151, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.255Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.888Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 66, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61152, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.297Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.896Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 66, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61153, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.338Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.904Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 66, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61154, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.379Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.913Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 66, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61155, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.421Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.921Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 66, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61156, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.462Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.929Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 66, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61157, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.504Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.937Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 66, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61158, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.545Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.946Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 66, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61159, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.587Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.954Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 66, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61160, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.628Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.962Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 66, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61161, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.670Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.970Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 66, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61162, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.711Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.979Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 66, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61163, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.752Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.987Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 66, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61164, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.794Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:12.995Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 66, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61165, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.835Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.004Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 66, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61166, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.877Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.012Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 66, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61167, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.918Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.020Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 66, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61168, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.959Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.028Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 66, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61169, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.001Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.037Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 66, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61170, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.042Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.045Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 66, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61171, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.084Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.053Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 66, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61172, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.133Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.062Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 67, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61173, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.175Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.070Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 67, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61174, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.216Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.078Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 67, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61175, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.258Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.086Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 67, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61176, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.299Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.095Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 67, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61177, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.341Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.103Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 67, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61178, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.382Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.111Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 67, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61179, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.423Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.120Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 67, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61180, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.465Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.128Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 67, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61181, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.506Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.136Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 67, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61182, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.548Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.153Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 67, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61183, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.589Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.161Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 67, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61184, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.630Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.170Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 67, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61185, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.672Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.178Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 67, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61186, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.713Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.186Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 67, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61187, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.755Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.195Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 67, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61188, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.796Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.203Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 67, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61189, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.804Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.220Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 67, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61190, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.846Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.228Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 67, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61191, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.887Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.236Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 67, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61192, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.929Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.245Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 117, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 67, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61193, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:13.253Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.253Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 117, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 1.84, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61194, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:13.261Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.261Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 117, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 4.8, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61195, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:13.278Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.278Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 117, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.32, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61196, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:13.286Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.286Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 117, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.72, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61197, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:13.294Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.294Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 117, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 4.56, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61198, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:13.303Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.303Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 117, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.0, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61199, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:13.311Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.311Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 117, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 1.84, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61200, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:13.319Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.319Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 117, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 3.76, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61201, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.427Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.334Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 63, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61202, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.477Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.344Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 64, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61203, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.518Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.352Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 64, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61204, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.560Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.361Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 64, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61205, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.601Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.369Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 64, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61206, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.642Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.377Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 64, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61207, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.684Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.385Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 64, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61208, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.725Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.394Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 64, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61209, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.767Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.402Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 64, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61210, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.808Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.410Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 64, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61211, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.850Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.418Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 64, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61212, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.891Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.427Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 64, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61213, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.932Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.435Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 64, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61214, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.974Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.443Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 64, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61215, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.015Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.452Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 64, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61216, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.057Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.460Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 64, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61217, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.098Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.468Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 64, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61218, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.140Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.476Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 64, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61219, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.181Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.485Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 64, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61220, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.239Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.493Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 65, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61221, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.303Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.501Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 65, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61222, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.352Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.510Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 65, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61223, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.394Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.518Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 65, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61224, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.435Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.526Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 65, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61225, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.477Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.534Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 65, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61226, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.531Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.543Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 65, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61227, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.634Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.551Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 65, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61228, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.676Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.559Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 65, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61229, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.717Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.567Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 65, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61230, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.758Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.576Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 65, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61231, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.800Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.584Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 65, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61232, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.841Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.592Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 65, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61233, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.882Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.601Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 65, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61234, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.924Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.609Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 65, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61235, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.965Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.617Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 65, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61236, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.007Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.626Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 65, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61237, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.048Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.634Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 65, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61238, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.090Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.642Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 65, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61239, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.131Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.651Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 65, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61240, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.172Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.659Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 65, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61241, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.222Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.667Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 66, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61242, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.264Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.675Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 66, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61243, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.305Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.684Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 66, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61244, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.346Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.692Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 66, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61245, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.388Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.700Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 66, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61246, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.429Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.709Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 66, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61247, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.471Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.717Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 66, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61248, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.512Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.725Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 66, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61249, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.553Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.733Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 66, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61250, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.595Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.742Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 66, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61251, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.637Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.750Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 66, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61252, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.678Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.758Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 66, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61253, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.719Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.767Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 66, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61254, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.761Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.775Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 66, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61255, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.802Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.783Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 66, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61256, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.843Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.791Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 66, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61257, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.885Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.800Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 66, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61258, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.926Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.808Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 66, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61259, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.968Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.816Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 66, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61260, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.009Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.824Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 66, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61261, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.051Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.833Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 66, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61262, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.100Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.841Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 67, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61263, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.142Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.849Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 67, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61264, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.183Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.858Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 67, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61265, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.224Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.866Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 67, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61266, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.266Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.874Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 67, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61267, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.307Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.882Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 67, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61268, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.349Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.891Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 67, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61269, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.390Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.899Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 67, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61270, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.432Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.907Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 67, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61271, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.473Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.916Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 67, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61272, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.514Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.924Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 67, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61273, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.556Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.932Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 67, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61274, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.597Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.940Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 67, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61275, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.639Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.949Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 67, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61276, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.680Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.957Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 67, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61277, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.722Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.965Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 67, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61278, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.763Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.974Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 67, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61279, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.813Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.982Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 67, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61280, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.854Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.990Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 67, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61281, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.895Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:13.998Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 67, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61282, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.937Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.007Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 118, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 67, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61283, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.015Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.015Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 118, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 1.92, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61284, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.023Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.023Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 118, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.64, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61285, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.032Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.031Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 118, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 3.04, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61286, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.040Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.040Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 118, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 3.52, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61287, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.048Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.048Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 118, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 3.36, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61288, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.056Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.056Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 118, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 3.04, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61289, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.065Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.065Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 118, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.0, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61290, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.073Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.073Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 118, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.56, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61291, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.444Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.088Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 64, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61292, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.485Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.098Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 64, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61293, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.527Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.106Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 64, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61294, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.568Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.114Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 64, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61295, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.609Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.123Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 64, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61296, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.651Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.131Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 64, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61297, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.692Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.139Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 64, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61298, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.734Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.148Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 64, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61299, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.775Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.156Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 64, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61300, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.816Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.164Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 64, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61301, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.858Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.172Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 64, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61302, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.899Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.181Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 64, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61303, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.941Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.189Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 64, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61304, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.982Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.197Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 64, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61305, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.024Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.206Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 64, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61306, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.065Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.214Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 64, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61307, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.106Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.222Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 64, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61308, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.148Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.230Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 64, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61309, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.189Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.239Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 64, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61310, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.253Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.247Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 65, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61311, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.314Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.255Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 65, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61312, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.361Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.264Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 65, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61313, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.402Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.272Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 65, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61314, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.443Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.280Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 65, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61315, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.485Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.288Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 65, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61316, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.601Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.297Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 65, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61317, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.642Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.305Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 65, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61318, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.684Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.313Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 65, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61319, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.725Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.322Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 65, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61320, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.767Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.330Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 65, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61321, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.808Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.338Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 65, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61322, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.849Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.346Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 65, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61323, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.891Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.355Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 65, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61324, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.932Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.363Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 65, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61325, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.974Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.371Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 65, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61326, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.015Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.380Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 65, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61327, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.057Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.388Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 65, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61328, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.098Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.396Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 65, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61329, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.139Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.404Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 65, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61330, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.181Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.413Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 65, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61331, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.231Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.421Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 66, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61332, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.272Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.429Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 66, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61333, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.313Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.437Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 66, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61334, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.355Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.446Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 66, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61335, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.396Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.454Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 66, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61336, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.438Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.462Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 66, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61337, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.479Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.471Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 66, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61338, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.520Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.479Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 66, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61339, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.562Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.487Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 66, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61340, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.603Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.495Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 66, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61341, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.645Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.504Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 66, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61342, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.686Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.512Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 66, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61343, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.728Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.520Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 66, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61344, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.769Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.529Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 66, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61345, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.810Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.537Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 66, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61346, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.852Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.545Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 66, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61347, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.893Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.553Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 66, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61348, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.935Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.562Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 66, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61349, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.976Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.570Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 66, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61350, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.017Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.578Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 66, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61351, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.059Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.587Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 66, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61352, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.109Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.595Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 67, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61353, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.150Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.603Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 67, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61354, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.191Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.611Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 67, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61355, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.233Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.620Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 67, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61356, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.274Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.628Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 67, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61357, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.316Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.636Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 67, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61358, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.357Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.645Z", 
-        "deleted": false, 
-        "amount": 0.2632, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.76, 
-        "invoice": 67, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61359, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.398Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.653Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 67, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61360, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.440Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.661Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 67, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61361, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.481Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.669Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 67, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61362, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.523Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.678Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 67, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61363, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.564Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.686Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 67, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61364, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.606Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.694Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 67, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61365, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.647Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.702Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 67, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61366, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.688Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.711Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 67, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61367, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.730Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.719Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 67, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61368, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.771Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.727Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 67, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61369, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.821Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.736Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 67, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61370, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.862Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.744Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 67, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61371, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.904Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.752Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 67, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61372, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.945Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.761Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 119, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 67, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61373, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.769Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.769Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 119, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 1.84, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61374, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.777Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.777Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 119, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 4.48, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61375, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.785Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.785Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 119, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.08, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61376, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.794Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.794Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 119, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 4.56, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61377, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.802Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.802Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 119, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.08, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61378, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.810Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.810Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 119, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 4.72, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61379, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.818Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.818Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 119, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 4.0, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61380, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:14.827Z", 
-        "slice": 14, 
-        "created": "2013-12-18T21:29:14.827Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 119, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 3.36, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61381, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.452Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.858Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 64, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61382, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.494Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.868Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 64, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61383, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.535Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.876Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 64, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61384, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.576Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.885Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 64, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61385, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.618Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.893Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 64, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61386, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.659Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.901Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.76, 
-        "invoice": 64, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61387, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.700Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.910Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 64, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61388, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.742Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.918Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 64, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61389, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.783Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.926Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 64, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61390, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.825Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.934Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 64, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61391, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.866Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.943Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 64, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61392, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.908Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.951Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 64, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61393, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.949Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.959Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 64, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61394, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.990Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.968Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 64, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61395, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.032Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.976Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 64, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61396, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.073Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.984Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 64, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61397, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.115Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:14.992Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 64, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61398, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.156Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.001Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 64, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61399, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.198Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.009Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 64, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61400, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.264Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.017Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 65, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61401, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.328Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.025Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 65, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61402, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.369Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.034Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 65, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61403, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.410Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.042Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 65, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61404, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.452Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.050Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 65, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61405, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.493Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.059Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 65, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61406, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.609Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.067Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 65, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61407, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.651Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.075Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 65, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61408, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.692Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.084Z", 
-        "deleted": false, 
-        "amount": 0.1512, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.16, 
-        "invoice": 65, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61409, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.733Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.092Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 65, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61410, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.775Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.100Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 65, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61411, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.816Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.108Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.56, 
-        "invoice": 65, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61412, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.858Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.117Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 65, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61413, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.899Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.125Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 65, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61414, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.940Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.133Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 65, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61415, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.982Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.142Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 65, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61416, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.023Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.150Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 65, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61417, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.065Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.158Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 65, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61418, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.106Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.166Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 65, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61419, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.148Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.175Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 65, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61420, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.189Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.183Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 65, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61421, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.239Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.191Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 66, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61422, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.280Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.200Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 66, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61423, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.321Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.208Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 66, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61424, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.363Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.216Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 66, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61425, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.404Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.224Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 66, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61426, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.446Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.233Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 66, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61427, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.487Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.241Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 66, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61428, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.529Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.249Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 66, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61429, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.570Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.258Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 66, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61430, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.611Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.266Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 66, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61431, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.653Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.274Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 66, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61432, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.694Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.282Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 66, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61433, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.736Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.291Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 66, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61434, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.777Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.299Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 66, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61435, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.819Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.307Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 66, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61436, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.860Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.315Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 66, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61437, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.901Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.324Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 66, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61438, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.943Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.332Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 66, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61439, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.984Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.340Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 66, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61440, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.026Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.348Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 66, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61441, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.067Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.357Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 66, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61442, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.117Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.365Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 67, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61443, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.158Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.373Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 67, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61444, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.200Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.382Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 67, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61445, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.241Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.390Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 67, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61446, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.283Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.398Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 67, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61447, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.324Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.407Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 67, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61448, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.365Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.415Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 67, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61449, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.407Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.423Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 67, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61450, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.448Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.431Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 67, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61451, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.490Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.440Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 67, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61452, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.531Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.448Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 67, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61453, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.572Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.456Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 67, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61454, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.614Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.464Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 67, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61455, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.655Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.473Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 67, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61456, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.697Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.481Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 67, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61457, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.738Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.489Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 67, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61458, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.779Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.498Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 67, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61459, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.829Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.506Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 67, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61460, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.871Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.516Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 67, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61461, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.912Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.524Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 67, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61462, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.953Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.533Z", 
-        "deleted": false, 
-        "amount": 0.1176, 
-        "object": 120, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.68, 
-        "invoice": 67, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61463, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:15.541Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.541Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 120, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 4.56, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61464, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:15.549Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.549Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 120, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 4.48, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61465, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:15.557Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.557Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 120, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.08, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61466, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:15.566Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.566Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 120, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 4.0, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61467, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:15.574Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.574Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 120, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.96, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61468, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:15.582Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.582Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 120, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 3.36, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61469, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:15.591Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.590Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 120, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 4.8, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61470, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:15.599Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.599Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 120, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 1.76, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61471, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.460Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.614Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 64, 
-        "date": "2013-11-18T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61472, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.502Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.624Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 64, 
-        "date": "2013-11-19T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61473, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.543Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.632Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 64, 
-        "date": "2013-11-19T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61474, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.585Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.640Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 64, 
-        "date": "2013-11-19T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61475, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.626Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.649Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 64, 
-        "date": "2013-11-20T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61476, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.667Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.657Z", 
-        "deleted": false, 
-        "amount": 0.2352, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.36, 
-        "invoice": 64, 
-        "date": "2013-11-20T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61477, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.709Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.665Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 64, 
-        "date": "2013-11-20T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61478, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.750Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.673Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 64, 
-        "date": "2013-11-21T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61479, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.792Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.682Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 64, 
-        "date": "2013-11-21T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61480, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.833Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.690Z", 
-        "deleted": false, 
-        "amount": 0.14, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.0, 
-        "invoice": 64, 
-        "date": "2013-11-21T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61481, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.874Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.698Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 64, 
-        "date": "2013-11-22T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61482, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.916Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.707Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 64, 
-        "date": "2013-11-22T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61483, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.957Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.715Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 64, 
-        "date": "2013-11-22T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61484, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.999Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.723Z", 
-        "deleted": false, 
-        "amount": 0.1904, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.72, 
-        "invoice": 64, 
-        "date": "2013-11-23T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61485, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.040Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.731Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 64, 
-        "date": "2013-11-23T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61486, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.081Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.740Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 64, 
-        "date": "2013-11-23T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61487, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.123Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.748Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 64, 
-        "date": "2013-11-24T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61488, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.164Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.756Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 64, 
-        "date": "2013-11-24T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61489, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.206Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.765Z", 
-        "deleted": false, 
-        "amount": 0.168, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.4, 
-        "invoice": 64, 
-        "date": "2013-11-24T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61490, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.278Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.773Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 65, 
-        "date": "2013-11-25T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61491, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.336Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.781Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 65, 
-        "date": "2013-11-25T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61492, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.377Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.789Z", 
-        "deleted": false, 
-        "amount": 0.336, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.8, 
-        "invoice": 65, 
-        "date": "2013-11-25T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61493, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.419Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.798Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.48, 
-        "invoice": 65, 
-        "date": "2013-11-26T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61494, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.460Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.806Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 65, 
-        "date": "2013-11-26T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61495, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.501Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.814Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 65, 
-        "date": "2013-11-26T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61496, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.618Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.822Z", 
-        "deleted": false, 
-        "amount": 0.2744, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.92, 
-        "invoice": 65, 
-        "date": "2013-11-27T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61497, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.659Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.831Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 65, 
-        "date": "2013-11-27T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61498, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.700Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.839Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 65, 
-        "date": "2013-11-27T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61499, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.742Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.847Z", 
-        "deleted": false, 
-        "amount": 0.1288, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.84, 
-        "invoice": 65, 
-        "date": "2013-11-28T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61500, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.783Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.856Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 65, 
-        "date": "2013-11-28T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61501, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.824Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.864Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 65, 
-        "date": "2013-11-28T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61502, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.866Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.872Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 65, 
-        "date": "2013-11-29T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61503, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.907Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.880Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 65, 
-        "date": "2013-11-29T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61504, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.949Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.889Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 65, 
-        "date": "2013-11-29T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61505, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:17.990Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.897Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 65, 
-        "date": "2013-11-30T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61506, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.032Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.905Z", 
-        "deleted": false, 
-        "amount": 0.2576, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.68, 
-        "invoice": 65, 
-        "date": "2013-11-30T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61507, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.073Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.914Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.04, 
-        "invoice": 65, 
-        "date": "2013-11-30T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61508, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.114Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.922Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 65, 
-        "date": "2013-12-01T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61509, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.156Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.930Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 65, 
-        "date": "2013-12-01T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61510, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.197Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.938Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 65, 
-        "date": "2013-12-01T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61511, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.247Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.947Z", 
-        "deleted": false, 
-        "amount": 0.2912, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.16, 
-        "invoice": 66, 
-        "date": "2013-12-02T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61512, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.288Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.955Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 66, 
-        "date": "2013-12-02T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61513, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.330Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.963Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 66, 
-        "date": "2013-12-02T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61514, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.371Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.972Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 66, 
-        "date": "2013-12-03T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61515, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.413Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.980Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 66, 
-        "date": "2013-12-03T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61516, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.454Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.988Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.8, 
-        "invoice": 66, 
-        "date": "2013-12-03T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61517, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.496Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:15.997Z", 
-        "deleted": false, 
-        "amount": 0.2968, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.24, 
-        "invoice": 66, 
-        "date": "2013-12-04T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61518, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.537Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.005Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 66, 
-        "date": "2013-12-04T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61519, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.578Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.013Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 66, 
-        "date": "2013-12-04T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61520, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.620Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.021Z", 
-        "deleted": false, 
-        "amount": 0.2408, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.44, 
-        "invoice": 66, 
-        "date": "2013-12-05T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61521, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.661Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.030Z", 
-        "deleted": false, 
-        "amount": 0.2464, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.52, 
-        "invoice": 66, 
-        "date": "2013-12-05T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61522, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.703Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.038Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 66, 
-        "date": "2013-12-05T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61523, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.744Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.046Z", 
-        "deleted": false, 
-        "amount": 0.1848, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.64, 
-        "invoice": 66, 
-        "date": "2013-12-06T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61524, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.785Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.054Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 66, 
-        "date": "2013-12-06T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61525, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.827Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.063Z", 
-        "deleted": false, 
-        "amount": 0.3248, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.64, 
-        "invoice": 66, 
-        "date": "2013-12-06T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61526, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.868Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.071Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.6, 
-        "invoice": 66, 
-        "date": "2013-12-07T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61527, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.910Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.079Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 66, 
-        "date": "2013-12-07T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61528, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.951Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.088Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 66, 
-        "date": "2013-12-07T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61529, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:18.993Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.096Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 66, 
-        "date": "2013-12-08T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61530, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.034Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.104Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 66, 
-        "date": "2013-12-08T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61531, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.075Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.112Z", 
-        "deleted": false, 
-        "amount": 0.3024, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.32, 
-        "invoice": 66, 
-        "date": "2013-12-08T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61532, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.125Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.121Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 67, 
-        "date": "2013-12-09T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61533, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.167Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.129Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 67, 
-        "date": "2013-12-09T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61534, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.208Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.137Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 67, 
-        "date": "2013-12-09T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61535, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.249Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.146Z", 
-        "deleted": false, 
-        "amount": 0.2184, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.12, 
-        "invoice": 67, 
-        "date": "2013-12-10T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61536, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.291Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.154Z", 
-        "deleted": false, 
-        "amount": 0.1624, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.32, 
-        "invoice": 67, 
-        "date": "2013-12-10T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61537, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.332Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.162Z", 
-        "deleted": false, 
-        "amount": 0.308, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.4, 
-        "invoice": 67, 
-        "date": "2013-12-10T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61538, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.374Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.170Z", 
-        "deleted": false, 
-        "amount": 0.1568, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.24, 
-        "invoice": 67, 
-        "date": "2013-12-11T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61539, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.415Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.179Z", 
-        "deleted": false, 
-        "amount": 0.2856, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.08, 
-        "invoice": 67, 
-        "date": "2013-12-11T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61540, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.457Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.187Z", 
-        "deleted": false, 
-        "amount": 0.3136, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.48, 
-        "invoice": 67, 
-        "date": "2013-12-11T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61541, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.498Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.195Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 67, 
-        "date": "2013-12-12T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61542, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.539Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.204Z", 
-        "deleted": false, 
-        "amount": 0.2688, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.84, 
-        "invoice": 67, 
-        "date": "2013-12-12T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61543, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.581Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.212Z", 
-        "deleted": false, 
-        "amount": 0.224, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.2, 
-        "invoice": 67, 
-        "date": "2013-12-12T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61544, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.622Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.220Z", 
-        "deleted": false, 
-        "amount": 0.28, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.0, 
-        "invoice": 67, 
-        "date": "2013-12-13T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61545, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.664Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.228Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.56, 
-        "invoice": 67, 
-        "date": "2013-12-13T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61546, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.705Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.237Z", 
-        "deleted": false, 
-        "amount": 0.1344, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 1.92, 
-        "invoice": 67, 
-        "date": "2013-12-13T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61547, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.746Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.245Z", 
-        "deleted": false, 
-        "amount": 0.2072, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.96, 
-        "invoice": 67, 
-        "date": "2013-12-14T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61548, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.788Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.253Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.6, 
-        "invoice": 67, 
-        "date": "2013-12-14T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61549, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.837Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.262Z", 
-        "deleted": false, 
-        "amount": 0.2296, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 3.28, 
-        "invoice": 67, 
-        "date": "2013-12-14T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61550, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.879Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.270Z", 
-        "deleted": false, 
-        "amount": 0.1456, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.08, 
-        "invoice": 67, 
-        "date": "2013-12-15T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61551, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.920Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.278Z", 
-        "deleted": false, 
-        "amount": 0.3304, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 4.72, 
-        "invoice": 67, 
-        "date": "2013-12-15T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61552, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:19.962Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.286Z", 
-        "deleted": false, 
-        "amount": 0.2016, 
-        "object": 121, 
-        "account": 14, 
-        "state": "invoiced", 
-        "coreHours": 2.88, 
-        "invoice": 67, 
-        "date": "2013-12-15T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61553, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.295Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.295Z", 
-        "deleted": false, 
-        "amount": 0.2128, 
-        "object": 121, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 3.04, 
-        "invoice": null, 
-        "date": "2013-12-16T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61554, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.303Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.303Z", 
-        "deleted": false, 
-        "amount": 0.3192, 
-        "object": 121, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 4.56, 
-        "invoice": null, 
-        "date": "2013-12-16T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61555, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.311Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.311Z", 
-        "deleted": false, 
-        "amount": 0.1232, 
-        "object": 121, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 1.76, 
-        "invoice": null, 
-        "date": "2013-12-16T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61556, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.320Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.320Z", 
-        "deleted": false, 
-        "amount": 0.1736, 
-        "object": 121, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.48, 
-        "invoice": null, 
-        "date": "2013-12-17T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61557, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.328Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.328Z", 
-        "deleted": false, 
-        "amount": 0.1792, 
-        "object": 121, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.56, 
-        "invoice": null, 
-        "date": "2013-12-17T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61558, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.336Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.336Z", 
-        "deleted": false, 
-        "amount": 0.112, 
-        "object": 121, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 1.6, 
-        "invoice": null, 
-        "date": "2013-12-17T21:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61559, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.344Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.344Z", 
-        "deleted": false, 
-        "amount": 0.196, 
-        "object": 121, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 2.8, 
-        "invoice": null, 
-        "date": "2013-12-18T05:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 61560, 
-    "model": "core.charge", 
-    "fields": {
-        "updated": "2013-12-18T21:29:16.353Z", 
-        "slice": 15, 
-        "created": "2013-12-18T21:29:16.353Z", 
-        "deleted": false, 
-        "amount": 0.252, 
-        "object": 121, 
-        "account": 14, 
-        "state": "pending", 
-        "coreHours": 3.6, 
-        "invoice": null, 
-        "date": "2013-12-18T13:00:00Z", 
-        "backend_status": "Provisioning in progress", 
-        "kind": "besteffort", 
-        "enacted": null
-    }
-},
-{
-    "pk": 14, 
-    "model": "hpc.hpcservice", 
-    "fields": {}
-},
-{
-    "pk": 1, 
-    "model": "hpc.serviceprovider", 
-    "fields": {
-        "updated": "2013-12-11T18:11:43.757Z", 
-        "name": "internet2", 
-        "created": "2013-12-11T18:11:43.757Z", 
-        "deleted": false, 
-        "description": "", 
-        "enabled": true, 
-        "service_provider_id": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "hpc.serviceprovider", 
-    "fields": {
-        "updated": "2013-12-11T18:13:38.024Z", 
-        "name": "Syndicate", 
-        "created": "2013-12-11T18:11:52.622Z", 
-        "deleted": false, 
-        "description": "", 
-        "enabled": true, 
-        "service_provider_id": null, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 29, 
-    "model": "hpc.contentprovider", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.472Z", 
-        "name": "Syndicate", 
-        "created": "2013-12-11T23:57:17.472Z", 
-        "deleted": false, 
-        "serviceProvider": 2, 
-        "description": "Peer-to-peer content sharing for Syndicate distributed filesystem", 
-        "enabled": true, 
-        "content_provider_id": null, 
-        "users": [], 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 30, 
-    "model": "hpc.contentprovider", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.586Z", 
-        "name": "Georgia Tech", 
-        "created": "2013-12-11T23:57:20.586Z", 
-        "deleted": false, 
-        "serviceProvider": 1, 
-        "description": "Content Provider for Georgia Tech", 
-        "enabled": true, 
-        "content_provider_id": null, 
-        "users": [], 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 31, 
-    "model": "hpc.contentprovider", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.611Z", 
-        "name": "Stanford University", 
-        "created": "2013-12-11T23:57:20.611Z", 
-        "deleted": false, 
-        "serviceProvider": 1, 
-        "description": "Content Provider for Stanford University", 
-        "enabled": true, 
-        "content_provider_id": null, 
-        "users": [], 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 32, 
-    "model": "hpc.contentprovider", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.636Z", 
-        "name": "University of Washington", 
-        "created": "2013-12-11T23:57:20.636Z", 
-        "deleted": false, 
-        "serviceProvider": 1, 
-        "description": "Content Provider for University of Washington", 
-        "enabled": true, 
-        "content_provider_id": null, 
-        "users": [], 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 33, 
-    "model": "hpc.contentprovider", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.660Z", 
-        "name": "Max Planck Institute", 
-        "created": "2013-12-11T23:57:20.660Z", 
-        "deleted": false, 
-        "serviceProvider": 1, 
-        "description": "Content Provider for Max Planck Institute", 
-        "enabled": true, 
-        "content_provider_id": null, 
-        "users": [], 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 34, 
-    "model": "hpc.contentprovider", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.685Z", 
-        "name": "Princeton University", 
-        "created": "2013-12-11T23:57:20.685Z", 
-        "deleted": false, 
-        "serviceProvider": 1, 
-        "description": "Content Provider for Princeton University", 
-        "enabled": true, 
-        "content_provider_id": null, 
-        "users": [], 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 35, 
-    "model": "hpc.contentprovider", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.710Z", 
-        "name": "ON.LAB", 
-        "created": "2013-12-11T23:57:20.710Z", 
-        "deleted": false, 
-        "serviceProvider": 1, 
-        "description": "Open Networking Lab", 
-        "enabled": true, 
-        "content_provider_id": null, 
-        "users": [], 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3527, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.496Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.496Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node70.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3528, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.503Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.503Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node69.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3529, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.512Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.512Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node68.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3530, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.520Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.520Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node67.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3531, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.528Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.528Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node66.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3532, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.537Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.537Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node65.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3533, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.545Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.545Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node64.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3534, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.553Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.553Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node63.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3535, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.561Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.561Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node62.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3536, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.570Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.570Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node61.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3537, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.578Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.578Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node60.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3538, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.586Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.586Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node59.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3539, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.595Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.595Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node58.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3540, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.603Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.603Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node57.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3541, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.611Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.611Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node56.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3542, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.619Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.619Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node55.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3543, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.628Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.628Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node54.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3544, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.636Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.636Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node53.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3545, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.644Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.644Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node52.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3546, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.653Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.653Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node51.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3547, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.661Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.661Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node50.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3548, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.669Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.669Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node49.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3549, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.677Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.677Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node48.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3550, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.686Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.686Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node47.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3551, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.694Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.694Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node46.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3552, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.702Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.702Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node45.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3553, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.711Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.711Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node44.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3554, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.719Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.719Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node43.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3555, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.727Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.727Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node42.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3556, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.735Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.735Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node41.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3557, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.744Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.744Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node40.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3558, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.752Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.752Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node39.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3559, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.760Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.760Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node38.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3560, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.768Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.768Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node37.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3561, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.777Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.777Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node36.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3562, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.785Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.785Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node35.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3563, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.793Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.793Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node34.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3564, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.802Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.802Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node33.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3565, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.810Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.810Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node32.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3566, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.818Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.818Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node31.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3567, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.826Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.826Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node30.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3568, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.835Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.835Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node29.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3569, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.843Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.843Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node28.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3570, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.851Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.851Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node27.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3571, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.860Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.860Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node26.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3572, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.868Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.868Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node25.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3573, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.876Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.876Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node24.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3574, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.884Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.884Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node23.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3575, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.893Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.893Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node22.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3576, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.901Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.901Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node21.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3577, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.909Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.909Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node20.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3578, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.918Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.918Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node19.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3579, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.926Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.926Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node18.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3580, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.934Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.934Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node17.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3581, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.942Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.942Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node16.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3582, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.951Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.951Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node15.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3583, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.959Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.959Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node14.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3584, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.967Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.967Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node13.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3585, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.975Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.975Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node12.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3586, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.984Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.984Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node11.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3587, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:17.992Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:17.992Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node10.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3588, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node9.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3589, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.009Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.009Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node8.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3590, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.017Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.017Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node7.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3591, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.025Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.025Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node6.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3592, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.034Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.034Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node5.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3593, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.042Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.042Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node4.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3594, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.050Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.050Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node3.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3595, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.058Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.058Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node2.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3596, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.067Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.067Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node1.stanford.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3597, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.084Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.084Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node70.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3598, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.092Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.092Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node69.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3599, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.100Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.100Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node68.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3600, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.108Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.108Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node67.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3601, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.116Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.116Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node66.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3602, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.125Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.125Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node65.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3603, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.133Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.133Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node64.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3604, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.141Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.141Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node63.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3605, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.149Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.149Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node62.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3606, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.158Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.158Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node61.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3607, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.166Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.166Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node60.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3608, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.174Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.174Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node59.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3609, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.183Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.183Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node58.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3610, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.191Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.191Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node57.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3611, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.199Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.199Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node56.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3612, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.208Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.207Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node55.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3613, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.216Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.216Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node54.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3614, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.224Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.224Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node53.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3615, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.238Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.238Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node52.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3616, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.286Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.286Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node51.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3617, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.299Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.298Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node50.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3618, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.307Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.307Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node49.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3619, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.315Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.315Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node48.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3620, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.323Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.323Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node47.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3621, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.332Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.332Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node46.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3622, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.340Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.340Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node45.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3623, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.348Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.348Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node44.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3624, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.357Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.356Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node43.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3625, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.365Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.365Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node42.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3626, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.373Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.373Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node41.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3627, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.381Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.381Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node40.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3628, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.390Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.390Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node39.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3629, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.398Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.398Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node38.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3630, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.406Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.406Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node37.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3631, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.414Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.414Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node36.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3632, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.423Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.423Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node35.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3633, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.431Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.431Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node34.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3634, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.439Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.439Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node33.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3635, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.448Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.448Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node32.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3636, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.456Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.456Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node31.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3637, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.464Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.464Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node30.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3638, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.472Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.472Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node29.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3639, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.481Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.481Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node28.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3640, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.489Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.489Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node27.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3641, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.497Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.497Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node26.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3642, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.506Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.505Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node25.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3643, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.514Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.514Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node24.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3644, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.522Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.522Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node23.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3645, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.530Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.530Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node22.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3646, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.539Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.539Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node21.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3647, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.547Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.547Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node20.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3648, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.555Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.555Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node19.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3649, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.564Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.563Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node18.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3650, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.572Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.572Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node17.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3651, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.580Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.580Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node16.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3652, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.588Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.588Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node15.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3653, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.597Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.597Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node14.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3654, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.605Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.605Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node13.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3655, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.613Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.613Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node12.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3656, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.622Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.622Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node11.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3657, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.630Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.630Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node10.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3658, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.638Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.638Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node9.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3659, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.646Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.646Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node8.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3660, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.655Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.655Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node7.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3661, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.663Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.663Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node6.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3662, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.671Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.671Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node5.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3663, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.680Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.680Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node4.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3664, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.688Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.688Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node3.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3665, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.696Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.696Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node2.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3666, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.704Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.704Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node1.washington.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3667, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.722Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.722Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node70.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3668, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.729Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.729Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node69.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3669, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.738Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.737Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node68.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3670, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.746Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.746Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node67.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3671, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.754Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.754Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node66.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3672, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.762Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.762Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node65.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3673, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.771Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.771Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node64.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3674, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.779Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.779Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node63.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3675, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.787Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.787Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node62.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3676, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.795Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.795Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node61.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3677, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.804Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.804Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node60.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3678, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.812Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.812Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node59.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3679, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.820Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.820Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node58.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3680, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.829Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.829Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node57.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3681, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.837Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.837Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node56.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3682, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.845Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.845Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node55.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3683, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.853Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.853Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node54.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3684, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.862Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.862Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node53.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3685, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.870Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.870Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node52.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3686, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.878Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.878Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node51.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3687, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.887Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.887Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node50.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3688, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.895Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.895Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node49.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3689, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.903Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.903Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node48.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3690, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.911Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.911Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node47.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3691, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.920Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.920Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node46.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3692, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.928Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.928Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node45.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3693, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.936Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.936Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node44.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3694, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.944Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.944Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node43.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3695, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.953Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.953Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node42.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3696, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.961Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.961Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node41.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3697, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.969Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.969Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node40.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3698, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.978Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.978Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node39.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3699, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.986Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.986Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node38.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3700, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:18.994Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:18.994Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node37.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3701, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.002Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.002Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node36.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3702, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.011Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.011Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node35.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3703, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.019Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.019Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node34.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3704, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.027Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.027Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node33.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3705, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.036Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.036Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node32.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3706, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.044Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.044Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node31.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3707, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.052Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.052Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node30.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3708, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.060Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.060Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node29.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3709, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.069Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.069Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node28.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3710, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.077Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.077Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node27.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3711, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.086Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.085Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node26.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3712, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.094Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.094Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node25.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3713, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.102Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.102Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node24.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3714, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.110Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.110Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node23.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3715, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.118Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.118Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node22.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3716, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.127Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.127Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node21.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3717, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.135Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.135Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node20.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3718, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.143Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.143Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node19.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3719, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.152Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.152Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node18.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3720, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.160Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.160Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node17.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3721, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.168Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.168Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node16.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3722, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.176Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.176Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node15.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3723, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.185Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.185Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node14.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3724, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.193Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.193Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node13.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3725, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.201Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.201Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node12.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3726, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.210Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.210Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node11.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3727, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.218Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.218Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node10.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3728, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.226Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.226Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node9.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3729, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.234Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.234Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node8.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3730, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.243Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.243Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node7.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3731, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.251Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.251Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node6.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3732, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.259Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.259Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node5.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3733, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.268Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.268Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node4.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3734, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.276Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.276Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node3.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3735, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.284Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.284Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node2.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3736, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.292Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.292Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node1.princeton.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3737, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.310Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.310Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node70.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3738, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.317Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.317Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node69.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3739, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.325Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.325Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node68.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3740, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.334Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.334Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node67.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3741, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.342Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.342Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node66.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3742, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.350Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.350Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node65.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3743, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.359Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.359Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node64.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3744, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.367Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.367Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node63.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3745, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.375Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.375Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node62.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3746, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.383Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.383Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node61.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3747, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.392Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.392Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node60.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3748, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.400Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.400Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node59.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3749, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.408Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.408Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node58.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3750, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.417Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.416Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node57.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3751, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.425Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.425Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node56.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3752, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.433Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.433Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node55.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3753, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.441Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.441Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node54.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3754, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.450Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.450Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node53.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3755, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.458Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.458Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node52.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3756, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.466Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.466Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node51.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3757, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.475Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.475Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node50.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3758, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.483Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.483Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node49.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3759, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.491Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.491Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node48.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3760, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.499Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.499Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node47.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3761, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.508Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.508Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node46.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3762, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.516Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.516Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node45.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3763, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.524Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.524Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node44.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3764, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.533Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.532Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node43.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3765, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.541Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.541Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node42.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3766, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.549Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.549Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node41.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3767, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.557Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.557Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node40.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3768, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.566Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.566Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node39.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3769, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.574Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.574Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node38.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3770, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.582Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.582Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node37.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3771, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.591Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.590Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node36.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3772, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.599Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.599Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node35.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3773, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.607Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.607Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node34.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3774, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.615Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.615Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node33.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3775, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.624Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.624Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node32.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3776, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.632Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.632Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node31.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3777, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.640Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.640Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node30.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3778, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.649Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.648Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node29.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3779, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.657Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.657Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node28.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3780, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.665Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.665Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node27.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3781, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.673Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.673Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node26.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3782, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.682Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.682Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node25.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3783, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.690Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.690Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node24.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3784, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.698Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.698Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node23.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3785, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.706Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.706Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node22.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3786, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.715Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.715Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node21.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3787, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.723Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.723Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node20.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3788, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.731Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.731Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node19.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3789, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.740Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.740Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node18.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3790, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.748Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.748Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node17.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3791, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.756Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.756Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node16.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3792, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.764Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.764Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node15.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3793, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.773Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.773Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node14.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3794, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.781Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.781Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node13.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3795, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.789Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.789Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node12.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3796, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.798Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.798Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node11.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3797, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.806Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.806Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node10.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3798, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.814Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.814Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node9.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3799, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.822Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.822Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node8.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3800, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.831Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.831Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node7.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3801, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.839Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.839Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node6.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3802, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.847Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.847Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node5.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3803, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.856Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.855Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node4.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3804, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.864Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.864Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node3.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3805, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.872Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.872Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node2.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3806, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.880Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.880Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node1.gt.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3807, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.898Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.898Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node70.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3808, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.905Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.905Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node69.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3809, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.913Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.913Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node68.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3810, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.922Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.922Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node67.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3811, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.930Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.930Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node66.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3812, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.938Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.938Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node65.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3813, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.947Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.947Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node64.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3814, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.955Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.955Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node63.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3815, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.963Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.963Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node62.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3816, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.971Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.971Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node61.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3817, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.980Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.980Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node60.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3818, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.988Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.988Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node59.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3819, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:19.996Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:19.996Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node58.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3820, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.005Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.005Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node57.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3821, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.013Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.013Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node56.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3822, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.021Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.021Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node55.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3823, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.029Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.029Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node54.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3824, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.038Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.038Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node53.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3825, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.046Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.046Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node52.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3826, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.054Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.054Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node51.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3827, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.063Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.062Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node50.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3828, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.071Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.071Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node49.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3829, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.079Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.079Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node48.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3830, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.087Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.087Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node47.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3831, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.096Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.096Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node46.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3832, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.104Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.104Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node45.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3833, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.112Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.112Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node44.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3834, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.121Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.121Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node43.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3835, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.129Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.129Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node42.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3836, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.137Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.137Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node41.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3837, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.146Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.145Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node40.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3838, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.154Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.154Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node39.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3839, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.162Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.162Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node38.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3840, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.170Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.170Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node37.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3841, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.179Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.179Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node36.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3842, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.187Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.187Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node35.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3843, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.195Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.195Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node34.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3844, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.203Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.203Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node33.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3845, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.212Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.212Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node32.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3846, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.220Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.220Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node31.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3847, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.228Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.228Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node30.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3848, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.237Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.236Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node29.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3849, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.245Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.245Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node28.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3850, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.253Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.253Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node27.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3851, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.261Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.261Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node26.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3852, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.270Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.270Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node25.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3853, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.278Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.278Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node24.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3854, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.286Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.286Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node23.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3855, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.294Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.294Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node22.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3856, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.303Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.303Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node21.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3857, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.311Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.311Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node20.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3858, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.319Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.319Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node19.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3859, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.328Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.328Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node18.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3860, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.336Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.336Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node17.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3861, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.344Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.344Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node16.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3862, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.352Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.352Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node15.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3863, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.361Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.361Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node14.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3864, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.369Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.369Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node13.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3865, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.377Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.377Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node12.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3866, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.386Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.386Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node11.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3867, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.394Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.394Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node10.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3868, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.402Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.402Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node9.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3869, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.410Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.410Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node8.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3870, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.419Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.419Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node7.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3871, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.427Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.427Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node6.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3872, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.435Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.435Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node5.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3873, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.443Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.443Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node4.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3874, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.452Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.452Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node3.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3875, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.460Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.460Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node2.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3876, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.468Z", 
-        "contentProvider": 29, 
-        "origin_server_id": null, 
-        "description": "syndicate origin server", 
-        "created": "2013-12-11T23:57:20.468Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "node1.mpisws.vicci.org:32780", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3877, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.594Z", 
-        "contentProvider": 30, 
-        "origin_server_id": null, 
-        "description": "Content from www.cs.gatech.edu", 
-        "created": "2013-12-11T23:57:20.594Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "www.cs.gatech.edu", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3878, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.619Z", 
-        "contentProvider": 31, 
-        "origin_server_id": null, 
-        "description": "Content from www.cs.stanford.edu", 
-        "created": "2013-12-11T23:57:20.619Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "www.cs.stanford.edu", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3879, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.644Z", 
-        "contentProvider": 32, 
-        "origin_server_id": null, 
-        "description": "Content from www.cs.washington.edu", 
-        "created": "2013-12-11T23:57:20.644Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "www.cs.washington.edu", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3880, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.669Z", 
-        "contentProvider": 33, 
-        "origin_server_id": null, 
-        "description": "Content from www.mpg.de", 
-        "created": "2013-12-11T23:57:20.669Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "www.mpg.de", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3881, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.694Z", 
-        "contentProvider": 34, 
-        "origin_server_id": null, 
-        "description": "Content from www.cs.princeton.edu", 
-        "created": "2013-12-11T23:57:20.694Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "www.cs.princeton.edu", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 3882, 
-    "model": "hpc.originserver", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.719Z", 
-        "contentProvider": 35, 
-        "origin_server_id": null, 
-        "description": "onlab virtual machine images", 
-        "created": "2013-12-11T23:57:20.719Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "redirects": true, 
-        "protocol": "http", 
-        "url": "images.onlab.org", 
-        "authenticated": false, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 36, 
-    "model": "hpc.cdnprefix", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.479Z", 
-        "contentProvider": 29, 
-        "description": "CDN Prefix for the Syndicate distributed filesystem", 
-        "created": "2013-12-11T23:57:20.479Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "cdn_prefix_id": null, 
-        "prefix": "cdn.syndicatedrive.com", 
-        "defaultOriginServer": 3876, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 37, 
-    "model": "hpc.cdnprefix", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.602Z", 
-        "contentProvider": 30, 
-        "description": "CDN Prefix for Georgia Tech", 
-        "created": "2013-12-11T23:57:20.602Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "cdn_prefix_id": null, 
-        "prefix": "gt.opencdn.internet2.edu", 
-        "defaultOriginServer": 3877, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 38, 
-    "model": "hpc.cdnprefix", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.627Z", 
-        "contentProvider": 31, 
-        "description": "CDN Prefix for Stanford University", 
-        "created": "2013-12-11T23:57:20.627Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "cdn_prefix_id": null, 
-        "prefix": "stanford.opencdn.internet2.edu", 
-        "defaultOriginServer": 3878, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 39, 
-    "model": "hpc.cdnprefix", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.652Z", 
-        "contentProvider": 32, 
-        "description": "CDN Prefix for University of Washington", 
-        "created": "2013-12-11T23:57:20.652Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "cdn_prefix_id": null, 
-        "prefix": "washington.opencdn.internet2.edu", 
-        "defaultOriginServer": 3879, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 40, 
-    "model": "hpc.cdnprefix", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.677Z", 
-        "contentProvider": 33, 
-        "description": "CDN Prefix for Max Planck Institute", 
-        "created": "2013-12-11T23:57:20.677Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "cdn_prefix_id": null, 
-        "prefix": "mp.opencdn.internet2.edu", 
-        "defaultOriginServer": 3880, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 41, 
-    "model": "hpc.cdnprefix", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.702Z", 
-        "contentProvider": 34, 
-        "description": "CDN Prefix for Princeton University", 
-        "created": "2013-12-11T23:57:20.702Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "cdn_prefix_id": null, 
-        "prefix": "princeton.opencdn.internet2.edu", 
-        "defaultOriginServer": 3881, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 42, 
-    "model": "hpc.cdnprefix", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.727Z", 
-        "contentProvider": 35, 
-        "description": "CDN Prefix for ON.LAB", 
-        "created": "2013-12-11T23:57:20.727Z", 
-        "deleted": false, 
-        "enabled": true, 
-        "cdn_prefix_id": null, 
-        "prefix": "onlab.vicci.org", 
-        "defaultOriginServer": 3882, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "syndicate_storage.syndicateservice", 
-    "fields": {}
-},
-{
-    "pk": 1, 
-    "model": "syndicate_storage.volume", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.727Z", 
-        "name": "GenBank-11-2013", 
-        "created": "2013-12-11T23:57:20.727Z", 
-        "deleted": false, 
-        "blocksize": 61440, 
-        "description": "GenBank dataset snapshot from Nov. 2013", 
-        "owner_id": 1, 
-        "private": false, 
-        "cap_write_data": false, 
-        "cap_read_data": true, 
-        "cap_host_data": false, 
-        "backend_status": "Provisioning in progress", 
-        "archive": true, 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "syndicate_storage.volume", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.727Z", 
-        "name": "princeton_syndicate-Volume", 
-        "created": "2013-12-11T23:57:20.727Z", 
-        "deleted": false, 
-        "blocksize": 102400, 
-        "description": "Volume associated with princeton_syndicate", 
-        "owner_id": 1, 
-        "private": true, 
-        "cap_write_data": true, 
-        "cap_read_data": true, 
-        "cap_host_data": true, 
-        "backend_status": "Provisioning in progress", 
-        "archive": false, 
-        "enacted": null
-    }
-},
-{
-    "pk": 3, 
-    "model": "syndicate_storage.volume", 
-    "fields": {
-        "updated": "2014-05-23T18:52:00.782Z", 
-        "name": "LSST", 
-        "created": "2014-05-23T18:52:00.782Z", 
-        "deleted": false, 
-        "blocksize": 61440, 
-        "description": "LSST dataset", 
-        "owner_id": 1, 
-        "private": false, 
-        "cap_write_data": false, 
-        "cap_read_data": true, 
-        "cap_host_data": false, 
-        "backend_status": "Provisioning in progress", 
-        "archive": true, 
-        "enacted": null
-    }
-},
-{
-    "pk": 4, 
-    "model": "syndicate_storage.volume", 
-    "fields": {
-        "updated": "2014-05-23T18:52:53.617Z", 
-        "name": "LHC", 
-        "created": "2014-05-23T18:52:53.617Z", 
-        "deleted": false, 
-        "blocksize": 61440, 
-        "description": "LHC dataset", 
-        "owner_id": 1, 
-        "private": false, 
-        "cap_write_data": false, 
-        "cap_read_data": true, 
-        "cap_host_data": false, 
-        "backend_status": "Provisioning in progress", 
-        "archive": true, 
-        "enacted": null
-    }
-},
-{
-    "pk": 5, 
-    "model": "syndicate_storage.volume", 
-    "fields": {
-        "updated": "2014-05-23T18:53:20.349Z", 
-        "name": "NOAA", 
-        "created": "2014-05-23T18:53:20.349Z", 
-        "deleted": false, 
-        "blocksize": 61440, 
-        "description": "NOAA dataset", 
-        "owner_id": 1, 
-        "private": false, 
-        "cap_write_data": false, 
-        "cap_read_data": true, 
-        "cap_host_data": false, 
-        "backend_status": "Provisioning in progress", 
-        "archive": true, 
-        "enacted": null
-    }
-},
-{
-    "pk": 6, 
-    "model": "syndicate_storage.volume", 
-    "fields": {
-        "updated": "2014-05-23T18:53:56.495Z", 
-        "name": "Measurement Lab", 
-        "created": "2014-05-23T18:53:56.495Z", 
-        "deleted": false, 
-        "blocksize": 61440, 
-        "description": "Measurement Lab dataset", 
-        "owner_id": 1, 
-        "private": false, 
-        "cap_write_data": false, 
-        "cap_read_data": true, 
-        "cap_host_data": false, 
-        "backend_status": "Provisioning in progress", 
-        "archive": true, 
-        "enacted": null
-    }
-},
-{
-    "pk": 7, 
-    "model": "syndicate_storage.volume", 
-    "fields": {
-        "updated": "2014-05-23T18:54:35.691Z", 
-        "name": "Common Crawl", 
-        "created": "2014-05-23T18:54:35.691Z", 
-        "deleted": false, 
-        "blocksize": 61440, 
-        "description": "Common Crawl dataset", 
-        "owner_id": 1, 
-        "private": false, 
-        "cap_write_data": false, 
-        "cap_read_data": true, 
-        "cap_host_data": false, 
-        "backend_status": "Provisioning in progress", 
-        "archive": true, 
-        "enacted": null
-    }
-},
-{
-    "pk": 8, 
-    "model": "syndicate_storage.volume", 
-    "fields": {
-        "updated": "2014-05-27T14:05:41.026Z", 
-        "name": "private_Analytics", 
-        "created": "2014-05-27T14:05:41.025Z", 
-        "deleted": false, 
-        "blocksize": 61440, 
-        "description": "private volume for Analytics", 
-        "owner_id": 7, 
-        "private": true, 
-        "cap_write_data": true, 
-        "cap_read_data": true, 
-        "cap_host_data": true, 
-        "backend_status": "Provisioning in progress", 
-        "archive": false, 
-        "enacted": null
-    }
-},
-{
-    "pk": 9, 
-    "model": "syndicate_storage.volume", 
-    "fields": {
-        "updated": "2014-05-29T22:00:50.320Z", 
-        "name": "demo-bio5", 
-        "created": "2014-05-29T22:00:25.032Z", 
-        "deleted": false, 
-        "blocksize": 102400, 
-        "description": "This is the bio5 demo volume", 
-        "owner_id": 6, 
-        "private": true, 
-        "cap_write_data": true, 
-        "cap_read_data": true, 
-        "cap_host_data": true, 
-        "backend_status": "Provisioning in progress", 
-        "archive": false, 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "syndicate_storage.volumeaccessright", 
-    "fields": {
-        "updated": "2013-12-11T23:57:20.727Z", 
-        "cap_host_data": false, 
-        "created": "2013-12-11T23:57:20.727Z", 
-        "deleted": false, 
-        "owner_id": 1, 
-        "cap_write_data": false, 
-        "volume": 1, 
-        "cap_read_data": true, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "syndicate_storage.volumeslice", 
-    "fields": {
-        "updated": "2014-05-27T14:05:41.084Z", 
-        "cap_host_data": false, 
-        "slice_id": 16, 
-        "created": "2014-05-27T14:05:41.084Z", 
-        "deleted": false, 
-        "cap_read_data": true, 
-        "cap_write_data": false, 
-        "UG_portnum": 1026, 
-        "RG_portnum": 1025, 
-        "volume_id": 8, 
-        "backend_status": "Provisioning in progress", 
-        "credentials_blob": null, 
-        "enacted": null
-    }
-},
-{
-    "pk": 2, 
-    "model": "syndicate_storage.volumeslice", 
-    "fields": {
-        "updated": "2014-05-29T22:00:50.340Z", 
-        "cap_host_data": false, 
-        "slice_id": 14, 
-        "created": "2014-05-29T22:00:50.340Z", 
-        "deleted": false, 
-        "cap_read_data": true, 
-        "cap_write_data": false, 
-        "UG_portnum": 4444, 
-        "RG_portnum": 5555, 
-        "volume_id": 9, 
-        "backend_status": "Provisioning in progress", 
-        "credentials_blob": null, 
-        "enacted": null
-    }
-},
-{
-    "pk": 1, 
-    "model": "core.siteprivilege", 
-    "fields": {
-        "updated": "2013-12-17T18:08:58.293Z", 
-        "created": "2013-12-17T18:08:58.293Z", 
-        "deleted": false, 
-        "site": 24, 
-        "role": 1, 
-        "user": 15, 
-        "backend_status": "Provisioning in progress", 
-        "enacted": null
-    }
-}
-]
diff --git a/xos/core/fixtures/serviceclass_intial_data.json b/xos/core/fixtures/serviceclass_intial_data.json
deleted file mode 100644
index a8caf63..0000000
--- a/xos/core/fixtures/serviceclass_intial_data.json
+++ /dev/null
@@ -1,132 +0,0 @@
-[
-{
-    "pk": 1, 
-    "model": "core.serviceclass", 
-    "fields": {
-        "updated": "2013-05-10T23:30:52.931Z", 
-        "membershipFee": 0, 
-        "membershipFeeMonths": 0, 
-        "created": "2013-05-10T23:30:52.931Z", 
-        "upgradeFrom": [3, 2], 
-        "commitment": 0, 
-        "name": "Best Effort", 
-        "upgradeRequiresApproval": false, 
-        "description": "Best Effort"
-    }
-}, 
-{
-    "pk": 2, 
-    "model": "core.serviceclass", 
-    "fields": {
-        "updated": "2013-05-10T23:35:51.694Z", 
-        "membershipFee": 100, 
-        "membershipFeeMonths": 1, 
-        "created": "2013-05-10T23:33:24.930Z", 
-        "upgradeFrom": [1, 3], 
-        "commitment": 365, 
-        "name": "Silver", 
-        "upgradeRequiresApproval": false, 
-        "description": "Silver"
-    }
-}, 
-{
-    "pk": 3, 
-    "model": "core.serviceclass", 
-    "fields": {
-        "updated": "2013-05-10T23:34:01.320Z", 
-        "membershipFee": 18000, 
-        "membershipFeeMonths": 12, 
-        "created": "2013-05-10T23:34:01.320Z", 
-        "upgradeFrom": [1, 2], 
-        "commitment": 365, 
-        "name": "Gold", 
-        "upgradeRequiresApproval": false, 
-        "description": "Gold"
-    }
-}, 
-{
-    "pk": 1, 
-    "model": "core.serviceresource", 
-    "fields": {
-        "updated": "2013-05-10T23:44:50.862Z", 
-        "name": "Cycles", 
-        "bucketMaxSize": 0, 
-        "created": "2013-05-10T23:37:09.312Z", 
-        "serviceClass": 1, 
-        "maxUnitsDeployment": 0, 
-        "bucketInRate": 0, 
-        "cost": 7, 
-        "calendarReservable": false, 
-        "maxDuration": 0, 
-        "maxUnitsNode": 0
-    }
-}, 
-{
-    "pk": 2, 
-    "model": "core.serviceresource", 
-    "fields": {
-        "updated": "2013-05-10T23:44:39.936Z", 
-        "name": "Cycles", 
-        "bucketMaxSize": 0, 
-        "created": "2013-05-10T23:44:39.936Z", 
-        "serviceClass": 2, 
-        "maxUnitsDeployment": 0, 
-        "bucketInRate": 0, 
-        "cost": 7, 
-        "calendarReservable": false, 
-        "maxDuration": 0, 
-        "maxUnitsNode": 0
-    }
-}, 
-{
-    "pk": 3, 
-    "model": "core.serviceresource", 
-    "fields": {
-        "updated": "2013-05-10T23:45:16.137Z", 
-        "name": "Cycles", 
-        "bucketMaxSize": 0, 
-        "created": "2013-05-10T23:45:16.137Z", 
-        "serviceClass": 3, 
-        "maxUnitsDeployment": 0, 
-        "bucketInRate": 0, 
-        "cost": 7, 
-        "calendarReservable": false, 
-        "maxDuration": 0, 
-        "maxUnitsNode": 0
-    }
-}, 
-{
-    "pk": 4, 
-    "model": "core.serviceresource", 
-    "fields": {
-        "updated": "2013-05-10T23:47:39.033Z", 
-        "name": "numberCores", 
-        "bucketMaxSize": 210, 
-        "created": "2013-05-10T23:46:33.201Z", 
-        "serviceClass": 2, 
-        "maxUnitsDeployment": 210, 
-        "bucketInRate": 10, 
-        "cost": 7, 
-        "calendarReservable": true, 
-        "maxDuration": 168, 
-        "maxUnitsNode": 6
-    }
-}, 
-{
-    "pk": 5, 
-    "model": "core.serviceresource", 
-    "fields": {
-        "updated": "2013-05-10T23:47:31.771Z", 
-        "name": "numberCores", 
-        "bucketMaxSize": 0, 
-        "created": "2013-05-10T23:47:31.770Z", 
-        "serviceClass": 3, 
-        "maxUnitsDeployment": 210, 
-        "bucketInRate": 0, 
-        "cost": 0, 
-        "calendarReservable": true, 
-        "maxDuration": 8760, 
-        "maxUnitsNode": 6
-    }
-}
-]
diff --git a/xos/core/models/core.xproto b/xos/core/models/core.xproto
index bfdf4b0..ea40e47 100644
--- a/xos/core/models/core.xproto
+++ b/xos/core/models/core.xproto
@@ -67,7 +67,6 @@
      required bool no_sync = 28 [default = False, null = False, db_index = False, blank = True];
      required bool no_policy = 29 [default = False, null = False, db_index = False, blank = True];
      required string timezone = 30 [default = "America/New_York", max_length = 100, blank = False, null = False, db_index = False];
-     required manytomany dashboards->DashboardView/UserDashboardView:user = 31 [db_index = False, null = False, blank = True];
      optional string policy_status = 32 [default = "0 - Policy in process", max_length = 1024];
 }
 
@@ -124,15 +123,6 @@
      required manytoone deployment->Deployment:controllerdeployments = 12 [db_index = True, null = False, blank = False];
 }
 
-
-message ControllerDashboardView (XOSBase) {
-     required manytoone controller->Controller:controllerdashboardviews = 1 [db_index = True, null = False, blank = False];
-     required manytoone dashboardView->DashboardView:controllerdashboardviews = 2 [db_index = True, null = False, blank = False];
-     required bool enabled = 3 [default = True, db_index = False, blank = True];
-     required string url = 4 [max_length = 1024, content_type = "stripped", blank = False, help_text = "URL of Dashboard", null = False, db_index = False];
-}
-
-
 message ControllerImages (XOSBase) {
      required manytoone image->Image:controllerimages = 1 [db_index = True, null = False, blank = False, unique_with = "controller"];
      required manytoone controller->Controller:controllerimages = 2 [db_index = True, null = False, blank = False];
@@ -243,17 +233,6 @@
      optional string kuser_id = 3 [max_length = 200, content_type = "stripped", blank = True, help_text = "Keystone user id", null = True, db_index = False];
 }
 
-
-message DashboardView (XOSBase) {
-     required string name = 1 [max_length = 200, content_type = "stripped", blank = False, help_text = "Name of the View", null = False, db_index = False];
-     required string url = 2 [max_length = 1024, content_type = "stripped", blank = False, help_text = "URL of Dashboard", null = False, db_index = False];
-     required bool enabled = 3 [default = True, db_index = False, blank = True];
-     required string icon = 4 [default = "default-icon.png", max_length = 200, blank = False, help_text = "Icon for Dashboard", null = False, db_index = False];
-     required string icon_active = 5 [default = "default-icon-active.png", max_length = 200, blank = False, help_text = "Icon for active Dashboard", null = False, db_index = False];
-     required manytomany controllers->Controller/ControllerDashboardView:dashboardviews = 6 [db_index = False, null = False, blank = True];
-     required manytomany deployments->Deployment/DashboardView_deployments:dashboardviews = 7 [help_text = "Deployments that should be included in this view", null = False, db_index = False, blank = True];
-}
-
 // Everyone has read access
 // For write access you need admin privileges at that deployment
 policy deployment_policy <
diff --git a/xos/core/models/user.py b/xos/core/models/user.py
index 423fead..e4306c5 100644
--- a/xos/core/models/user.py
+++ b/xos/core/models/user.py
@@ -23,8 +23,7 @@
 from operator import attrgetter, itemgetter
 
 from core.middleware import get_request
-from xosbase import XOSBase,PlModelMixIn
-import dashboardview
+from xosbase import XOSBase, PlModelMixIn
 from core.models.xosbase import StrippedCharField, XOSCollector
 from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
 from django.core.exceptions import PermissionDenied
@@ -166,9 +165,6 @@
 
     timezone = TimeZoneField()
 
-    dashboards = models.ManyToManyField(
-        'DashboardView', through='UserDashboardView', blank=True)
-
     policy_status = models.CharField( default = "0 - Policy in process", max_length = 1024, null = True )
 
     objects = UserManager()
@@ -217,21 +213,6 @@
     def is_superuser(self):
         return False
 
-    def get_dashboards(self):
-        DEFAULT_DASHBOARDS = ["Tenant"]
-
-        dashboards = sorted(
-            list(self.userdashboardviews.all()), key=attrgetter('order'))
-        dashboards = [x.dashboardView for x in dashboards]
-
-        if (not dashboards) and (not self.is_appuser):
-            for dashboardName in DEFAULT_DASHBOARDS:
-                dbv = dashboardview.DashboardView.objects.filter(name=dashboardName)
-                if dbv:
-                    dashboards.append(dbv[0])
-
-        return dashboards
-
 #    def get_roles(self):
 #        from core.models.site import SitePrivilege
 #        from core.models.slice import SliceMembership
@@ -348,8 +329,6 @@
         elif profile == "cp":
             self.is_appuser = True
             self.is_admin = False
-            for db in self.userdashboardviews.all():
-                db.delete()
 
     def get_content_type_key(self):
         ct = ContentType.objects.get_for_model(self.__class__)
@@ -371,9 +350,3 @@
     def can_access(self, ctx):
         return security.user_policy_security_check(self, ctx), "user_policy"
 
-class UserDashboardView(XOSBase):
-    user = models.ForeignKey(User, related_name='userdashboardviews')
-    dashboardView = models.ForeignKey(
-        dashboardview.DashboardView, related_name='userdashboardviews')
-    order = models.IntegerField(default=0)
-
diff --git a/xos/core/static/.gitignore b/xos/core/static/.gitignore
deleted file mode 100644
index c148592..0000000
--- a/xos/core/static/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*.css
-!xos.css
-!cord.css
-!xosNgLib.css
\ No newline at end of file
diff --git a/xos/core/static/Deployments.png b/xos/core/static/Deployments.png
deleted file mode 100644
index 5d152ed..0000000
--- a/xos/core/static/Deployments.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Deployments_over.png b/xos/core/static/Deployments_over.png
deleted file mode 100644
index 8e2f008..0000000
--- a/xos/core/static/Deployments_over.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Home.png b/xos/core/static/Home.png
deleted file mode 100644
index 20eb6f0..0000000
--- a/xos/core/static/Home.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Home_over.png b/xos/core/static/Home_over.png
deleted file mode 100644
index 64b047d..0000000
--- a/xos/core/static/Home_over.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Reservations.png b/xos/core/static/Reservations.png
deleted file mode 100644
index 94a993d..0000000
--- a/xos/core/static/Reservations.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Reservations_over.png b/xos/core/static/Reservations_over.png
deleted file mode 100644
index 5a5835a..0000000
--- a/xos/core/static/Reservations_over.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Search.png b/xos/core/static/Search.png
deleted file mode 100644
index 34833a2..0000000
--- a/xos/core/static/Search.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Services.png b/xos/core/static/Services.png
deleted file mode 100644
index f6d60c3..0000000
--- a/xos/core/static/Services.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Services_over.png b/xos/core/static/Services_over.png
deleted file mode 100644
index 828c790..0000000
--- a/xos/core/static/Services_over.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Sites.png b/xos/core/static/Sites.png
deleted file mode 100644
index fac5fa4..0000000
--- a/xos/core/static/Sites.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Sites_over.png b/xos/core/static/Sites_over.png
deleted file mode 100644
index 9378984..0000000
--- a/xos/core/static/Sites_over.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Slices.png b/xos/core/static/Slices.png
deleted file mode 100644
index fb06041..0000000
--- a/xos/core/static/Slices.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Slices_over.png b/xos/core/static/Slices_over.png
deleted file mode 100644
index 441d5ae..0000000
--- a/xos/core/static/Slices_over.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Users.png b/xos/core/static/Users.png
deleted file mode 100644
index 7e6d096..0000000
--- a/xos/core/static/Users.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/Users_over.png b/xos/core/static/Users_over.png
deleted file mode 100644
index 9ffb418..0000000
--- a/xos/core/static/Users_over.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/bg.jpg b/xos/core/static/bg.jpg
deleted file mode 100644
index 9ad9e54..0000000
--- a/xos/core/static/bg.jpg
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/bg2.jpg b/xos/core/static/bg2.jpg
deleted file mode 100644
index ba8dfe4..0000000
--- a/xos/core/static/bg2.jpg
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/chartsBg.jpg b/xos/core/static/chartsBg.jpg
deleted file mode 100644
index 386614f..0000000
--- a/xos/core/static/chartsBg.jpg
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/cord-bg-old.jpg b/xos/core/static/cord-bg-old.jpg
deleted file mode 100644
index 08df91d..0000000
--- a/xos/core/static/cord-bg-old.jpg
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/cord-bg.jpg b/xos/core/static/cord-bg.jpg
deleted file mode 100644
index 9c70e2f..0000000
--- a/xos/core/static/cord-bg.jpg
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/cord-favicon.png b/xos/core/static/cord-favicon.png
deleted file mode 100644
index 758902e..0000000
--- a/xos/core/static/cord-favicon.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/cord-logo.png b/xos/core/static/cord-logo.png
deleted file mode 100644
index c2ff252..0000000
--- a/xos/core/static/cord-logo.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/cord.css b/xos/core/static/cord.css
deleted file mode 100644
index f3dfd20..0000000
--- a/xos/core/static/cord.css
+++ /dev/null
@@ -1,61 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/* login page background image */
-.login {
-    background-image: url('cord_bg.jpg');
-    background-size: 100%;
-    background-repeat: no-repeat;
-}
-
-/* login page logo */
-.login #content-main h1 {
-    background: url("cord_logo_3.png") no-repeat scroll 40% center / 89% auto rgba(235, 240, 242, 0);
-    height: 55px;
-    background-repeat: no-repeat;
-    font-size: 0px;
-    padding-top: 70px;
-}
-
-/* content page logo */
-.logo {
-   display: block;

-   -moz-box-sizing: border-box;

-   box-sizing: border-box;

-   background: url('cord_logo_3_cropped_sized.png') no-repeat;

-   width: 250px;

-   height: 96px;

-   padding-left: 250px;

-}
-
-/* content page header, adjust the margin to match logo */
-.header{

-    margin-top: -100px !important;

-}

-

-/* hide the quick search box */

-.nav-quick-search {

-    display: None;

-}

-

-

-

-

-

-

-

diff --git a/xos/core/static/dashboardStatic.PNG b/xos/core/static/dashboardStatic.PNG
deleted file mode 100644
index eb3ba80..0000000
--- a/xos/core/static/dashboardStatic.PNG
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/down_arrow.png b/xos/core/static/down_arrow.png
deleted file mode 100644
index e727172..0000000
--- a/xos/core/static/down_arrow.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/favicon.png b/xos/core/static/favicon.png
deleted file mode 100644
index d49afe0..0000000
--- a/xos/core/static/favicon.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/hpc_historical.css b/xos/core/static/hpc_historical.css
deleted file mode 100644
index 4306324..0000000
--- a/xos/core/static/hpc_historical.css
+++ /dev/null
@@ -1,68 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-.row {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-
-.row:before,
-.row:after {
-  display: table;
-  content: " ";
-}
-
-.row:after {
-  clear: both;
-}
-
-.row:before,
-.row:after {
-  display: table;
-  content: " ";
-}
-
-.row:after {
-  clear: both;
-}
-
-.graph_container {
-  width: 800px;
-}
-
-.col-md-halfgraph,
-.col-md-fullgraph {
-  position: relative;
-  min-height: 1px;
-  padding-right: 15px;
-  padding-left: 15px;
-}
-
-.col-md-halfgraph,
-.col-md-fullgraph {
-  float: left;
-}
-.col-md-halfgraph {
-  width: 350px;
-}
-.col-md-fullgraph {
-  width: 700px;
-}
-.col-md-12 {
-  width: 100%;
-}
diff --git a/xos/core/static/img/bg_left_white.gif b/xos/core/static/img/bg_left_white.gif
deleted file mode 100644
index 7407236..0000000
--- a/xos/core/static/img/bg_left_white.gif
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/img/brokencircle.gif b/xos/core/static/img/brokencircle.gif
deleted file mode 100644
index db4f155..0000000
--- a/xos/core/static/img/brokencircle.gif
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/img/green-cloud.gif b/xos/core/static/img/green-cloud.gif
deleted file mode 100644
index 0a80d7d..0000000
--- a/xos/core/static/img/green-cloud.gif
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/img/minus_circle.png b/xos/core/static/img/minus_circle.png
deleted file mode 100644
index e0cd5a8..0000000
--- a/xos/core/static/img/minus_circle.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/img/plus_circle.png b/xos/core/static/img/plus_circle.png
deleted file mode 100644
index 49746a1..0000000
--- a/xos/core/static/img/plus_circle.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/img/red-cloud.gif b/xos/core/static/img/red-cloud.gif
deleted file mode 100644
index 3025720..0000000
--- a/xos/core/static/img/red-cloud.gif
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/js/Leaflet.MakiMarkers.js b/xos/core/static/js/Leaflet.MakiMarkers.js
deleted file mode 100644
index ff92aa2..0000000
--- a/xos/core/static/js/Leaflet.MakiMarkers.js
+++ /dev/null
@@ -1,119 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/*
- * Leaflet plugin to create map icons using Maki Icons from MapBox.
- *
- * References:
- *   Maki Icons: https://www.mapbox.com/maki/
- *   MapBox Marker API: https://www.mapbox.com/developers/api/#Stand-alone.markers
- *
- * Usage:
- *   var icon = L.MakiMarkers.icon({icon: "rocket", color: "#b0b", size: "m"});
- *
- * License:
- *   MIT: http://jseppi.mit-license.org/
- */
-(function () {
-  "use strict";
-  L.MakiMarkers = {
-    // Available Maki Icons
-    icons: ["circle-stroked", "circle", "square-stroked", "square",
-      "triangle-stroked", "triangle", "star-stroked", "star", "cross",
-      "marker-stroked", "marker", "religious-jewish", "religious-christian",
-      "religious-muslim", "cemetery", "rocket", "airport", "heliport", "rail",
-      "rail-metro", "rail-light", "bus", "fuel", "parking", "parking-garage",
-      "airfield", "roadblock", "ferry", "harbor", "bicycle", "park", "park2",
-      "museum", "lodging", "monument", "zoo", "garden", "campsite", "theatre",
-      "art-gallery", "pitch", "soccer", "america-football", "tennis", "basketball",
-      "baseball", "golf", "swimming", "cricket", "skiing", "school", "college",
-      "library", "post", "fire-station", "town-hall", "police", "prison",
-      "embassy", "beer", "restaurant", "cafe", "shop", "fast-food", "bar", "bank",
-      "grocery", "cinema", "pharmacy", "hospital", "danger", "industrial",
-      "warehouse", "commercial", "building", "place-of-worship", "alcohol-shop",
-      "logging", "oil-well", "slaughterhouse", "dam", "water", "wetland",
-      "disability", "telephone", "emergency-telephone", "toilets", "waste-basket",
-      "music", "land-use", "city", "town", "village", "farm", "bakery", "dog-park",
-      "lighthouse", "clothing-store", "polling-place", "playground", "entrance",
-      "heart", "london-underground", "minefield", "rail-underground", "rail-above",
-      "camera", "laundry", "car", "suitcase", "hairdresser", "chemist"],
-    defaultColor: "#0a0",
-    defaultIcon: "circle-stroked",
-    defaultSize: "m",
-    apiUrl: "https://api.tiles.mapbox.com/v3/marker/",
-    smallOptions: {
-      iconSize: [20, 50],
-      popupAnchor: [0,-20]
-    },
-    mediumOptions: {
-      iconSize: [30,70],
-      popupAnchor: [0,-30]
-    },
-    largeOptions: {
-      iconSize: [36,90],
-      popupAnchor: [0,-40]
-    }
-  };
-
-  L.MakiMarkers.Icon = L.Icon.extend({
-    options: {
-      //Maki icon: any from https://www.mapbox.com/maki/ (ref: L.MakiMarkers.icons)
-      icon: L.MakiMarkers.defaultIcon,
-      //Marker color: short or long form hex color code
-      color: L.MakiMarkers.defaultColor,
-      //Marker size: "s" (small), "m" (medium), or "l" (large)
-      size: L.MakiMarkers.defaultSize,
-      shadowAnchor: null,
-      shadowSize: null,
-      shadowUrl: null,
-      className: 'maki-marker'
-    },
-
-    initialize: function(options) {
-      var pin;
-
-      options = L.setOptions(this, options);
-
-      switch (options.size) {
-        case "s":
-          L.extend(options, L.MakiMarkers.smallOptions);
-          break;
-        case "l":
-          L.extend(options, L.MakiMarkers.largeOptions);
-          break;
-        default:
-          options.size = "m";
-          L.extend(options, L.MakiMarkers.mediumOptions);
-          break;
-      }
-
-      if (options.color.charAt(0) === '#') {
-        options.color = options.color.substr(1);
-      }
-
-      pin = "pin-" + options.size + "-" + options.icon + "+" +
-        options.color + ".png";
-
-      options.iconUrl = "" + L.MakiMarkers.apiUrl + pin;
-    }
-  });
-
-  L.MakiMarkers.icon = function(options) {
-    return new L.MakiMarkers.Icon(options);
-  };
-})();
diff --git a/xos/core/static/log4javascript-1.4.6/changelog.txt b/xos/core/static/log4javascript-1.4.6/changelog.txt
deleted file mode 100644
index fe10b97..0000000
--- a/xos/core/static/log4javascript-1.4.6/changelog.txt
+++ /dev/null
@@ -1,379 +0,0 @@
-log4javascript change log

--------------------------

-

-1.4.6 (19/3/2013)

-- Added fix to handle 1223 status code from XMLHttpRequest in IE

-

-1.4.5 (20/2/2013)

-- Changed AjaxAppender to send raw data rather than URL-encoded form data when

-  content-type is not "application/x-www-form-urlencoded"

-

-- Exposed sendAllRemaining() method of AjaxAppender

-

-1.4.4 (8/2/2013)

-- Fixed issue with repeated Content-Type headers in AjaxAppender

-

-- Improved uniqueness of PopUpAppender window name

-

-1.4.3 (18/9/2012)

-- Added addHeader() and getHeaders() methods to AjaxAppender

-

-- Modified sendAllOnUnload feature of AjaxAppender. It now works in WebKit but

-  at the expense of popping up a confirm dialog. That being the case, it is now

-  disabled by default.

-

-- Removed leaked global variable "initialized" 

-

-- Fixed bugs #3528265, #3560924, #3560922, #2805479, #3510639 on Sourceforge

-  Tracker

-

-

-1.4.2 (13/10/2011)

-- Fixed JsonLayout trailing comma issue. See

-  http://stackoverflow.com/questions/7735382/asmx-weirdness-deserializing-json-

-  blob-from-log4javascript-logging

-

-- Fixed bugs #3401332, #3185753, #2884623, #2817213 on Sourceforge Tracker

-

-

-1.4.1 (23/3/2009)

-- Fixed document.domain/query string bug (#2519903 on Sourceforge Tracker)

-

-- Added isVisible() method to PopUpAppender

-

-- Added check for whether the console has been closed in isVisible() method of

-  InPageAppender

-

-- Included unit tests in the distribution

-

-

-1.4 (30/10/2008)

-

-- Added time() and timeEnd() methods to Logger

-

-- Added group() and groupEnd() methods to Logger and support for displaying

-  expandable groups to InPageAppender and PopUpAppender

-

-- Added facility to layout custom fields. A custom field value may now

-  optionally be a function which is passed a reference to the layout and a

-  logging event and run at the time the layout's format method is called

-

-- Added option to XmlLayout and JsonLayout to allow multiple messages to be

-  formatted either as one combined message or multiple messages

-

-- Added code to set log4javascript as a property of the window object. This

-  ensures that if log4javascript is loaded via eval() (e.g. Dojo's module

-  loading system), the log4javascript object is guaranteed to be available even

-  though IE does not evaluate the script in the global scope

-

-- Added useDocumentWrite parameter to constructors and isUseDocumentWrite()

-  and setUseDocumentWrite() methods for InPageAppender and PopUpAppender and

-  added console.html to the build so that the appender may use either the

-  existing document.write method or the external HTML file to build the console.

-  This is to allow support for setting document.domain in the main document,

-  which is impossible with the document.write method

-

-- Added milliseconds property to logging events and changed JsonLayout,

-  XmlLayout and HttpPostDataLayout to include milliseconds by default

-

-- Added layout parameter to AjaxAppender and a toString() method on each layout

-

-- Setting configuration properties in appenders via constructor paramaters has

-  been phased out.

-

-- Added window.unload handler for AjaxAppender to send outstanding messages.

-  Doesn't work in Opera

-

-- Implemented log4j-style hierarchical loggers with additive appenders. For

-  example, a logger called "app.stuff" has as its parent the logger called

-  "app", all of whose appenders it inherits

-

-- Changed XmlLayout and JsonLayout to send data as a key/value pair

-

-- Bugfix for inaccessible error details

-

-- An appender can no longer be added more than once to the same logger

-

-- Multiple messages may now be specified in logger methods

-

-- New conversion character 'a' added to PatternLayout. This is the same as 'm'

-  except that if the first message specified is an array then it treats each

-  element of the array as though it had been passed in as a message parameter

-

-- Command line added to console windows with configurable object expansion

-  depth. Command line presence and object expansion depth are configurable in

-  the appender via setShowCommandLine() and setCommandLineObjectExpansionDepth()

-  methods respectively

-

-- Command line history, navigated by cursor keys and stored in a session cookie

-

-- Firebug-inspired command line functions added: $, dir, dirxml, cd, clear,

-  keys, values, expansionDepth

-

-- Fixes for several bugs in object expansion

-

-- Fix for bug in initialization of InPageAppender in IE 5

-

-- Fix to allow searchable HTML in log entries

-

-- Fix for bug which automatically displayed search next/previous buttons when

-  the search box is clicked regardless of whether there were any matches

-

-- Searches in PopUpAppender and InPageAppender now preserve formatting

-

-- More fixes to interaction of search and severity filters in console window

-  used by PopUpAppender and InPageAppender

-

-- Added SwitchableConsoleAppender that allows flipping from an in-page console

-  to a pop-up console window and back again while retaining state

-

-- Custom events added that are raised when PopUpAppender and InPageAppender

-  windows load and unload, and on the main log4javascript object when the main

-  page loads, when the main page is resized and when log4javascript errors occur

-

-- InPageAppender may now be initialized before the page loads by providing an

-  element id for its container, or omitting the container altogether (in which

-  case the appender is added as a fixed div at the bottom of the page)

-

-- Tweaked PopUpAppender and InPageAppender so that the formatted log message is

-  produced when append() is called rather than when the message is actually sent

-  to the console window, thus allowing reliable temporary switching of layouts

-

-- Much improved scrolling to current search match: scrolls only if part of the

-  search match is not visible and centres around it rather than putting flush to

-  the top left

-

-- Removed setReadable() method from JsonLayout - now specified only in the

-  constructor

-

-- Fixed problem in IE where copying selections of log entries would produce two

-  copies of each log entry

-

-

-1.3.1 (20/11/2006)

-

-- Fix to interaction of search and severity filters in console window used by

-  PopUpAppender and InPageAppender

-

-

-1.3 (19/10/2006)

-

-- Fully tested and supported in IE 7 Beta 3

-

-- Added support for FireBug logging levels in BrowserConsoleAppender

-

-- Added optional limit to the number of log messages stored by PopUpAppender and

-  InPageAppender. When this limit is reached, each new message causes the oldest

-  message to be discarded.

-

-- Exceptions passed into logging methods are now displayed in logging output.

-

-- Added facility to pass objects as well as strings to logging methods.

-  Enhanced conversion character 'm' to PatternLayout to expand object properties

-  in the formatted output

-

-- Added stack trace to error reports (alerts and log entries) in Firefox. This

-  is turned off by default but can be switched on via the new

-  log4javascript.setShowStackTraces function

-

-- Added log4javascript_stub.js to distribution - this has stub versions of all

-  objects and methods in log4javascript.js and can be used as a lightweight

-  replacement for log4javascript.js in production systems

-

-- Added log4javascript_compressed.js to distribution - comments and whitespace

-  are removed, resulting in a 30% smaller file

-

-- Added custom fields to layouts

-

-- Added setReopenWhenClosed and isReopenWhenClosed methods to PopUpAppender to

-  allow log4javascript to open a new pop-up console window automatically at the

-  time of the next log entry after the original window was closed

-

-- Layout.ignoresThrowable implemented to allow Layout/Appender combinations to

-  decide whether to display exceptions

-

-- Added NullLayout that performs no formatting on the logging event

-

-- Lowered BrowserConsoleAppender's default threshold to DEBUG and set its

-  default layout to NullLayout so that unformatted objects can be passed into

-  FireBug

-

-- Renamed InlineAppender to InPageAppender (though InlineAppender still works

-  for the sake of backwards compatibility)

-

-- Cosmetic changes to InPageAppender and PopUpAppender

-

-- Added equals() method to Level

-

-- Added removeAppender() and removeAllAppenders() methods to Logger

-

-- Added extensive test script

-

-- Fixed bug where Appender.setLayout and Appender.setThreshold threw an

-  unhandled error if not supplied with a genuine Layout or Level respectively

-

-- Fixed bug where InlinePopUpAppender and PopUpAppender continue to poll their

-  console windows indefinitely (thus generating warnings) if the console window

-  is closed before it has fully loaded

-

-- Fixed bug in w and W symbols in SimpleDateFormat

-

-- Fixed bug with quotes inside messages in JsonLayout

-

-- Fixed bugs in PatternLayout with built-in DATE format and truncation modifiers

-

-- Changed execution order of callbacks in AjaxAppender so that

-  requestSuccessCallback is guaranteed to be called before the next request is

-  sent

-

-- Changed AjaxAppender so that log messages are formatted immediately before

-  a request is sent rather than when append() is called, thus guaranteeing that

-  changes to the layout take effect immediately

-

-- PopUpAppender windows now have unique names per hostname to prevent clashes

-  from multiple instances of log4javascript running on different servers

-

-- Fixed error in XmlLayout's format method when passed an object

-

-- Fixed errors in JsonLayout's handling of strings containing line breaks and/or

-  double quotes

-

-

-1.2 (21/6/2006)

-

-- Tested in and added workaround for a bug in Opera 9 Beta 2 and Opera 9.0

-

-- Tested in Konqueror 3.4 and 3.5 and added workarounds and fixes for browser

-  bugs

-

-- Added addErrorListener and removeErrorListener methods to log4javascript

-  object to allow custom error handling

-

-- Added close() method to PopUpAppender and InlineAppender

-

-- Added test directory with an HTML page containing automated tests

-

-- Added enable/disable logging checkbox to InlinePopUpAppender and PopUpAppender

-  so that unnecessary messages (for instance, from a timer) can be ignored

-

-- An invalid value supplied to a configuration option setter now leaves config

-  property unchanged rather than reverting to the default

-

-- Fixed bug in PopUpAppender in IE on Windows XP Service Pack 2 when accessed

-  via the file system. The browser by default disables JavaScript in the pop-up

-  window until the user opts to enable it, at which point they would previously

-  see an uncaught error in log4javascript. Now, a proper error message is

-  displayed and the appender is disabled.

-

-- Slight alterations to toolbar in InlineAppender and PopUpAppender - text

-  capitalization and title attributes added to inputs

-

-- toString() method added to all appenders

-

-- Correction to errors in XmlLayout's output

-

-- Documentation corrections and additions

-

-

-1.1.1 (17/5/2006)

-

-- Fixed a minor bug with scrolling to the latest message and added "scroll to

-  latest" checkbox to console window in InlineAppender and PopUpAppender

-

-

-1.1 (16/5/2006)

-

-- Added configuration option setters on Appenders and refactored to prevent

-  config properties being altered directly. Several configuration options

-  may not be altered after the appender has been initialized

-

-- Added scrollToLatestMessage constructor parameter, isScrollToLatestMessage

-  and setScrollToLatestMessage methods to InlineAppender and PopUpAppender

-

-- Added isVisible method to InlineAppender

-

-- Changed setShowOneError to setAlertAllErrors in logLog, with obvious change

-  in logic

-

-- Added layout property key configuration options to layout constructors for

-  JsonLayout and HttpPostDataLayout

-

-- Changed the default timestamp property name to "timestamp" instead of

-  "timeStamp" in JsonLayout and HttpPostDataLayout

-

-- Expanded documentation to include a section in the manual about configuring

-  appenders

-

-- Removed browser sniffing code

-

-

-1.0.1 (30/4/2006)

-

-- Option to have new log messages appear at the top added to InlineAppender and

-  PopUpAppender. This option can be specified in the constructor and can also

-  be toggled via a checkbox in the console window

-

-- PopUpAppender changed to not focus the pop-up console window by default, and

-  the demo page altered to create its own logger with focussing turned on,

-  meaning the behaviour in the demo is essentially unchanged

-

-

-1.0 (26/4/2006)

-

-- Tweaks to default values in PopUpAppender and InlineAppender

-

-- Bugfixes and stylistic tweaks resulting from running JSLint on

-  log4javascript.js

-

-

-1.0 beta 2

-

-- Show/hide button removed from InlineAppender, replaced by show() and hide()

-  methods on the InlineAppender object

-

-- batchSeparator, batchHeader and batchFooter added to Layout and applied to

-  JsonLayout - a batch of JSON log messages is now created as an array literal

-

-

-1.0 beta

-

-- TRACE level added, since this was added to log4j in 1.2.12

-

-- PopUpAppender default settings bugfix

-

-- getLevel method added to Logger

-

-- Tweak to vertical alignment of checkboxes and padding of buttons in

-  InlineAppender and PopUpAppender

-

-- Fixed getDefaultLogger and getNullLogger to return loggers other than the

-  root logger

-

-0.96

-

-- Moved console.html to inline document.writes in log4javascript.js

-

-- Fixed getDefaultLogger to return the same object on successive calls

-

-- Fixed scrolling issue in Opera InlineAppender and PopUpAppender

-

-- Scrollbars are now automatic on InlineAppender and PopUpAppender, i.e. they

-  only appear when required

-

-- Fixed bug where regex searches were not applied to new log entries in

-  InlineAppender and PopUpAppender

-

-- Changed Safari font size in InlineAppender and PopUpAppender

-

-0.95

-

-- AjaxAppender enhancements:

-	- waitForResponse added

-	- timer added

-

-- layout parameter added to all appender constructors

-

-0.94

-- First publicly available version

-- IE 5 support added

-- Full support for wrapping in IE added for InlineAppender and PopUpAppender
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/console.html b/xos/core/static/log4javascript-1.4.6/console.html
deleted file mode 100644
index 1561416..0000000
--- a/xos/core/static/log4javascript-1.4.6/console.html
+++ /dev/null
@@ -1,281 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-<head>

-<title>log4javascript</title>

-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

-<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->

-<meta http-equiv="X-UA-Compatible" content="IE=7" />

-<script type="text/javascript">var isIe = false, isIePre7 = false;</script>

-<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->

-<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->

-<script type="text/javascript">

-//<![CDATA[

-var loggingEnabled=true;var logQueuedEventsTimer=null;var logEntries=[];var logEntriesAndSeparators=[];var logItems=[];var renderDelay=100;var unrenderedLogItemsExist=false;var rootGroup,currentGroup=null;var loaded=false;var currentLogItem=null;var logMainContainer;function copyProperties(obj,props){for(var i in props){obj[i]=props[i];}}

-function LogItem(){}

-LogItem.prototype={mainContainer:null,wrappedContainer:null,unwrappedContainer:null,group:null,appendToLog:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].appendToLog();}

-this.group.update();},doRemove:function(doUpdate,removeFromGroup){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].remove();}

-this.unwrappedElementContainer=null;this.wrappedElementContainer=null;this.mainElementContainer=null;}

-if(this.group&&removeFromGroup){this.group.removeChild(this,doUpdate);}

-if(this===currentLogItem){currentLogItem=null;}},remove:function(doUpdate,removeFromGroup){this.doRemove(doUpdate,removeFromGroup);},render:function(){},accept:function(visitor){visitor.visit(this);},getUnwrappedDomContainer:function(){return this.group.unwrappedElementContainer.contentDiv;},getWrappedDomContainer:function(){return this.group.wrappedElementContainer.contentDiv;},getMainDomContainer:function(){return this.group.mainElementContainer.contentDiv;}};LogItem.serializedItemKeys={LOG_ENTRY:0,GROUP_START:1,GROUP_END:2};function LogItemContainerElement(){}

-LogItemContainerElement.prototype={appendToLog:function(){var insertBeforeFirst=(newestAtTop&&this.containerDomNode.hasChildNodes());if(insertBeforeFirst){this.containerDomNode.insertBefore(this.mainDiv,this.containerDomNode.firstChild);}else{this.containerDomNode.appendChild(this.mainDiv);}}};function SeparatorElementContainer(containerDomNode){this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="separator";this.mainDiv.innerHTML="&nbsp;";}

-SeparatorElementContainer.prototype=new LogItemContainerElement();SeparatorElementContainer.prototype.remove=function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;};function Separator(){this.rendered=false;}

-Separator.prototype=new LogItem();copyProperties(Separator.prototype,{render:function(){var containerDomNode=this.group.contentDiv;if(isIe){this.unwrappedElementContainer=new SeparatorElementContainer(this.getUnwrappedDomContainer());this.wrappedElementContainer=new SeparatorElementContainer(this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new SeparatorElementContainer(this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}

-this.content=this.formattedMessage;this.rendered=true;}});function GroupElementContainer(group,containerDomNode,isRoot,isWrapped){this.group=group;this.containerDomNode=containerDomNode;this.isRoot=isRoot;this.isWrapped=isWrapped;this.expandable=false;if(this.isRoot){if(isIe){this.contentDiv=logMainContainer.appendChild(document.createElement("div"));this.contentDiv.id=this.isWrapped?"log_wrapped":"log_unwrapped";}else{this.contentDiv=logMainContainer;}}else{var groupElementContainer=this;this.mainDiv=document.createElement("div");this.mainDiv.className="group";this.headingDiv=this.mainDiv.appendChild(document.createElement("div"));this.headingDiv.className="groupheading";this.expander=this.headingDiv.appendChild(document.createElement("span"));this.expander.className="expander unselectable greyedout";this.expander.unselectable=true;var expanderText=this.group.expanded?"-":"+";this.expanderTextNode=this.expander.appendChild(document.createTextNode(expanderText));this.headingDiv.appendChild(document.createTextNode(" "+this.group.name));this.contentDiv=this.mainDiv.appendChild(document.createElement("div"));var contentCssClass=this.group.expanded?"expanded":"collapsed";this.contentDiv.className="groupcontent "+contentCssClass;this.expander.onclick=function(){if(groupElementContainer.group.expandable){groupElementContainer.group.toggleExpanded();}};}}

-GroupElementContainer.prototype=new LogItemContainerElement();copyProperties(GroupElementContainer.prototype,{toggleExpanded:function(){if(!this.isRoot){var oldCssClass,newCssClass,expanderText;if(this.group.expanded){newCssClass="expanded";oldCssClass="collapsed";expanderText="-";}else{newCssClass="collapsed";oldCssClass="expanded";expanderText="+";}

-replaceClass(this.contentDiv,newCssClass,oldCssClass);this.expanderTextNode.nodeValue=expanderText;}},remove:function(){if(!this.isRoot){this.headingDiv=null;this.expander.onclick=null;this.expander=null;this.expanderTextNode=null;this.contentDiv=null;this.containerDomNode=null;this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;}},reverseChildren:function(){var node=null;var childDomNodes=[];while((node=this.contentDiv.firstChild)){this.contentDiv.removeChild(node);childDomNodes.push(node);}

-while((node=childDomNodes.pop())){this.contentDiv.appendChild(node);}},update:function(){if(!this.isRoot){if(this.group.expandable){removeClass(this.expander,"greyedout");}else{addClass(this.expander,"greyedout");}}},clear:function(){if(this.isRoot){this.contentDiv.innerHTML="";}}});function Group(name,isRoot,initiallyExpanded){this.name=name;this.group=null;this.isRoot=isRoot;this.initiallyExpanded=initiallyExpanded;this.elementContainers=[];this.children=[];this.expanded=initiallyExpanded;this.rendered=false;this.expandable=false;}

-Group.prototype=new LogItem();copyProperties(Group.prototype,{addChild:function(logItem){this.children.push(logItem);logItem.group=this;},render:function(){if(isIe){var unwrappedDomContainer,wrappedDomContainer;if(this.isRoot){unwrappedDomContainer=logMainContainer;wrappedDomContainer=logMainContainer;}else{unwrappedDomContainer=this.getUnwrappedDomContainer();wrappedDomContainer=this.getWrappedDomContainer();}

-this.unwrappedElementContainer=new GroupElementContainer(this,unwrappedDomContainer,this.isRoot,false);this.wrappedElementContainer=new GroupElementContainer(this,wrappedDomContainer,this.isRoot,true);this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{var mainDomContainer=this.isRoot?logMainContainer:this.getMainDomContainer();this.mainElementContainer=new GroupElementContainer(this,mainDomContainer,this.isRoot,false);this.elementContainers=[this.mainElementContainer];}

-this.rendered=true;},toggleExpanded:function(){this.expanded=!this.expanded;for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].toggleExpanded();}},expand:function(){if(!this.expanded){this.toggleExpanded();}},accept:function(visitor){visitor.visitGroup(this);},reverseChildren:function(){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].reverseChildren();}}},update:function(){var previouslyExpandable=this.expandable;this.expandable=(this.children.length!==0);if(this.expandable!==previouslyExpandable){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].update();}}},flatten:function(){var visitor=new GroupFlattener();this.accept(visitor);return visitor.logEntriesAndSeparators;},removeChild:function(child,doUpdate){array_remove(this.children,child);child.group=null;if(doUpdate){this.update();}},remove:function(doUpdate,removeFromGroup){for(var i=0,len=this.children.length;i<len;i++){this.children[i].remove(false,false);}

-this.children=[];this.update();if(this===currentGroup){currentGroup=this.group;}

-this.doRemove(doUpdate,removeFromGroup);},serialize:function(items){items.push([LogItem.serializedItemKeys.GROUP_START,this.name]);for(var i=0,len=this.children.length;i<len;i++){this.children[i].serialize(items);}

-if(this!==currentGroup){items.push([LogItem.serializedItemKeys.GROUP_END]);}},clear:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clear();}}});function LogEntryElementContainer(){}

-LogEntryElementContainer.prototype=new LogItemContainerElement();copyProperties(LogEntryElementContainer.prototype,{remove:function(){this.doRemove();},doRemove:function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;this.contentElement=null;this.containerDomNode=null;},setContent:function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=content;}},setSearchMatch:function(isMatch){var oldCssClass=isMatch?"searchnonmatch":"searchmatch";var newCssClass=isMatch?"searchmatch":"searchnonmatch";replaceClass(this.mainDiv,newCssClass,oldCssClass);},clearSearch:function(){removeClass(this.mainDiv,"searchmatch");removeClass(this.mainDiv,"searchnonmatch");}});function LogEntryWrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.mainDiv.className="logentry wrapped "+this.logEntry.level;this.contentElement=this.mainDiv;}

-LogEntryWrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryWrappedElementContainer.prototype.setContent=function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=wrappedContent;}};function LogEntryUnwrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry unwrapped "+this.logEntry.level;this.pre=this.mainDiv.appendChild(document.createElement("pre"));this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.pre.className="unwrapped";this.contentElement=this.pre;}

-LogEntryUnwrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryUnwrappedElementContainer.prototype.remove=function(){this.doRemove();this.pre=null;};function LogEntryMainElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry nonielogentry "+this.logEntry.level;this.contentElement=this.mainDiv.appendChild(document.createElement("span"));this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));}

-LogEntryMainElementContainer.prototype=new LogEntryElementContainer();function LogEntry(level,formattedMessage){this.level=level;this.formattedMessage=formattedMessage;this.rendered=false;}

-LogEntry.prototype=new LogItem();copyProperties(LogEntry.prototype,{render:function(){var logEntry=this;var containerDomNode=this.group.contentDiv;if(isIe){this.formattedMessage=this.formattedMessage.replace(/\r\n/g,"\r");this.unwrappedElementContainer=new LogEntryUnwrappedElementContainer(this,this.getUnwrappedDomContainer());this.wrappedElementContainer=new LogEntryWrappedElementContainer(this,this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new LogEntryMainElementContainer(this,this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}

-this.content=this.formattedMessage;this.rendered=true;},setContent:function(content,wrappedContent){if(content!=this.content){if(isIe&&(content!==this.formattedMessage)){content=content.replace(/\r\n/g,"\r");}

-for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setContent(content,wrappedContent);}

-this.content=content;}},getSearchMatches:function(){var matches=[];var i,len;if(isIe){var unwrappedEls=getElementsByClass(this.unwrappedElementContainer.mainDiv,"searchterm","span");var wrappedEls=getElementsByClass(this.wrappedElementContainer.mainDiv,"searchterm","span");for(i=0,len=unwrappedEls.length;i<len;i++){matches[i]=new Match(this.level,null,unwrappedEls[i],wrappedEls[i]);}}else{var els=getElementsByClass(this.mainElementContainer.mainDiv,"searchterm","span");for(i=0,len=els.length;i<len;i++){matches[i]=new Match(this.level,els[i]);}}

-return matches;},setSearchMatch:function(isMatch){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setSearchMatch(isMatch);}},clearSearch:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clearSearch();}},accept:function(visitor){visitor.visitLogEntry(this);},serialize:function(items){items.push([LogItem.serializedItemKeys.LOG_ENTRY,this.level,this.formattedMessage]);}});function LogItemVisitor(){}

-LogItemVisitor.prototype={visit:function(logItem){},visitParent:function(logItem){if(logItem.group){logItem.group.accept(this);}},visitChildren:function(logItem){for(var i=0,len=logItem.children.length;i<len;i++){logItem.children[i].accept(this);}},visitLogEntry:function(logEntry){this.visit(logEntry);},visitSeparator:function(separator){this.visit(separator);},visitGroup:function(group){this.visit(group);}};function GroupFlattener(){this.logEntriesAndSeparators=[];}

-GroupFlattener.prototype=new LogItemVisitor();GroupFlattener.prototype.visitGroup=function(group){this.visitChildren(group);};GroupFlattener.prototype.visitLogEntry=function(logEntry){this.logEntriesAndSeparators.push(logEntry);};GroupFlattener.prototype.visitSeparator=function(separator){this.logEntriesAndSeparators.push(separator);};window.onload=function(){if(location.search){var queryBits=unescape(location.search).substr(1).split("&"),nameValueBits;for(var i=0,len=queryBits.length;i<len;i++){nameValueBits=queryBits[i].split("=");if(nameValueBits[0]=="log4javascript_domain"){document.domain=nameValueBits[1];break;}}}

-logMainContainer=$("log");if(isIePre7){addClass(logMainContainer,"oldIe");}

-rootGroup=new Group("root",true);rootGroup.render();currentGroup=rootGroup;setCommandInputWidth();setLogContainerHeight();toggleLoggingEnabled();toggleSearchEnabled();toggleSearchFilter();toggleSearchHighlight();applyFilters();checkAllLevels();toggleWrap();toggleNewestAtTop();toggleScrollToLatest();renderQueuedLogItems();loaded=true;$("command").value="";$("command").autocomplete="off";$("command").onkeydown=function(evt){evt=getEvent(evt);if(evt.keyCode==10||evt.keyCode==13){evalCommandLine();stopPropagation(evt);}else if(evt.keyCode==27){this.value="";this.focus();}else if(evt.keyCode==38&&commandHistory.length>0){currentCommandIndex=Math.max(0,currentCommandIndex-1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}else if(evt.keyCode==40&&commandHistory.length>0){currentCommandIndex=Math.min(commandHistory.length-1,currentCommandIndex+1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}};$("command").onkeypress=function(evt){evt=getEvent(evt);if(evt.keyCode==38&&commandHistory.length>0&&evt.preventDefault){evt.preventDefault();}};$("command").onkeyup=function(evt){evt=getEvent(evt);if(evt.keyCode==27&&evt.preventDefault){evt.preventDefault();this.focus();}};document.onkeydown=function keyEventHandler(evt){evt=getEvent(evt);switch(evt.keyCode){case 69:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){evalLastCommand();cancelKeyEvent(evt);return false;}

-break;case 75:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusSearch();cancelKeyEvent(evt);return false;}

-break;case 40:case 76:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusCommandLine();cancelKeyEvent(evt);return false;}

-break;}};setTimeout(setLogContainerHeight,20);setShowCommandLine(showCommandLine);doSearch();};window.onunload=function(){if(mainWindowExists()){appender.unload();}

-appender=null;};function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}

-function setLoggingEnabled(enable){loggingEnabled=enable;}

-var appender=null;function setAppender(appenderParam){appender=appenderParam;}

-function setShowCloseButton(showCloseButton){$("closeButton").style.display=showCloseButton?"inline":"none";}

-function setShowHideButton(showHideButton){$("hideButton").style.display=showHideButton?"inline":"none";}

-var newestAtTop=false;function LogItemContentReverser(){}

-LogItemContentReverser.prototype=new LogItemVisitor();LogItemContentReverser.prototype.visitGroup=function(group){group.reverseChildren();this.visitChildren(group);};function setNewestAtTop(isNewestAtTop){var oldNewestAtTop=newestAtTop;var i,iLen,j,jLen;newestAtTop=Boolean(isNewestAtTop);if(oldNewestAtTop!=newestAtTop){var visitor=new LogItemContentReverser();rootGroup.accept(visitor);if(currentSearch){var currentMatch=currentSearch.matches[currentMatchIndex];var matchIndex=0;var matches=[];var actOnLogEntry=function(logEntry){var logEntryMatches=logEntry.getSearchMatches();for(j=0,jLen=logEntryMatches.length;j<jLen;j++){matches[matchIndex]=logEntryMatches[j];if(currentMatch&&logEntryMatches[j].equals(currentMatch)){currentMatchIndex=matchIndex;}

-matchIndex++;}};if(newestAtTop){for(i=logEntries.length-1;i>=0;i--){actOnLogEntry(logEntries[i]);}}else{for(i=0,iLen=logEntries.length;i<iLen;i++){actOnLogEntry(logEntries[i]);}}

-currentSearch.matches=matches;if(currentMatch){currentMatch.setCurrent();}}else if(scrollToLatest){doScrollToLatest();}}

-$("newestAtTop").checked=isNewestAtTop;}

-function toggleNewestAtTop(){var isNewestAtTop=$("newestAtTop").checked;setNewestAtTop(isNewestAtTop);}

-var scrollToLatest=true;function setScrollToLatest(isScrollToLatest){scrollToLatest=isScrollToLatest;if(scrollToLatest){doScrollToLatest();}

-$("scrollToLatest").checked=isScrollToLatest;}

-function toggleScrollToLatest(){var isScrollToLatest=$("scrollToLatest").checked;setScrollToLatest(isScrollToLatest);}

-function doScrollToLatest(){var l=logMainContainer;if(typeof l.scrollTop!="undefined"){if(newestAtTop){l.scrollTop=0;}else{var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}}

-var closeIfOpenerCloses=true;function setCloseIfOpenerCloses(isCloseIfOpenerCloses){closeIfOpenerCloses=isCloseIfOpenerCloses;}

-var maxMessages=null;function setMaxMessages(max){maxMessages=max;pruneLogEntries();}

-var showCommandLine=false;function setShowCommandLine(isShowCommandLine){showCommandLine=isShowCommandLine;if(loaded){$("commandLine").style.display=showCommandLine?"block":"none";setCommandInputWidth();setLogContainerHeight();}}

-function focusCommandLine(){if(loaded){$("command").focus();}}

-function focusSearch(){if(loaded){$("searchBox").focus();}}

-function getLogItems(){var items=[];for(var i=0,len=logItems.length;i<len;i++){logItems[i].serialize(items);}

-return items;}

-function setLogItems(items){var loggingReallyEnabled=loggingEnabled;loggingEnabled=true;for(var i=0,len=items.length;i<len;i++){switch(items[i][0]){case LogItem.serializedItemKeys.LOG_ENTRY:log(items[i][1],items[i][2]);break;case LogItem.serializedItemKeys.GROUP_START:group(items[i][1]);break;case LogItem.serializedItemKeys.GROUP_END:groupEnd();break;}}

-loggingEnabled=loggingReallyEnabled;}

-function log(logLevel,formattedMessage){if(loggingEnabled){var logEntry=new LogEntry(logLevel,formattedMessage);logEntries.push(logEntry);logEntriesAndSeparators.push(logEntry);logItems.push(logEntry);currentGroup.addChild(logEntry);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}

-logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}

-function renderQueuedLogItems(){logQueuedEventsTimer=null;var pruned=pruneLogEntries();var initiallyHasMatches=currentSearch?currentSearch.hasMatches():false;for(var i=0,len=logItems.length;i<len;i++){if(!logItems[i].rendered){logItems[i].render();logItems[i].appendToLog();if(currentSearch&&(logItems[i]instanceof LogEntry)){currentSearch.applyTo(logItems[i]);}}}

-if(currentSearch){if(pruned){if(currentSearch.hasVisibleMatches()){if(currentMatchIndex===null){setCurrentMatchIndex(0);}

-displayMatches();}else{displayNoMatches();}}else if(!initiallyHasMatches&&currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}}

-if(scrollToLatest){doScrollToLatest();}

-unrenderedLogItemsExist=false;}

-function pruneLogEntries(){if((maxMessages!==null)&&(logEntriesAndSeparators.length>maxMessages)){var numberToDelete=logEntriesAndSeparators.length-maxMessages;var prunedLogEntries=logEntriesAndSeparators.slice(0,numberToDelete);if(currentSearch){currentSearch.removeMatches(prunedLogEntries);}

-var group;for(var i=0;i<numberToDelete;i++){group=logEntriesAndSeparators[i].group;array_remove(logItems,logEntriesAndSeparators[i]);array_remove(logEntries,logEntriesAndSeparators[i]);logEntriesAndSeparators[i].remove(true,true);if(group.children.length===0&&group!==currentGroup&&group!==rootGroup){array_remove(logItems,group);group.remove(true,true);}}

-logEntriesAndSeparators=array_removeFromStart(logEntriesAndSeparators,numberToDelete);return true;}

-return false;}

-function group(name,startExpanded){if(loggingEnabled){initiallyExpanded=(typeof startExpanded==="undefined")?true:Boolean(startExpanded);var newGroup=new Group(name,false,initiallyExpanded);currentGroup.addChild(newGroup);currentGroup=newGroup;logItems.push(newGroup);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}

-logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}

-function groupEnd(){currentGroup=(currentGroup===rootGroup)?rootGroup:currentGroup.group;}

-function mainPageReloaded(){currentGroup=rootGroup;var separator=new Separator();logEntriesAndSeparators.push(separator);logItems.push(separator);currentGroup.addChild(separator);}

-function closeWindow(){if(appender&&mainWindowExists()){appender.close(true);}else{window.close();}}

-function hide(){if(appender&&mainWindowExists()){appender.hide();}}

-var mainWindow=window;var windowId="log4javascriptConsoleWindow_"+new Date().getTime()+"_"+(""+Math.random()).substr(2);function setMainWindow(win){mainWindow=win;mainWindow[windowId]=window;if(opener&&closeIfOpenerCloses){pollOpener();}}

-function pollOpener(){if(closeIfOpenerCloses){if(mainWindowExists()){setTimeout(pollOpener,500);}else{closeWindow();}}}

-function mainWindowExists(){try{return(mainWindow&&!mainWindow.closed&&mainWindow[windowId]==window);}catch(ex){}

-return false;}

-var logLevels=["TRACE","DEBUG","INFO","WARN","ERROR","FATAL"];function getCheckBox(logLevel){return $("switch_"+logLevel);}

-function getIeWrappedLogContainer(){return $("log_wrapped");}

-function getIeUnwrappedLogContainer(){return $("log_unwrapped");}

-function applyFilters(){for(var i=0;i<logLevels.length;i++){if(getCheckBox(logLevels[i]).checked){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}

-updateSearchFromFilters();}

-function toggleAllLevels(){var turnOn=$("switch_ALL").checked;for(var i=0;i<logLevels.length;i++){getCheckBox(logLevels[i]).checked=turnOn;if(turnOn){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}}

-function checkAllLevels(){for(var i=0;i<logLevels.length;i++){if(!getCheckBox(logLevels[i]).checked){getCheckBox("ALL").checked=false;return;}}

-getCheckBox("ALL").checked=true;}

-function clearLog(){rootGroup.clear();currentGroup=rootGroup;logEntries=[];logItems=[];logEntriesAndSeparators=[];doSearch();}

-function toggleWrap(){var enable=$("wrap").checked;if(enable){addClass(logMainContainer,"wrap");}else{removeClass(logMainContainer,"wrap");}

-refreshCurrentMatch();}

-var searchTimer=null;function scheduleSearch(){try{clearTimeout(searchTimer);}catch(ex){}

-searchTimer=setTimeout(doSearch,500);}

-function Search(searchTerm,isRegex,searchRegex,isCaseSensitive){this.searchTerm=searchTerm;this.isRegex=isRegex;this.searchRegex=searchRegex;this.isCaseSensitive=isCaseSensitive;this.matches=[];}

-Search.prototype={hasMatches:function(){return this.matches.length>0;},hasVisibleMatches:function(){if(this.hasMatches()){for(var i=0;i<this.matches.length;i++){if(this.matches[i].isVisible()){return true;}}}

-return false;},match:function(logEntry){var entryText=String(logEntry.formattedMessage);var matchesSearch=false;if(this.isRegex){matchesSearch=this.searchRegex.test(entryText);}else if(this.isCaseSensitive){matchesSearch=(entryText.indexOf(this.searchTerm)>-1);}else{matchesSearch=(entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase())>-1);}

-return matchesSearch;},getNextVisibleMatchIndex:function(){for(var i=currentMatchIndex+1;i<this.matches.length;i++){if(this.matches[i].isVisible()){return i;}}

-for(i=0;i<=currentMatchIndex;i++){if(this.matches[i].isVisible()){return i;}}

-return-1;},getPreviousVisibleMatchIndex:function(){for(var i=currentMatchIndex-1;i>=0;i--){if(this.matches[i].isVisible()){return i;}}

-for(var i=this.matches.length-1;i>=currentMatchIndex;i--){if(this.matches[i].isVisible()){return i;}}

-return-1;},applyTo:function(logEntry){var doesMatch=this.match(logEntry);if(doesMatch){logEntry.group.expand();logEntry.setSearchMatch(true);var logEntryContent;var wrappedLogEntryContent;var searchTermReplacementStartTag="<span class=\"searchterm\">";var searchTermReplacementEndTag="<"+"/span>";var preTagName=isIe?"pre":"span";var preStartTag="<"+preTagName+" class=\"pre\">";var preEndTag="<"+"/"+preTagName+">";var startIndex=0;var searchIndex,matchedText,textBeforeMatch;if(this.isRegex){var flags=this.isCaseSensitive?"g":"gi";var capturingRegex=new RegExp("("+this.searchRegex.source+")",flags);var rnd=(""+Math.random()).substr(2);var startToken="%%s"+rnd+"%%";var endToken="%%e"+rnd+"%%";logEntryContent=logEntry.formattedMessage.replace(capturingRegex,startToken+"$1"+endToken);logEntryContent=escapeHtml(logEntryContent);var result;var searchString=logEntryContent;logEntryContent="";wrappedLogEntryContent="";while((searchIndex=searchString.indexOf(startToken,startIndex))>-1){var endTokenIndex=searchString.indexOf(endToken,searchIndex);matchedText=searchString.substring(searchIndex+startToken.length,endTokenIndex);textBeforeMatch=searchString.substring(startIndex,searchIndex);logEntryContent+=preStartTag+textBeforeMatch+preEndTag;logEntryContent+=searchTermReplacementStartTag+preStartTag+matchedText+

-preEndTag+searchTermReplacementEndTag;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+

-matchedText+searchTermReplacementEndTag;}

-startIndex=endTokenIndex+endToken.length;}

-logEntryContent+=preStartTag+searchString.substr(startIndex)+preEndTag;if(isIe){wrappedLogEntryContent+=searchString.substr(startIndex);}}else{logEntryContent="";wrappedLogEntryContent="";var searchTermReplacementLength=searchTermReplacementStartTag.length+

-this.searchTerm.length+searchTermReplacementEndTag.length;var searchTermLength=this.searchTerm.length;var searchTermLowerCase=this.searchTerm.toLowerCase();var logTextLowerCase=logEntry.formattedMessage.toLowerCase();while((searchIndex=logTextLowerCase.indexOf(searchTermLowerCase,startIndex))>-1){matchedText=escapeHtml(logEntry.formattedMessage.substr(searchIndex,this.searchTerm.length));textBeforeMatch=escapeHtml(logEntry.formattedMessage.substring(startIndex,searchIndex));var searchTermReplacement=searchTermReplacementStartTag+

-preStartTag+matchedText+preEndTag+searchTermReplacementEndTag;logEntryContent+=preStartTag+textBeforeMatch+preEndTag+searchTermReplacement;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+

-matchedText+searchTermReplacementEndTag;}

-startIndex=searchIndex+searchTermLength;}

-var textAfterLastMatch=escapeHtml(logEntry.formattedMessage.substr(startIndex));logEntryContent+=preStartTag+textAfterLastMatch+preEndTag;if(isIe){wrappedLogEntryContent+=textAfterLastMatch;}}

-logEntry.setContent(logEntryContent,wrappedLogEntryContent);var logEntryMatches=logEntry.getSearchMatches();this.matches=this.matches.concat(logEntryMatches);}else{logEntry.setSearchMatch(false);logEntry.setContent(logEntry.formattedMessage,logEntry.formattedMessage);}

-return doesMatch;},removeMatches:function(logEntries){var matchesToRemoveCount=0;var currentMatchRemoved=false;var matchesToRemove=[];var i,iLen,j,jLen;for(i=0,iLen=this.matches.length;i<iLen;i++){for(j=0,jLen=logEntries.length;j<jLen;j++){if(this.matches[i].belongsTo(logEntries[j])){matchesToRemove.push(this.matches[i]);if(i===currentMatchIndex){currentMatchRemoved=true;}}}}

-var newMatch=currentMatchRemoved?null:this.matches[currentMatchIndex];if(currentMatchRemoved){for(i=currentMatchIndex,iLen=this.matches.length;i<iLen;i++){if(this.matches[i].isVisible()&&!array_contains(matchesToRemove,this.matches[i])){newMatch=this.matches[i];break;}}}

-for(i=0,iLen=matchesToRemove.length;i<iLen;i++){array_remove(this.matches,matchesToRemove[i]);matchesToRemove[i].remove();}

-if(this.hasVisibleMatches()){if(newMatch===null){setCurrentMatchIndex(0);}else{var newMatchIndex=0;for(i=0,iLen=this.matches.length;i<iLen;i++){if(newMatch===this.matches[i]){newMatchIndex=i;break;}}

-setCurrentMatchIndex(newMatchIndex);}}else{currentMatchIndex=null;displayNoMatches();}}};function getPageOffsetTop(el,container){var currentEl=el;var y=0;while(currentEl&&currentEl!=container){y+=currentEl.offsetTop;currentEl=currentEl.offsetParent;}

-return y;}

-function scrollIntoView(el){var logContainer=logMainContainer;if(!$("wrap").checked){var logContainerLeft=logContainer.scrollLeft;var logContainerRight=logContainerLeft+logContainer.offsetWidth;var elLeft=el.offsetLeft;var elRight=elLeft+el.offsetWidth;if(elLeft<logContainerLeft||elRight>logContainerRight){logContainer.scrollLeft=elLeft-(logContainer.offsetWidth-el.offsetWidth)/2;}}

-var logContainerTop=logContainer.scrollTop;var logContainerBottom=logContainerTop+logContainer.offsetHeight;var elTop=getPageOffsetTop(el)-getToolBarsHeight();var elBottom=elTop+el.offsetHeight;if(elTop<logContainerTop||elBottom>logContainerBottom){logContainer.scrollTop=elTop-(logContainer.offsetHeight-el.offsetHeight)/2;}}

-function Match(logEntryLevel,spanInMainDiv,spanInUnwrappedPre,spanInWrappedDiv){this.logEntryLevel=logEntryLevel;this.spanInMainDiv=spanInMainDiv;if(isIe){this.spanInUnwrappedPre=spanInUnwrappedPre;this.spanInWrappedDiv=spanInWrappedDiv;}

-this.mainSpan=isIe?spanInUnwrappedPre:spanInMainDiv;}

-Match.prototype={equals:function(match){return this.mainSpan===match.mainSpan;},setCurrent:function(){if(isIe){addClass(this.spanInUnwrappedPre,"currentmatch");addClass(this.spanInWrappedDiv,"currentmatch");var elementToScroll=$("wrap").checked?this.spanInWrappedDiv:this.spanInUnwrappedPre;scrollIntoView(elementToScroll);}else{addClass(this.spanInMainDiv,"currentmatch");scrollIntoView(this.spanInMainDiv);}},belongsTo:function(logEntry){if(isIe){return isDescendant(this.spanInUnwrappedPre,logEntry.unwrappedPre);}else{return isDescendant(this.spanInMainDiv,logEntry.mainDiv);}},setNotCurrent:function(){if(isIe){removeClass(this.spanInUnwrappedPre,"currentmatch");removeClass(this.spanInWrappedDiv,"currentmatch");}else{removeClass(this.spanInMainDiv,"currentmatch");}},isOrphan:function(){return isOrphan(this.mainSpan);},isVisible:function(){return getCheckBox(this.logEntryLevel).checked;},remove:function(){if(isIe){this.spanInUnwrappedPre=null;this.spanInWrappedDiv=null;}else{this.spanInMainDiv=null;}}};var currentSearch=null;var currentMatchIndex=null;function doSearch(){var searchBox=$("searchBox");var searchTerm=searchBox.value;var isRegex=$("searchRegex").checked;var isCaseSensitive=$("searchCaseSensitive").checked;var i;if(searchTerm===""){$("searchReset").disabled=true;$("searchNav").style.display="none";removeClass(document.body,"searching");removeClass(searchBox,"hasmatches");removeClass(searchBox,"nomatches");for(i=0;i<logEntries.length;i++){logEntries[i].clearSearch();logEntries[i].setContent(logEntries[i].formattedMessage,logEntries[i].formattedMessage);}

-currentSearch=null;setLogContainerHeight();}else{$("searchReset").disabled=false;$("searchNav").style.display="block";var searchRegex;var regexValid;if(isRegex){try{searchRegex=isCaseSensitive?new RegExp(searchTerm,"g"):new RegExp(searchTerm,"gi");regexValid=true;replaceClass(searchBox,"validregex","invalidregex");searchBox.title="Valid regex";}catch(ex){regexValid=false;replaceClass(searchBox,"invalidregex","validregex");searchBox.title="Invalid regex: "+(ex.message?ex.message:(ex.description?ex.description:"unknown error"));return;}}else{searchBox.title="";removeClass(searchBox,"validregex");removeClass(searchBox,"invalidregex");}

-addClass(document.body,"searching");currentSearch=new Search(searchTerm,isRegex,searchRegex,isCaseSensitive);for(i=0;i<logEntries.length;i++){currentSearch.applyTo(logEntries[i]);}

-setLogContainerHeight();if(currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}else{displayNoMatches();}}}

-function updateSearchFromFilters(){if(currentSearch){if(currentSearch.hasMatches()){if(currentMatchIndex===null){currentMatchIndex=0;}

-var currentMatch=currentSearch.matches[currentMatchIndex];if(currentMatch.isVisible()){displayMatches();setCurrentMatchIndex(currentMatchIndex);}else{currentMatch.setNotCurrent();var nextVisibleMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextVisibleMatchIndex>-1){setCurrentMatchIndex(nextVisibleMatchIndex);displayMatches();}else{displayNoMatches();}}}else{displayNoMatches();}}}

-function refreshCurrentMatch(){if(currentSearch&&currentSearch.hasVisibleMatches()){setCurrentMatchIndex(currentMatchIndex);}}

-function displayMatches(){replaceClass($("searchBox"),"hasmatches","nomatches");$("searchBox").title=""+currentSearch.matches.length+" matches found";$("searchNav").style.display="block";setLogContainerHeight();}

-function displayNoMatches(){replaceClass($("searchBox"),"nomatches","hasmatches");$("searchBox").title="No matches found";$("searchNav").style.display="none";setLogContainerHeight();}

-function toggleSearchEnabled(enable){enable=(typeof enable=="undefined")?!$("searchDisable").checked:enable;$("searchBox").disabled=!enable;$("searchReset").disabled=!enable;$("searchRegex").disabled=!enable;$("searchNext").disabled=!enable;$("searchPrevious").disabled=!enable;$("searchCaseSensitive").disabled=!enable;$("searchNav").style.display=(enable&&($("searchBox").value!=="")&&currentSearch&&currentSearch.hasVisibleMatches())?"block":"none";if(enable){removeClass($("search"),"greyedout");addClass(document.body,"searching");if($("searchHighlight").checked){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}

-if($("searchFilter").checked){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}

-$("searchDisable").checked=!enable;}else{addClass($("search"),"greyedout");removeClass(document.body,"searching");removeClass(logMainContainer,"searchhighlight");removeClass(logMainContainer,"searchfilter");}

-setLogContainerHeight();}

-function toggleSearchFilter(){var enable=$("searchFilter").checked;if(enable){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}

-refreshCurrentMatch();}

-function toggleSearchHighlight(){var enable=$("searchHighlight").checked;if(enable){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}}

-function clearSearch(){$("searchBox").value="";doSearch();}

-function searchNext(){if(currentSearch!==null&&currentMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var nextMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextMatchIndex>currentMatchIndex||confirm("Reached the end of the page. Start from the top?")){setCurrentMatchIndex(nextMatchIndex);}}}

-function searchPrevious(){if(currentSearch!==null&&currentMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var previousMatchIndex=currentSearch.getPreviousVisibleMatchIndex();if(previousMatchIndex<currentMatchIndex||confirm("Reached the start of the page. Continue from the bottom?")){setCurrentMatchIndex(previousMatchIndex);}}}

-function setCurrentMatchIndex(index){currentMatchIndex=index;currentSearch.matches[currentMatchIndex].setCurrent();}

-function addClass(el,cssClass){if(!hasClass(el,cssClass)){if(el.className){el.className+=" "+cssClass;}else{el.className=cssClass;}}}

-function hasClass(el,cssClass){if(el.className){var classNames=el.className.split(" ");return array_contains(classNames,cssClass);}

-return false;}

-function removeClass(el,cssClass){if(hasClass(el,cssClass)){var existingClasses=el.className.split(" ");var newClasses=[];for(var i=0,len=existingClasses.length;i<len;i++){if(existingClasses[i]!=cssClass){newClasses[newClasses.length]=existingClasses[i];}}

-el.className=newClasses.join(" ");}}

-function replaceClass(el,newCssClass,oldCssClass){removeClass(el,oldCssClass);addClass(el,newCssClass);}

-function getElementsByClass(el,cssClass,tagName){var elements=el.getElementsByTagName(tagName);var matches=[];for(var i=0,len=elements.length;i<len;i++){if(hasClass(elements[i],cssClass)){matches.push(elements[i]);}}

-return matches;}

-function $(id){return document.getElementById(id);}

-function isDescendant(node,ancestorNode){while(node!=null){if(node===ancestorNode){return true;}

-node=node.parentNode;}

-return false;}

-function isOrphan(node){var currentNode=node;while(currentNode){if(currentNode==document.body){return false;}

-currentNode=currentNode.parentNode;}

-return true;}

-function escapeHtml(str){return str.replace(/&/g,"&amp;").replace(/[<]/g,"&lt;").replace(/>/g,"&gt;");}

-function getWindowWidth(){if(window.innerWidth){return window.innerWidth;}else if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth;}else if(document.body){return document.body.clientWidth;}

-return 0;}

-function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}

-return 0;}

-function getToolBarsHeight(){return $("switches").offsetHeight;}

-function getChromeHeight(){var height=getToolBarsHeight();if(showCommandLine){height+=$("commandLine").offsetHeight;}

-return height;}

-function setLogContainerHeight(){if(logMainContainer){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";logMainContainer.style.height=""+

-Math.max(0,windowHeight-getChromeHeight())+"px";}}

-function setCommandInputWidth(){if(showCommandLine){$("command").style.width=""+Math.max(0,$("commandLineContainer").offsetWidth-

-($("evaluateButton").offsetWidth+13))+"px";}}

-window.onresize=function(){setCommandInputWidth();setLogContainerHeight();};if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}

-return this.length;};}

-if(!Array.prototype.pop){Array.prototype.pop=function(){if(this.length>0){var val=this[this.length-1];this.length=this.length-1;return val;}};}

-if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}

-this.length=this.length-1;return firstItem;}};}

-if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}

-var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}

-return itemsDeleted;};}

-function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}

-if(index>=0){arr.splice(index,1);return index;}else{return false;}}

-function array_removeFromStart(array,numberToRemove){if(Array.prototype.splice){array.splice(0,numberToRemove);}else{for(var i=numberToRemove,len=array.length;i<len;i++){array[i-numberToRemove]=array[i];}

-array.length=array.length-numberToRemove;}

-return array;}

-function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}

-return false;}

-function getErrorMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}

-return""+ex;}

-function moveCaretToEnd(input){if(input.setSelectionRange){input.focus();var length=input.value.length;input.setSelectionRange(length,length);}else if(input.createTextRange){var range=input.createTextRange();range.collapse(false);range.select();}

-input.focus();}

-function stopPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}}

-function getEvent(evt){return evt?evt:event;}

-function getTarget(evt){return evt.target?evt.target:evt.srcElement;}

-function getRelatedTarget(evt){if(evt.relatedTarget){return evt.relatedTarget;}else if(evt.srcElement){switch(evt.type){case"mouseover":return evt.fromElement;case"mouseout":return evt.toElement;default:return evt.srcElement;}}}

-function cancelKeyEvent(evt){evt.returnValue=false;stopPropagation(evt);}

-function evalCommandLine(){var expr=$("command").value;evalCommand(expr);$("command").value="";}

-function evalLastCommand(){if(lastCommand!=null){evalCommand(lastCommand);}}

-var lastCommand=null;var commandHistory=[];var currentCommandIndex=0;function evalCommand(expr){if(appender){appender.evalCommandAndAppend(expr);}else{var prefix=">>> "+expr+"\r\n";try{log("INFO",prefix+eval(expr));}catch(ex){log("ERROR",prefix+"Error: "+getErrorMessage(ex));}}

-if(expr!=commandHistory[commandHistory.length-1]){commandHistory.push(expr);if(appender){appender.storeCommandHistory(commandHistory);}}

-currentCommandIndex=(expr==commandHistory[currentCommandIndex])?currentCommandIndex+1:commandHistory.length;lastCommand=expr;}

-//]]>

-</script>

-<style type="text/css">

-body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#switchesContainer input{margin-bottom:0}div.toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div.toolbar,div#search input{font-family:tahoma,verdana,arial,helvetica,sans-serif}div.toolbar input.button{padding:0 5px;font-size:100%}div.toolbar input.hidden{display:none}div#switches input#clearButton{margin-left:20px}div#levels label{font-weight:bold}div#levels label,div#options label{margin-right:5px}div#levels label#wrapLabel{font-weight:normal}div#search label{margin-right:10px}div#search label.searchboxlabel{margin-right:0}div#search input{font-size:100%}div#search input.validregex{color:green}div#search input.invalidregex{color:red}div#search input.nomatches{color:white;background-color:#ff6666}div#search input.nomatches{color:white;background-color:#ff6666}div#searchNav{display:none}div#commandLine{display:none}div#commandLine input#command{font-size:100%;font-family:Courier New,Courier}div#commandLine input#evaluateButton{}*.greyedout{color:gray !important;border-color:gray !important}*.greyedout *.alwaysenabled{color:black}*.unselectable{-khtml-user-select:none;-moz-user-select:none;user-select:none}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both;position:relative}div.group{border-color:#cccccc;border-style:solid;border-width:1px 0 1px 1px;overflow:visible}div.oldIe div.group,div.oldIe div.group *,div.oldIe *.logentry{height:1%}div.group div.groupheading span.expander{border:solid black 1px;font-family:Courier New,Courier;font-size:0.833em;background-color:#eeeeee;position:relative;top:-1px;color:black;padding:0 2px;cursor:pointer;cursor:hand;height:1%}div.group div.groupcontent{margin-left:10px;padding-bottom:2px;overflow:visible}div.group div.expanded{display:block}div.group div.collapsed{display:none}*.logentry{overflow:visible;display:none;white-space:pre}span.pre{white-space:pre}pre.unwrapped{display:inline !important}pre.unwrapped pre.pre,div.wrapped pre.pre{display:inline}div.wrapped pre.pre{white-space:normal}div.wrapped{display:none}body.searching *.logentry span.currentmatch{color:white !important;background-color:green !important}body.searching div.searchhighlight *.logentry span.searchterm{color:black;background-color:yellow}div.wrap *.logentry{white-space:normal !important;border-width:0 0 1px 0;border-color:#dddddd;border-style:dotted}div.wrap #log_wrapped,#log_unwrapped{display:block}div.wrap #log_unwrapped,#log_wrapped{display:none}div.wrap *.logentry span.pre{overflow:visible;white-space:normal}div.wrap *.logentry pre.unwrapped{display:none}div.wrap *.logentry span.wrapped{display:inline}div.searchfilter *.searchnonmatch{display:none !important}div#log *.TRACE,label#label_TRACE{color:#666666}div#log *.DEBUG,label#label_DEBUG{color:green}div#log *.INFO,label#label_INFO{color:#000099}div#log *.WARN,label#label_WARN{color:#999900}div#log *.ERROR,label#label_ERROR{color:red}div#log *.FATAL,label#label_FATAL{color:#660066}div.TRACE#log *.TRACE,div.DEBUG#log *.DEBUG,div.INFO#log *.INFO,div.WARN#log *.WARN,div.ERROR#log *.ERROR,div.FATAL#log *.FATAL{display:block}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}

-</style>

-</head>

-<body id="body">

-<div id="switchesContainer">

-<div id="switches">

-<div id="levels" class="toolbar">

-Filters:

-<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>

-<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>

-<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>

-<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>

-<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>

-<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>

-<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>

-</div>

-<div id="search" class="toolbar">

-<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />

-<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />

-<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>

-<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>

-<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>

-<div id="searchNav">

-<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />

-<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />

-<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>

-<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>

-</div>

-</div>

-<div id="options" class="toolbar">

-Options:

-<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>

-<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>

-<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>

-<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>

-<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages"  />

-<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />

-<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />

-</div>

-</div>

-</div>

-<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>

-<div id="commandLine" class="toolbar">

-<div id="commandLineContainer">

-<input type="text" id="command" title="Enter a JavaScript command here and hit return or press 'Evaluate'" />

-<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />

-</div>

-</div>

-</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/console_uncompressed.html b/xos/core/static/log4javascript-1.4.6/console_uncompressed.html
deleted file mode 100644
index 220cca0..0000000
--- a/xos/core/static/log4javascript-1.4.6/console_uncompressed.html
+++ /dev/null
@@ -1,2297 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript</title>

-		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

-		<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->

-		<meta http-equiv="X-UA-Compatible" content="IE=7" />

-		<script type="text/javascript">var isIe = false, isIePre7 = false;</script>

-		<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->

-		<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->

-		<script type="text/javascript">

-			//<![CDATA[

-			var loggingEnabled = true;

-			var logQueuedEventsTimer = null;

-			var logEntries = [];

-			var logEntriesAndSeparators = [];

-			var logItems = [];

-			var renderDelay = 100;

-			var unrenderedLogItemsExist = false;

-			var rootGroup, currentGroup = null;

-			var loaded = false;

-			var currentLogItem = null;

-			var logMainContainer;

-

-			function copyProperties(obj, props) {

-				for (var i in props) {

-					obj[i] = props[i];

-				}

-			}

-

-			/*----------------------------------------------------------------*/

-

-			function LogItem() {

-			}

-

-			LogItem.prototype = {

-				mainContainer: null,

-				wrappedContainer: null,

-				unwrappedContainer: null,

-				group: null,

-

-				appendToLog: function() {

-					for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-						this.elementContainers[i].appendToLog();

-					}

-					this.group.update();

-				},

-

-				doRemove: function(doUpdate, removeFromGroup) {

-					if (this.rendered) {

-						for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-							this.elementContainers[i].remove();

-						}

-						this.unwrappedElementContainer = null;

-						this.wrappedElementContainer = null;

-						this.mainElementContainer = null;

-					}

-					if (this.group && removeFromGroup) {

-						this.group.removeChild(this, doUpdate);

-					}

-					if (this === currentLogItem) {

-						currentLogItem = null;

-					}

-				},

-

-				remove: function(doUpdate, removeFromGroup) {

-					this.doRemove(doUpdate, removeFromGroup);

-				},

-

-				render: function() {},

-

-				accept: function(visitor) {

-					visitor.visit(this);

-				},

-

-				getUnwrappedDomContainer: function() {

-					return this.group.unwrappedElementContainer.contentDiv;

-				},

-

-				getWrappedDomContainer: function() {

-					return this.group.wrappedElementContainer.contentDiv;

-				},

-

-				getMainDomContainer: function() {

-					return this.group.mainElementContainer.contentDiv;

-				}

-			};

-

-			LogItem.serializedItemKeys = {LOG_ENTRY: 0, GROUP_START: 1, GROUP_END: 2};

-

-			/*----------------------------------------------------------------*/

-

-			function LogItemContainerElement() {

-			}

-

-			LogItemContainerElement.prototype = {

-				appendToLog: function() {

-					var insertBeforeFirst = (newestAtTop && this.containerDomNode.hasChildNodes());

-					if (insertBeforeFirst) {

-						this.containerDomNode.insertBefore(this.mainDiv, this.containerDomNode.firstChild);

-					} else {

-						this.containerDomNode.appendChild(this.mainDiv);

-					}

-				}

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function SeparatorElementContainer(containerDomNode) {

-				this.containerDomNode = containerDomNode;

-				this.mainDiv = document.createElement("div");

-				this.mainDiv.className = "separator";

-				this.mainDiv.innerHTML = "&nbsp;";

-			}

-

-			SeparatorElementContainer.prototype = new LogItemContainerElement();

-

-			SeparatorElementContainer.prototype.remove = function() {

-				this.mainDiv.parentNode.removeChild(this.mainDiv);

-				this.mainDiv = null;

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function Separator() {

-				this.rendered = false;

-			}

-

-			Separator.prototype = new LogItem();

-

-			copyProperties(Separator.prototype, {

-				render: function() {

-					var containerDomNode = this.group.contentDiv;

-					if (isIe) {

-						this.unwrappedElementContainer = new SeparatorElementContainer(this.getUnwrappedDomContainer());

-						this.wrappedElementContainer = new SeparatorElementContainer(this.getWrappedDomContainer());

-						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];

-					} else {

-						this.mainElementContainer = new SeparatorElementContainer(this.getMainDomContainer());

-						this.elementContainers = [this.mainElementContainer];

-					}

-					this.content = this.formattedMessage;

-					this.rendered = true;

-				}

-			});

-

-			/*----------------------------------------------------------------*/

-

-			function GroupElementContainer(group, containerDomNode, isRoot, isWrapped) {

-				this.group = group;

-				this.containerDomNode = containerDomNode;

-				this.isRoot = isRoot;

-				this.isWrapped = isWrapped;

-				this.expandable = false;

-

-				if (this.isRoot) {

-					if (isIe) {

-						this.contentDiv = logMainContainer.appendChild(document.createElement("div"));

-						this.contentDiv.id = this.isWrapped ? "log_wrapped" : "log_unwrapped";

-					} else {

-						this.contentDiv = logMainContainer;

-					}

-				} else {

-					var groupElementContainer = this;

-					

-					this.mainDiv = document.createElement("div");

-					this.mainDiv.className = "group";

-

-					this.headingDiv = this.mainDiv.appendChild(document.createElement("div"));

-					this.headingDiv.className = "groupheading";

-

-					this.expander = this.headingDiv.appendChild(document.createElement("span"));

-					this.expander.className = "expander unselectable greyedout";

-					this.expander.unselectable = true;

-					var expanderText = this.group.expanded ? "-" : "+";

-					this.expanderTextNode = this.expander.appendChild(document.createTextNode(expanderText));

-					

-					this.headingDiv.appendChild(document.createTextNode(" " + this.group.name));

-

-					this.contentDiv = this.mainDiv.appendChild(document.createElement("div"));

-					var contentCssClass = this.group.expanded ? "expanded" : "collapsed";

-					this.contentDiv.className = "groupcontent " + contentCssClass;

-

-					this.expander.onclick = function() {

-						if (groupElementContainer.group.expandable) {

-							groupElementContainer.group.toggleExpanded();

-						}

-					};

-				}

-			}

-

-			GroupElementContainer.prototype = new LogItemContainerElement();

-

-			copyProperties(GroupElementContainer.prototype, {

-				toggleExpanded: function() {

-					if (!this.isRoot) {

-						var oldCssClass, newCssClass, expanderText;

-						if (this.group.expanded) {

-							newCssClass = "expanded";

-							oldCssClass = "collapsed";

-							expanderText = "-";

-						} else {

-							newCssClass = "collapsed";

-							oldCssClass = "expanded";

-							expanderText = "+";

-						}

-						replaceClass(this.contentDiv, newCssClass, oldCssClass);

-						this.expanderTextNode.nodeValue = expanderText;

-					}

-				},

-

-				remove: function() {

-					if (!this.isRoot) {

-						this.headingDiv = null;

-						this.expander.onclick = null;

-						this.expander = null;

-						this.expanderTextNode = null;

-						this.contentDiv = null;

-						this.containerDomNode = null;

-						this.mainDiv.parentNode.removeChild(this.mainDiv);

-						this.mainDiv = null;

-					}

-				},

-

-				reverseChildren: function() {

-					// Invert the order of the log entries

-					var node = null;

-

-					// Remove all the log container nodes

-					var childDomNodes = [];

-					while ((node = this.contentDiv.firstChild)) {

-						this.contentDiv.removeChild(node);

-						childDomNodes.push(node);

-					}

-

-					// Put them all back in reverse order

-					while ((node = childDomNodes.pop())) {

-						this.contentDiv.appendChild(node);

-					}

-				},

-

-				update: function() {

-					if (!this.isRoot) {

-						if (this.group.expandable) {

-							removeClass(this.expander, "greyedout");

-						} else {

-							addClass(this.expander, "greyedout");

-						}

-					}

-				},

-

-				clear: function() {

-					if (this.isRoot) {

-						this.contentDiv.innerHTML = "";

-					}

-				}

-			});

-

-			/*----------------------------------------------------------------*/

-

-			function Group(name, isRoot, initiallyExpanded) {

-				this.name = name;

-				this.group = null;

-				this.isRoot = isRoot;

-				this.initiallyExpanded = initiallyExpanded;

-				this.elementContainers = [];

-				this.children = [];

-				this.expanded = initiallyExpanded;

-				this.rendered = false;

-				this.expandable = false;

-			}

-

-			Group.prototype = new LogItem();

-

-			copyProperties(Group.prototype, {

-				addChild: function(logItem) {

-					this.children.push(logItem);

-					logItem.group = this;

-				},

-

-				render: function() {

-					if (isIe) {

-						var unwrappedDomContainer, wrappedDomContainer;

-						if (this.isRoot) {

-							unwrappedDomContainer = logMainContainer;

-							wrappedDomContainer = logMainContainer;

-						} else {

-							unwrappedDomContainer = this.getUnwrappedDomContainer();

-							wrappedDomContainer = this.getWrappedDomContainer();

-						}

-						this.unwrappedElementContainer = new GroupElementContainer(this, unwrappedDomContainer, this.isRoot, false);

-						this.wrappedElementContainer = new GroupElementContainer(this, wrappedDomContainer, this.isRoot, true);

-						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];

-					} else {

-						var mainDomContainer = this.isRoot ? logMainContainer : this.getMainDomContainer();

-						this.mainElementContainer = new GroupElementContainer(this, mainDomContainer, this.isRoot, false);

-						this.elementContainers = [this.mainElementContainer];

-					}

-					this.rendered = true;

-				},

-

-				toggleExpanded: function() {

-					this.expanded = !this.expanded;

-					for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-						this.elementContainers[i].toggleExpanded();

-					}

-				},

-

-				expand: function() {

-					if (!this.expanded) {

-						this.toggleExpanded();

-					}

-				},

-

-				accept: function(visitor) {

-					visitor.visitGroup(this);

-				},

-

-				reverseChildren: function() {

-					if (this.rendered) {

-						for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-							this.elementContainers[i].reverseChildren();

-						}

-					}

-				},

-

-				update: function() {

-					var previouslyExpandable = this.expandable;

-					this.expandable = (this.children.length !== 0);

-					if (this.expandable !== previouslyExpandable) {

-						for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-							this.elementContainers[i].update();

-						}

-					}

-				},

-

-				flatten: function() {

-					var visitor = new GroupFlattener();

-					this.accept(visitor);

-					return visitor.logEntriesAndSeparators;

-				},

-

-				removeChild: function(child, doUpdate) {

-					array_remove(this.children, child);

-					child.group = null;

-					if (doUpdate) {

-						this.update();

-					}

-				},

-

-				remove: function(doUpdate, removeFromGroup) {

-					for (var i = 0, len = this.children.length; i < len; i++) {

-						this.children[i].remove(false, false);

-					}

-					this.children = [];

-					this.update();

-					if (this === currentGroup) {

-						currentGroup = this.group;

-					}

-					this.doRemove(doUpdate, removeFromGroup);

-				},

-

-				serialize: function(items) {

-					items.push([LogItem.serializedItemKeys.GROUP_START, this.name]);

-					for (var i = 0, len = this.children.length; i < len; i++) {

-						this.children[i].serialize(items);

-					}

-					if (this !== currentGroup) {

-						items.push([LogItem.serializedItemKeys.GROUP_END]);

-					}

-				},

-

-				clear: function() {

-					for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-						this.elementContainers[i].clear();

-					}

-				}

-			});

-

-			/*----------------------------------------------------------------*/

-

-			function LogEntryElementContainer() {

-			}

-

-			LogEntryElementContainer.prototype = new LogItemContainerElement();

-

-			copyProperties(LogEntryElementContainer.prototype, {

-				remove: function() {

-					this.doRemove();

-				},

-

-				doRemove: function() {

-					this.mainDiv.parentNode.removeChild(this.mainDiv);

-					this.mainDiv = null;

-					this.contentElement = null;

-					this.containerDomNode = null;

-				},

-

-				setContent: function(content, wrappedContent) {

-					if (content === this.formattedMessage) {

-						this.contentElement.innerHTML = "";

-						this.contentElement.appendChild(document.createTextNode(this.formattedMessage));

-					} else {

-						this.contentElement.innerHTML = content;

-					}

-				},

-

-				setSearchMatch: function(isMatch) {

-					var oldCssClass = isMatch ? "searchnonmatch" : "searchmatch";

-					var newCssClass = isMatch ? "searchmatch" : "searchnonmatch";

-					replaceClass(this.mainDiv, newCssClass, oldCssClass);

-				},

-

-				clearSearch: function() {

-					removeClass(this.mainDiv, "searchmatch");

-					removeClass(this.mainDiv, "searchnonmatch");

-				}

-			});

-

-			/*----------------------------------------------------------------*/

-

-			function LogEntryWrappedElementContainer(logEntry, containerDomNode) {

-				this.logEntry = logEntry;

-				this.containerDomNode = containerDomNode;

-				this.mainDiv = document.createElement("div");

-				this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));

-				this.mainDiv.className = "logentry wrapped " + this.logEntry.level;

-				this.contentElement = this.mainDiv;

-			}

-

-			LogEntryWrappedElementContainer.prototype = new LogEntryElementContainer();

-

-			LogEntryWrappedElementContainer.prototype.setContent = function(content, wrappedContent) {

-				if (content === this.formattedMessage) {

-					this.contentElement.innerHTML = "";

-					this.contentElement.appendChild(document.createTextNode(this.formattedMessage));

-				} else {

-					this.contentElement.innerHTML = wrappedContent;

-				}

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function LogEntryUnwrappedElementContainer(logEntry, containerDomNode) {

-				this.logEntry = logEntry;

-				this.containerDomNode = containerDomNode;

-				this.mainDiv = document.createElement("div");

-				this.mainDiv.className = "logentry unwrapped " + this.logEntry.level;

-				this.pre = this.mainDiv.appendChild(document.createElement("pre"));

-				this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));

-				this.pre.className = "unwrapped";

-				this.contentElement = this.pre;

-			}

-

-			LogEntryUnwrappedElementContainer.prototype = new LogEntryElementContainer();

-

-			LogEntryUnwrappedElementContainer.prototype.remove = function() {

-				this.doRemove();

-				this.pre = null;

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function LogEntryMainElementContainer(logEntry, containerDomNode) {

-				this.logEntry = logEntry;

-				this.containerDomNode = containerDomNode;

-				this.mainDiv = document.createElement("div");

-				this.mainDiv.className = "logentry nonielogentry " + this.logEntry.level;

-				this.contentElement = this.mainDiv.appendChild(document.createElement("span"));

-				this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));

-			}

-

-			LogEntryMainElementContainer.prototype = new LogEntryElementContainer();

-

-			/*----------------------------------------------------------------*/

-

-			function LogEntry(level, formattedMessage) {

-				this.level = level;

-				this.formattedMessage = formattedMessage;

-				this.rendered = false;

-			}

-

-			LogEntry.prototype = new LogItem();

-

-			copyProperties(LogEntry.prototype, {

-				render: function() {

-					var logEntry = this;

-					var containerDomNode = this.group.contentDiv;

-

-					// Support for the CSS attribute white-space in IE for Windows is

-					// non-existent pre version 6 and slightly odd in 6, so instead

-					// use two different HTML elements

-					if (isIe) {

-						this.formattedMessage = this.formattedMessage.replace(/\r\n/g, "\r"); // Workaround for IE's treatment of white space

-						this.unwrappedElementContainer = new LogEntryUnwrappedElementContainer(this, this.getUnwrappedDomContainer());

-						this.wrappedElementContainer = new LogEntryWrappedElementContainer(this, this.getWrappedDomContainer());

-						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];

-					} else {

-						this.mainElementContainer = new LogEntryMainElementContainer(this, this.getMainDomContainer());

-						this.elementContainers = [this.mainElementContainer];

-					}

-					this.content = this.formattedMessage;

-					this.rendered = true;

-				},

-

-				setContent: function(content, wrappedContent) {

-					if (content != this.content) {

-						if (isIe && (content !== this.formattedMessage)) {

-							content = content.replace(/\r\n/g, "\r"); // Workaround for IE's treatment of white space

-						}

-						for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-							this.elementContainers[i].setContent(content, wrappedContent);

-						}

-						this.content = content;

-					}

-				},

-

-				getSearchMatches: function() {

-					var matches = [];

-					var i, len;

-					if (isIe) {

-						var unwrappedEls = getElementsByClass(this.unwrappedElementContainer.mainDiv, "searchterm", "span");

-						var wrappedEls = getElementsByClass(this.wrappedElementContainer.mainDiv, "searchterm", "span");

-						for (i = 0, len = unwrappedEls.length; i < len; i++) {

-							matches[i] = new Match(this.level, null, unwrappedEls[i], wrappedEls[i]);

-						}

-					} else {

-						var els = getElementsByClass(this.mainElementContainer.mainDiv, "searchterm", "span");

-						for (i = 0, len = els.length; i < len; i++) {

-							matches[i] = new Match(this.level, els[i]);

-						}

-					}

-					return matches;

-				},

-

-				setSearchMatch: function(isMatch) {

-					for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-						this.elementContainers[i].setSearchMatch(isMatch);

-					}

-				},

-

-				clearSearch: function() {

-					for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-						this.elementContainers[i].clearSearch();

-					}

-				},

-

-				accept: function(visitor) {

-					visitor.visitLogEntry(this);

-				},

-

-				serialize: function(items) {

-					items.push([LogItem.serializedItemKeys.LOG_ENTRY, this.level, this.formattedMessage]);

-				}

-			});

-

-			/*----------------------------------------------------------------*/

-

-			function LogItemVisitor() {

-			}

-

-			LogItemVisitor.prototype = {

-				visit: function(logItem) {

-				},

-

-				visitParent: function(logItem) {

-					if (logItem.group) {

-						logItem.group.accept(this);

-					}

-				},

-

-				visitChildren: function(logItem) {

-					for (var i = 0, len = logItem.children.length; i < len; i++) {

-						logItem.children[i].accept(this);

-					}

-				},

-

-				visitLogEntry: function(logEntry) {

-					this.visit(logEntry);

-				},

-

-				visitSeparator: function(separator) {

-					this.visit(separator);

-				},

-

-				visitGroup: function(group) {

-					this.visit(group);

-				}

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function GroupFlattener() {

-				this.logEntriesAndSeparators = [];

-			}

-

-			GroupFlattener.prototype = new LogItemVisitor();

-

-			GroupFlattener.prototype.visitGroup = function(group) {

-				this.visitChildren(group);

-			};

-

-			GroupFlattener.prototype.visitLogEntry = function(logEntry) {

-				this.logEntriesAndSeparators.push(logEntry);

-			};

-

-			GroupFlattener.prototype.visitSeparator = function(separator) {

-				this.logEntriesAndSeparators.push(separator);

-			};

-

-			/*----------------------------------------------------------------*/

-

-			window.onload = function() {

-				// Sort out document.domain

-				if (location.search) {

-					var queryBits = unescape(location.search).substr(1).split("&"), nameValueBits;

-					for (var i = 0, len = queryBits.length; i < len; i++) {

-						nameValueBits = queryBits[i].split("=");

-						if (nameValueBits[0] == "log4javascript_domain") {

-							document.domain = nameValueBits[1];

-							break;

-						}

-					}

-				}

-

-				// Create DOM objects

-				logMainContainer = $("log");

-				if (isIePre7) {

-					addClass(logMainContainer, "oldIe");

-				}

-

-				rootGroup = new Group("root", true);

-				rootGroup.render();

-				currentGroup = rootGroup;

-				

-				setCommandInputWidth();

-				setLogContainerHeight();

-				toggleLoggingEnabled();

-				toggleSearchEnabled();

-				toggleSearchFilter();

-				toggleSearchHighlight();

-				applyFilters();

-				checkAllLevels();

-				toggleWrap();

-				toggleNewestAtTop();

-				toggleScrollToLatest();

-				renderQueuedLogItems();

-				loaded = true;

-				$("command").value = "";

-				$("command").autocomplete = "off";

-				$("command").onkeydown = function(evt) {

-					evt = getEvent(evt);

-					if (evt.keyCode == 10 || evt.keyCode == 13) { // Return/Enter

-						evalCommandLine();

-						stopPropagation(evt);

-					} else if (evt.keyCode == 27) { // Escape

-						this.value = "";

-						this.focus();

-					} else if (evt.keyCode == 38 && commandHistory.length > 0) { // Up

-						currentCommandIndex = Math.max(0, currentCommandIndex - 1);

-						this.value = commandHistory[currentCommandIndex];

-						moveCaretToEnd(this);

-					} else if (evt.keyCode == 40 && commandHistory.length > 0) { // Down

-						currentCommandIndex = Math.min(commandHistory.length - 1, currentCommandIndex + 1);

-						this.value = commandHistory[currentCommandIndex];

-						moveCaretToEnd(this);

-					}

-				};

-

-				// Prevent the keypress moving the caret in Firefox

-				$("command").onkeypress = function(evt) {

-					evt = getEvent(evt);

-					if (evt.keyCode == 38 && commandHistory.length > 0 && evt.preventDefault) { // Up

-						evt.preventDefault();

-					}

-				};

-

-				// Prevent the keyup event blurring the input in Opera

-				$("command").onkeyup = function(evt) {

-					evt = getEvent(evt);

-					if (evt.keyCode == 27 && evt.preventDefault) { // Up

-						evt.preventDefault();

-						this.focus();

-					}

-				};

-

-				// Add document keyboard shortcuts

-				document.onkeydown = function keyEventHandler(evt) {

-					evt = getEvent(evt);

-					switch (evt.keyCode) {

-						case 69: // Ctrl + shift + E: re-execute last command

-							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {

-								evalLastCommand();

-								cancelKeyEvent(evt);

-								return false;

-							}

-							break;

-						case 75: // Ctrl + shift + K: focus search

-							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {

-								focusSearch();

-								cancelKeyEvent(evt);

-								return false;

-							}

-							break;

-						case 40: // Ctrl + shift + down arrow: focus command line

-						case 76: // Ctrl + shift + L: focus command line

-							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {

-								focusCommandLine();

-								cancelKeyEvent(evt);

-								return false;

-							}

-							break;

-					}

-				};

-

-				// Workaround to make sure log div starts at the correct size

-				setTimeout(setLogContainerHeight, 20);

-

-				setShowCommandLine(showCommandLine);

-				doSearch();

-			};

-

-			window.onunload = function() {

-				if (mainWindowExists()) {

-					appender.unload();

-				}

-				appender = null;

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function toggleLoggingEnabled() {

-				setLoggingEnabled($("enableLogging").checked);

-			}

-

-			function setLoggingEnabled(enable) {

-				loggingEnabled = enable;

-			}

-

-			var appender = null;

-

-			function setAppender(appenderParam) {

-				appender = appenderParam;

-			}

-

-			function setShowCloseButton(showCloseButton) {

-				$("closeButton").style.display = showCloseButton ? "inline" : "none";

-			}

-

-			function setShowHideButton(showHideButton) {

-				$("hideButton").style.display = showHideButton ? "inline" : "none";

-			}

-

-			var newestAtTop = false;

-

-			/*----------------------------------------------------------------*/

-

-			function LogItemContentReverser() {

-			}

-			

-			LogItemContentReverser.prototype = new LogItemVisitor();

-			

-			LogItemContentReverser.prototype.visitGroup = function(group) {

-				group.reverseChildren();

-				this.visitChildren(group);

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function setNewestAtTop(isNewestAtTop) {

-				var oldNewestAtTop = newestAtTop;

-				var i, iLen, j, jLen;

-				newestAtTop = Boolean(isNewestAtTop);

-				if (oldNewestAtTop != newestAtTop) {

-					var visitor = new LogItemContentReverser();

-					rootGroup.accept(visitor);

-

-					// Reassemble the matches array

-					if (currentSearch) {

-						var currentMatch = currentSearch.matches[currentMatchIndex];

-						var matchIndex = 0;

-						var matches = [];

-						var actOnLogEntry = function(logEntry) {

-							var logEntryMatches = logEntry.getSearchMatches();

-							for (j = 0, jLen = logEntryMatches.length; j < jLen; j++) {

-								matches[matchIndex] = logEntryMatches[j];

-								if (currentMatch && logEntryMatches[j].equals(currentMatch)) {

-									currentMatchIndex = matchIndex;

-								}

-								matchIndex++;

-							}

-						};

-						if (newestAtTop) {

-							for (i = logEntries.length - 1; i >= 0; i--) {

-								actOnLogEntry(logEntries[i]);

-							}

-						} else {

-							for (i = 0, iLen = logEntries.length; i < iLen; i++) {

-								actOnLogEntry(logEntries[i]);

-							}

-						}

-						currentSearch.matches = matches;

-						if (currentMatch) {

-							currentMatch.setCurrent();

-						}

-					} else if (scrollToLatest) {

-						doScrollToLatest();

-					}

-				}

-				$("newestAtTop").checked = isNewestAtTop;

-			}

-

-			function toggleNewestAtTop() {

-				var isNewestAtTop = $("newestAtTop").checked;

-				setNewestAtTop(isNewestAtTop);

-			}

-

-			var scrollToLatest = true;

-

-			function setScrollToLatest(isScrollToLatest) {

-				scrollToLatest = isScrollToLatest;

-				if (scrollToLatest) {

-					doScrollToLatest();

-				}

-				$("scrollToLatest").checked = isScrollToLatest;

-			}

-

-			function toggleScrollToLatest() {

-				var isScrollToLatest = $("scrollToLatest").checked;

-				setScrollToLatest(isScrollToLatest);

-			}

-

-			function doScrollToLatest() {

-				var l = logMainContainer;

-				if (typeof l.scrollTop != "undefined") {

-					if (newestAtTop) {

-						l.scrollTop = 0;

-					} else {

-						var latestLogEntry = l.lastChild;

-						if (latestLogEntry) {

-							l.scrollTop = l.scrollHeight;

-						}

-					}

-				}

-			}

-

-			var closeIfOpenerCloses = true;

-

-			function setCloseIfOpenerCloses(isCloseIfOpenerCloses) {

-				closeIfOpenerCloses = isCloseIfOpenerCloses;

-			}

-

-			var maxMessages = null;

-

-			function setMaxMessages(max) {

-				maxMessages = max;

-				pruneLogEntries();

-			}

-

-			var showCommandLine = false;

-

-			function setShowCommandLine(isShowCommandLine) {

-				showCommandLine = isShowCommandLine;

-				if (loaded) {

-					$("commandLine").style.display = showCommandLine ? "block" : "none";

-					setCommandInputWidth();

-					setLogContainerHeight();

-				}

-			}

-

-			function focusCommandLine() {

-				if (loaded) {

-					$("command").focus();

-				}

-			}

-

-			function focusSearch() {

-				if (loaded) {

-					$("searchBox").focus();

-				}

-			}

-

-			function getLogItems() {

-				var items = [];

-				for (var i = 0, len = logItems.length; i < len; i++) {

-					logItems[i].serialize(items);

-				}

-				return items;

-			}

-

-			function setLogItems(items) {

-				var loggingReallyEnabled = loggingEnabled;

-				// Temporarily turn logging on

-				loggingEnabled = true;

-				for (var i = 0, len = items.length; i < len; i++) {

-					switch (items[i][0]) {

-						case LogItem.serializedItemKeys.LOG_ENTRY:

-							log(items[i][1], items[i][2]);

-							break;

-						case LogItem.serializedItemKeys.GROUP_START:

-							group(items[i][1]);

-							break;

-						case LogItem.serializedItemKeys.GROUP_END:

-							groupEnd();

-							break;

-					}

-				}

-				loggingEnabled = loggingReallyEnabled;

-			}

-

-			function log(logLevel, formattedMessage) {

-				if (loggingEnabled) {

-					var logEntry = new LogEntry(logLevel, formattedMessage);

-					logEntries.push(logEntry);

-					logEntriesAndSeparators.push(logEntry);

-					logItems.push(logEntry);

-					currentGroup.addChild(logEntry);

-					if (loaded) {

-						if (logQueuedEventsTimer !== null) {

-							clearTimeout(logQueuedEventsTimer);

-						}

-						logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);

-						unrenderedLogItemsExist = true;

-					}

-				}

-			}

-

-			function renderQueuedLogItems() {

-				logQueuedEventsTimer = null;

-				var pruned = pruneLogEntries();

-

-				// Render any unrendered log entries and apply the current search to them

-				var initiallyHasMatches = currentSearch ? currentSearch.hasMatches() : false;

-				for (var i = 0, len = logItems.length; i < len; i++) {

-					if (!logItems[i].rendered) {

-						logItems[i].render();

-						logItems[i].appendToLog();

-						if (currentSearch && (logItems[i] instanceof LogEntry)) {

-							currentSearch.applyTo(logItems[i]);

-						}

-					}

-				}

-				if (currentSearch) {

-					if (pruned) {

-						if (currentSearch.hasVisibleMatches()) {

-							if (currentMatchIndex === null) {

-								setCurrentMatchIndex(0);

-							}

-							displayMatches();

-						} else {

-							displayNoMatches();

-						}

-					} else if (!initiallyHasMatches && currentSearch.hasVisibleMatches()) {

-						setCurrentMatchIndex(0);

-						displayMatches();

-					}

-				}

-				if (scrollToLatest) {

-					doScrollToLatest();

-				}

-				unrenderedLogItemsExist = false;

-			}

-

-			function pruneLogEntries() {

-				if ((maxMessages !== null) && (logEntriesAndSeparators.length > maxMessages)) {

-					var numberToDelete = logEntriesAndSeparators.length - maxMessages;

-					var prunedLogEntries = logEntriesAndSeparators.slice(0, numberToDelete);

-					if (currentSearch) {

-						currentSearch.removeMatches(prunedLogEntries);

-					}

-					var group;

-					for (var i = 0; i < numberToDelete; i++) {

-						group = logEntriesAndSeparators[i].group;

-						array_remove(logItems, logEntriesAndSeparators[i]);

-						array_remove(logEntries, logEntriesAndSeparators[i]);

-						logEntriesAndSeparators[i].remove(true, true);

-						if (group.children.length === 0 && group !== currentGroup && group !== rootGroup) {

-							array_remove(logItems, group);

-							group.remove(true, true);

-						}

-					}

-					logEntriesAndSeparators = array_removeFromStart(logEntriesAndSeparators, numberToDelete);

-					return true;

-				}

-				return false;

-			}

-

-			function group(name, startExpanded) {

-				if (loggingEnabled) {

-					initiallyExpanded = (typeof startExpanded === "undefined") ? true : Boolean(startExpanded);

-					var newGroup = new Group(name, false, initiallyExpanded);

-					currentGroup.addChild(newGroup);

-					currentGroup = newGroup;

-					logItems.push(newGroup);

-					if (loaded) {

-						if (logQueuedEventsTimer !== null) {

-							clearTimeout(logQueuedEventsTimer);

-						}

-						logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);

-						unrenderedLogItemsExist = true;

-					}

-				}

-			}

-

-			function groupEnd() {

-				currentGroup = (currentGroup === rootGroup) ? rootGroup : currentGroup.group;

-			}

-

-			function mainPageReloaded() {

-				currentGroup = rootGroup;

-				var separator = new Separator();

-				logEntriesAndSeparators.push(separator);

-				logItems.push(separator);

-				currentGroup.addChild(separator);

-			}

-

-			function closeWindow() {

-				if (appender && mainWindowExists()) {

-					appender.close(true);

-				} else {

-					window.close();

-				}

-			}

-

-			function hide() {

-				if (appender && mainWindowExists()) {

-					appender.hide();

-				}

-			}

-

-			var mainWindow = window;

-			var windowId = "log4javascriptConsoleWindow_" + new Date().getTime() + "_" + ("" + Math.random()).substr(2);

-

-			function setMainWindow(win) {

-				mainWindow = win;

-				mainWindow[windowId] = window;

-				// If this is a pop-up, poll the opener to see if it's closed

-				if (opener && closeIfOpenerCloses) {

-					pollOpener();

-				}

-			}

-

-			function pollOpener() {

-				if (closeIfOpenerCloses) {

-					if (mainWindowExists()) {

-						setTimeout(pollOpener, 500);

-					} else {

-						closeWindow();

-					}

-				}

-			}

-

-			function mainWindowExists() {

-				try {

-					return (mainWindow && !mainWindow.closed &&

-						mainWindow[windowId] == window);

-				} catch (ex) {}

-				return false;

-			}

-

-			var logLevels = ["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"];

-

-			function getCheckBox(logLevel) {

-				return $("switch_" + logLevel);

-			}

-

-			function getIeWrappedLogContainer() {

-				return $("log_wrapped");

-			}

-

-			function getIeUnwrappedLogContainer() {

-				return $("log_unwrapped");

-			}

-

-			function applyFilters() {

-				for (var i = 0; i < logLevels.length; i++) {

-					if (getCheckBox(logLevels[i]).checked) {

-						addClass(logMainContainer, logLevels[i]);

-					} else {

-						removeClass(logMainContainer, logLevels[i]);

-					}

-				}

-				updateSearchFromFilters();

-			}

-

-			function toggleAllLevels() {

-				var turnOn = $("switch_ALL").checked;

-				for (var i = 0; i < logLevels.length; i++) {

-					getCheckBox(logLevels[i]).checked = turnOn;

-					if (turnOn) {

-						addClass(logMainContainer, logLevels[i]);

-					} else {

-						removeClass(logMainContainer, logLevels[i]);

-					}

-				}

-			}

-

-			function checkAllLevels() {

-				for (var i = 0; i < logLevels.length; i++) {

-					if (!getCheckBox(logLevels[i]).checked) {

-						getCheckBox("ALL").checked = false;

-						return;

-					}

-				}

-				getCheckBox("ALL").checked = true;

-			}

-

-			function clearLog() {

-				rootGroup.clear();

-				currentGroup = rootGroup;

-				logEntries = [];

-				logItems = [];

-				logEntriesAndSeparators = [];

- 				doSearch();

-			}

-

-			function toggleWrap() {

-				var enable = $("wrap").checked;

-				if (enable) {

-					addClass(logMainContainer, "wrap");

-				} else {

-					removeClass(logMainContainer, "wrap");

-				}

-				refreshCurrentMatch();

-			}

-

-			/* ------------------------------------------------------------------- */

-

-			// Search

-

-			var searchTimer = null;

-

-			function scheduleSearch() {

-				try {

-					clearTimeout(searchTimer);

-				} catch (ex) {

-					// Do nothing

-				}

-				searchTimer = setTimeout(doSearch, 500);

-			}

-

-			function Search(searchTerm, isRegex, searchRegex, isCaseSensitive) {

-				this.searchTerm = searchTerm;

-				this.isRegex = isRegex;

-				this.searchRegex = searchRegex;

-				this.isCaseSensitive = isCaseSensitive;

-				this.matches = [];

-			}

-

-			Search.prototype = {

-				hasMatches: function() {

-					return this.matches.length > 0;

-				},

-

-				hasVisibleMatches: function() {

-					if (this.hasMatches()) {

-						for (var i = 0; i < this.matches.length; i++) {

-							if (this.matches[i].isVisible()) {

-								return true;

-							}

-						}

-					}

-					return false;

-				},

-

-				match: function(logEntry) {

-					var entryText = String(logEntry.formattedMessage);

-					var matchesSearch = false;

-					if (this.isRegex) {

-						matchesSearch = this.searchRegex.test(entryText);

-					} else if (this.isCaseSensitive) {

-						matchesSearch = (entryText.indexOf(this.searchTerm) > -1);

-					} else {

-						matchesSearch = (entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1);

-					}

-					return matchesSearch;

-				},

-

-				getNextVisibleMatchIndex: function() {

-					for (var i = currentMatchIndex + 1; i < this.matches.length; i++) {

-						if (this.matches[i].isVisible()) {

-							return i;

-						}

-					}

-					// Start again from the first match

-					for (i = 0; i <= currentMatchIndex; i++) {

-						if (this.matches[i].isVisible()) {

-							return i;

-						}

-					}

-					return -1;

-				},

-

-				getPreviousVisibleMatchIndex: function() {

-					for (var i = currentMatchIndex - 1; i >= 0; i--) {

-						if (this.matches[i].isVisible()) {

-							return i;

-						}

-					}

-					// Start again from the last match

-					for (var i = this.matches.length - 1; i >= currentMatchIndex; i--) {

-						if (this.matches[i].isVisible()) {

-							return i;

-						}

-					}

-					return -1;

-				},

-

-				applyTo: function(logEntry) {

-					var doesMatch = this.match(logEntry);

-					if (doesMatch) {

-						logEntry.group.expand();

-						logEntry.setSearchMatch(true);

-						var logEntryContent;

-						var wrappedLogEntryContent;

-						var searchTermReplacementStartTag = "<span class=\"searchterm\">";

-						var searchTermReplacementEndTag = "<" + "/span>";

-						var preTagName = isIe ? "pre" : "span";

-						var preStartTag = "<" + preTagName + " class=\"pre\">";

-						var preEndTag = "<" + "/" + preTagName + ">";

-						var startIndex = 0;

-						var searchIndex, matchedText, textBeforeMatch;

-						if (this.isRegex) {

-							var flags = this.isCaseSensitive ? "g" : "gi";

-							var capturingRegex = new RegExp("(" + this.searchRegex.source + ")", flags);

-

-							// Replace the search term with temporary tokens for the start and end tags

-							var rnd = ("" + Math.random()).substr(2);

-							var startToken = "%%s" + rnd + "%%";

-							var endToken = "%%e" + rnd + "%%";

-							logEntryContent = logEntry.formattedMessage.replace(capturingRegex, startToken + "$1" + endToken);

-

-							// Escape the HTML to get rid of angle brackets

-							logEntryContent = escapeHtml(logEntryContent);

-

-							// Substitute the proper HTML back in for the search match

-							var result;

-							var searchString = logEntryContent;

-							logEntryContent = "";

-							wrappedLogEntryContent = "";

-							while ((searchIndex = searchString.indexOf(startToken, startIndex)) > -1) {

-								var endTokenIndex = searchString.indexOf(endToken, searchIndex);

-								matchedText = searchString.substring(searchIndex + startToken.length, endTokenIndex);

-								textBeforeMatch = searchString.substring(startIndex, searchIndex);

-								logEntryContent += preStartTag + textBeforeMatch + preEndTag;

-								logEntryContent += searchTermReplacementStartTag + preStartTag + matchedText +

-									preEndTag + searchTermReplacementEndTag;

-								if (isIe) {

-									wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +

-										matchedText + searchTermReplacementEndTag;

-								}

-								startIndex = endTokenIndex + endToken.length;

-							}

-							logEntryContent += preStartTag + searchString.substr(startIndex) + preEndTag;

-							if (isIe) {

-								wrappedLogEntryContent += searchString.substr(startIndex);

-							}

-						} else {

-							logEntryContent = "";

-							wrappedLogEntryContent = "";

-							var searchTermReplacementLength = searchTermReplacementStartTag.length +

-								this.searchTerm.length + searchTermReplacementEndTag.length;

-							var searchTermLength = this.searchTerm.length;

-							var searchTermLowerCase = this.searchTerm.toLowerCase();

-							var logTextLowerCase = logEntry.formattedMessage.toLowerCase();

-							while ((searchIndex = logTextLowerCase.indexOf(searchTermLowerCase, startIndex)) > -1) {

-								matchedText = escapeHtml(logEntry.formattedMessage.substr(searchIndex, this.searchTerm.length));

-								textBeforeMatch = escapeHtml(logEntry.formattedMessage.substring(startIndex, searchIndex));

-								var searchTermReplacement = searchTermReplacementStartTag +

-									preStartTag + matchedText + preEndTag + searchTermReplacementEndTag;

-								logEntryContent += preStartTag + textBeforeMatch + preEndTag + searchTermReplacement;

-								if (isIe) {

-									wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +

-										matchedText + searchTermReplacementEndTag;

-								}

-								startIndex = searchIndex + searchTermLength;

-							}

-							var textAfterLastMatch = escapeHtml(logEntry.formattedMessage.substr(startIndex));

-							logEntryContent += preStartTag + textAfterLastMatch + preEndTag;

-							if (isIe) {

-								wrappedLogEntryContent += textAfterLastMatch;

-							}

-						}

-						logEntry.setContent(logEntryContent, wrappedLogEntryContent);

-						var logEntryMatches = logEntry.getSearchMatches();

-						this.matches = this.matches.concat(logEntryMatches);

-					} else {

-						logEntry.setSearchMatch(false);

-						logEntry.setContent(logEntry.formattedMessage, logEntry.formattedMessage);

-					}

-					return doesMatch;

-				},

-

-				removeMatches: function(logEntries) {

-					var matchesToRemoveCount = 0;

-					var currentMatchRemoved = false;

-					var matchesToRemove = [];

-					var i, iLen, j, jLen;

-

-					// Establish the list of matches to be removed

-					for (i = 0, iLen = this.matches.length; i < iLen; i++) {

-						for (j = 0, jLen = logEntries.length; j < jLen; j++) {

-							if (this.matches[i].belongsTo(logEntries[j])) {

-								matchesToRemove.push(this.matches[i]);

-								if (i === currentMatchIndex) {

-									currentMatchRemoved = true;

-								}

-							}

-						}

-					}

-

-					// Set the new current match index if the current match has been deleted

-					// This will be the first match that appears after the first log entry being

-					// deleted, if one exists; otherwise, it's the first match overall

-					var newMatch = currentMatchRemoved ? null : this.matches[currentMatchIndex];

-					if (currentMatchRemoved) {

-						for (i = currentMatchIndex, iLen = this.matches.length; i < iLen; i++) {

-							if (this.matches[i].isVisible() && !array_contains(matchesToRemove, this.matches[i])) {

-								newMatch = this.matches[i];

-								break;

-							}

-						}

-					}

-

-					// Remove the matches

-					for (i = 0, iLen = matchesToRemove.length; i < iLen; i++) {

-						array_remove(this.matches, matchesToRemove[i]);

-						matchesToRemove[i].remove();

-					}

-

-					// Set the new match, if one exists

-					if (this.hasVisibleMatches()) {

-						if (newMatch === null) {

-							setCurrentMatchIndex(0);

-						} else {

-							// Get the index of the new match

-							var newMatchIndex = 0;

-							for (i = 0, iLen = this.matches.length; i < iLen; i++) {

-								if (newMatch === this.matches[i]) {

-									newMatchIndex = i;

-									break;

-								}

-							}

-							setCurrentMatchIndex(newMatchIndex);

-						}

-					} else {

-						currentMatchIndex = null;

-						displayNoMatches();

-					}

-				}

-			};

-

-			function getPageOffsetTop(el, container) {

-				var currentEl = el;

-				var y = 0;

-				while (currentEl && currentEl != container) {

-					y += currentEl.offsetTop;

-					currentEl = currentEl.offsetParent;

-				}

-				return y;

-			}

-

-			function scrollIntoView(el) {

-				var logContainer = logMainContainer;

-				// Check if the whole width of the element is visible and centre if not

-				if (!$("wrap").checked) {

-					var logContainerLeft = logContainer.scrollLeft;

-					var logContainerRight = logContainerLeft  + logContainer.offsetWidth;

-					var elLeft = el.offsetLeft;

-					var elRight = elLeft + el.offsetWidth;

-					if (elLeft < logContainerLeft || elRight > logContainerRight) {

-						logContainer.scrollLeft = elLeft - (logContainer.offsetWidth - el.offsetWidth) / 2;

-					}

-				}

-				// Check if the whole height of the element is visible and centre if not

-				var logContainerTop = logContainer.scrollTop;

-				var logContainerBottom = logContainerTop  + logContainer.offsetHeight;

-				var elTop = getPageOffsetTop(el) - getToolBarsHeight();

-				var elBottom = elTop + el.offsetHeight;

-				if (elTop < logContainerTop || elBottom > logContainerBottom) {

-					logContainer.scrollTop = elTop - (logContainer.offsetHeight - el.offsetHeight) / 2;

-				}

-			}

-

-			function Match(logEntryLevel, spanInMainDiv, spanInUnwrappedPre, spanInWrappedDiv) {

-				this.logEntryLevel = logEntryLevel;

-				this.spanInMainDiv = spanInMainDiv;

-				if (isIe) {

-					this.spanInUnwrappedPre = spanInUnwrappedPre;

-					this.spanInWrappedDiv = spanInWrappedDiv;

-				}

-				this.mainSpan = isIe ? spanInUnwrappedPre : spanInMainDiv;

-			}

-

-			Match.prototype = {

-				equals: function(match) {

-					return this.mainSpan === match.mainSpan;

-				},

-

-				setCurrent: function() {

-					if (isIe) {

-						addClass(this.spanInUnwrappedPre, "currentmatch");

-						addClass(this.spanInWrappedDiv, "currentmatch");

-						// Scroll the visible one into view

-						var elementToScroll = $("wrap").checked ? this.spanInWrappedDiv : this.spanInUnwrappedPre;

-						scrollIntoView(elementToScroll);

-					} else {

-						addClass(this.spanInMainDiv, "currentmatch");

-						scrollIntoView(this.spanInMainDiv);

-					}

-				},

-

-				belongsTo: function(logEntry) {

-					if (isIe) {

-						return isDescendant(this.spanInUnwrappedPre, logEntry.unwrappedPre);

-					} else {

-						return isDescendant(this.spanInMainDiv, logEntry.mainDiv);

-					}

-				},

-

-				setNotCurrent: function() {

-					if (isIe) {

-						removeClass(this.spanInUnwrappedPre, "currentmatch");

-						removeClass(this.spanInWrappedDiv, "currentmatch");

-					} else {

-						removeClass(this.spanInMainDiv, "currentmatch");

-					}

-				},

-

-				isOrphan: function() {

-					return isOrphan(this.mainSpan);

-				},

-

-				isVisible: function() {

-					return getCheckBox(this.logEntryLevel).checked;

-				},

-

-				remove: function() {

-					if (isIe) {

-						this.spanInUnwrappedPre = null;

-						this.spanInWrappedDiv = null;

-					} else {

-						this.spanInMainDiv = null;

-					}

-				}

-			};

-

-			var currentSearch = null;

-			var currentMatchIndex = null;

-

-			function doSearch() {

-				var searchBox = $("searchBox");

-				var searchTerm = searchBox.value;

-				var isRegex = $("searchRegex").checked;

-				var isCaseSensitive = $("searchCaseSensitive").checked;

-				var i;

-

-				if (searchTerm === "") {

-					$("searchReset").disabled = true;

-					$("searchNav").style.display = "none";

-					removeClass(document.body, "searching");

-					removeClass(searchBox, "hasmatches");

-					removeClass(searchBox, "nomatches");

-					for (i = 0; i < logEntries.length; i++) {

-						logEntries[i].clearSearch();

-						logEntries[i].setContent(logEntries[i].formattedMessage, logEntries[i].formattedMessage);

-					}

-					currentSearch = null;

-					setLogContainerHeight();

-				} else {

-					$("searchReset").disabled = false;

-					$("searchNav").style.display = "block";

-					var searchRegex;

-					var regexValid;

-					if (isRegex) {

-						try {

-							searchRegex = isCaseSensitive ? new RegExp(searchTerm, "g") : new RegExp(searchTerm, "gi");

-							regexValid = true;

-							replaceClass(searchBox, "validregex", "invalidregex");

-							searchBox.title = "Valid regex";

-						} catch (ex) {

-							regexValid = false;

-							replaceClass(searchBox, "invalidregex", "validregex");

-							searchBox.title = "Invalid regex: " + (ex.message ? ex.message : (ex.description ? ex.description : "unknown error"));

-							return;

-						}

-					} else {

-						searchBox.title = "";

-						removeClass(searchBox, "validregex");

-						removeClass(searchBox, "invalidregex");

-					}

-					addClass(document.body, "searching");

-					currentSearch = new Search(searchTerm, isRegex, searchRegex, isCaseSensitive);

-					for (i = 0; i < logEntries.length; i++) {

-						currentSearch.applyTo(logEntries[i]);

-					}

-					setLogContainerHeight();

-

-					// Highlight the first search match

-					if (currentSearch.hasVisibleMatches()) {

-						setCurrentMatchIndex(0);

-						displayMatches();

-					} else {

-						displayNoMatches();

-					}

-				}

-			}

-

-			function updateSearchFromFilters() {

-				if (currentSearch) {

-					if (currentSearch.hasMatches()) {

-						if (currentMatchIndex === null) {

-							currentMatchIndex = 0;

-						}

-						var currentMatch = currentSearch.matches[currentMatchIndex];

-						if (currentMatch.isVisible()) {

-							displayMatches();

-							setCurrentMatchIndex(currentMatchIndex);

-						} else {

-							currentMatch.setNotCurrent();

-							// Find the next visible match, if one exists

-							var nextVisibleMatchIndex = currentSearch.getNextVisibleMatchIndex();

-							if (nextVisibleMatchIndex > -1) {

-								setCurrentMatchIndex(nextVisibleMatchIndex);

-								displayMatches();

-							} else {

-								displayNoMatches();

-							}

-						}

-					} else {

-						displayNoMatches();

-					}

-				}

-			}

-

-			function refreshCurrentMatch() {

-				if (currentSearch && currentSearch.hasVisibleMatches()) {

-					setCurrentMatchIndex(currentMatchIndex);

-				}

-			}

-

-			function displayMatches() {

-				replaceClass($("searchBox"), "hasmatches", "nomatches");

-				$("searchBox").title = "" + currentSearch.matches.length + " matches found";

-				$("searchNav").style.display = "block";

-				setLogContainerHeight();

-			}

-

-			function displayNoMatches() {

-				replaceClass($("searchBox"), "nomatches", "hasmatches");

-				$("searchBox").title = "No matches found";

-				$("searchNav").style.display = "none";

-				setLogContainerHeight();

-			}

-

-			function toggleSearchEnabled(enable) {

-				enable = (typeof enable == "undefined") ? !$("searchDisable").checked : enable;

-				$("searchBox").disabled = !enable;

-				$("searchReset").disabled = !enable;

-				$("searchRegex").disabled = !enable;

-				$("searchNext").disabled = !enable;

-				$("searchPrevious").disabled = !enable;

-				$("searchCaseSensitive").disabled = !enable;

-				$("searchNav").style.display = (enable && ($("searchBox").value !== "") &&

-						currentSearch && currentSearch.hasVisibleMatches()) ?

-					"block" : "none";

-				if (enable) {

-					removeClass($("search"), "greyedout");

-					addClass(document.body, "searching");

-					if ($("searchHighlight").checked) {

-						addClass(logMainContainer, "searchhighlight");

-					} else {

-						removeClass(logMainContainer, "searchhighlight");

-					}

-					if ($("searchFilter").checked) {

-						addClass(logMainContainer, "searchfilter");

-					} else {

-						removeClass(logMainContainer, "searchfilter");

-					}

-					$("searchDisable").checked = !enable;

-				} else {

-					addClass($("search"), "greyedout");

-					removeClass(document.body, "searching");

-					removeClass(logMainContainer, "searchhighlight");

-					removeClass(logMainContainer, "searchfilter");

-				}

-				setLogContainerHeight();

-			}

-

-			function toggleSearchFilter() {

-				var enable = $("searchFilter").checked;

-				if (enable) {

-					addClass(logMainContainer, "searchfilter");

-				} else {

-					removeClass(logMainContainer, "searchfilter");

-				}

-				refreshCurrentMatch();

-			}

-

-			function toggleSearchHighlight() {

-				var enable = $("searchHighlight").checked;

-				if (enable) {

-					addClass(logMainContainer, "searchhighlight");

-				} else {

-					removeClass(logMainContainer, "searchhighlight");

-				}

-			}

-

-			function clearSearch() {

-				$("searchBox").value = "";

-				doSearch();

-			}

-

-			function searchNext() {

-				if (currentSearch !== null && currentMatchIndex !== null) {

-					currentSearch.matches[currentMatchIndex].setNotCurrent();

-					var nextMatchIndex = currentSearch.getNextVisibleMatchIndex();

-					if (nextMatchIndex > currentMatchIndex || confirm("Reached the end of the page. Start from the top?")) {

-						setCurrentMatchIndex(nextMatchIndex);

-					}

-				}

-			}

-

-			function searchPrevious() {

-				if (currentSearch !== null && currentMatchIndex !== null) {

-					currentSearch.matches[currentMatchIndex].setNotCurrent();

-					var previousMatchIndex = currentSearch.getPreviousVisibleMatchIndex();

-					if (previousMatchIndex < currentMatchIndex || confirm("Reached the start of the page. Continue from the bottom?")) {

-						setCurrentMatchIndex(previousMatchIndex);

-					}

-				}

-			}

-

-			function setCurrentMatchIndex(index) {

-				currentMatchIndex = index;

-				currentSearch.matches[currentMatchIndex].setCurrent();

-			}

-

-			/* ------------------------------------------------------------------------- */

-

-			// CSS Utilities

-

-			function addClass(el, cssClass) {

-				if (!hasClass(el, cssClass)) {

-					if (el.className) {

-						el.className += " " + cssClass;

-					} else {

-						el.className = cssClass;

-					}

-				}

-			}

-

-			function hasClass(el, cssClass) {

-				if (el.className) {

-					var classNames = el.className.split(" ");

-					return array_contains(classNames, cssClass);

-				}

-				return false;

-			}

-

-			function removeClass(el, cssClass) {

-				if (hasClass(el, cssClass)) {

-					// Rebuild the className property

-					var existingClasses = el.className.split(" ");

-					var newClasses = [];

-					for (var i = 0, len = existingClasses.length; i < len; i++) {

-						if (existingClasses[i] != cssClass) {

-							newClasses[newClasses.length] = existingClasses[i];

-						}

-					}

-					el.className = newClasses.join(" ");

-				}

-			}

-

-			function replaceClass(el, newCssClass, oldCssClass) {

-				removeClass(el, oldCssClass);

-				addClass(el, newCssClass);

-			}

-

-			/* ------------------------------------------------------------------------- */

-

-			// Other utility functions

-

-			function getElementsByClass(el, cssClass, tagName) {

-				var elements = el.getElementsByTagName(tagName);

-				var matches = [];

-				for (var i = 0, len = elements.length; i < len; i++) {

-					if (hasClass(elements[i], cssClass)) {

-						matches.push(elements[i]);

-					}

-				}

-				return matches;

-			}

-

-			// Syntax borrowed from Prototype library

-			function $(id) {

-				return document.getElementById(id);

-			}

-

-			function isDescendant(node, ancestorNode) {

-				while (node != null) {

-					if (node === ancestorNode) {

-						return true;

-					}

-					node = node.parentNode;

-				}

-				return false;

-			}

-

-			function isOrphan(node) {

-				var currentNode = node;

-				while (currentNode) {

-					if (currentNode == document.body) {

-						return false;

-					}

-					currentNode = currentNode.parentNode;

-				}

-				return true;

-			}

-

-			function escapeHtml(str) {

-				return str.replace(/&/g, "&amp;").replace(/[<]/g, "&lt;").replace(/>/g, "&gt;");

-			}

-

-			function getWindowWidth() {

-				if (window.innerWidth) {

-					return window.innerWidth;

-				} else if (document.documentElement && document.documentElement.clientWidth) {

-					return document.documentElement.clientWidth;

-				} else if (document.body) {

-					return document.body.clientWidth;

-				}

-				return 0;

-			}

-

-			function getWindowHeight() {

-				if (window.innerHeight) {

-					return window.innerHeight;

-				} else if (document.documentElement && document.documentElement.clientHeight) {

-					return document.documentElement.clientHeight;

-				} else if (document.body) {

-					return document.body.clientHeight;

-				}

-				return 0;

-			}

-

-			function getToolBarsHeight() {

-				return $("switches").offsetHeight;

-			}

-

-			function getChromeHeight() {

-				var height = getToolBarsHeight();

-				if (showCommandLine) {

-					height += $("commandLine").offsetHeight;

-				}

-				return height;

-			}

-

-			function setLogContainerHeight() {

-				if (logMainContainer) {

-					var windowHeight = getWindowHeight();

-					$("body").style.height = getWindowHeight() + "px";

-					logMainContainer.style.height = "" +

-						Math.max(0, windowHeight - getChromeHeight()) + "px";

-				}

-			}

-

-			function setCommandInputWidth() {

-				if (showCommandLine) {

-					$("command").style.width = "" + Math.max(0, $("commandLineContainer").offsetWidth -

-						($("evaluateButton").offsetWidth + 13)) + "px";

-				}

-			}

-

-			window.onresize = function() {

-				setCommandInputWidth();

-				setLogContainerHeight();

-			};

-

-			if (!Array.prototype.push) {

-				Array.prototype.push = function() {

-			        for (var i = 0, len = arguments.length; i < len; i++){

-			            this[this.length] = arguments[i];

-			        }

-			        return this.length;

-				};

-			}

-

-			if (!Array.prototype.pop) {

-				Array.prototype.pop = function() {

-					if (this.length > 0) {

-						var val = this[this.length - 1];

-						this.length = this.length - 1;

-						return val;

-					}

-				};

-			}

-

-			if (!Array.prototype.shift) {

-				Array.prototype.shift = function() {

-					if (this.length > 0) {

-						var firstItem = this[0];

-						for (var i = 0, len = this.length - 1; i < len; i++) {

-							this[i] = this[i + 1];

-						}

-						this.length = this.length - 1;

-						return firstItem;

-					}

-				};

-			}

-

-			if (!Array.prototype.splice) {

-				Array.prototype.splice = function(startIndex, deleteCount) {

-					var itemsAfterDeleted = this.slice(startIndex + deleteCount);

-					var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);

-					this.length = startIndex;

-					// Copy the arguments into a proper Array object

-					var argumentsArray = [];

-					for (var i = 0, len = arguments.length; i < len; i++) {

-						argumentsArray[i] = arguments[i];

-					}

-					var itemsToAppend = (argumentsArray.length > 2) ?

-						itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;

-					for (i = 0, len = itemsToAppend.length; i < len; i++) {

-						this.push(itemsToAppend[i]);

-					}

-					return itemsDeleted;

-				};

-			}

-

-			function array_remove(arr, val) {

-				var index = -1;

-				for (var i = 0, len = arr.length; i < len; i++) {

-					if (arr[i] === val) {

-						index = i;

-						break;

-					}

-				}

-				if (index >= 0) {

-					arr.splice(index, 1);

-					return index;

-				} else {

-					return false;

-				}

-			}

-

-			function array_removeFromStart(array, numberToRemove) {

-				if (Array.prototype.splice) {

-					array.splice(0, numberToRemove);

-				} else {

-					for (var i = numberToRemove, len = array.length; i < len; i++) {

-						array[i - numberToRemove] = array[i];

-					}

-					array.length = array.length - numberToRemove;

-				}

-				return array;

-			}

-

-			function array_contains(arr, val) {

-				for (var i = 0, len = arr.length; i < len; i++) {

-					if (arr[i] == val) {

-						return true;

-					}

-				}

-				return false;

-			}

-

-			function getErrorMessage(ex) {

-				if (ex.message) {

-					return ex.message;

-				} else if (ex.description) {

-					return ex.description;

-				}

-				return "" + ex;

-			}

-

-			function moveCaretToEnd(input) {

-				if (input.setSelectionRange) {

-					input.focus();

-					var length = input.value.length;

-					input.setSelectionRange(length, length);

-				} else if (input.createTextRange) {

-					var range = input.createTextRange();

-					range.collapse(false);

-					range.select();

-				}

-				input.focus();

-			}

-

-			function stopPropagation(evt) {

-				if (evt.stopPropagation) {

-					evt.stopPropagation();

-				} else if (typeof evt.cancelBubble != "undefined") {

-					evt.cancelBubble = true;

-				}

-			}

-

-			function getEvent(evt) {

-				return evt ? evt : event;

-			}

-

-			function getTarget(evt) {

-				return evt.target ? evt.target : evt.srcElement;

-			}

-

-			function getRelatedTarget(evt) {

-				if (evt.relatedTarget) {

-					return evt.relatedTarget;

-				} else if (evt.srcElement) {

-					switch(evt.type) {

-						case "mouseover":

-							return evt.fromElement;

-						case "mouseout":

-							return evt.toElement;

-						default:

-							return evt.srcElement;

-					}

-				}

-			}

-

-			function cancelKeyEvent(evt) {

-				evt.returnValue = false;

-				stopPropagation(evt);

-			}

-

-			function evalCommandLine() {

-				var expr = $("command").value;

-				evalCommand(expr);

-				$("command").value = "";

-			}

-

-			function evalLastCommand() {

-				if (lastCommand != null) {

-					evalCommand(lastCommand);

-				}

-			}

-

-			var lastCommand = null;

-			var commandHistory = [];

-			var currentCommandIndex = 0;

-

-			function evalCommand(expr) {

-				if (appender) {

-					appender.evalCommandAndAppend(expr);

-				} else {

-					var prefix = ">>> " + expr + "\r\n";

-					try {

-						log("INFO", prefix + eval(expr));

-					} catch (ex) {

-						log("ERROR", prefix + "Error: " + getErrorMessage(ex));

-					}

-				}

-				// Update command history

-				if (expr != commandHistory[commandHistory.length - 1]) {

-					commandHistory.push(expr);

-					// Update the appender

-					if (appender) {

-						appender.storeCommandHistory(commandHistory);

-					}

-				}

-				currentCommandIndex = (expr == commandHistory[currentCommandIndex]) ? currentCommandIndex + 1 : commandHistory.length;

-				lastCommand = expr;

-			}

-			//]]>

-		</script>

-		<style type="text/css">

-			body {

-				background-color: white;

-				color: black;

-				padding: 0;

-				margin: 0;

-				font-family: tahoma, verdana, arial, helvetica, sans-serif;

-				overflow: hidden;

-			}

-

-			div#switchesContainer input {

-				margin-bottom: 0;

-			}

-

-			div.toolbar {

-				border-top: solid #ffffff 1px;

-				border-bottom: solid #aca899 1px;

-				background-color: #f1efe7;

-				padding: 3px 5px;

-				font-size: 68.75%;

-			}

-

-			div.toolbar, div#search input {

-				font-family: tahoma, verdana, arial, helvetica, sans-serif;

-			}

-

-			div.toolbar input.button {

-				padding: 0 5px;

-				font-size: 100%;

-			}

-

-			div.toolbar input.hidden {

-				display: none;

-			}

-

-			div#switches input#clearButton {

-				margin-left: 20px;

-			}

-

-			div#levels label {

-				font-weight: bold;

-			}

-

-			div#levels label, div#options label {

-				margin-right: 5px;

-			}

-

-			div#levels label#wrapLabel {

-				font-weight: normal;

-			}

-

-			div#search label {

-				margin-right: 10px;

-			}

-

-			div#search label.searchboxlabel {

-				margin-right: 0;

-			}

-

-			div#search input {

-				font-size: 100%;

-			}

-

-			div#search input.validregex {

-				color: green;

-			}

-

-			div#search input.invalidregex {

-				color: red;

-			}

-

-			div#search input.nomatches {

-				color: white;

-				background-color: #ff6666;

-			}

-

-			div#search input.nomatches {

-				color: white;

-				background-color: #ff6666;

-			}

-

-			div#searchNav {

-				display: none;

-			}

-

-			div#commandLine {

-				display: none;

-			}

-

-			div#commandLine input#command {

-				font-size: 100%;

-				font-family: Courier New, Courier;

-			}

-

-			div#commandLine input#evaluateButton {

-			}

-

-			*.greyedout {

-				color: gray !important;

-				border-color: gray !important;

-			}

-

-			*.greyedout *.alwaysenabled { color: black; }

-

-			*.unselectable {

-				-khtml-user-select: none;

-				-moz-user-select: none;

-				user-select: none;

-			}

-

-			div#log {

-				font-family: Courier New, Courier;

-				font-size: 75%;

-				width: 100%;

-				overflow: auto;

-				clear: both;

-				position: relative;

-			}

-

-			div.group {

-				border-color: #cccccc;

-				border-style: solid;

-				border-width: 1px 0 1px 1px;

-				overflow: visible;

-			}

-

-			div.oldIe div.group, div.oldIe div.group *, div.oldIe *.logentry {

-				height: 1%;

-			}

-

-			div.group div.groupheading span.expander {

-				border: solid black 1px;

-				font-family: Courier New, Courier;

-				font-size: 0.833em;

-				background-color: #eeeeee;

-				position: relative;

-				top: -1px;

-				color: black;

-				padding: 0 2px;

-				cursor: pointer;

-				cursor: hand;

-				height: 1%;

-			}

-

-			div.group div.groupcontent {

-				margin-left: 10px;

-				padding-bottom: 2px;

-				overflow: visible;

-			}

-

-			div.group div.expanded {

-				display: block;

-			}

-

-			div.group div.collapsed {

-				display: none;

-			}

-

-			*.logentry {

-				overflow: visible;

-				display: none;

-				white-space: pre;

-			}

-

-			span.pre {

-				white-space: pre;

-			}

-			

-			pre.unwrapped {

-				display: inline !important;

-			}

-

-			pre.unwrapped pre.pre, div.wrapped pre.pre {

-				display: inline;

-			}

-

-			div.wrapped pre.pre {

-				white-space: normal;

-			}

-

-			div.wrapped {

-				display: none;

-			}

-

-			body.searching *.logentry span.currentmatch {

-				color: white !important;

-				background-color: green !important;

-			}

-

-			body.searching div.searchhighlight *.logentry span.searchterm {

-				color: black;

-				background-color: yellow;

-			}

-

-			div.wrap *.logentry {

-				white-space: normal !important;

-				border-width: 0 0 1px 0;

-				border-color: #dddddd;

-				border-style: dotted;

-			}

-

-			div.wrap #log_wrapped, #log_unwrapped {

-				display: block;

-			}

-

-			div.wrap #log_unwrapped, #log_wrapped {

-				display: none;

-			}

-

-			div.wrap *.logentry span.pre {

-				overflow: visible;

-				white-space: normal;

-			}

-

-			div.wrap *.logentry pre.unwrapped {

-				display: none;

-			}

-

-			div.wrap *.logentry span.wrapped {

-				display: inline;

-			}

-

-			div.searchfilter *.searchnonmatch {

-				display: none !important;

-			}

-

-			div#log *.TRACE, label#label_TRACE {

-				color: #666666;

-			}

-

-			div#log *.DEBUG, label#label_DEBUG {

-				color: green;

-			}

-

-			div#log *.INFO, label#label_INFO {

-				color: #000099;

-			}

-

-			div#log *.WARN, label#label_WARN {

-				color: #999900;

-			}

-

-			div#log *.ERROR, label#label_ERROR {

-				color: red;

-			}

-

-			div#log *.FATAL, label#label_FATAL {

-				color: #660066;

-			}

-

-			div.TRACE#log *.TRACE,

-			div.DEBUG#log *.DEBUG,

-			div.INFO#log *.INFO,

-			div.WARN#log *.WARN,

-			div.ERROR#log *.ERROR,

-			div.FATAL#log *.FATAL {

-				display: block;

-			}

-

-			div#log div.separator {

-				background-color: #cccccc;

-				margin: 5px 0;

-				line-height: 1px;

-			}

-		</style>

-	</head>

-

-	<body id="body">

-		<div id="switchesContainer">

-			<div id="switches">

-				<div id="levels" class="toolbar">

-					Filters:

-					<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>

-					<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>

-					<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>

-					<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>

-					<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>

-					<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>

-					<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>

-				</div>

-				<div id="search" class="toolbar">

-					<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />

-					<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />

-					<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>

-					<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>

-					<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>

-					<div id="searchNav">

-						<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />

-						<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />

-						<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>

-						<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>

-					</div>

-				</div>

-				<div id="options" class="toolbar">

-					Options:

-					<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>

-					<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>

-					<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>

-					<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>

-					<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages"  />

-					<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />

-					<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />

-				</div>

-			</div>

-		</div>

-		<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>

-		<div id="commandLine" class="toolbar">

-			<div id="commandLineContainer">

-				<input type="text" id="command" title="Enter a JavaScript command here and hit return or press 'Evaluate'" />

-				<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />

-			</div>

-		</div>

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/demos/basic.html b/xos/core/static/log4javascript-1.4.6/demos/basic.html
deleted file mode 100644
index d09d510..0000000
--- a/xos/core/static/log4javascript-1.4.6/demos/basic.html
+++ /dev/null
@@ -1,177 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript basic demo</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-		<script type="text/javascript" src="../js/log4javascript.js"></script>

-		<script type="text/javascript">

-			// <![CDATA[

-			var log = log4javascript.getLogger("main");

-			var appender = new log4javascript.PopUpAppender();

-			log.addAppender(appender);

-			log.debug("This is debugging message from the log4javascript basic demo page");

-

-			var words = ["Watford", "eased", "their", "relegation", "fears", "with", "a", "win",

-				"against", "a", "Charlton", "side", "who", "slipped", "further", "towards", "the",

-				"drop", "Don", "Cowie", "drilled", "in", "a", "shot", "to", "put", "the", "Hornets",

-				"ahead", "before", "Tresor", "Kandol", "ended", "a", "powerful", "run", "by",

-				"rounding", "keeper", "Scott", "Loach", "and", "slotting", "in", "to", "level"

-			];

-

-			var loaded = false;

-

-			function generateRandom() {

-				var numberOfEntries = parseInt(document.getElementById("numberOfLogEntries").value);

-				for (var i = 0; i < numberOfEntries; i++) {

-					var numberOfWords = 1 + Math.floor(10 * Math.random());

-					var entryWords = [];

-					for (var j = 0; j < numberOfWords; j++) {

-						entryWords.push(words[Math.floor(Math.random() * words.length)]);

-					}

-					var entryMessage = entryWords.join(" ");

-					var levelNum = Math.floor(Math.random() * 6);

-					switch (levelNum) {

-						case 0:

-							log.trace(entryMessage);

-							break;

-						case 1:

-							log.debug(entryMessage);

-							break;

-						case 2:

-							log.info(entryMessage);

-							break;

-						case 3:

-							log.warn(entryMessage);

-							break;

-						case 4:

-							log.error(entryMessage);

-							break;

-						case 5:

-							log.fatal(entryMessage);

-							break;

-					}

-				}

-			}

-

-			function generateObjectExpansion() {

-				var debugObj = {

-					a: {

-						b: "stuff",

-						c: 3,

-						d: {

-							e: ["a", "b", "c"]

-						}

-					},

-					f: "Things",

-					g: 5

-				};

-				log.debug(debugObj);

-			}

-

-			function generateError() {

-				try {

-					throw new Error("Made up error");

-				} catch (ex) {

-					log.error("Logging an error!", ex);

-				}

-			}

-			// ]]>

-		</script>

-	</head>

-	<body onload="loaded = true; document.getElementById('enabled').checked = true;">

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="/docs/index.html">log4javascript</a></h1>

-			</div>

-			<div id="content">

-				<div id="nav">

-					<a class="navitem" href="../index.html">home</a>

-					| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <a class="navitem" href="../docs/index.html">docs</a>

-					| <a class="navitem" href="../docs/quickstart.html">quick start</a>

-					| <a class="navitem" href="index.html">demos</a>

-					| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>

-					| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>

-				</div>

-				<h1>log4javascript basic demo</h1>

-				<p>

-					<em><strong>NB.</strong> Since the demo below uses pop-up windows, you will

-					need to disable any pop-up blockers you may have for it to work.</em>

-				</p>

-				<p>

-					This demo demonstrates the default logger. For more options, please see the

-					<a href="index.html">demos area</a>.

-				</p>

-				<p>

-					Enter a log message below and click on one of the buttons to log

-					your message at your desired level. You can then filter by

-					log level, toggle word-wrapping and perform text and regular

-					expression searches on the log entries.

-				</p>

-				<div class="example">

-					<input type="text" id="logText" value="Put log message here" />

-					<input type="button" value="debug" onclick="log.debug(document.getElementById('logText').value)" />

-					<input type="button" value="info" onclick="log.info(document.getElementById('logText').value)" />

-					<input type="button" value="warn" onclick="log.warn(document.getElementById('logText').value)" />

-					<input type="button" value="error" onclick="log.error(document.getElementById('logText').value)" />

-					<input type="button" value="fatal" onclick="log.fatal(document.getElementById('logText').value)" />

-					<br />

-					<input type="button" value="assert 1 equals 1" onclick="log.assert(1 === 1)" />

-					<input type="button" value="assert 1 equals 2" onclick="log.assert(1 === 2)" />

-					<br />

-					Generate <input type="text" size="5" id="numberOfLogEntries" value="50" /> random log entries

-					<input type="button" value="go" onclick="generateRandom()" />

-					<br />

-					<input type="button" value="Log exception" onclick="generateError()" />

-					<input type="button" value="Log example object" onclick="generateObjectExpansion()" />

-					<br />

-					<input type="checkbox" id="enabled" onclick="log4javascript.setEnabled(this.checked)" checked="checked" /> <label for="enabled">logging enabled</label>

-					<br />

-					<input type="text" id="groupName" value="Group name" />

-					<input type="button" value="group" onclick="log.group(document.getElementById('groupName').value)" />

-					<input type="button" value="end group" onclick="log.groupEnd()" />

-					<br />

-					<input type="text" id="timerName" value="Example timer name" />

-					<input type="button" value="start timer" onclick="log.time(document.getElementById('timerName').value)" />

-					<input type="button" value="end timer" onclick="log.timeEnd(document.getElementById('timerName').value)" />

-				</div>

-			</div>

-			<br class="clear" />

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/demos/blank.html b/xos/core/static/log4javascript-1.4.6/demos/blank.html
deleted file mode 100644
index 104584b..0000000
--- a/xos/core/static/log4javascript-1.4.6/demos/blank.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<html>

-<head><title>Blank page</title></head>

-<body></body>

-</html>
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/demos/index.html b/xos/core/static/log4javascript-1.4.6/demos/index.html
deleted file mode 100644
index 8024a19..0000000
--- a/xos/core/static/log4javascript-1.4.6/demos/index.html
+++ /dev/null
@@ -1,67 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript demos</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-	</head>

-	<body>

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="/docs/index.html">log4javascript</a></h1>

-			</div>

-			<div id="content">

-				<div id="nav">

-					<a class="navitem" href="../index.html">home</a>

-					| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <a class="navitem" href="../docs/index.html">docs</a>

-					| <a class="navitem" href="../docs/quickstart.html">quick start</a>

-					| <span class="navitem">demos</span>

-					| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>

-					| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>

-				</div>

-				<h1>log4javascript demos</h1>

-				<ul>

-					<li><a href="basic.html">Basic demo</a></li>

-					<li><a href="inpage.html">In-page console demo</a></li>

-					<li><a href="lite.html">log4javascript Lite demo</a></li>

-				</ul>

-			</div>

-			<br class="clear" />

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/demos/inpage.html b/xos/core/static/log4javascript-1.4.6/demos/inpage.html
deleted file mode 100644
index 646a43e..0000000
--- a/xos/core/static/log4javascript-1.4.6/demos/inpage.html
+++ /dev/null
@@ -1,192 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript in-page console demo</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-		<script type="text/javascript" src="../js/log4javascript_uncompressed.js"></script>

-		<script type="text/javascript">

-			// <![CDATA[

-			var log = log4javascript.getLogger("main");

-			var appender = new log4javascript.InPageAppender();

-			log.addAppender(appender);

-			log.debug("This is a debugging message from the log4javascript in-page page");

-

-			var words = ["Watford", "eased", "their", "relegation", "fears", "with", "a", "win",

-				"against", "a", "Charlton", "side", "who", "slipped", "further", "towards", "the",

-				"drop", "Don", "Cowie", "drilled", "in", "a", "shot", "to", "put", "the", "Hornets",

-				"ahead", "before", "Tresor", "Kandol", "ended", "a", "powerful", "run", "by",

-				"rounding", "keeper", "Scott", "Loach", "and", "slotting", "in", "to", "level"

-			];

-

-			var loaded = false;

-

-			function generateRandom() {

-				var numberOfEntries = parseInt(document.getElementById("numberOfLogEntries").value);

-				for (var i = 0; i < numberOfEntries; i++) {

-					var numberOfWords = 1 + Math.floor(10 * Math.random());

-					var entryWords = [];

-					for (var j = 0; j < numberOfWords; j++) {

-						entryWords.push(words[Math.floor(Math.random() * words.length)]);

-					}

-					var entryMessage = entryWords.join(" ");

-					var levelNum = Math.floor(Math.random() * 6);

-					switch (levelNum) {

-						case 0:

-							log.trace(entryMessage);

-							break;

-						case 1:

-							log.debug(entryMessage);

-							break;

-						case 2:

-							log.info(entryMessage);

-							break;

-						case 3:

-							log.warn(entryMessage);

-							break;

-						case 4:

-							log.error(entryMessage);

-							break;

-						case 5:

-							log.fatal(entryMessage);

-							break;

-					}

-				}

-			}

-			

-			var consoleVisible = true;

-			

-			function toggleConsole(button) {

-				if (consoleVisible) {

-					appender.hide();

-					button.value = "Show console";

-					consoleVisible = false;

-				} else {

-					appender.show();

-					button.value = "Hide console";

-					consoleVisible = true;

-				}

-			}

-

-			function generateObjectExpansion() {

-				var debugObj = {

-					a: {

-						b: "stuff",

-						c: 3,

-						d: {

-							e: ["a", "b", "c"]

-						}

-					},

-					f: "Things",

-					g: 5

-				};

-				log.debug(debugObj);

-			}

-

-			function generateError() {

-				try {

-					throw new Error("Made up error");

-				} catch (ex) {

-					log.error("Logging an error!", ex);

-				}

-			}

-			// ]]>

-		</script>

-	</head>

-	<body>

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="/docs/index.html">log4javascript</a></h1>

-			</div>

-			<div id="content">

-				<div id="nav">

-					<a class="navitem" href="../index.html">home</a>

-					| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <a class="navitem" href="../docs/index.html">docs</a>

-					| <a class="navitem" href="../docs/quickstart.html">quick start</a>

-					| <a class="navitem" href="index.html">demos</a>

-					| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>

-					| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>

-				</div>

-				<h1>log4javascript in-page console demo</h1>

-				<p>

-					This demo demonstrates an in-page logger. The example uses the default behaviour, which

-					is to place the log console in a fixed area at the bottom of the page. However, the

-					console may be placed inside any element in the page. To do this, you may specify the ID

-					of the element (even if the page has not yet loaded) or a reference to the element itself.

-				</p>

-				<p>

-					Enter a log message below and click on one of the buttons to log

-					your message at your desired level. You can then filter by

-					log level, toggle word-wrapping and perform text and regular

-					expression searches on the log entries.

-				</p>

-				<div class="example">

-					<input type="button" value="Hide console" onclick="toggleConsole(this)" />

-					<br />

-					<input type="text" id="logText" value="Put log message here" />

-					<input type="button" value="debug" onclick="log.debug(document.getElementById('logText').value)" />

-					<input type="button" value="info" onclick="log.info(document.getElementById('logText').value)" />

-					<input type="button" value="warn" onclick="log.warn(document.getElementById('logText').value)" />

-					<input type="button" value="error" onclick="log.error(document.getElementById('logText').value)" />

-					<input type="button" value="fatal" onclick="log.fatal(document.getElementById('logText').value)" />

-					<br />

-					<input type="button" value="assert 1 equals 1" onclick="log.assert(1 === 1)" />

-					<input type="button" value="assert 1 equals 2" onclick="log.assert(1 === 2)" />

-					<br />

-					Generate <input type="text" size="5" id="numberOfLogEntries" value="50" /> random log entries

-					<input type="button" value="go" onclick="generateRandom()" />

-					<br />

-					<input type="button" value="Log exception" onclick="generateError()" />

-					<input type="button" value="Log example object" onclick="generateObjectExpansion()" />

-					<br />

-					<input type="checkbox" id="enabled" onclick="log4javascript.setEnabled(this.checked)" checked="checked" /> <label for="enabled">logging enabled</label>

-					<br />

-					<input type="text" id="groupName" value="Group name" />

-					<input type="button" value="group" onclick="log.group(document.getElementById('groupName').value)" />

-					<input type="button" value="end group" onclick="log.groupEnd()" />

-					<br />

-					<input type="text" id="timerName" value="Example timer name" />

-					<input type="button" value="start timer" onclick="log.time(document.getElementById('timerName').value)" />

-					<input type="button" value="end timer" onclick="log.timeEnd(document.getElementById('timerName').value)" />

-				</div>

-			</div>

-			<br class="clear" />

-			<div id="log"></div>

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/demos/lite.html b/xos/core/static/log4javascript-1.4.6/demos/lite.html
deleted file mode 100644
index 00b2bbd..0000000
--- a/xos/core/static/log4javascript-1.4.6/demos/lite.html
+++ /dev/null
@@ -1,166 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript lite demo</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-		<script type="text/javascript" src="../js/log4javascript_lite.js"></script>

-		<script type="text/javascript">

-			// <![CDATA[

-			var	log = log4javascript.getDefaultLogger();

-			log.debug("This is debugging message from the log4javascript lite demo page");

-

-			var words = ["Boothroyd", "who", "took", "over", "two", "years",

-					"ago", "and", "continues", "to", "maintain", "that", "the",

-					"club", "are", "building", "for", "the", "future", "made",

-					"six", "changes", "and", "gave", "a", "first", "Premiership",

-					"start", "to", "on-loan", "Brazilian", "midfielder",

-					"Douglas", "Rinaldi", "Darius", "Henderson", "and", "Steve",

-					"Kabba", "were", "two", "of", "the", "players", "restored",

-					"to", "the", "home", "side", "and", "were", "responsible",

-					"for", "giving", "Chelsea", "an", "uncomfortable", "start",

-					"which", "set", "the", "pattern", "for", "the", "match"

-					];

-

-			var loaded = false;

-

-			function generateRandom() {

-				var numberOfEntries = parseInt(document.getElementById("numberOfLogEntries").value);

-				for (var i = 0; i < numberOfEntries; i++) {

-					var numberOfWords = 1 + Math.floor(10 * Math.random());

-					var entryWords = [];

-					for (var j = 0; j < numberOfWords; j++) {

-						entryWords.push(words[Math.floor(Math.random() * words.length)]);

-					}

-					var entryMessage = entryWords.join(" ");

-					var levelNum = Math.floor(Math.random() * 6);

-					switch (levelNum) {

-						case 0:

-							log.trace(entryMessage);

-							break;

-						case 1:

-							log.debug(entryMessage);

-							break;

-						case 2:

-							log.info(entryMessage);

-							break;

-						case 3:

-							log.warn(entryMessage);

-							break;

-						case 4:

-							log.error(entryMessage);

-							break;

-						case 5:

-							log.fatal(entryMessage);

-							break;

-					}

-				}

-			}

-

-			function generateObjectExpansion() {

-				var debugObj = {

-					a: {

-						b: "stuff",

-						c: 3,

-						d: {

-							e: ["a", "b", "c"]

-						}

-					},

-					f: "Things",

-					g: 5

-				};

-				log.debug(debugObj);

-			}

-

-			function generateError() {

-				try {

-					throw new Error("Made up error");

-				} catch (ex) {

-					log.error("Logging an error!", ex);

-				}

-			}

-			// ]]>

-		</script>

-	</head>

-	<body onload="loaded = true; document.getElementById('enabled').checked = true;">

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="/docs/index.html">log4javascript</a></h1>

-			</div>

-			<div id="content">

-				<div id="nav">

-					<a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <a class="navitem" href="../docs/index.html">docs</a>

-					| <a class="navitem" href="../docs/quickstart.html">quick start</a>

-					| <a class="navitem" href="../docs/manual.html">manual</a>

-					| <a class="navitem" href="index.html">demos</a>

-					| <a class="navitem" href="http://www.timdown.co.uk/log4javascript" target="_blank">website</a>

-				</div>

-				<h1>log4javascript lite demo</h1>

-				<p>

-					<em><strong>NB.</strong> Since the demo below uses pop-up windows, you will

-					need to disable any pop-up blockers you may have for it to work.</em>

-				</p>

-				<p>

-					This demo demonstrates the lite edition of log4javascript.

-				</p>

-				<p>

-					Enter a log message below and click on one of the buttons to log

-					your message at your desired level.

-				</p>

-				<div class="example">

-					<input type="text" id="logText" value="Put log message here" />

-					<input type="button" value="trace" onclick="log.trace(document.getElementById('logText').value)" />

-					<input type="button" value="debug" onclick="log.debug(document.getElementById('logText').value)" />

-					<input type="button" value="info" onclick="log.info(document.getElementById('logText').value)" />

-					<input type="button" value="warn" onclick="log.warn(document.getElementById('logText').value)" />

-					<input type="button" value="error" onclick="log.error(document.getElementById('logText').value)" />

-					<input type="button" value="fatal" onclick="log.fatal(document.getElementById('logText').value)" />

-					<br />

-					Generate <input type="text" size="5" id="numberOfLogEntries" value="50" /> random log entries

-					<input type="button" value="go" onclick="generateRandom()" />

-					<br />

-					<input type="button" value="Log exception" onclick="generateError()" />

-					<input type="button" value="Log example object" onclick="generateObjectExpansion()" />

-					<br />

-					<input type="checkbox" id="enabled" onclick="log4javascript.setEnabled(this.checked)" checked="checked" /> <label for="enabled">logging enabled</label>

-					<br />

-				</div>

-			</div>

-			<br class="clear" />

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/docs/backwardsincompatibilities.html b/xos/core/static/log4javascript-1.4.6/docs/backwardsincompatibilities.html
deleted file mode 100644
index 371a3c9..0000000
--- a/xos/core/static/log4javascript-1.4.6/docs/backwardsincompatibilities.html
+++ /dev/null
@@ -1,108 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript - backwards incompatibilities in version 1.4</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-	</head>

-	<body>

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="/index.html">log4javascript</a></h1>

-			</div>

-			<div id="content">

-				<div id="nav">

-					<a class="navitem" href="../index.html">home</a>

-					| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <a class="navitem" href="index.html">docs</a>

-					| <a class="navitem" href="quickstart.html">quick start</a>

-					| <a class="navitem" href="../demos/index.html">demos</a>

-					| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>

-					| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>

-				</div>

-				<h1>Backwards incompatibilities in log4javascript 1.4</h1>

-				<ul>

-					<li>

-						Loggers are now hierarchical. This means logger names containing full stops have

-						special meaning. For example, from version 1.4 the logger named <code>myapp.ajax</code>

-						by default inherits all the appenders of the logger named <code>myapp</code>, while

-						prior to version 1.4 these loggers would be entirely independent;

-					</li>

-					<li>

-						The signature of the <code>log</code> method of <code>Logger</code> has changed.

-						However, you should not use this method directly; instead, use one of the level-specific

-						wrapper functions (<code>debug</code>, <code>info</code>, <code>error</code> etc.);

-					</li>

-					<li>

-						Appenders can no longer be configured via constructor parameters. Instead you must use

-						setter methods;

-					</li>

-					<li>

-						The format of requests sent via <code><a href="manual.html#ajaxappender">AjaxAppender</a></code>

-						has changed when using <code><a href="manual.html#jsonlayout">JsonLayout</a></code> or

-						<code><a href="manual.html#xmllayout">XmlLayout</a></code>: the formatted log messages are sent

-						as a name-value pair (with default name <code>data</code>) rather than a single unencoded string;

-					</li>

-					<li>

-						All timestamps returned by <code><a href="manual.html#xmllayout">XmlLayout</a></code>,

-						<code><a href="manual.html#jsonlayout">JsonLayout</a></code> and

-						<code><a href="manual.html#httppostdatlayout">HttpPostDataLayout</a></code> are

-						now measured in milliseconds since January 1st 1970 (previously they were returned

-						as seconds since January 1st 1970);

-					</li>

-					<li>

-						The constructors for <a href="manual.html#jsonlayout">JsonLayout</a> and

-						<a href="manual.html#httppostdatlayout">HttpPostDataLayout</a> have changed; the property names

-						used for the properties of the logging event are now set via <code>setKeys</code> rather than

-						in the constructor;

-					</li>

-					<li>

-						<code>setReadable</code> has been removed from <a href="manual.html#jsonlayout">JsonLayout</a>.

-						The <code>readable</code> property should now be set via the constructor;

-					</li>

-					<li>

-						<code>addErrorListener</code> and <code>removeErrorListener</code> removed from

-						the <code>log4javascript</code> object and replaced with the more generic

-						<code><a href="manual.html#log4javascriptaddeventlistener">addEventListener</a></code>

-						and <code>removeEventListener</code> methods. The listener functions are passed

-						different parameters.

-					</li>

-				</ul>

-			</div>

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/docs/distribution.html b/xos/core/static/log4javascript-1.4.6/docs/distribution.html
deleted file mode 100644
index 9ffc3ea..0000000
--- a/xos/core/static/log4javascript-1.4.6/docs/distribution.html
+++ /dev/null
@@ -1,105 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" >

-	<head>

-		<title>log4javascript 1.4 distribution</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-	</head>

-	<body>

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="../index.html">log4javascript</a></h1>

-			</div>

-			<div id="content">

-				<div id="nav">

-					<a class="navitem" href="../index.html">home</a>

-					| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <a class="navitem" href="index.html">docs</a>

-					| <a class="navitem" href="quickstart.html">quick start</a>

-					| <a class="navitem" href="../demos/index.html">demos</a>

-					| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>

-					| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>

-				</div>

-				<h1>log4javascript 1.4 distribution</h1>

-				<p>

-					From version 1.4 the distribution includes three different editions of log4javascript:

-				</p>

-				<ul>

-					<li>

-						<div><strong>Standard Edition</strong></div>

-						<p>

-							Equivalent to log4javascript from earlier versions and suitable for general JavaScript

-							debugging and logging (including via Ajax).

-						</p>

-					</li>

-					<li>

-						<div><strong>Production Edition</strong></div>

-						<p>

-							Designed for use in production systems where the focus is solely on logging JavaScript

-							messages back to the server. Consequently this edition omits all appenders except

-							<a href="manual.html#ajaxappender">AjaxAppender</a>, resulting in a drastically reduced

-							file size compared to the standard edition.

-						</p>

-					</li>

-					<li>

-						<div><strong>Lite Edition</strong></div>

-						<p>

-							A lightweight version of log4javascript for quick page debugging. Included is a single logger

-							using a basic pop-up window appender with a fixed layout.

-						</p>

-					</li>

-				</ul>

-				<p>

-					Each edition comes in compressed and uncompressed versions. The compressed version is

-					functionally identical to the uncompressed version but has had whitespace and comments removed

-					and therefore downloads more quickly.

-				</p>

-				<p>

-					Each edition also comes with a stub version. This contains dummy implementations of all

-					log4javacript objects and methods in the public API, making it ideal for production environments

-					where logging is not required. Replacing the main log4javascript script file with this file

-					means that log calls may be left in production code. Compressed and uncompressed versions of

-					each stub are included.

-				</p>

-				<p>

-					Finally, each edition comes with a suite of unit tests, available as HTML pages in the

-					<code>test/</code> directory. Note that these tests crash old versions (pre-3.1) of Safari. Sorry.

-				</p>

-			</div>

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/docs/index.html b/xos/core/static/log4javascript-1.4.6/docs/index.html
deleted file mode 100644
index 9e1f3e1..0000000
--- a/xos/core/static/log4javascript-1.4.6/docs/index.html
+++ /dev/null
@@ -1,208 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript documentation</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-	</head>

-	<body>

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="../index.html">log4javascript</a></h1>

-				<div id="nav">

-					<a class="navitem" href="../index.html">home</a>

-					| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <span class="navitem">docs</span>

-					| <a class="navitem" href="quickstart.html">quick start</a>

-					| <a class="navitem" href="../demos/index.html">demos</a>

-					| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>

-					| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>

-				</div>

-			</div>

-			<div id="content">

-				<h1>log4javascript 1.4 documentation</h1>

-				<div id="links">

-					<h2>Links</h2>

-					<ul>

-						<li><a href="quickstart.html">Quick start</a></li>

-						<li><a href="distribution.html">Details of the log4javascript distribution</a></li>

-						<li><a href="backwardsincompatibilities.html">Backwards incompatibilities</a></li>

-						<li><a href="whatsnew.html">What's new in this release</a></li>

-						<li><a href="../changelog.txt">Change log</a></li>

-						<li><a href="manual.html">log4javascript manual</a></li>

-						<li><a href="lite.html">log4javascript Lite</a></li>

-						<li><a href="manual_lite.html">log4javascript Lite manual</a></li>

-						<li><a href="../demos/basic.html">Basic demo</a></li>

-						<li><a href="../demos/ajax.html">Ajax demo</a></li>

-					</ul>

-				</div>

-				<div id="contents">

-					<h2>Contents</h2>

-					<ul>

-						<li><a href="#whatitis">What it is</a></li>

-						<li><a href="#whofor">Who it's for</a></li>

-						<li><a href="#previousversions">Note on previous versions</a></li>

-						<li><a href="#features">Features</a></li>

-						<li><a href="#browsers">Browser support</a></li>

-						<li><a href="#licence">Licence</a></li>

-						<li><a href="#furtherreading">Further reading</a></li>

-					</ul>

-				</div>

-				<div id="whatitis">

-					<h2>What it is</h2>

-					<p>

-						log4javascript is a JavaScript logging framework based on the Java

-						logging framework <a href="http://logging.apache.org/log4j/docs/index.html"

-						title="log4j home page (opens in new window)" target="_blank">log4j</a>.

-					</p>

-					<p>

-						log4javascript implements a subset of log4j (primarily loggers, appenders

-						and layouts) and has a few convenience methods of its own for

-						quick JavaScript development. It can be used to debug JavaScript

-						applications of all sizes, including Ajax applications.

-					</p>

-					<p>

-						If you just want to start using it, try the <a href="quickstart.html">quickstart

-						tutorial</a>.

-					</p>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="whofor">

-					<h2>Who it's for</h2>

-					<p>

-						log4javascript is aimed at JavaScript developers.

-					</p>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="previousversions">

-					<h2>Note on previous versions</h2>

-					<p>

-						Documentation for previous versions of log4javascript are not available here.

-						However, documentation is bundled with every previous version, all of which

-						are <a href="http://sourceforge.net/projects/log4javascript"

-							target="_blank" title="Download (opens in new window)">available to download</a>.

-					</p>

-				</div>

-				<div id="features">

-					<h2>Features</h2>

-					<ul>

-						<li>can be initialized with one JavaScript include and one line of code;</li>

-						<li>

-							by default logs to a pop-up console window with powerful search (including

-							regular expression) and filtering features. This console window can also

-							be used inline as an iframe in the main page;

-						</li>

-						<li>

-							can send log messages to the server via HTTP (Ajax, if you like);

-						</li>

-						<li>

-							highly configurable using familiar methods from log4j, including the

-							powerful <code><a href="manual.html#patternlayout">PatternLayout</a></code>

-							which gives the developer complete control over the format of the log messages.

-						</li>

-					</ul>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="browsers">

-					<h2>Browser support</h2>

-					<h3>Fully supported browsers:</h3>

-					<ul>

-						<li>All versions Firefox back to 0.6</li>

-						<li>Other Mozilla-based browsers, as far back as Netscape 7</li>

-						<li>Internet Explorer 5 and higher for Windows</li>

-						<li>Safari 1.3 and higher (untested on earlier versions)</li>

-						<li>Opera 8.01 and higher (pre- version 9 browsers have a rendering

-							bug related to scrolling that affects searching in PopUpAppender and InPageAppender)</li>

-						<li>Konqueror 3.4.3 and higher (untested on earlier versions)</li>

-						<li>Google Chrome</li>

-					</ul>

-					<h3>Partially supported browsers:</h3>

-					<ul>

-						<li>Older Mozilla-based browsers, e.g. Netscape 6.2 (generally OK except for

-							display problems searching and filtering PopUpAppender and InPageAppender)</li>

-						<li>Opera 7.0 - 8.0 (InPageAppender not supported until version 7.5, plus some display

-							problems searching PopUpAppender and InPageAppender. AjaxAppender not supported at all)</li>

-					</ul>

-					<h3>Unsupported browsers:</h3>

-					<ul>

-						<li>

-							Internet Explorer for Mac. There are no plans to make log4javascript work

-							in this browser.

-						</li>

-					</ul>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="licence">

-					<h2>Licence</h2>

-					<p>

-						log4javascript is licenced under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-							title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-						Version 2.0</a>. The Apache website has <a href="http://www.apache.org/foundation/licence-FAQ.html#WhatDoesItMEAN"

-							title="View licence (opens in new window)" target="_blank">more details</a>.

-					</p>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="furtherreading">

-					<h2>Further reading</h2>

-					<p>

-						In order to gain an understanding of the ideas behind log4j and therefore log4javascript,

-						I highly recommend reading the <a href="http://logging.apache.org/log4j/docs/manual.html">short

-						introduction to log4j</a> from the log4j website. log4javascript borrows heavily from

-						log4j but does not carry over all its concepts - for example, Filters and Renderers are not

-						implemented.

-					</p>

-					<p>

-						<a href="manual.html">The full log4javascript manual</a>

-					</p>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-			</div>

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-

-	</body>

-</html>
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/docs/lite.html b/xos/core/static/log4javascript-1.4.6/docs/lite.html
deleted file mode 100644
index 26d99b3..0000000
--- a/xos/core/static/log4javascript-1.4.6/docs/lite.html
+++ /dev/null
@@ -1,200 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" >

-	<head>

-		<title>log4javascript 1.4 Lite</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-		<style type="text/css">

-			.visibleifabletocopy {

-				display: none;

-			}

-			

-			body.abletocopy .visibleifabletocopy {

-				display: block;

-			}

-		</style>

-		<script type="text/javascript">

-			function copyCode() {

-				if (window.clipboardData && clipboardData.setData) {

-					clipboardData.setData("Text", code);

-					alert("Code copied to clipboard.")

-				}

-			}

-			

-			var code;

-			

-			window.onload = function() {

-				var textArea = document.getElementById("codetextarea");

-				code = textArea.value;

-				textArea.select(); 

-				if (window.clipboardData && clipboardData.setData) {

-					document.body.className = "abletocopy";

-				}

-			};

-		</script>

-		<link rel="stylesheet" type="text/css" media="screen,print" href="lite.css" title="Default" />

-	</head>

-	<body>

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="../index.html">log4javascript</a></h1>

-			</div>

-			<div id="content">

-				<div id="nav">

-					<a class="navitem" href="../index.html">home</a>

-					| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <a class="navitem" href="index.html">docs</a>

-					| <a class="navitem" href="quickstart.html">quick start</a>

-					| <a class="navitem" href="../demos/index.html">demos</a>

-					| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>

-					| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>

-				</div>

-				<h1>log4javascript 1.4 Lite</h1>

-				<h2>Contents</h2>

-				<ul>

-					<li><a href="#intro">Introduction</a></li>

-					<li><a href="#code">Code</a></li>

-					<li><a href="#api">API</a></li>

-				</ul>

-				<div id="intro">

-					<h2>Introduction</h2>

-					<p>

-						log4javascript Lite is designed to be a basic, lightweight, cross-browser logging tool. It

-						provides functions to log messages of different severity to a pop-up window using the exactly

-						the same syntax as log4javascript.

-					</p>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="code">

-					<h2>Code</h2>

-					<p>

-						You can copy the code for log4javascript Lite below:

-					</p>

-					<textarea id="codetextarea" cols="80" rows="10">

-if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}

-this.length--;return firstItem;}};}

-var log4javascript;(function(){var newLine="\r\n";function Log4JavaScript(){}

-log4javascript=new Log4JavaScript();log4javascript.version="1.4.6";log4javascript.edition="log4javascript_lite";function getExceptionMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}else{return String(ex);}}

-function getUrlFileName(url){var lastSlashIndex=Math.max(url.lastIndexOf("/"),url.lastIndexOf("\\"));return url.substr(lastSlashIndex+1);}

-function getExceptionStringRep(ex){if(ex){var exStr="Exception: "+getExceptionMessage(ex);try{if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber;}

-if(ex.fileName){exStr+=" in file "+getUrlFileName(ex.fileName);}}catch(localEx){}

-if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack;}

-return exStr;}

-return null;}

-function isError(err){return(err instanceof Error);}

-function bool(obj){return Boolean(obj);}

-var enabled=(typeof log4javascript_disabled!="undefined")&&log4javascript_disabled?false:true;log4javascript.setEnabled=function(enable){enabled=bool(enable);};log4javascript.isEnabled=function(){return enabled;};var showStackTraces=false;log4javascript.setShowStackTraces=function(show){showStackTraces=bool(show);};var Level=function(level,name){this.level=level;this.name=name;};Level.prototype={toString:function(){return this.name;},equals:function(level){return this.level==level.level;},isGreaterOrEqual:function(level){return this.level>=level.level;}};Level.ALL=new Level(Number.MIN_VALUE,"ALL");Level.TRACE=new Level(10000,"TRACE");Level.DEBUG=new Level(20000,"DEBUG");Level.INFO=new Level(30000,"INFO");Level.WARN=new Level(40000,"WARN");Level.ERROR=new Level(50000,"ERROR");Level.FATAL=new Level(60000,"FATAL");Level.OFF=new Level(Number.MAX_VALUE,"OFF");log4javascript.Level=Level;function Appender(){var getConsoleHtmlLines=function(){return['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">','<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">','<head>','<title>log4javascript</title>','<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />','<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->','<meta http-equiv="X-UA-Compatible" content="IE=7" />','<script type="text/javascript">','//<![CDATA[','var loggingEnabled=true;var messagesBeforeDocLoaded=[];function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}','function setLoggingEnabled(enable){loggingEnabled=enable;}','function scrollToLatestEntry(){var l=getLogContainer();if(typeof l.scrollTop!="undefined"){var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}','function log(logLevel,formattedMessage){if(loggingEnabled){if(loaded){doLog(logLevel,formattedMessage);}else{messagesBeforeDocLoaded.push([logLevel,formattedMessage]);}}}','function doLog(logLevel,formattedMessage){var logEntry=document.createElement("div");logEntry.appendChild(document.createTextNode(formattedMessage));logEntry.className="logentry "+logLevel.name;getLogContainer().appendChild(logEntry);scrollToLatestEntry();}','function mainPageReloaded(){var separator=document.createElement("div");separator.className="separator";separator.innerHTML="&nbsp;";getLogContainer().appendChild(separator);}','var loaded=false;var logLevels=["DEBUG","INFO","WARN","ERROR","FATAL"];window.onload=function(){setLogContainerHeight();toggleLoggingEnabled();for(var i=0;i<messagesBeforeDocLoaded.length;i++){doLog(messagesBeforeDocLoaded[i][0],messagesBeforeDocLoaded[i][1]);}','messagesBeforeDocLoaded=[];loaded=true;setTimeout(setLogContainerHeight,20);};function getLogContainer(){return $("log");}','function clearLog(){getLogContainer().innerHTML="";}','function $(id){return document.getElementById(id);}','function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}','return 0;}','function getChromeHeight(){return $("toolbar").offsetHeight;}','function setLogContainerHeight(){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";getLogContainer().style.height=""+','Math.max(0,windowHeight-getChromeHeight())+"px";}','window.onresize=function(){setLogContainerHeight();};','//]]>','</scr' + 'ipt>','<style type="text/css">','body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div#toolbar input.button{padding:0 5px;font-size:100%}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both}*.logentry{overflow:visible;white-space:pre}*.TRACE{color:#666666}*.DEBUG{color:green}*.INFO{color:#000099}*.WARN{color:#999900}*.ERROR{color:red}*.FATAL{color:#660066}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}','</style>','</head>','<body id="body">','<div id="toolbar">','Options:','<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" class="stateful" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Enable logging</label>','<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="stateful button" title="Clear all log messages"  />','<input type="button" id="closeButton" value="Close" onclick="window.close()" class="stateful button" title="Close the window" />','</div>','<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>','</body>','</html>'];};var popUp=null;var popUpsBlocked=false;var popUpClosed=false;var popUpLoaded=false;var complainAboutPopUpBlocking=true;var initialized=false;var isSupported=true;var width=600;var height=400;var focusPopUp=false;var queuedLoggingEvents=new Array();function isLoaded(win){try{return bool(win.loaded);}catch(ex){return false;}}

-function finalInit(){popUpLoaded=true;appendQueuedLoggingEvents();}

-function writeHtml(doc){var lines=getConsoleHtmlLines();doc.open();for(var i=0,len=lines.length;i<len;i++){doc.writeln(lines[i]);}

-doc.close();}

-function pollConsoleWindow(){function pollConsoleWindowLoaded(){if(popUpLoaded){clearInterval(poll);}else if(bool(popUp)&&isLoaded(popUp)){clearInterval(poll);finalInit();}}

-var poll=setInterval(pollConsoleWindowLoaded,100);}

-function init(){var windowProperties="width="+width+",height="+height+",status,resizable";var windowName="log4javascriptLitePopUp"+location.host.replace(/[^a-z0-9]/gi,"_");popUp=window.open("",windowName,windowProperties);popUpClosed=false;if(popUp){if(isLoaded(popUp)){popUp.mainPageReloaded();finalInit();}else{writeHtml(popUp.document);if(isLoaded(popUp)){finalInit();}else{pollConsoleWindow();}}}else{isSupported=false;if(complainAboutPopUpBlocking){alert("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");}}

-initialized=true;}

-function safeToAppend(){if(!popUpsBlocked&&!popUpClosed){if(popUp.closed){popUpClosed=true;return false;}

-if(!popUpLoaded&&popUp.loaded){popUpLoaded=true;}}

-return!popUpsBlocked&&popUpLoaded&&!popUpClosed;}

-function padWithZeroes(num,len){var str=""+num;while(str.length<len){str="0"+str;}

-return str;}

-function padWithSpaces(str,len){while(str.length<len){str+=" ";}

-return str;}

-this.append=function(loggingEvent){if(!initialized){init();}

-queuedLoggingEvents.push(loggingEvent);if(safeToAppend()){appendQueuedLoggingEvents();}};function appendQueuedLoggingEvents(){if(safeToAppend()){while(queuedLoggingEvents.length>0){var currentLoggingEvent=queuedLoggingEvents.shift();var date=currentLoggingEvent.timeStamp;var formattedDate=padWithZeroes(date.getHours(),2)+":"+

-padWithZeroes(date.getMinutes(),2)+":"+padWithZeroes(date.getSeconds(),2);var formattedMessage=formattedDate+" "+padWithSpaces(currentLoggingEvent.level.name,5)+" - "+currentLoggingEvent.getCombinedMessages();var throwableStringRep=currentLoggingEvent.getThrowableStrRep();if(throwableStringRep){formattedMessage+=newLine+throwableStringRep;}

-popUp.log(currentLoggingEvent.level,formattedMessage);}

-if(focusPopUp){popUp.focus();}}}}

-log4javascript.Appender=Appender;function Logger(){var appender=new Appender();var loggerLevel=Level.ALL;this.log=function(level,params){if(enabled&&level.isGreaterOrEqual(this.getLevel())){var exception;var finalParamIndex=params.length-1;var lastParam=params[params.length-1];if(params.length>1&&isError(lastParam)){exception=lastParam;finalParamIndex--;}

-var messages=[];for(var i=0;i<=finalParamIndex;i++){messages[i]=params[i];}

-var loggingEvent=new LoggingEvent(this,new Date(),level,messages,exception);appender.append(loggingEvent);}};this.setLevel=function(level){loggerLevel=level;};this.getLevel=function(){return loggerLevel;};}

-Logger.prototype={trace:function(){this.log(Level.TRACE,arguments);},debug:function(){this.log(Level.DEBUG,arguments);},info:function(){this.log(Level.INFO,arguments);},warn:function(){this.log(Level.WARN,arguments);},error:function(){this.log(Level.ERROR,arguments);},fatal:function(){this.log(Level.FATAL,arguments);},isEnabledFor:function(level){return level.isGreaterOrEqual(this.getLevel());},isTraceEnabled:function(){return this.isEnabledFor(Level.TRACE);},isDebugEnabled:function(){return this.isEnabledFor(Level.DEBUG);},isInfoEnabled:function(){return this.isEnabledFor(Level.INFO);},isWarnEnabled:function(){return this.isEnabledFor(Level.WARN);},isErrorEnabled:function(){return this.isEnabledFor(Level.ERROR);},isFatalEnabled:function(){return this.isEnabledFor(Level.FATAL);}};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=new Logger();}

-return defaultLogger;};log4javascript.getLogger=log4javascript.getDefaultLogger;var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=new Logger();nullLogger.setLevel(Level.OFF);}

-return nullLogger;};var LoggingEvent=function(logger,timeStamp,level,messages,exception){this.logger=logger;this.timeStamp=timeStamp;this.level=level;this.messages=messages;this.exception=exception;};LoggingEvent.prototype={getThrowableStrRep:function(){return this.exception?getExceptionStringRep(this.exception):"";},getCombinedMessages:function(){return(this.messages.length===1)?this.messages[0]:this.messages.join(newLine);}};log4javascript.LoggingEvent=LoggingEvent;window.log4javascript=log4javascript;})();

-</textarea>

-					<p class="visibleifabletocopy">

-						Press this button to copy the code to the clipboard:

-						<input type="button" value="Copy" onclick="copyCode()" />

-					</p>

-					<p>

-						You can either paste the above code inside a script tag:

-					</p>

-					<pre class="code">

-&lt;script type="text/javascript"&gt;

-	... [Code here]...

-&lt;/script&gt;

-</pre>

-					<p>

-						 ... or include the <code>log4javascript_lite.js</code> included in the distribution:

-					</p>

-					<pre class="code">

-&lt;script type="text/javascript" src="log4javascript_lite.js"&gt;&lt;/script&gt;

-</pre>

-					<pre class="code">

-&lt;script type="text/javascript"&gt;

-	var log = log4javascript.getDefaultLogger();

-&lt;/script&gt;

-</pre>

-					<p>

-						Using log4javascript Lite is identical to using log4javascript with its default logger:

-					</p>

-					<pre class="code">

-&lt;script type="text/javascript"&gt;

-	var log = log4javascript.getDefaultLogger();

-	log.debug("What's going on here then?");

-&lt;/script&gt;

-</pre>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="api">

-					<h2>API</h2>

-					<p>

-						The functions available in log4javascript Lite make up a small subset of those provided

-						by log4javascript proper. Each function is <strong>named and called identically to the equivalent

-						function in log4javascript</strong>. Full details can be found in the

-						<a href="manual_lite.html">log4javascript Lite manual</a>.

-					</p>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-			</div>

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/docs/manual.html b/xos/core/static/log4javascript-1.4.6/docs/manual.html
deleted file mode 100644
index 4432aa5..0000000
--- a/xos/core/static/log4javascript-1.4.6/docs/manual.html
+++ /dev/null
@@ -1,3216 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript 1.4 manual</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-	</head>

-	<body>

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="index.html">log4javascript</a></h1>

-			</div>

-			<div id="content">

-				<div id="nav">

-					<a class="navitem" href="../index.html">home</a>

-					| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <a class="navitem" href="index.html">docs</a>

-					| <a class="navitem" href="quickstart.html">quick start</a>

-					| <a class="navitem" href="../demos/index.html">demos</a>

-					| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>

-					| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>

-				</div>

-				<h1>log4javascript 1.4 manual</h1>

-				<h2>Contents</h2>

-				<ul>

-					<li><a href="#intro">Introduction</a></li>

-					<li><a href="#noteaboutlog4javascript">Note about the log4javascript object</a></li>

-					<li>

-						<a href="#loggersappenderslayoutslevels">Loggers, appenders, layouts and levels</a>

-						<ul>

-							<li><a href="#configuration">Configuring appenders</a></li>

-							<li><a href="#loggersappenderslayoutslevelsexample">Example</a></li>

-						</ul>

-					</li>

-					<li><a href="#log4javascript">log4javascript static properties/methods</a></li>

-					<li><a href="#levels">Levels</a></li>

-					<li><a href="#loggers">Loggers</a></li>

-					<li>

-						<a href="#appenders">Appenders</a>

-						<ul>

-							<li><a href="#appender">Appender</a></li>

-							<li><a href="#alertappender">AlertAppender</a></li>

-							<li><a href="#ajaxappender">AjaxAppender</a></li>

-							<li><a href="#popupappender">PopUpAppender</a></li>

-							<li><a href="#inpageappender">InPageAppender</a></li>

-							<li><a href="#browserconsoleappender">BrowserConsoleAppender</a></li>

-						</ul>

-					</li>

-					<li>

-						<a href="#layouts">Layouts</a>

-						<ul>

-							<li><a href="#layout">Layout</a></li>

-							<li><a href="#nulllayout">NullLayout</a></li>

-							<li><a href="#simplelayout">SimpleLayout</a></li>

-							<li><a href="#patternlayout">PatternLayout</a></li>

-							<li><a href="#xmllayout">XmlLayout</a></li>

-							<li><a href="#jsonlayout">JsonLayout</a></li>

-							<li><a href="#httppostdatalayout">HttpPostDataLayout</a></li>

-						</ul>

-					</li>

-					<li><a href="#enabling">Enabling / disabling log4javascript</a></li>

-					<li>

-						<a href="#errorhandling">log4javascript error handling</a>

-						<ul>

-							<li><a href="#loglog">LogLog</a></li>

-						</ul>

-					</li>

-					<li><a href="#differences">Differences between log4javascript and log4j</a></li>

-				</ul>

-				<div id="intro">

-					<h2>Introduction</h2>

-					<p>

-						Anyone who has done a reasonable amount of JavaScript development will be

-						familiar with <code>alert</code> as a means of debugging. For

-						a small script, it works fine. But for anything of greater complexity than,

-						say, a rollover script its shortcomings become apparent. The most obvious problem

-						is the endless clicking of 'OK'. Another problem is that for a page

-						heavily reliant on events generated from user actions, alerts

-						can actually alter the way the page behaves. One final problem is infinite loops:

-						without alerts, the browser will notice that the script has messed

-						up and will offer the user the chance to stop the script running. With an

-						alert inside an infinite loop, you're forced to kill the browser.

-					</p>

-					<p>

-						At the other end of the scale there is

-						<a href="http://www.mozilla.org/projects/venkman/" target="_blank">Venkman</a>,

-						a full-on JavaScript debugger for Mozilla-based browsers such as Firefox. Here

-						I have to confess that I simply have not put in the time to learn how to make

-						it work well for me and I suspect I am not alone.

-					</p>

-					<p>

-						Nowadays, easily the best option for day-to-day JavaScript development is the brilliant

-						<a href="http://www.getfirebug.com" title="Firebug home page (opens in new window)"

-						   target="_blank">Firebug</a>, a Firefox plugin with built-in debugger, console, logging,

-						and profiler. It's a seriously impressive tool but by its very nature as a Firefox

-						plugin can only be used in one of the typical target browsers for mainstream web

-						development.

-					</p>

-					<p>

-						log4javascript was originally written as a cross-browser tool to ease the pain of JavaScript

-						debugging without the time investment required to use a debugger effectively. It requires

-						only a JavaScript include and one line of code to initialize with default settings.

-						Having for several years used log4j and its .NET port log4net, it was natural for me to

-						base it on log4j.

-					</p>

-					<p>

-						log4javascript is by no means the only JavaScript logging framework out there.

-						It is not even the only JavaScript implementation of log4j. It turns out the name

-						log4javascript is used by another JavaScript logging framework, and that the name log4js is

-						used by at least two other pieces of software; this version of log4javascript is unrelated

-						to any of those.

-					</p>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="noteaboutlog4javascript">

-					<h2>Note about the log4javascript object</h2>

-					<p>

-						All of log4javascript's instantiable classes are accessible via the log4javascript object, which

-						acts as a namespace. Therefore references to all class names must be preceded with "log4javascript.".

-						For example:

-					</p>

-					<p>

-						<code>var popUpAppender = new log4javascript.PopUpAppender();</code>

-					</p>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="loggersappenderslayoutslevels">

-					<h2>Loggers, Appenders, Layouts and Levels</h2>

-					<p>

-						A <em>logger</em> in log4javascript is the object on which log calls are

-						made. A logger may be assigned zero or more <em>appenders</em>.

-						An appender is an object that actually does the logging: for example,

-						a <code><a href="#popupappender">PopUpAppender</a></code> logs messages to

-						a pop-up console window while an <code><a href="#ajaxappender">AjaxAppender</a></code>

-						uses HTTP to send log messages back to the server. Each appender is assigned

-						a <em>layout</em>, which is responsible for formatting log messages that

-						are passed to an appender.

-					</p>

-					<p>

-						Every log message has a <em>level</em>. This is the severity of the message.

-						Available levels are <code>TRACE</code>, <code>DEBUG</code>, <code>INFO</code>,

-						<code>WARN</code>, <code>ERROR</code> and <code>FATAL</code> - these correspond to

-						the logging methods <code>trace</code>, <code>debug</code>, <code>info</code>,

-						<code>warn</code>, <code>error</code> and <code>fatal</code> of <code>Logger</code>.

-						Levels are ordered as follows: <code>TRACE</code> &lt; <code>DEBUG</code> &lt;

-						<code>INFO</code> &lt; <code>WARN</code> &lt; <code>ERROR</code> &lt;

-						<code>FATAL</code>. This means the <code>FATAL</code> is the most severe and

-						<code>TRACE</code> the least. Also included are levels called <code>ALL</code>

-						and <code>OFF</code> intended to enable or disable all logging respectively.

-					</p>

-					<p>

-						Both loggers and appenders also have threshold levels (by default, <code>DEBUG</code>

-						for loggers and <code>ALL</code> for appenders).

-						Setting a level to either a logger or an appender disables log messages of severity

-						lower than that level. For instance, if a level of <code>INFO</code> is set on a

-						logger then only log messages of severity <code>INFO</code> or greater will be logged,

-						meaning <code>DEBUG</code> and <code>TRACE</code> messages will not be logged. If the

-						same logger had two appenders, one of level <code>DEBUG</code> and one of level

-						<code>WARN</code> then the first appender will still only log messages of

-						<code>INFO</code> or greater while the second appender will only log messages of level

-						<code>WARN</code> or greater.

-					</p>

-					<p>

-						This allows the developer fine control over which messages get logged where.

-					</p>

-					<div id="configuration">

-						<h3>Configuring appenders</h3>

-						<p>

-							From version 1.4, <strong>configuring appenders is only possible via configuration

-							methods</strong>. As the number of configuration options increases it becomes increasingly

-							undesirable to use constructor parameters, so support for it has been dropped.

-						</p>

-					</div>

-					<div id="loggersappenderslayoutslevelsexample">

-						<h3>Example</h3>

-						<p>

-							<strong>NB.</strong> The Ajax side of this example relies on having

-							server-side processing in place.

-						</p>

-						<p>

-							First, log4javascript is initialized, and a logger (actually the

-							anonymous logger) is assigned to a variable called <code>log</code>:

-						</p>

-						<pre class="code">

-&lt;script type="text/javascript" src="log4javascript.js"&gt;&lt;/script&gt;

-&lt;script type="text/javascript"&gt;

-	//&lt;![CDATA[

-	var log = log4javascript.getLogger();

-</pre>

-						<p>

-							<code>log</code> does not yet have any appenders, so a call to <code>log.debug()</code>

-							will do nothing as yet. For this example we will use a

-							<code><a href="#popupappender">PopUpAppender</a></code> for debugging purposes.

-							Since the lifespan of the messages displayed in the pop-up is only going to be the

-							same as that of the window, a <code><a href="#patternlayout">PatternLayout</a></code>

-							is used that displays the time of the message and not the date (note that this is

-							also true of PopUpAppender's default layout). The format of the string passed into

-							PatternLayout is explained <a href="#patternlayout">below</a>.

-						</p>

-						<pre class="code">

-	var popUpAppender = new log4javascript.PopUpAppender();

-	var popUpLayout = new log4javascript.PatternLayout("%d{HH:mm:ss} %-5p - %m%n");

-	popUpAppender.setLayout(popUpLayout);

-	log.addAppender(popUpAppender);

-</pre>

-						<p>

-							Suppose that we also want to send log messages to the server, but limited to

-							error messages only. To achieve this we use an

-							<code><a href="#ajaxappender">AjaxAppender</a></code>. Note that if no layout is

-							specified then for convenience a default layout is used; in the case of

-							AjaxAppender, that is <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>,

-							which formats log messages as a standard HTTP POST string from which a simple

-							server-side script (not provided with log4javascript) will be able to extract

-							posted parameters. This is fine for our purposes:

-						</p>

-						<pre class="code">

-	var ajaxAppender = new log4javascript.AjaxAppender("myloggingservlet.do");

-	ajaxAppender.setThreshold(log4javascript.Level.<code>ERROR</code>);

-	log.addAppender(ajaxAppender);

-</pre>

-						<p>

-							Finally, some test log messages and the closing script tag:

-						</p>

-						<pre class="code">

-	log.debug("Debugging message (appears in pop-up)");

-	log.error("Error message (appears in pop-up and in server log)");

-	//]]&gt;

-&lt;/script&gt;

-</pre>

-						<p>

-							The full script:

-						</p>

-						<pre class="code">

-&lt;script type="text/javascript" src="log4javascript.js"&gt;&lt;/script&gt;

-&lt;script type="text/javascript"&gt;

-	//&lt;![CDATA[

-	var log = log4javascript.getLogger();

-	var popUpAppender = new log4javascript.PopUpAppender();

-	var popUpLayout = new log4javascript.PatternLayout("%d{HH:mm:ss} %-5p - %m%n");

-	popUpAppender.setLayout(popUpLayout);

-	log.addAppender(popUpAppender);

-	var ajaxAppender = new log4javascript.AjaxAppender("myloggingservlet.do");

-	ajaxAppender.setThreshold(log4javascript.Level.ERROR);

-	log.addAppender(ajaxAppender);

-	log.debug("Debugging message (appears in pop-up)");

-	log.error("Error message (appears in pop-up and in server log)");

-	//]]&gt;

-&lt;/script&gt;

-</pre>

-						<p>

-							<a href="../examples/example_manual.html" title="View example (opens in new window)"

-								target="_blank">See this example in action</a> (opens in new window)

-						</p>

-					</div>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="log4javascript">

-					<h2>log4javascript static properties/methods</h2>

-					<h4>Properties</h4>

-					<ul class="propertieslist">

-						<li class="property">

-							<div class="name">version</div>

-							<div class="summary">

-								The version number of your copy of log4javascript.

-							</div>

-						</li>

-						<li class="property">

-							<div class="name">edition</div>

-							<div class="summary">

-								The edition of your copy of log4javascript.

-							</div>

-						</li>

-						<li class="property">

-							<div class="name">logLog</div>

-							<div class="summary">

-								log4javascript's internal logging object. <a href="#loglog">See below for more details</a>.

-							</div>

-						</li>

-					</ul>

-					<h4>Methods</h4>

-					<ul class="propertieslist">

-						<li class="method">

-							<div class="name">getLogger</div>

-							<div class="methodsignature"><code>Logger <strong>getLogger</strong>([String <em>loggerName</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">loggerName</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								<p>

-									Returns a logger with the specified name, creating it if a logger with that name does not

-									already exist. If no name is specified, a logger is returned with name <code>[anonymous]</code>, and

-									subsequent calls to <code>getLogger()</code> (with no logger name specified) will return

-									this same logger object.

-								</p>

-								<p>

-									Note that the names <code>[anonymous]</code>, <code>[default]</code>, <code>[null]</code>

-									and <code>root</code> are reserved for

-									the anonymous logger, default logger, null logger and root logger respectively.

-								</p>

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">getDefaultLogger</div>

-							<div class="methodsignature"><code>Logger <strong>getDefaultLogger</strong>()</code></div>

-							<div class="summary">

-								Convenience method that returns the default logger. The default logger

-								has a single appender: a <code><a href="#popupappender">PopUpAppender</a></code>

-								with the default layout, width and height, and with <code>focusPopUp</code> set to false

-								and <code>lazyInit</code>, <code>useOldPopUp</code> and

-								<code>complainAboutPopUpBlocking</code> all set to true.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">getNullLogger</div>

-							<div class="methodsignature"><code>Logger <strong>getNullLogger</strong>()</code></div>

-							<div class="summary">

-								Returns an empty logger with no appenders. Useful for disabling all logging.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">getRootLogger</div>

-							<div class="methodsignature"><code>Logger <strong>getRootLogger</strong>()</code></div>

-							<div class="summary">

-								Returns the root logger from which all other loggers derive.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">resetConfiguration</div>

-							<div class="methodsignature"><code>void <strong>resetConfiguration</strong>()</code></div>

-							<div class="summary">

-								Resets the all loggers to their default level.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">setEnabled</div>

-							<div class="methodsignature"><code>void <strong>setEnabled</strong>(Boolean <em>enabled</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">enabled</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Enables or disables all logging, depending on <code>enabled</code>.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns true or false depending on whether logging is enabled.

-							</div>

-						</li>

-						<li class="method" id="log4javascriptaddeventlistener">

-							<div class="name">addEventListener</div>

-							<div class="methodsignature"><code>void <strong>addEventListener</strong>(String <em>eventType</em>, Function <em>listener</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">eventType</code>

-								</li>

-								<li class="param">

-									<code class="paramname">listener</code>

-								</li>

-							</ul>

-							<div class="summary">

-								<p>

-									Adds a function to be called when an event of the type specified occurs in log4javascript.

-									Supported event types are <code>load</code> (occurs once the page has loaded) and

-									<code>error</code>.

-								</p>

-								<p>

-									Each listener is pased three paramaters:

-								</p>

-								<ul>

-									<li><code>sender</code>. The object that raised the event (i.e. the log4javascript object);</li>

-									<li><code>eventType</code>. The type of the event;</li>

-									<li>

-										<code>eventArgs</code>. An object containing of event-specific arguments. For the <code>error</code> event,

-										this is an object with properties <code>message</code> and <code>exception</code>. For the <code>load</code>

-										event this is an empty object.

-									</li>

-								</ul>

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">removeEventListener</div>

-							<div class="methodsignature"><code>void <strong>removeEventListener</strong>(String <em>eventType</em>, Function <em>listener</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">eventType</code>

-								</li>

-								<li class="param">

-									<code class="paramname">listener</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Removes the event listener function supplied for the event of the type specified.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">dispatchEvent</div>

-							<div class="methodsignature"><code>void <strong>dispatchEvent</strong>(String <em>eventType</em>, Object <em>eventArgs</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">eventType</code>

-								</li>

-								<li class="param">

-									<code class="paramname">eventArgs</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Raises an event of type <code>eventType</code> on the <code>log4javascript</code> object.

-								Each of the listeners for this type of event (registered via <code>addEventListener</code>)

-								is called and passed <code>eventArgs</code> as the third parameter.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">setEventTypes</div>

-							<div class="methodsignature"><code>void <strong>setEventTypes</strong>(Array <em>eventTypes</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">eventTypes</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Used internally to specify the types of events that the <code>log4javascript</code> object can raise.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">setShowStackTraces</div>

-							<div class="methodsignature"><code>void <strong>setShowStackTraces</strong>(Boolean <em>show</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">show</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Enables or disables displaying of error stack traces, depending on <code>show</code>.

-								By default, stack traces are not displayed. (Only works in Firefox)

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">evalInScope</div>

-							<div class="methodsignature"><code>Object <strong>evalInScope</strong>(String <em>expr</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">expr</code>

-								</li>

-							</ul>

-							<div class="summary">

-								This evaluates the given expression in the log4javascript scope, thus allowing

-								scripts to access internal log4javascript variables and functions. This was written

-								for the purposes of automated testing but could be used by custom extensions to

-								log4javascript.

-							</div>

-						</li>

-					</ul>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="levels">

-					<h2>Levels</h2>

-					<p>

-						Levels are available as static properties of the <code>log4javascript.Level</code>

-						object. In ascending order of severity:

-					</p>

-					<ol>

-						<li><code>log4javascript.Level.ALL</code></li>

-						<li><code>log4javascript.Level.TRACE</code></li>

-						<li><code>log4javascript.Level.DEBUG</code></li>

-						<li><code>log4javascript.Level.INFO</code></li>

-						<li><code>log4javascript.Level.WARN</code></li>

-						<li><code>log4javascript.Level.ERROR</code></li>

-						<li><code>log4javascript.Level.FATAL</code></li>

-						<li><code>log4javascript.Level.OFF</code></li>

-					</ol>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="loggers">

-					<h2>Loggers</h2>

-					<p>

-						It is possible to have multiple loggers in log4javascript. For example, you

-						may wish to have a logger for debugging purposes that logs messages to a

-						pop-up window and a separate logger that reports any client-side application

-						errors to the server via Ajax.

-					</p>

-					<div id="loggerhierarchy">

-						<h3>Logger hierarchy and appender additivity</h3>

-						<p>

-							From version 1.4, log4javascript has hierarchical loggers, implemented in the same way

-							as log4j. In summary, you specify a logger's parent logger by means of a dot between the

-							parent logger name and the child logger name. Therefore the logger <code>tim.app.security</code>

-							inherits from <code>tim.app</code>, which in turn inherits from <code>tim</code> which,

-							finally, inherits from the root logger.

-						</p>

-						<p>

-							What inheritance means for a logger is that in the absence of a threshold level set

-							specifically on the logger it inherits its level from its parent; also, a logger inherits

-							all its parent's appenders (this is known as <em>appender additivity</em> in log4j. This

-							behaviour can be enabled or disabled via <code>setAdditivity()</code>. See below). In the

-							above example, if the root logger has a level of <code>DEBUG</code> and one appender,

-							each of the loggers <code>tim.app.security</code>, <code>tim.app</code> and <code>tim</code> would

-							inherit the root level's appender. If, say, <code>tim.app</code>'s threshold level was set

-							to <code>WARN</code>, <code>tim</code>'s effective level would remain at <code>DEBUG</code>

-							(inherited from the root logger) while <code>tim.app.security</code>'s effective level would

-							be <code>WARN</code>, inherited from <code>tim.app</code>. The important thing to note is

-							that appenders accumulate down the logger hierarchy while levels are simply inherited from

-							the nearest ancestor with a threshold level set.

-						</p>

-						<p>

-							For a detailed explanation of the logger hierarchy, see the

-							<a href="http://logging.apache.org/log4j/docs/manual.html" target="_blank"

-							   title="Log4j manual (opens in new window)">log4j manual</a>.

-						</p>

-					</div>

-					<p><strong>Notes</strong></p>

-					<ul>

-						<li>

-							It is not possible to instantiate loggers directly. Instead you must use

-							one of the methods of the <code>log4javascript</code> object: <code>getLogger</code>,

-							<code>getRootLogger</code>, <code>getDefaultLogger</code> or <code>getNullLogger</code>.

-						</li>

-					</ul>

-					<h4>Logger methods</h4>

-					<ul class="propertieslist">

-						<li class="method">

-							<div class="name">addAppender</div>

-							<div class="methodsignature"><code>void <strong>addAppender</strong>(Appender <em>appender</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">appender</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Adds the given appender.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">removeAppender</div>

-							<div class="methodsignature"><code>void <strong>removeAppender</strong>(Appender <em>appender</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">appender</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Removes the given appender.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">removeAllAppenders</div>

-							<div class="methodsignature"><code>void <strong>removeAllAppenders</strong>()</code></div>

-							<div class="summary">

-								Clears all appenders for the current logger.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">setLevel</div>

-							<div class="methodsignature"><code>void <strong>setLevel</strong>(Level <em>level</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">level</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Sets the level. Log messages of a lower level than <code>level</code> will not be logged.

-								Default value is <code>DEBUG</code>.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">getLevel</div>

-							<div class="methodsignature"><code>Level <strong>getLevel</strong>()</code></div>

-							<div class="summary">

-								Returns the level explicitly set for this logger or <code>null</code> if none has been set.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">getEffectiveLevel</div>

-							<div class="methodsignature"><code>Level <strong>getEffectiveLevel</strong>()</code></div>

-							<div class="summary">

-								Returns the level at which the logger is operating. This is either the level explicitly

-								set on the logger or, if no level has been set, the effective level of the logger's parent.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">setAdditivity</div>

-							<div class="methodsignature"><code>void <strong>setAdditivity</strong>(Boolean <em>additivity</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">additivity</code>

-								</li>

-							</ul>

-							<div class="summary">

-								<p>

-									Sets whether appender additivity is enabled (the default) or disabled. If set to false, this

-									particular logger will not inherit any appenders form its ancestors. Any descendant of this

-									logger, however, will inherit from its ancestors as normal, unless its own additivity is

-									explicitly set to false.

-								</p>

-								<p>

-									Default value is <code>true</code>.

-								</p>

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">getAdditivity</div>

-							<div class="methodsignature"><code>Level <strong>getLevel</strong>()</code></div>

-							<div class="summary">

-								Returns whether additivity is enabled for this logger.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">log</div>

-							<div class="methodsignature"><code>void <strong>log</strong>(Level <em>level</em>, Object <em>params</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">level</code>

-								</li>

-								<li class="param">

-									<code class="paramname">params</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Generic logging method used by wrapper methods such as <code>debug</code>,

-								<code>error</code> etc.

-							</div>

-							<p><strong>Notes</strong></p>

-							<ul>

-								<li>

-									The signature of this method has changed in 1.4.

-								</li>

-							</ul>

-						</li>

-						<li class="method">

-							<div class="name">trace</div>

-							<div class="methodsignature"><code>void <strong>trace</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>TRACE</code>.

-							</div>

-							<p><strong>Notes</strong></p>

-							<ul>

-								<li>

-									Logging of multiple messages in one call is new in 1.4.

-								</li>

-							</ul>

-						</li>

-						<li class="method">

-							<div class="name">debug</div>

-							<div class="methodsignature"><code>void <strong>debug</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>DEBUG</code>.

-							</div>

-							<p><strong>Notes</strong></p>

-							<ul>

-								<li>

-									Logging of multiple messages in one call is new in 1.4.

-								</li>

-							</ul>

-						</li>

-						<li class="method">

-							<div class="name">info</div>

-							<div class="methodsignature"><code>void <strong>info</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>INFO</code>.

-							</div>

-							<p><strong>Notes</strong></p>

-							<ul>

-								<li>

-									Logging of multiple messages in one call is new in 1.4.

-								</li>

-							</ul>

-						</li>

-						<li class="method">

-							<div class="name">warn</div>

-							<div class="methodsignature"><code>void <strong>warn</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>WARN</code>.

-							</div>

-							<p><strong>Notes</strong></p>

-							<ul>

-								<li>

-									Logging of multiple messages in one call is new in 1.4.

-								</li>

-							</ul>

-						</li>

-						<li class="method">

-							<div class="name">error</div>

-							<div class="methodsignature"><code>void <strong>error</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>ERROR</code>.

-							</div>

-							<p><strong>Notes</strong></p>

-							<ul>

-								<li>

-									Logging of multiple messages in one call is new in 1.4.

-								</li>

-							</ul>

-						</li>

-						<li class="method">

-							<div class="name">fatal</div>

-							<div class="methodsignature"><code>void <strong>fatal</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>FATAL</code>.

-							</div>

-							<p><strong>Notes</strong></p>

-							<ul>

-								<li>

-									Logging of multiple messages in one call is new in 1.4.

-								</li>

-							</ul>

-						</li>

-						<li class="method">

-							<div class="name">isEnabledFor</div>

-							<div class="methodsignature"><code>Boolean <strong>isEnabledFor</strong>(Level <em>level</em>, Error <em>exception</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">level</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Returns whether the logger is enabled for the specified level. 

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isTraceEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isTraceEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>TRACE</code> messages.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isDebugEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isDebugEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>DEBUG</code> messages.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isInfoEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isInfoEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>INFO</code> messages.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isWarnEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isWarnEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>WARN</code> messages.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isErrorEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isErrorEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>ERROR</code> messages.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isFatalEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isFatalEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>FATAL</code> messages.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">group</div>

-							<div class="methodsignature"><code>void <strong>group</strong>(String <em>name</em>, Boolean <em>initiallyExpanded</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">name</code>

-								</li>

-								<li class="param">

-									<code class="paramname">initiallyExpanded</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Starts a new group of log messages. In appenders that support grouping (currently

-								<code><a href="#popupappender">PopUpAppender</a></code> and

-								<code><a href="#inpageappender">InPageAppender</a></code>), a group appears as an expandable

-								section in the console, labelled with the <code>name</code> specified.

-								Specifying <code>initiallyExpanded</code> determines whether the

-								group starts off expanded (the default is <code>true</code>). Groups may be nested.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">groupEnd</div>

-							<div class="methodsignature"><code>void <strong>groupEnd</strong>()</code></div>

-							<div class="summary">

-								Ends the current group. If there is no group then this function has no effect.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">time</div>

-							<div class="methodsignature"><code>void <strong>time</strong>(String <em>name</em>, Level <em>level</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">name</code>

-								</li>

-								<li class="param">

-									<code class="paramname">level</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Starts a timer with name <code>name</code>. When the timer is ended with a

-								call to <code>timeEnd</code> using the same name, the amount of time that

-								has elapsed in milliseconds since the timer was started is logged at level

-								<code>level</code>. If not level is supplied, the level defaults to <code>INFO</code>.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">timeEnd</div>

-							<div class="methodsignature"><code>void <strong>timeEnd</strong>(String <em>name</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">name</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Ends the timer with name <code>name</code> and logs the time elapsed.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">assert</div>

-							<div class="methodsignature"><code>void <strong>assert</strong>(Object <em>expr</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">expr</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Asserts the given expression is <code>true</code> or evaluates to <code>true</code>.

-								If so, nothing is logged. If not, an error is logged at the <code>ERROR</code> level.

-							</div>

-						</li>

-					</ul>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="appenders">

-					<h2>Appenders</h2>

-					<div id="appender">

-						<h3>Appender</h3>

-						<p>

-							There are methods common to all appenders, as listed below.

-						</p>

-						<h4>Methods</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">doAppend</div>

-								<div class="methodsignature"><code>void <strong>doAppend</strong>(LoggingEvent <em>loggingEvent</em>)</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">loggingEvent</code>

-									</li>

-								</ul>

-								<div class="summary">

-									<p>

-										Checks the logging event's level is at least as severe as the appender's

-										threshold and calls the appender's <code>append</code> method if so.

-									</p>

-									<p>

-										This method should not in general be used directly or overridden.

-									</p>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">append</div>

-								<div class="methodsignature"><code>void <strong>append</strong>(LoggingEvent <em>loggingEvent</em>)</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">loggingEvent</code>

-									</li>

-								</ul>

-								<div class="summary">

-									Appender-specific method to append a log message. Every appender object should implement

-									this method.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setLayout</div>

-								<div class="methodsignature"><code>void <strong>setLayout</strong>(Layout <em>layout</em>)</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">layout</code>

-									</li>

-								</ul>

-								<div class="summary">

-									Sets the appender's layout.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getLayout</div>

-								<div class="methodsignature"><code>Layout <strong>getLayout</strong>()</code></div>

-								<div class="summary">

-									Returns the appender's layout.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setThreshold</div>

-								<div class="methodsignature"><code>void <strong>setThreshold</strong>(Level <em>level</em>)</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">level</code>

-									</li>

-								</ul>

-								<div class="summary">

-									Sets the appender's threshold. Log messages of level less severe than this

-									threshold will not be logged.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getThreshold</div>

-								<div class="methodsignature"><code>Level <strong>getThreshold</strong>()</code></div>

-								<div class="summary">

-									Returns the appender's threshold.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">toString</div>

-								<div class="methodsignature"><code>string <strong>toString</strong>()</code></div>

-								<div class="summary">

-									Returns a string representation of the appender. Every appender object should implement

-									this method.

-								</div>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-					<div id="alertappender">

-						<h3>AlertAppender</h3>

-						<p class="editions">Editions: <strong>Standard</strong></p>

-						<p>

-							Displays a log message as a JavaScript alert.

-						</p>

-						<h4>Constructor</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">AlertAppender</div>

-								<div class="methodsignature"><code><strong>AlertAppender</strong>()</code></div>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-					<div id="ajaxappender">

-						<h3>AjaxAppender</h3>

-						<p class="editions">Editions: <strong>Standard, Production</strong></p>

-						<p>

-							A flexible appender that asynchronously  sends log messages to a server via HTTP

-							(Ajax, if you insist, though the 'x' of Ajax only comes into play in any form if you use an

-							<code><a href="#xmllayout">XmlLayout</a></code>).

-						</p>

-						<p>

-							The default configuration is to send each log message as a separate HTTP post

-							request to the server using an <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>,

-							without waiting for a response before sending any subsequent requests. However,

-							an <code>AjaxAppender</code> may be configured to do any one of or combinations of the following:

-						</p>

-						<ul>

-							<li>

-								send log messages in batches (if the selected layout supports it - particularly suited

-								to <code>AjaxAppender</code> are <code><a href="#jsonlayout">JsonLayout</a></code> and

-								<code><a href="#xmllayout">XmlLayout</a></code>, both of which allow batching);

-							</li>

-							<li>

-								wait for a response from a previous request before sending the next log message / batch

-								of messages;

-							</li>

-							<li>

-								send all queued log messages at timed intervals.

-							</li>

-						</ul>

-						<p><strong>Notes</strong></p>

-						<ul>

-							<li>

-								AjaxAppender relies on the <code>XMLHttpRequest</code> object. It also requires

-								the presence of correctly implemented <code>setRequestHeader</code> method on

-								this object, which rules out Opera prior to version 8.01. If your browser does not

-								support the necessary objects then one alert will display to explain why it

-								doesn't work, after which the appender will silently switch off.

-							</li>

-							<li>

-								In AjaxAppender only, <code>setLayout</code> may not be called after the first

-								message has been logged.

-							</li>

-							<li>

-								The default layout is <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>.

-							</li>

-							<li>

-								From version 1.4, log message data is always sent as one or more name/value pairs.

-								In the case of <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>, data

-								is sent the same as in previous versions. For other layouts such as

-								<code><a href="#jsonlayout">JsonLayout</a></code> and

-								<code><a href="#xmllayout">XmlLayout</a></code>, the formatted log message is posted as

-								the value of a parameter called <code>data</code>, though this may be changed via

-								<code>setPostVarName</code>.

-							</li>

-							<li>

-								From version 1.4, log message timestamps are sent as standard JavaScript times, i.e.

-								the number of milliseconds since 00:00:00 UTC on January 1, 1970.

-							</li>

-							<li>

-								<p>

-									Also from version 1.4, any outstanding log messages may optionally be sent when the

-									main page unloads (i.e. user follows a link, closes the window or refreshes the

-									page). This behaviour may be enabled using <code>setSendAllOnUnload</code>; see

-									below.

-								</p>

-								<p>

-									This behaviour is dependent on <code>window.onbeforeunload</code>; unfortunately,

-									Opera does not always raise this event, so this feature does not work reliably in

-									Opera.

-								</p>

-							</li>

-						</ul>

-						<h4>Constructor</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">AjaxAppender</div>

-								<div class="methodsignature">

-									<code><strong>AjaxAppender</strong>(String <em>url</em>)</code>

-								</div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">url</code>

-										<div>

-											The URL to which log messages should be sent. Note that this is subject

-											to the usual Ajax restrictions: the URL should be in the same domain as that

-											of the page making the request.

-										</div>

-									</li>

-								</ul>

-							</li>

-						</ul>

-						<h4>Methods</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">setSendAllOnUnload</div>

-								<div class="methodsignature"><code>void <strong>setSendAllOnUnload</strong>(Boolean <em>sendAllOnUnload</em>)</code></div>

-								<div class="summary">

-									<p>

-										[<em>not available after first message logged</em>]

-									</p>

-									<p>

-										Whether to send all remaining unsent log messages to the server when the page

-										unloads.

-									</p>

-									<p>

-										Since version 1.4.3, the default value is <code>false</code>. Previously the

-										default was <code>true</code>.

-									</p>

-									<p><strong>Notes</strong></p>

-									<ul>

-										<li>

-											This feature was found not to work prior to version 1.4.3 in WebKit

-											browsers (e.g. Google Chrome, Safari). As a result, a workaround was

-											implemented in 1.4.3 which has the unfortunate side effect of popping up a

-											confirmation dialog to the user if there are any log messages to send when

-											the page unloads. As a result, this feature is now obtrusive for the user

-											and is therefore disabled by default.

-										</li>

-										<li>

-											This feature does not work in any version of Opera.

-										</li>

-									</ul>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isSendAllOnUnload</div>

-								<div class="methodsignature"><code>Boolean <strong>isSendAllOnUnload</strong>()</code></div>

-								<div class="summary">

-									Returns whether all remaining unsent log messages are sent to the server when the page unloads.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setPostVarName</div>

-								<div class="methodsignature"><code>void <strong>setPostVarName</strong>(String <em>postVarName</em>)</code></div>

-								<div class="summary">

-									<p>

-										[<em>not available after first message logged</em>]

-									</p>

-									<p>

-										Sets the post variable name whose value will the formatted log message(s) for

-										each request.

-									</p>

-									<p>

-										Default value is <code>data</code>.

-									</p>

-									<p><strong>Notes</strong></p>

-									<ul>

-										<li>

-											This has no effect if the current layout is an

-											<code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>.

-										</li>

-									</ul>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getPostVarName</div>

-								<div class="methodsignature"><code>String <strong>getPostVarName</strong>()</code></div>

-								<div class="summary">

-									Returns the post variable name whose value will the formatted log message(s) for

-									each request.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setTimed</div>

-								<div class="methodsignature"><code>void <strong>setTimed</strong>(Boolean <em>timed</em>)</code></div>

-								<div class="summary">

-									<p>

-										[<em>not available after first message logged</em>]

-									</p>

-									<p>

-										Whether to send log messages to the server at regular, timed intervals.

-									</p>

-									<p>

-										Default value is <code>false</code>.

-									</p>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isTimed</div>

-								<div class="methodsignature"><code>Boolean <strong>isTimed</strong>()</code></div>

-								<div class="summary">

-									Returns whether log messages are sent to the server at regular, timed intervals.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setWaitForResponse</div>

-								<div class="methodsignature"><code>void <strong>setWaitForResponse</strong>(Boolean <em>waitForResponse</em>)</code></div>

-								<div class="summary">

-									<p>

-										[<em>not available after first message logged</em>]

-									</p>

-									<p>

-										Sets whether to wait for a response from a previous HTTP request from this

-										appender before sending the next log message / batch of messages.

-									</p>

-									<p>

-										Default value is <code>false</code>.

-									</p>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isWaitForResponse</div>

-								<div class="methodsignature"><code>Boolean <strong>isWaitForResponse</strong>()</code></div>

-								<div class="summary">

-									Returns whether the appender waits for a response from a previous HTTP request from this

-									appender before sending the next log message / batch of messages.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setBatchSize</div>

-								<div class="methodsignature"><code>void <strong>setBatchSize</strong>(Number <em>batchSize</em>)</code></div>

-								<div class="summary">

-									<p>

-										[<em>not available after first message logged</em>]

-									</p>

-									<p>

-										Sets the number of log messages to send in each request. If not specified,

-										defaults to <code>1</code>.

-									</p>

-									<p><strong>Notes</strong></p>

-									<ul>

-										<li>

-											Setting this to a number greater than 1 means that the appender will wait

-											until it has forwarded that many valid log messages before sending any more.

-											This also means that if the page unloads for any reason and <code>sendAllOnUnload</code>

-											is not set to <code>true</code>, any log messages waiting in the queue will not be sent.

-										</li>

-										<li>

-											If batching is used in conjunction with timed sending of log messages,

-											messages will still be sent in batches of size <code>batchSize</code>,

-											regardless of how many log messages are queued by the time the timed

-											sending is invoked. Incomplete batches will not be sent except when the

-											page unloads, if <code>sendAllOnUnload</code> is set to <code>true</code>.

-										</li>

-									</ul>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getBatchSize</div>

-								<div class="methodsignature"><code>Number <strong>getBatchSize</strong>()</code></div>

-								<div class="summary">

-									Returns the number of log messages sent in each request. See above for more details.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setTimerInterval</div>

-								<div class="methodsignature"><code>void <strong>setTimerInterval</strong>(Number <em>timerInterval</em>)</code></div>

-								<div class="summary">

-									<p>

-										[<em>not available after first message logged</em>]

-									</p>

-									<p>

-										Sets the length of time in milliseconds between each sending of queued log

-										messages.

-									</p>

-									<p><strong>Notes</strong></p>

-									<ul>

-										<li>

-											<code>timerInterval</code> only has an effect in conjunction with

-											<code>timed</code> (set by <code>setTimed()</code>. If <code>timed</code>

-											is set to false then <code>timerInterval</code> has no effect.

-										</li>

-										<li>

-											Each time the queue of log messages or batches of messages is cleared,

-											the countdown to the next sending only starts once the final request

-											has been sent (and, if <code>waitForResponse</code> is set to <code>true</code>,

-											the final response received). This means that the actual interval at

-											which the queue of messages is cleared cannot be fixed.

-										</li>

-									</ul>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getTimerInterval</div>

-								<div class="methodsignature"><code>Number <strong>getTimerInterval</strong>()</code></div>

-								<div class="summary">

-									Returns the length of time in milliseconds between each sending of queued log

-									messages. See above for more details.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setRequestSuccessCallback</div>

-								<div class="methodsignature"><code>void <strong>setRequestSuccessCallback</strong>(Function <em>requestSuccessCallback</em>)</code></div>

-								<div class="summary">

-									<p>

-										Sets the function that is called whenever a successful request is made, called at the

-										point at which the response is received. This feature can be used to confirm

-										whether a request has been successful and act accordingly.

-									</p>

-									<p>

-										A single parameter, <code>xmlHttp</code>, is passed to the callback function.

-										This is the XMLHttpRequest object that performed the request.

-									</p>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setFailCallback</div>

-								<div class="methodsignature"><code>void <strong>setFailCallback</strong>(Function <em>failCallback</em>)</code></div>

-								<div class="summary">

-									<p>

-										Sets the function that is called whenever any kind of failure occurs in the appender,

-										including browser deficiencies or configuration errors (e.g. supplying a

-										non-existent URL to the appender). This feature can be used to handle

-										AjaxAppender-specific errors.

-									</p>

-									<p>

-										A single parameter, <code>message</code>, is passed to the callback function.

-										This is the error-specific message that caused the failure.

-									</p>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setSessionId</div>

-								<div class="methodsignature"><code>void <strong>setSessionId</strong>(String <em>sessionId</em>)</code></div>

-								<div class="summary">

-									Sets the session id sent to the server each time a request is made.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getSessionId</div>

-								<div class="methodsignature"><code>String <strong>getSessionId</strong>()</code></div>

-								<div class="summary">

-									Returns the session id sent to the server each time a request is made.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">addHeader</div>

-								<div class="methodsignature"><code>void <strong>addHeader</strong>(String <em>name</em>,

-									String <em>value</em>)</code></div>

-								<div class="summary">

-									<p>

-										Adds an HTTP header that is sent with each request.

-									</p>

-									<p>

-										<strong>Since: 1.4.3</strong>

-									</p>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getHeaders</div>

-								<div class="methodsignature"><code>Array <strong>getHeaders</strong>()</code></div>

-								<div class="summary">

-									Returns an array of the additional headers that are sent with each HTTP request.

-									Each array item is an object with properties <code>name</code> and

-									<code>value</code>.

-									<p>

-										<strong>Since: 1.4.3</strong>

-									</p>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">sendAll</div>

-								<div class="methodsignature"><code>void <strong>sendAll</strong>()</code></div>

-								<div class="summary">

-									Sends all log messages in the queue. If log messages are batched then only completed

-									batches are sent.

-								</div>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-					<div id="popupappender">

-						<h3>PopUpAppender</h3>

-						<p class="editions">Editions: <strong>Standard</strong></p>

-						<p>

-							Logs messages to a pop-up console window (note: you will need to disable pop-up

-							blockers to use it). The pop-up displays a list of all log messages, and has

-							the following features:

-						</p>

-						<ul>

-							<li>log messages are colour-coded by severity;</li>

-							<li>log messages are displayed in a monospace font to allow easy readability;</li>

-							<li>switchable wrap mode to allow wrapping of long lines</li>

-							<li>all whitespace in log messages is honoured (except in wrap mode);</li>

-							<li>filters to show and hide messages of a particular level;</li>

-							<li>

-								search facility that allows searching of log messages as you type, with the

-								following features:

-								<ul>

-									<li>supports regular expressions;</li>

-									<li>case sensitive or insensitive matching;</li>

-									<li>buttons to navigate through all the matches;</li>

-									<li>switch to highlight all matches;</li>

-									<li>switch to filter out all log messages that contain no matches;</li>

-									<li>switch to enable or disable the search;</li>

-									<li>search is dynamically applied to every log message as it is added to the console.</li>

-								</ul>

-							</li>

-							<li>switch to toggle between logging from the top down and from the bottom up;</li>

-							<li>switch to turn automatic scrolling when a new message is logged on and off;</li>

-							<li>switch to turn off all logging to the pop-up (useful if a timer is generating unwanted log messages);</li>

-							<li>optional configurable limit to the number of log message that are displayed. If

-								set and this limit is reached, each new log message will cause the oldest one to

-								be discarded;</li>

-							<li>grouped log messages. Groups may be nested and each has a button to show or hide the log messages in that group;</li>

-							<li>clear button to allow user to delete all current log messages.</li>

-							<li>

-								command prompt with up/down arrow history. Command line functions may be added

-								to the appender. Several command line functions are built in:

-								<ul class="propertieslist">

-									<li class="method">

-										<div class="methodsignature"><code><strong>$</strong>(String <em>id</em>)</code></div>

-										<div class="summary">

-											Prints a string representation of a single element with the id supplied.

-										</div>

-									</li>

-									<li class="method">

-										<div class="methodsignature"><code><strong>dir</strong>(Object <em>obj</em>)</code></div>

-										<div class="summary">

-											Prints a list of a properties of the object supplied.

-										</div>

-									</li>

-									<li class="method">

-										<div class="methodsignature"><code><strong>dirxml</strong>(HTMLElement <em>el</em>)</code></div>

-										<div class="summary">

-											Prints the XML source code of an HTML or XML element

-										</div>

-									</li>

-									<li class="method">

-										<div class="methodsignature"><code><strong>cd</strong>(Object <em>win</em>)</code></div>

-										<div class="summary">

-											Changes the scope of execution of commands to the named frame or window (either a

-											window/frame name or a reference to a window object may be supplied).

-										</div>

-									</li>

-									<li class="method">

-										<div class="methodsignature"><code><strong>clear</strong>()</code></div>

-										<div class="summary">

-											Clears the console.

-										</div>

-									</li>

-									<li class="method">

-										<div class="methodsignature"><code><strong>keys</strong>(Object <em>obj</em>)</code></div>

-										<div class="summary">

-											Prints a list of the names of all properties of the object supplied.

-										</div>

-									</li>

-									<li class="method">

-										<div class="methodsignature"><code><strong>values</strong>(Object <em>obj</em>)</code></div>

-										<div class="summary">

-											Prints a list of the values of all properties of the object supplied.

-										</div>

-									</li>

-									<li class="method">

-										<div class="methodsignature"><code><strong>expansionDepth</strong>(Number <em>depth</em>)</code></div>

-										<div class="summary">

-											Sets the number of levels of expansion of objects that are displayed by

-											the command line. The default value is 1.

-										</div>

-									</li>

-								</ul>

-							</li>

-						</ul>

-						<p><strong>Notes</strong></p>

-						<ul>

-							<li>

-								<p>

-									The default layout for this appender is <code><a href="#patternlayout">PatternLayout</a></code>

-									with pattern string

-								</p>

-								<p>

-									<code>%d{HH:mm:ss} %-5p - %m{1}%n</code>

-								</p>

-							</li>

-						</ul>

-						<h4>Constructor</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">PopUpAppender</div>

-								<div class="methodsignature">

-							   		<code><strong>PopUpAppender</strong>([Boolean <em>lazyInit</em>,

-									Boolean <em>initiallyMinimized</em>, Boolean <em>useDocumentWrite</em>,

-									Number <em>width</em>, Number <em>height</em>])</code>

-								</div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">lazyInit</code>

-										[<em>optional</em>]

-										<div>

-											Set this to <code>true</code> to open the pop-up only when the first log

-											message reaches the appender. Otherwise, the pop-up window opens as soon as the

-											appender is created. If not specified, defaults to <code>false</code>.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">initiallyMinimized</code>

-										[<em>optional</em>]

-										<div>

-											<p>

-												Whether the console window should start off hidden / minimized.

-												If not specified, defaults to <code>false</code>.

-											</p>

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">useDocumentWrite</code>

-										[<em>optional</em>]

-										<div>

-											<p>

-												Specifies how the console window is created. By default, the console window is

-												created dynamically using <code>document</code>'s <code>write</code> method. This has the

-												advantage of keeping all the code in one single JavaScript file. However, if your

-												page sets <code>document.domain</code> then the browser prevents script access to

-												a window unless it too has the same value set for <code>document.domain</code>. To

-												get round this issue, you can set <code>useDocumentWrite</code> to <code>false</code>

-												and log4javascript will instead use the external HTML file <code>console.html</code>

-												(or <code>console_uncompressed.html</code> if you're using an uncompressed version of

-												log4javascript.js), which must be placed in the same directory as your log4javascript.js file.

-											</p>

-											<p>

-												Note that if <code>useDocumentWrite</code> is set to <code>true</code>, the old pop-up

-												window will always be closed and a new one created whenever the page is refreshed, even

-												if <code>setUseOldPopUp(true)</code> has been called.

-											</p>

-											<p>

-												In general it's simpler to use the <code>document.write</code> method, so unless your

-												page needs to set <code>document.domain</code>, <code>useDocumentWrite</code> should

-												be set to <code>true</code>.

-											</p>

-											<p>

-												If not specified, defaults to <code>true</code>.

-											</p>

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">width</code>

-										[<em>optional</em>]

-										<div>

-											The outer width in pixels of the pop-up window. If not specified,

-											defaults to <code>600</code>.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">height</code>

-										[<em>optional</em>]

-										<div>

-											The outer height in pixels of the pop-up window. If not specified,

-											defaults to <code>400</code>.

-										</div>

-									</li>

-								</ul>

-							</li>

-						</ul>

-						<h4>Methods</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">isInitiallyMinimized</div>

-								<div class="methodsignature"><code>Boolean <strong>isInitiallyMinimized</strong>()</code></div>

-								<div class="summary">

-									Returns whether the console window starts off hidden / minimized.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setInitiallyMinimized</div>

-								<div class="methodsignature"><code>void <strong>setInitiallyMinimized</strong>(Boolean <em>initiallyMinimized</em>)</code></div>

-								<div class="summary">

-									[<em>not available after initialization</em>]

-									<br />

-									Sets whether the console window should start off hidden / minimized.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isFocusPopUp</div>

-								<div class="methodsignature"><code>Boolean <strong>isFocusPopUp</strong>()</code></div>

-								<div class="summary">

-									Returns whether the pop-up window is focussed (i.e. brought it to the front)

-									when a new log message is added. Default value is <code>false</code>.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setFocusPopUp</div>

-								<div class="methodsignature"><code>void <strong>setFocusPopUp</strong>(Boolean <em>focusPopUp</em>)</code></div>

-								<div class="summary">

-									Sets whether to focus the pop-up window (i.e. bring it to the front)

-									when a new log message is added.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isUseOldPopUp</div>

-								<div class="methodsignature"><code>Boolean <strong>isUseOldPopUp</strong>()</code></div>

-								<div class="summary">

-									<p>

-										Returns whether the same pop-up window is used if the main page is

-										reloaded. If set to <code>true</code>, when the page is reloaded

-										a line is drawn in the pop-up and subsequent log messages are added

-										to the same pop-up. Otherwise, a new pop-up window is created that

-										replaces the original pop-up. If not specified, defaults to

-										<code>true</code>.

-									</p>

-									<p><strong>Notes</strong></p>

-									<ul>

-										<li>

-											In Internet Explorer 5, the browser prevents this from working

-											properly, so a new pop-up window is always created when the main

-											page reloads. Also, the original pop-up does not get closed.

-										</li>

-									</ul>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setUseOldPopUp</div>

-								<div class="methodsignature"><code>void <strong>setUseOldPopUp</strong>(Boolean <em>useOldPopUp</em>)</code></div>

-								<div class="summary">

-									[<em>not available after initialization</em>]

-									<br />

-									Sets whether to use the same pop-up window if the main page is reloaded.

-									See <code>isUseOldPopUp</code> above for details.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isComplainAboutPopUpBlocking</div>

-								<div class="methodsignature"><code>Boolean <strong>isComplainAboutPopUpBlocking</strong>()</code></div>

-								<div class="summary">

-									Returns whether an alert is shown to the user when the pop-up window

-									cannot be created as a result of a pop-up blocker. Default value is <code>true</code>.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setComplainAboutPopUpBlocking</div>

-								<div class="methodsignature"><code>void <strong>setComplainAboutPopUpBlocking</strong>(Boolean <em>complainAboutPopUpBlocking</em>)</code></div>

-								<div class="summary">

-									[<em>not available after initialization</em>]

-									<br />

-									Sets whether to announce to show an alert to the user when the pop-up window

-									cannot be created as a result of a pop-up blocker.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isNewestMessageAtTop</div>

-								<div class="methodsignature"><code>Boolean <strong>isNewestMessageAtTop</strong>()</code></div>

-								<div class="summary">

-									Returns whether new log messages are displayed at the top of the pop-up window.

-									Default value is <code>false</code> (i.e. log messages are appended to the bottom of the window).

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setNewestMessageAtTop</div>

-								<div class="methodsignature"><code>void <strong>setNewestMessageAtTop</strong>(Boolean <em>newestMessageAtTop</em>)</code></div>

-								<div class="summary">

-									Sets whether to display new log messages at the top inside the pop-up window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isScrollToLatestMessage</div>

-								<div class="methodsignature"><code>Boolean <strong>isScrollToLatestMessage</strong>()</code></div>

-								<div class="summary">

-									Returns whether the pop-up window scrolls to display the latest log message when a new message

-									is logged. Default value is <code>true</code>.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setScrollToLatestMessage</div>

-								<div class="methodsignature"><code>void <strong>setScrollToLatestMessage</strong>(Boolean <em>scrollToLatestMessage</em>)</code></div>

-								<div class="summary">

-									Sets whether to scroll the pop-up window to display the latest log message when a new message

-									is logged.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isReopenWhenClosed</div>

-								<div class="methodsignature"><code>Boolean <strong>isReopenWhenClosed</strong>()</code></div>

-								<div class="summary">

-									Returns whether the pop-up window reopens automatically after being closed when a new log message is logged.

-									Default value is <code>false</code>.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setReopenWhenClosed</div>

-								<div class="methodsignature"><code>void <strong>setReopenWhenClosed</strong>(Boolean <em>reopenWhenClosed</em>)</code></div>

-								<div class="summary">

-									Sets whether to reopen the pop-up window automatically after being closed when a new log message is logged.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getWidth</div>

-								<div class="methodsignature"><code>Number <strong>getWidth</strong>()</code></div>

-								<div class="summary">

-									Returns the outer width in pixels of the pop-up window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setWidth</div>

-								<div class="methodsignature"><code>void <strong>setWidth</strong>(Number <em>width</em>)</code></div>

-								<div class="summary">

-									[<em>not available after initialization</em>]

-									<br />

-									Sets the outer width in pixels of the pop-up window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getHeight</div>

-								<div class="methodsignature"><code>Number <strong>getHeight</strong>()</code></div>

-								<div class="summary">

-									[<em>not available after initialization</em>]

-									<br />

-									Returns the outer height in pixels of the pop-up window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setHeight</div>

-								<div class="methodsignature"><code>void <strong>setHeight</strong>(Number <em>height</em>)</code></div>

-								<div class="summary">

-									Sets the outer height in pixels of the pop-up window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getMaxMessages</div>

-								<div class="methodsignature"><code>Number <strong>getMaxMessages</strong>()</code></div>

-								<div class="summary">

-									Returns the largest number of log messages that are displayed and stored

-									by the the console. Once reached, a new log message wil cause the

-									oldest message to be discarded.  Default value is <code>null</code>, which means no

-									limit is applied.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setMaxMessages</div>

-								<div class="methodsignature"><code>void <strong>setMaxMessages</strong>(Number <em>maxMessages</em>)</code></div>

-								<div class="summary">

-									[<em>not available after initialization</em>]

-									<br />

-									Sets the largest number of messages displayed and stored by the console window. Set

-									this to <code>null</code> to make this number unlimited.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isShowCommandLine</div>

-								<div class="methodsignature"><code>Boolean <strong>isShowCommandLine</strong>()</code></div>

-								<div class="summary">

-									Returns whether the console includes a command line.

-									Default value is <code>true</code>.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setShowCommandLine</div>

-								<div class="methodsignature"><code>void <strong>setShowCommandLine</strong>(Boolean <em>showCommandLine</em>)</code></div>

-								<div class="summary">

-									Sets whether the console includes a command line.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getCommandLineObjectExpansionDepth</div>

-								<div class="methodsignature"><code>Number <strong>getCommandLineObjectExpansionDepth</strong>()</code></div>

-								<div class="summary">

-									Returns the number of levels to expand when an object value is logged to the console.

-									Each property of an object above this threshold will be expanded if it is itself an object

-									or array, otherwise its string representation will be displayed. Default value is 1 (i.e.

-									the properties of the object logged will be displayed in their string representation but

-									not expanded).

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setCommandLineObjectExpansionDepth:</div>

-								<div class="methodsignature"><code>void <strong>setCommandLineObjectExpansionDepth</strong>(Number <em>expansionDepth</em>)</code></div>

-								<div class="summary">

-									Sets the number of levels to expand when an object value is logged to the console.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getCommandWindow</div>

-								<div class="methodsignature"><code>Window <strong>getCommandWindow</strong>()</code></div>

-								<div class="summary">

-									Returns a reference to the window in which commands typed into the command line

-									are currently being executed.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setCommandWindow</div>

-								<div class="methodsignature"><code>void <strong>setCommandWindow</strong>(Window <em>commandWindow</em>)</code></div>

-								<div class="summary">

-									Sets the window in which commands typed into the command line are executed.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getCommandLayout</div>

-								<div class="methodsignature"><code>Number <strong>getCommandLayout</strong>()</code></div>

-								<div class="summary">

-									Returns the layout used to format the output for commands typed into the command line.

-									The default value is a <code><a href="#patternlayout">PatternLayout</a></code> with

-									pattern string <code>%m</code>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setCommandLayout</div>

-								<div class="methodsignature"><code>void <strong>setCommandLayout</strong>(Layout <em>commandLayout</em>)</code></div>

-								<div class="summary">

-									Sets the layout used to format the output for commands typed into the command line.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">clear</div>

-								<div class="methodsignature"><code>void <strong>clear</strong>()</code></div>

-								<div class="summary">

-									Clears all messages from the console window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">close</div>

-								<div class="methodsignature"><code>void <strong>close</strong>()</code></div>

-								<div class="summary">

-									Closes the pop-up window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">show</div>

-								<div class="methodsignature"><code>void <strong>show</strong>()</code></div>

-								<div class="summary">

-									Opens the pop-up window, if not already open.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">hide</div>

-								<div class="methodsignature"><code>void <strong>hide</strong>()</code></div>

-								<div class="summary">

-									Closes the pop-up window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">focus</div>

-								<div class="methodsignature"><code>void <strong>focus</strong>()</code></div>

-								<div class="summary">

-									Brings the console window to the top and gives it the focus.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">focusCommandLine</div>

-								<div class="methodsignature"><code>void <strong>focusCommandLine</strong>()</code></div>

-								<div class="summary">

-									Brings the console window to the top and gives the focus to the command line.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">focusSearch</div>

-								<div class="methodsignature"><code>void <strong>focusSearch</strong>()</code></div>

-								<div class="summary">

-									Brings the console window to the top and gives the focus to the search box.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">evalCommandAndAppend</div>

-								<div class="methodsignature"><code>void <strong>evalCommandAndAppend</strong>(String <em>expr</em>)</code></div>

-								<div class="summary">

-									Evaluates the expression and appends the result to the console.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">addCommandLineFunction</div>

-								<div class="methodsignature"><code>void <strong>addCommandLineFunction</strong>(String <em>functionName</em>, Function <em>commandLineFunction</em>)</code></div>

-								<div class="summary">

-									<p>

-										Adds a function with the name specified to the list of functions available on the command line.

-										This feature may be used to add custom functions to the command line.

-									</p>

-									<p>

-										When you call the function on the command line, <code>commandLineFunction</code> is executed with the

-										following three parameters:

-									</p>

-									<ul>

-										<li><em>appender</em>. A reference to the appender in which the command was executed;</li>

-										<li><em>args</em>.

-											An array-like list of parameters passed into the function on the command line

-											(actually a reference to the <code>arguments</code> object representing the parameters passed

-											into the function by the user);</li>

-										<li><em>returnValue</em>. This is an object with two properties that allow the function to control

-											how the result is displayed:

-											<ul>

-												<li><em>appendResult</em>. A boolean value that determines whether the returned value from this

-													function is appended to the console. The default value is <code>true</code>;</li>

-												<li><em>isError</em>. A boolean value that specifies whether the output of this function

-													should be displayed as an error. The default value is <code>false</code>.</li>

-											</ul>

-										</li>

-									</ul>

-									<p>

-										The value returned by the function is formatted by the command layout and appended to the console.

-									</p>

-								</div>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-					<div id="inpageappender">

-						<h3>InPageAppender</h3>

-						<p class="editions">Editions: <strong>Standard</strong></p>

-						<p>

-							Logs messages to a console window in the page. The console is identical

-							to that used by the <code><a href="#popupappender">PopUpAppender</a></code>, except

-							for the absence of a 'Close' button.

-						</p>

-						<p><strong>Notes</strong></p>

-						<ul>

-							<li>

-								Prior to log4javascript 1.3, InPageAppender was known as InlineAppender.

-								For the sake of backwards compatibility, InlineAppender is still included in

-								1.3 and later as an alias for InPageAppender.

-							</li>

-							<li>

-								<p>

-									The default layout for this appender is <code><a href="#patternlayout">PatternLayout</a></code>

-									with pattern string

-								</p>

-								<p>

-									<code>%d{HH:mm:ss} %-5p - %m{1}%n</code>

-								</p>

-							</li>

-						</ul>

-						<h4>Constructor</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">InPageAppender</div>

-								<div class="methodsignature">

-									<code><strong>InPageAppender</strong>(HTMLElement <em>container</em>[,

-									Boolean <em>lazyInit</em>, Boolean <em>initiallyMinimized</em>,

-									Boolean <em>useDocumentWrite</em>, String <em>width</em>, String <em>height</em>])</code>

-								</div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">container</code>

-										<div>

-											The container element for the console window. This should be an HTML element.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">lazyInit</code>

-										[<em>optional</em>]

-										<div>

-											Set this to <code>true</code> to create the console only when the first log

-											message reaches the appender. Otherwise, the console is initialized as soon as the

-											appender is created. If not specified, defaults to <code>true</code>.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">initiallyMinimized</code>

-										[<em>optional</em>]

-										<div>

-											<p>

-												Whether the console window should start off hidden / minimized.

-												If not specified, defaults to <code>false</code>.

-											</p>

-											<p><strong>Notes</strong></p>

-											<ul>

-												<li>

-													In Safari (and possibly other browsers) hiding an <code>iframe</code>

-													resets its document, thus destroying the console window.

-												</li>

-											</ul>

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">useDocumentWrite</code>

-										[<em>optional</em>]

-										<div>

-											<p>

-												Specifies how the console window is created. By default, the console window is

-												created dynamically using <code>document</code>'s <code>write</code> method. This has the

-												advantage of keeping all the code in one single JavaScript file. However, if your

-												page sets <code>document.domain</code> then the browser prevents script access to

-												a window unless it too has the same value set for <code>document.domain</code>. To

-												get round this issue, you can set <code>useDocumentWrite</code> to <code>false</code>

-												and log4javascript will instead use the external HTML file <code>console.html</code>

-												(or <code>console_uncompressed.html</code> if you're using an uncompressed version of

-												log4javascript.js), which must be placed in the same directory as your log4javascript.js file.

-											</p>

-											<p>

-												In general it's simpler to use the <code>document.write</code> method, so unless your

-												page needs to set <code>document.domain</code>, <code>useDocumentWrite</code> should

-												be set to <code>true</code>.

-											</p>

-											<p>

-												If not specified, defaults to <code>true</code>.

-											</p>

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">width</code>

-										[<em>optional</em>]

-										<div>

-											The width of the console window. Any valid CSS length may be used. If not

-											specified, defaults to <code>100%</code>.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">height</code>

-										[<em>optional</em>]

-										<div>

-											The height of the console window. Any valid CSS length may be used. If not

-											specified, defaults to <code>250px</code>.

-										</div>

-									</li>

-								</ul>

-							</li>

-						</ul>

-						<h4>Methods</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">addCssProperty</div>

-								<div class="methodsignature"><code>void <strong>addCssProperty</strong>(String <em>name</em>, String <em>value</em>)</code></div>

-								<div class="summary">

-									Sets a CSS style property on the HTML element containing the console iframe.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isVisible</div>

-								<div class="methodsignature"><code>Boolean <strong>isVisible</strong>()</code></div>

-								<div class="summary">

-									Returns whether the console window is currently visible.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isInitiallyMinimized</div>

-								<div class="methodsignature"><code>Boolean <strong>isInitiallyMinimized</strong>()</code></div>

-								<div class="summary">

-									Returns whether the console window starts off hidden / minimized.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setInitiallyMinimized</div>

-								<div class="methodsignature"><code>void <strong>setInitiallyMinimized</strong>(Boolean <em>initiallyMinimized</em>)</code></div>

-								<div class="summary">

-									[<em>not available after initialization</em>]

-									<br />

-									Sets whether the console window should start off hidden / minimized.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isNewestMessageAtTop</div>

-								<div class="methodsignature"><code>Boolean <strong>isNewestMessageAtTop</strong>()</code></div>

-								<div class="summary">

-									Returns whether new log messages are displayed at the top of the console window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setNewestMessageAtTop</div>

-								<div class="methodsignature"><code>void <strong>setNewestMessageAtTop</strong>(Boolean <em>newestMessageAtTop</em>)</code></div>

-								<div class="summary">

-									Sets whether to display new log messages at the top inside the console window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isScrollToLatestMessage</div>

-								<div class="methodsignature"><code>Boolean <strong>isScrollToLatestMessage</strong>()</code></div>

-								<div class="summary">

-									Returns whether the pop-up window scrolls to display the latest log message when a new message

-									is logged.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setScrollToLatestMessage</div>

-								<div class="methodsignature"><code>void <strong>setScrollToLatestMessage</strong>(Boolean <em>scrollToLatestMessage</em>)</code></div>

-								<div class="summary">

-									Sets whether to scroll the console window to display the latest log message when a new message

-									is logged.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getWidth</div>

-								<div class="methodsignature"><code>String <strong>getWidth</strong>()</code></div>

-								<div class="summary">

-									Returns the outer width of the console window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setWidth</div>

-								<div class="methodsignature"><code>void <strong>setWidth</strong>(String <em>width</em>)</code></div>

-								<div class="summary">

-									[<em>not available after initialization</em>]

-									<br />

-									Sets the outer width of the console window. Any valid CSS length may be used.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getHeight</div>

-								<div class="methodsignature"><code>String <strong>getHeight</strong>()</code></div>

-								<div class="summary">

-									Returns the outer height of the console window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setHeight</div>

-								<div class="methodsignature"><code>void <strong>setHeight</strong>(String <em>height</em>)</code></div>

-								<div class="summary">

-									[<em>not available after initialization</em>]

-									<br />

-									Sets the outer height of the console window. Any valid CSS length may be used.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getMaxMessages</div>

-								<div class="methodsignature"><code>Number <strong>getMaxMessages</strong>()</code></div>

-								<div class="summary">

-									Returns the largest number of messages displayed and stored by the console window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setMaxMessages</div>

-								<div class="methodsignature"><code>void <strong>setMaxMessages</strong>(Number <em>maxMessages</em>)</code></div>

-								<div class="summary">

-									[<em>not available after initialization</em>]

-									<br />

-									Sets the largest number of messages displayed and stored by the console window. Set

-									this to <code>null</code> to make this number unlimited.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">isShowCommandLine</div>

-								<div class="methodsignature"><code>Boolean <strong>isShowCommandLine</strong>()</code></div>

-								<div class="summary">

-									Returns whether the console includes a command line.

-									Default value is <code>true</code>.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setShowCommandLine</div>

-								<div class="methodsignature"><code>void <strong>setShowCommandLine</strong>(Boolean <em>showCommandLine</em>)</code></div>

-								<div class="summary">

-									Sets whether the console includes a command line.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getCommandLineObjectExpansionDepth</div>

-								<div class="methodsignature"><code>Number <strong>getCommandLineObjectExpansionDepth</strong>()</code></div>

-								<div class="summary">

-									Returns the number of levels to expand when an object value is logged to the console.

-									Each property of an object above this threshold will be expanded if it is itself an object

-									or array, otherwise its string representation will be displayed. Default value is 1 (i.e.

-									the properties of the object logged will be displayed in their string representation but

-									not expanded).

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setCommandLineObjectExpansionDepth:</div>

-								<div class="methodsignature"><code>void <strong>setCommandLineObjectExpansionDepth</strong>(Number <em>expansionDepth</em>)</code></div>

-								<div class="summary">

-									Sets the number of levels to expand when an object value is logged to the console.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getCommandWindow</div>

-								<div class="methodsignature"><code>Window <strong>getCommandWindow</strong>()</code></div>

-								<div class="summary">

-									Returns a reference to the window in which commands typed into the command line

-									are currently being executed.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setCommandWindow</div>

-								<div class="methodsignature"><code>void <strong>setCommandWindow</strong>(Window <em>commandWindow</em>)</code></div>

-								<div class="summary">

-									Sets the window in which commands typed into the command line are executed.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getCommandLayout</div>

-								<div class="methodsignature"><code>Number <strong>getCommandLayout</strong>()</code></div>

-								<div class="summary">

-									Returns the layout used to format the output for commands typed into the command line.

-									The default value is a <code><a href="#patternlayout">PatternLayout</a></code> with

-									pattern string <code>%m</code>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setCommandLayout</div>

-								<div class="methodsignature"><code>void <strong>setCommandLayout</strong>(Layout <em>commandLayout</em>)</code></div>

-								<div class="summary">

-									Sets the layout used to format the output for commands typed into the command line.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">clear</div>

-								<div class="methodsignature"><code>void <strong>clear</strong>()</code></div>

-								<div class="summary">

-									Clears all messages from the console window.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">show</div>

-								<div class="methodsignature"><code>void <strong>show</strong>()</code></div>

-								<div class="summary">

-									<p>

-										Shows / unhides the console window.

-									</p>

-									<p><strong>Notes</strong></p>

-									<ul>

-										<li>

-											In Safari (and possibly other browsers), hiding an <code>iframe</code>

-											resets its document, thus destroying the console window.

-										</li>

-									</ul>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">hide</div>

-								<div class="methodsignature"><code>void <strong>hide</strong>()</code></div>

-								<div class="summary">

-									<p>

-										Hides / minimizes the console window.

-									</p>

-									<p><strong>Notes</strong></p>

-									<ul>

-										<li>

-											In Safari (and possibly other browsers), hiding an <code>iframe</code>

-											resets its document, thus destroying the console window.

-										</li>

-									</ul>

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">close</div>

-								<div class="methodsignature"><code>void <strong>close</strong>()</code></div>

-								<div class="summary">

-									Removes the console window iframe from the main document.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">focus</div>

-								<div class="methodsignature"><code>void <strong>focus</strong>()</code></div>

-								<div class="summary">

-									Brings the console window to the top and gives it the focus.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">focusCommandLine</div>

-								<div class="methodsignature"><code>void <strong>focusCommandLine</strong>()</code></div>

-								<div class="summary">

-									Brings the console window to the top and gives the focus to the command line.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">focusSearch</div>

-								<div class="methodsignature"><code>void <strong>focusSearch</strong>()</code></div>

-								<div class="summary">

-									Brings the console window to the top and gives the focus to the search box.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">evalCommandAndAppend</div>

-								<div class="methodsignature"><code>void <strong>evalCommandAndAppend</strong>(String <em>expr</em>)</code></div>

-								<div class="summary">

-									Evaluates the expression and appends the result to the console.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">addCommandLineFunction</div>

-								<div class="methodsignature"><code>void <strong>addCommandLineFunction</strong>(String <em>functionName</em>, Function <em>commandLineFunction</em>)</code></div>

-								<div class="summary">

-									<p>

-										Adds a function with the name specified to the list of functions available on the command line.

-										This feature may be used to add custom functions to the command line.

-									</p>

-									<p>

-										When you call the function on the command line, <code>commandLineFunction</code> is executed with the

-										following three parameters:

-									</p>

-									<ul>

-										<li><em>appender</em>. A reference to the appender in which the command was executed;</li>

-										<li><em>args</em>.

-											An array-like list of parameters passed into the function on the command line

-											(actually a reference to an <code>arguments</code> object);</li>

-										<li><em>returnValue</em>. This is an object with two properties that allow the function to control

-											how the result is displayed:

-											<ul>

-												<li><em>appendResult</em>. A boolean value that determines whether the returned value from this

-													function is appended to the console. The default value is <code>true</code>;</li>

-												<li><em>isError</em>. A boolean value that specifies whether the output of this function

-													should be displayed as an error. The default value is <code>false</code>.</li>

-											</ul>

-										</li>

-									</ul>

-									<p>

-										The value returned by the function is formatted by the command layout and appended to the console.

-									</p>

-								</div>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-					<div id="browserconsoleappender">

-						<h3>BrowserConsoleAppender</h3>

-						<p class="editions">Editions: <strong>Standardl</strong></p>

-						<p>

-							Writes log messages to the browser's built-in console, if present. This only works

-							currently in Safari, Opera and Firefox with the excellent

-							<a href="http://www.getfirebug.com" title="Firebug home page (opens in new window)"

-							target="_blank">Firebug</a> extension installed.

-						</p>

-						<p><strong>Notes</strong></p>

-						<ul>

-							<li>

-								As of log4javascript 1.3, the default threshold for this appender is <code>DEBUG</code>

-								as opposed to <code>WARN</code> as it was previously;

-							</li>

-							<li>

-								<p>

-									As of version 1.3, log4javascript has explicit support for Firebug's logging. This includes

-									the following mapping of log4javascript's log levels onto Firebug's:

-								</p>

-								<ul>

-									<li>log4javascript <code>TRACE</code>, <code>DEBUG</code> -&gt; Firebug <code>debug</code></li>

-									<li>log4javascript <code>INFO</code> -&gt; Firebug <code>info</code></li>

-									<li>log4javascript <code>WARN</code> -&gt; Firebug <code>warn</code></li>

-									<li>log4javascript <code>ERROR</code>, <code>FATAL</code> -&gt; Firebug <code>error</code></li>

-								</ul>

-								<p>

-									... and the ability to pass objects into Firebug and take advantage of its object inspection.

-									This is because the default layout is now <code><a href="#nulllayout">NullLayout</a></code>,

-									which performs no formatting on an object.

-								</p>

-							</li>

-						</ul>

-						<h4>Constructor</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">BrowserConsoleAppender</div>

-								<div class="methodsignature"><code><strong>BrowserConsoleAppender</strong>()</code></div>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-				</div>

-				<div id="layouts">

-					<h2>Layouts</h2>

-					<div id="layout">

-						<h3>Layout</h3>

-						<p>

-							There are a few methods common to all layouts:

-						</p>

-						<h4>Methods</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">format</div>

-								<div class="methodsignature"><code>String <strong>format</strong>(LoggingEvent <em>loggingEvent</em>)</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">loggingEvent</code>

-									</li>

-								</ul>

-								<div class="summary">

-									Formats the log message. You should override this method in your own layouts.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">ignoresThrowable</div>

-								<div class="methodsignature"><code>Boolean <strong>ignoresThrowable</strong>()</code></div>

-								<div class="summary">

-									Returns whether the layout ignores an error object in a logging event passed

-									to its <code>format</code> method.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getContentType</div>

-								<div class="methodsignature"><code>String <strong>getContentType</strong>()</code></div>

-								<div class="summary">

-									Returns the content type of the output of the layout.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">allowBatching</div>

-								<div class="methodsignature"><code>Boolean <strong>allowBatching</strong>()</code></div>

-								<div class="summary">

-									Returns whether the layout's output is suitable for batching.

-									<code><a href="#jsonlayout">JsonLayout</a></code> and <code><a href="#xmllayout">XmlLayout</a></code>

-									are the only built-in layouts that return true for this method.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">getDataValues</div>

-								<div class="methodsignature"><code>Array <strong>getDataValues</strong>(LoggingEvent <em>loggingEvent</em>)</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">loggingEvent</code>

-									</li>

-								</ul>

-								<div class="summary">

-									Used internally by log4javascript in constructing formatted output for some layouts.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setKeys</div>

-								<div class="methodsignature"><code>void <strong>setKeys</strong>(String <em>loggerKey</em>,

-									String <em>timeStampKey</em>, String <em>levelKey</em>, String <em>messageKey</em>,

-									String <em>exceptionKey</em>, String <em>urlKey</em>)</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">loggerKey</code>

-										<div>

-											Parameter to use for the log message's logger name. Default is <code>logger</code>.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">timeStampKey</code>

-										<div>

-											Parameter to use for the log message's timestamp.  Default is <code>timestamp</code>.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">levelKey</code>

-										<div>

-											Parameter to use for the log message's level. Default is <code>level</code>.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">messageKey</code>

-										<div>

-											Parameter to use for the message itself. Default is <code>message</code>.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">exceptionKey</code>

-										<div>

-											Parameter to use for the log message's error (exception). Default is <code>exception</code>.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">urlKey</code>

-										<div>

-											Parameter to use for the current page URL. Default is <code>url</code>.

-										</div>

-									</li>

-								</ul>

-								<div class="summary">

-									This method is used to change the default keys used to create formatted name-value pairs

-									for the properties of a log message, for layouts that do this. These layouts are

-									<code><a href="#jsonlayout">JsonLayout</a></code> and

-									<code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setCustomField</div>

-								<div class="methodsignature"><code>void <strong>setCustomField</strong>(String <em>name</em>,

-									String <em>value</em>)</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">name</code>

-										<div>

-											Name of the custom property you wish to be included in the formmtted output.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">value</code>

-										<div>

-											Value of the custom property you wish to be included in the formatted output.

-										</div>

-									</li>

-								</ul>

-								<div class="summary">

-									Some layouts (<code><a href="#jsonlayout">JsonLayout</a></code>,

-									<code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>,

-									<code><a href="#patternlayout">PatternLayout</a></code> and

-									<code><a href="#xmllayout">XmlLayout</a></code>) allow you to set

-									custom fields (e.g. a session id to send to the server) to the

-									formatted output. Use this method to set a custom field. If there

-									is already a custom field with the specified name, its value will

-									be updated with <code>value</code>.

-								</div>

-								<p><strong>Notes</strong></p>

-								<ul>

-									<li>

-										<p>

-											From version 1.4, the custom field value may be a function. In this

-											case, the function is run at the time the layout's format method is called,

-											with the following two parameters:

-										</p>

-										<ul>

-											<li><em>layout</em>. A reference to the layout being used;</li>

-											<li><em>loggingEvent</em>. A reference to the logging event being formatted.</li>

-										</ul>

-									</li>

-								</ul>

-							</li>

-							<li class="method">

-								<div class="name">hasCustomFields</div>

-								<div class="methodsignature"><code>Boolean <strong>hasCustomFields</strong>()</code></div>

-								<div class="summary">

-									Returns whether the layout has any custom fields.

-								</div>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-					<div id="nulllayout">

-						<h3>NullLayout</h3>

-						<p class="editions">Editions: <strong>All</strong></p>

-						<p>

-							The most basic layout. NullLayout's <code>format()</code> methods performs no

-							formatting at all and simply returns the message logged.

-						</p>

-						<h4>Constructor</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">NullLayout</div>

-								<div class="methodsignature"><code><strong>NullLayout</strong>()</code></div>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-					<div id="simplelayout">

-						<h3>SimpleLayout</h3>

-						<p class="editions">Editions: <strong>Standard, Production</strong></p>

-						<p>

-							Provides basic formatting. SimpleLayout consists of the level of the log statement,

-							followed by " - " and then the log message itself. For example,

-						</p>

-						<p><code>DEBUG - Hello world</code></p>

-						<h4>Constructor</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">SimpleLayout</div>

-								<div class="methodsignature"><code><strong>SimpleLayout</strong>()</code></div>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-					<div id="patternlayout">

-						<h3>PatternLayout</h3>

-						<p class="editions">Editions: <strong>All</strong></p>

-						<p>

-							Provides a flexible way of formatting a log message by means of a conversion pattern

-							string. The behaviour of this layout is a full implementation of <code>PatternLayout</code>

-							in log4j, with the exception of the set of conversion characters - log4javascript's is

-							necessarily a subset of that of log4j with a few additions of its own, since many of

-							the conversion characters in log4j only make sense in the context of Java.

-						</p>

-						<p>

-							The conversion pattern consists of literal text interspersed with special strings starting with

-							a % symbol called <em>conversion specifiers</em>. A conversion specifier consists of the

-							% symbol, a conversion character (possible characters are listed below) and

-							<em>format modifiers</em>. For full documentation of the conversion pattern, see

-							<a href="http://logging.apache.org/log4j/docs/api/org/apache/log4j/PatternLayout.html" target="_blank">log4j's

-							documentation</a>. Below is a list of all conversion characters available in log4javascript.

-						</p>

-						<h4>Conversion characters</h4>

-						<table border="1" cellspacing="0">

-							<thead>

-								<tr>

-									<th>Conversion Character</th>

-									<th>Effect</th>

-								</tr>

-							</thead>

-							<tbody>

-								<tr>

-									<td>a</td>

-									<td>

-										<p>

-											Outputs log messages specified as an array.

-										</p>

-										<p>

-											Behaves exactly like <code>%m</code>, except that multiple log messages are

-											assumed to have been specified in the logging call as an array rather than

-											as multiple parameters.

-										</p>

-										<p>

-											<strong>Since: 1.4</strong>

-										</p>

-									</td>

-								</tr>

-								<tr>

-									<td>c</td>

-									<td>

-										<p>

-											Outputs the logger name.

-										</p>

-									</td>

-								</tr>

-								<tr>

-									<td>d</td>

-									<td>

-										<p>

-											Outputs the date of the logging event. The date conversion specifier

-											may be followed by a date format specifier enclosed between braces. For

-											example, <code>%d{HH:mm:ss,SSS}</code> or

-											<code>%d{dd MMM yyyy HH:mm:ss,SSS}</code>. If no date

-											format specifier is given then ISO8601 format is assumed.

-										</p>

-										<p>

-											The date format specifier is the same as that used by Java's

-											<code><a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/SimpleDateFormat.html"

-												target="_blank">SimpleDateFormat</a></code>. log4javascript

-											includes a full implementation of SimpleDateFormat's

-											<code>format</code> method, with the exception of the pattern letter

-											'z', (string representation of the timezone) for which the information

-											is not available in JavaScript.

-										</p>

-									</td>

-								</tr>

-								<tr>

-									<td>f</td>

-									<td>

-										<p>

-											Outputs the value of a custom field set on the layout. If present, the specifier gives

-											the index in the array of custom fields to use; otherwise, the first custom field in the

-											array is used.

-										</p>

-										<p>

-											<strong>Since: 1.3</strong>

-										</p>

-									</td>

-								</tr>

-								<tr>

-									<td>m</td>

-									<td>

-										<p>

-											Outputs the log messages of the logging event (i.e. the log

-											messages supplied by the client code).

-										</p>

-										<p>

-											As of version 1.4, multiple log messages may be supplied to logging calls.

-											<code>%m</code> displays each log message (using the rules below) one after

-											another, separated by spaces. 

-										</p>

-										<p>

-											As of version 1.3, an object may be specified as the log message and will

-											be expanded to show its properties in the output, provided that a specifier

-											containing the number of levels to expand is provided. If no specifier is

-											provided then the message will be treated as a string regardless of its type.

-											For example, <code>%m{1}</code> will display an expansion of the object one

-											level deep, i.e. each property of the object will be displayed but if the

-											property value is itself an object it will not be expanded and will appear

-											as <code>[object Object]</code>.

-										</p>

-									</td>

-								</tr>

-								<tr>

-									<td>n</td>

-									<td>

-										<p>

-											Outputs a line separator.

-										</p>

-									</td>

-								</tr>

-								<tr>

-									<td>p</td>

-									<td>

-										<p>

-											Outputs the level of the logging event.

-										</p>

-									</td>

-								</tr>

-								<tr>

-									<td>r</td>

-									<td>

-										<p>

-											Outputs the number of milliseconds since log4javascript was initialized.

-										</p>

-									</td>

-								</tr>

-								<tr>

-									<td>%</td>

-									<td>

-										<p>

-											The sequence %% outputs a single percent sign.

-										</p>

-									</td>

-								</tr>

-							</tbody>

-						</table>

-						<h4>Static properties</h4>

-						<ul class="propertieslist">

-							<li class="property">

-								<div class="name">TTCC_CONVERSION_PATTERN</div>

-								<div class="summary">

-									Built-in conversion pattern, equivalent to <code>%r %p %c - %m%n</code>.

-								</div>

-							</li>

-							<li class="property">

-								<div class="name">DEFAULT_CONVERSION_PATTERN</div>

-								<div class="summary">

-									Built-in conversion pattern, equivalent to <code>%m%n</code>.

-								</div>

-							</li>

-							<li class="property">

-								<div class="name">ISO8601_DATEFORMAT</div>

-								<div class="summary">

-									Built-in date format (and also the default), equivalent to

-									<code>yyyy-MM-dd HH:mm:ss,SSS</code>.

-								</div>

-							</li>

-							<li class="property">

-								<div class="name">DATETIME_DATEFORMAT</div>

-								<div class="summary">

-									Built-in date format, equivalent to <code>dd MMM YYYY HH:mm:ss,SSS</code>.

-								</div>

-							</li>

-							<li class="property">

-								<div class="name">ABSOLUTETIME_DATEFORMAT</div>

-								<div class="summary">

-									Built-in date format, equivalent to <code>HH:mm:ss,SSS</code>.

-								</div>

-							</li>

-						</ul>

-						<h4>Constructor</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">PatternLayout</div>

-								<div class="methodsignature"><code><strong>PatternLayout</strong>(String <em>pattern</em>)</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">pattern</code>

-										<div>

-											The conversion pattern string to use.

-										</div>

-									</li>

-								</ul>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-					<div id="xmllayout">

-						<h3>XmlLayout</h3>

-						<p class="editions">Editions: <strong>Standard, Production</strong></p>

-						<p>

-							Based on log4j's <code>XmlLayout</code>, this layout formats a log message as a

-							fragment of XML. An example of the format of the fragment is as follows:

-						</p>

-						<pre>

-&lt;log4javascript:event logger="[default]" timestamp="1201048234203" level="ERROR"&gt;

-&lt;log4javascript:message&gt;&lt;![CDATA[Big problem!]]&gt;&lt;/log4javascript:message&gt;

-&lt;log4javascript:exception&gt;&lt;![CDATA[Nasty error on line number 1

-	in file http://log4javascript.org/test.html]]&gt;&lt;/log4javascript:exception&gt;

-&lt;/log4javascript:event&gt;

-</pre>

-						<p><strong>Notes</strong></p>

-						<ul>

-							<li>

-								This layout supports batching of log messages when used in an

-								<code><a href="#ajaxappender">AjaxAppender</a></code>. A batch of

-								messages is simply concatenated to form a string of several XML

-								frgaments similar to that above.

-							</li>

-							<li>

-								The <code>&lt;log4javascript:exception&gt;</code> element is only present if an

-								exception was passed into the original log call.

-							</li>

-							<li>

-								As of version 1.4, timestamps are returned as milliseconds since midnight of

-								January 1, 1970 rather than seconds as in previous versions. This allows finer

-								measurement of the time a logging event occurred and is also the JavaScript

-								<code>Date</code> object's standard measurement.

-							</li>

-							<li>

-								Also as of version 1.4, multiple messages may be specified as separate parameters

-								in a single logging call. In <code>XmlLayout</code>, multiple messages may be

-								formatted as a single combined message or may be formated as several

-								<code>&lt;log4javascript:message&gt;</code> elements inside one

-								<code>&lt;log4javascript:messages&gt;</code> element as shown below:

-								<br />

-								<pre>

-&lt;log4javascript:event logger="[default]" timestamp="1201048234203" level="ERROR"&gt;

-&lt;log4javascript:messages&gt;

-	&lt;log4javascript:message&gt;&lt;![CDATA[Big problem!]]&gt;&lt;/log4javascript:message&gt;

-	&lt;log4javascript:message&gt;&lt;![CDATA[Value of x when this error

-		occurred: 3]]&gt;&lt;/log4javascript:message&gt;

-&lt;/log4javascript:messages&gt;

-&lt;log4javascript:exception&gt;&lt;![CDATA[Nasty error on line number 1

-	in file http://log4javascript.org/test.html]]&gt;&lt;/log4javascript:exception&gt;

-&lt;/log4javascript:event&gt;

-</pre>

-							</li>

-							<li>

-								As of version 1.3, custom fields may be added to the output. Each field will

-								add a tag of the following form inside the <code>&lt;log4javascript:event&gt;</code>

-								tag:

-								<br />

-								<pre>

-&lt;log4javascript:customfield name="sessionid"&gt;&lt;![CDATA[1234]]&gt;&lt;/log4javascript:customfield&gt;

-</pre>

-							</li>

-						</ul>

-						<h4>Constructor</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">XmlLayout</div>

-								<div class="methodsignature"><code><strong>XmlLayout</strong>([Boolean <em>combineMessages</em>])</code></div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">combineMessages</code>

-										<div>

-											Whether or not to format multiple log messages as a combined single

-											<code>&lt;log4javascript:message&gt;</code> element

-											composed of each individual message separated by line breaks or to include

-											a <code>&lt;log4javascript:message&gt;</code> element for each message inside

-											one <code>&lt;log4javascript:messages&gt;</code> element.

-											If not specified, defaults to <code>true</code>.

-										</div>

-									</li>

-								</ul>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-					<div id="jsonlayout">

-						<h3>JsonLayout</h3>

-						<p class="editions">Editions: <strong>Standard, Production</strong></p>

-						<p>

-							Formats a logging event into JavaScript Object Notation (JSON).

-							JSON is a subset of JavaScript's object literal syntax, meaning that log

-							messages formatted with this layout can be interpreted directly by JavaScript

-							and converted into objects. See

-							<a href="http://json.org/" target="_blank" title="json.org (opens in new window)">json.org</a> for more details

-							about JSON.

-						</p>

-						<p>Example:</p>

-						<pre>

-{

-	"logger": "[default]",

-	"timeStamp": 1201048234203,

-	"level": "ERROR",

-	"url": "http://log4javascript.org/test.html",

-	"message": "Big problem!",

-	"exception": "Nasty error on line number 1 in file

-		http://log4javascript.org/test.html"

-}

-</pre>

-						<p>

-							The <code>exception</code> property is only present if an exception was passed

-							into the original log call.

-						</p>

-						<p><strong>Notes</strong></p>

-						<ul>

-							<li>

-								This layout supports batching of log messages when used in an

-								<code><a href="#ajaxappender">AjaxAppender</a></code>. When sent singly

-								the layout formats the log message as a single JavaScript object literal;

-								when sent as a batch, the messages are formatted as an array literal whose

-								elements are log message objects.

-							</li>

-							<li>

-								<p>

-									As of version 1.3, custom fields may be added to the output. Each field will

-									add a property of the following form to the main object literal:

-								</p>

-								<pre>

-	"sessionid": 1234

-</pre>

-							</li>

-							<li>

-								From version 1.4, the variable names used for log event properties such as

-								the message, timestamp and exception are specified using the <code>setKeys()</code>

-								method of <code><a href="#layout">Layout</a></code>.

-							</li>

-							<li>

-								<p>

-									Also as of version 1.4, multiple messages may be specified as separate parameters

-									in a single logging call. In <code>JsonLayout</code>, multiple messages may be

-									formatted as a single combined message or may be formated as an array of messages

-									as shown below:

-								</p>

-								<pre>

-{

-	"logger": "[default]",

-	"timeStamp": 1201048234203,

-	"level": "ERROR",

-	"url": "http://log4javascript.org/test.html",

-	"message": [

-		"Big problem!",

-		"Value of x when this error occurred: 3"

-	],

-	"exception": "Nasty error on line number 1 in file

-		http://log4javascript.org/test.html"

-}

-</pre>

-							</li>

-						</ul>

-						<h4>Constructor</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">JsonLayout</div>

-								<div class="methodsignature"><code><strong>JsonLayout</strong>([Boolean <em>readable</em>, Boolean <em>combineMessages</em>])</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">readable</code>

-										<div>

-											Whether or not to format each log message with line breaks and tabs.

-											If not specified, defaults to <code>false</code>.

-										</div>

-									</li>

-									<li class="param">

-										<code class="paramname">combineMessages</code>

-										<div>

-											Whether or not to format multiple log messages as a combined single

-											<code>message</code> property composed of each individual message separated by line

-											breaks or to format multiple messages as an array.

-											If not specified, defaults to <code>true</code>.

-										</div>

-									</li>

-								</ul>

-							</li>

-						</ul>

-						<h4>Methods</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">isReadable</div>

-								<div class="methodsignature"><code>Boolean <strong>isReadable</strong>()</code></div>

-								<div class="summary">

-									Returns whether or not to each log message is formatted with line breaks and tabs.

-								</div>

-								<p><strong>Notes</strong></p>

-								<ul>

-									<li>

-										<p>

-											<code>setReadable</code> has been removed in version 1.4. This property can

-											be set via the constructor.

-										</p>

-									</li>

-								</ul>

-							</li>

-						</ul>

-					</div>

-					<div id="httppostdatalayout">

-						<h3>HttpPostDataLayout</h3>

-						<p class="editions">Editions: <strong>Standard, Production</strong></p>

-						<p>

-							Formats the log message as a simple URL-encoded string from which a simple

-							server-side script may extract parameters such as the log message, severity

-							and timestamp. This is the default layout for

-							<code><a href="#ajaxappender">AjaxAppender</a></code>.

-						</p>

-						<h4>Constructor</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">HttpPostDataLayout</div>

-								<div class="methodsignature"><code><strong>HttpPostDataLayout</strong>()</code></div>

-							</li>

-						</ul>

-						<p><strong>Notes</strong></p>

-						<ul>

-							<li>

-								As of version 1.3, custom fields may be added to the output. Each field will

-								be added as a parameter to the post data.

-							</li>

-							<li>

-								From version 1.4, the variable names used for log event properties such as

-								the message, timestamp and exception are specified using the <code>setKeys()</code>

-								method of <code><a href="#layout">Layout</a></code>.

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-				</div>

-				<div id="enabling">

-					<h2>Enabling / disabling log4javascript</h2>

-					<p>

-						All logging can be enabled or disabled in log4javascript in a number of ways:

-					</p>

-					<ul>

-						<li>

-							At any time, you can call

-							<code>log4javascript.setEnabled(<em>enabled</em>)</code>. This will

-							enable or disable all logging, depending on whether <code>enabled</code>

-							is set to <code>true</code> or <code>false</code>.

-						</li>

-						<li>

-							<p>

-								Assign a value to the global variable <code>log4javascript_disabled</code>.

-								The idea of this is so that you can enable or disable logging for a whole site by

-								including a JavaScript file in all your pages, and allowing this file to be

-								included <strong>before</strong> log4javascript.js to guarantee that no logging

-								can take place without having to alter log4javascript.js itself. Your included

-								.js file would include a single line such as the following:

-							</p>

-							<p>

-								<code>var log4javascript_disabled = true;</code>

-							</p>

-						</li>

-						<li>

-							Assign your logger object a value of <code>log4javascript.getNullLogger()</code>.

-						</li>

-						<li>

-							Replace your copy of log4javascript_x.js with stubs/log4javascript_x.js, provided in the

-							distribution. This file has a stub version of each of the functions and methods

-							in the log4javascript API and can simply be dropped in in place of the main file.

-							The compressed version of the stub is typically 15 times smaller than the

-							compressed version of the main file.

-						</li>

-					</ul>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="errorhandling">

-					<h2>log4javascript error handling</h2>

-					<p>

-						log4javascript has a single rudimentary logger-like object of its own to handle

-						messages generated by log4javascript itself. This logger is called <code>LogLog</code>

-						and is accessed via <code>log4javascript.logLog</code>.

-					</p>

-					<div id="loglog">

-						<h4>Methods</h4>

-						<ul class="propertieslist">

-							<li class="method">

-								<div class="name">setQuietMode</div>

-								<div class="methodsignature"><code>void <strong>setQuietMode</strong>(Boolean <em>quietMode</em>)</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">quietMode</code>

-										<div>

-											Whether to turn quiet mode on or off.

-										</div>

-									</li>

-								</ul>

-								<div class="summary">

-									Sets whether <code>LogLog</code> is in quiet mode or not. In quiet mode, no

-									messages sent to <code>LogLog</code> have any visible effect. By default,

-									quiet mode is switched off.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">setAlertAllErrors</div>

-								<div class="methodsignature"><code>void <strong>setAlertAllErrors</strong>(Boolean <em>alertAllErrors</em>)</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">showAllErrors</code>

-										<div>

-											Whether to show all errors or just the first.

-										</div>

-									</li>

-								</ul>

-								<div class="summary">

-									Sets how many errors <code>LogLog</code> will display alerts for. By default,

-									only the first error encountered generates an alert to the user. If you turn

-									all errors on by supplying <code>true</code> to this method then all errors

-									will generate alerts.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">debug</div>

-								<div class="methodsignature"><code>void <strong>debug</strong>(String <em>message</em>[, Error <em>exception</em>])</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">message</code>

-									</li>

-									<li class="param">

-										<code class="paramname">exception</code>

-										[<em>optional</em>]

-									</li>

-								</ul>

-								<div class="summary">

-									Logs a debugging message to an in-memory list. This implementation is new in version 1.4.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">displayDebug</div>

-								<div class="methodsignature"><code>void <strong>displayDebug</strong>()</code></div>

-								<div class="summary">

-									Displays an alert of all debugging messages. This method is new in version 1.4.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">warn</div>

-								<div class="methodsignature"><code>void <strong>warn</strong>(String <em>message</em>[, Error <em>exception</em>])</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">message</code>

-									</li>

-									<li class="param">

-										<code class="paramname">exception</code>

-										[<em>optional</em>]

-									</li>

-								</ul>

-								<div class="summary">

-									Currently has no effect.

-								</div>

-							</li>

-							<li class="method">

-								<div class="name">error</div>

-								<div class="methodsignature"><code>void <strong>error</strong>(String <em>message</em>[, Error <em>exception</em>])</code></div>

-								<div class="paramsheading">Parameters:</div>

-								<ul class="params">

-									<li class="param">

-										<code class="paramname">message</code>

-									</li>

-									<li class="param">

-										<code class="paramname">exception</code>

-										[<em>optional</em>]

-									</li>

-								</ul>

-								<div class="summary">

-									Generates an alert to the user if and only if the error is the first one

-									encountered and <code>setAlertAllErrors(true)</code> has not been called.

-								</div>

-							</li>

-						</ul>

-						<p class="linktotop">

-							<a href="#container">Top</a>

-						</p>

-					</div>

-				</div>

-				<div id="differences">

-					<h2>Differences between log4javascript and log4j</h2>

-					<p>

-						For the sake of keeping log4javascript as light and useful as possible, many

-						of the features of log4j that seem over-complex or inappropriate for

-						JavaScript have not been implemented. These include:

-					</p>

-					<ul>

-						<li>Filters</li>

-						<li>Configurators</li>

-						<li>Renderers</li>

-					</ul>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-  				</div>

-			</div>

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/docs/manual_lite.html b/xos/core/static/log4javascript-1.4.6/docs/manual_lite.html
deleted file mode 100644
index a436c68..0000000
--- a/xos/core/static/log4javascript-1.4.6/docs/manual_lite.html
+++ /dev/null
@@ -1,401 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript 1.4 Lite manual</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-	</head>

-	<body>

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="index.html">log4javascript</a></h1>

-			</div>

-			<div id="content">

-				<div id="nav">

-					<a class="navitem" href="../index.html">home</a>

-					| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <a class="navitem" href="index.html">docs</a>

-					| <a class="navitem" href="quickstart.html">quick start</a>

-					| <a class="navitem" href="../demos/index.html">demos</a>

-					| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>

-					| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>

-				</div>

-				<h1>log4javascript 1.4 Lite manual</h1>

-				<h2>Contents</h2>

-				<ul>

-					<li><a href="#intro">Introduction</a></li>

-					<li><a href="#log4javascript">log4javascript static properties/methods</a></li>

-					<li><a href="#levels">Levels</a></li>

-					<li><a href="#loggers">Loggers</a></li>

-					<li><a href="#enabling">Enabling / disabling log4javascript Lite</a></li>

-				</ul>

-				<div id="intro">

-					<h2>Introduction</h2>

-					<p>

-						log4javascript Lite is designed to be a basic, lightweight, cross-browser logging tool. It

-						provides functions to log messages of different severity to a pop-up window using the exactly

-						the same syntax as log4javascript. It is designed for situations when the key requirement is just

-						to display logging messages without needing all the features of the standard version of

-						log4javascript. 

-					</p>

-					<p>

-						Below is the complete list of functions and properties available in log4javascript Lite.

-						They make up a small subset of those provided by the standard version of

-						log4javascript. Each function is <strong>named and called identically to the equivalent

-						function in log4javascript</strong>. Please refer to the

-						<a href="manual.html">log4javascript manual</a> for a detailed explanation

-						of all the concepts alluded to in this document.

-					</p>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="log4javascript">

-					<h2>log4javascript static properties/methods</h2>

-					<h4>Properties</h4>

-					<ul class="propertieslist">

-						<li class="property">

-							<div class="name">version</div>

-							<div class="summary">

-								The version number of your copy of log4javascript.

-							</div>

-						</li>

-						<li class="property">

-							<div class="name">edition</div>

-							<div class="summary">

-								The edition of your copy of log4javascript ("log4javascript_lite" in this case").

-							</div>

-						</li>

-					</ul>

-					<h4>Methods</h4>

-					<ul class="propertieslist">

-						<li class="method">

-							<div class="name">getDefaultLogger</div>

-							<div class="methodsignature"><code>Logger <strong>getDefaultLogger</strong>()</code></div>

-							<div class="summary">

-								Returns the default and only logger (apart from the null logger). The default logger

-								logs to a simple pop-up window.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">getNullLogger</div>

-							<div class="methodsignature"><code>Logger <strong>getNullLogger</strong>()</code></div>

-							<div class="summary">

-								Returns an empty logger. Useful for disabling all logging.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">setEnabled</div>

-							<div class="methodsignature"><code>void <strong>setEnabled</strong>(Boolean <em>enabled</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">enabled</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Enables or disables all logging, depending on <code>enabled</code>.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns true or false depending on whether logging is enabled.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">setShowStackTraces</div>

-							<div class="methodsignature"><code>void <strong>setShowStackTraces</strong>(Boolean <em>show</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">show</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Enables or disables displaying of error stack traces, depending on <code>show</code>.

-								By default, stack traces are not displayed. (Only works in Firefox)

-							</div>

-						</li>

-					</ul>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="levels">

-					<h2>Levels</h2>

-					<p>

-						Levels are available as static properties of the <code>log4javascript.Level</code>

-						object. In ascending order of severity:

-					</p>

-					<ol>

-						<li><code>log4javascript.Level.ALL</code></li>

-						<li><code>log4javascript.Level.TRACE</code></li>

-						<li><code>log4javascript.Level.DEBUG</code></li>

-						<li><code>log4javascript.Level.INFO</code></li>

-						<li><code>log4javascript.Level.WARN</code></li>

-						<li><code>log4javascript.Level.ERROR</code></li>

-						<li><code>log4javascript.Level.FATAL</code></li>

-						<li><code>log4javascript.Level.NONE</code></li>

-					</ol>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="loggers">

-					<h2>Loggers</h2>

-					<p>

-						There are only two loggers in log4javascript Lite: the default logger obtained

-						by calling <code>log4javascript.getDefaultLogger()</code> and the empty logger

-						returned by <code>log4javascript.getNullLogger()</code>.

-					</p>

-					<h4>Logger methods</h4>

-					<ul class="propertieslist">

-						<li class="method">

-							<div class="name">setLevel</div>

-							<div class="methodsignature"><code>void <strong>setLevel</strong>(Level <em>level</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">level</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Sets the level. Log messages of a lower level than <code>level</code> will not be logged.

-								Default value is <code>ALL</code> (unlike in log4javascript, where the default level is

-								<code>DEBUG</code>).

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">getLevel</div>

-							<div class="methodsignature"><code>Level <strong>getLevel</strong>()</code></div>

-							<div class="summary">

-								Returns the level for this logger.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">trace</div>

-							<div class="methodsignature"><code>void <strong>trace</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>TRACE</code>.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">debug</div>

-							<div class="methodsignature"><code>void <strong>debug</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>DEBUG</code>.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">info</div>

-							<div class="methodsignature"><code>void <strong>info</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>INFO</code>.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">warn</div>

-							<div class="methodsignature"><code>void <strong>warn</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>WARN</code>.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">error</div>

-							<div class="methodsignature"><code>void <strong>error</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>ERROR</code>.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">fatal</div>

-							<div class="methodsignature"><code>void <strong>fatal</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">message1[, message2...]</code>

-								</li>

-								<li class="param">

-									<code class="paramname">exception</code>

-									[<em>optional</em>]

-								</li>

-							</ul>

-							<div class="summary">

-								Logs one or more messages and optionally an error at level <code>FATAL</code>.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isEnabledFor</div>

-							<div class="methodsignature"><code>Boolean <strong>isEnabledFor</strong>(Level <em>level</em>, Error <em>exception</em>)</code></div>

-							<div class="paramsheading">Parameters:</div>

-							<ul class="params">

-								<li class="param">

-									<code class="paramname">level</code>

-								</li>

-							</ul>

-							<div class="summary">

-								Returns whether the logger is enabled for the specified level. 

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isTraceEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isTraceEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>TRACE</code> messages.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isDebugEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isDebugEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>DEBUG</code> messages.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isInfoEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isInfoEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>INFO</code> messages.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isWarnEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isWarnEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>WARN</code> messages.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isErrorEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isErrorEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>ERROR</code> messages.

-							</div>

-						</li>

-						<li class="method">

-							<div class="name">isFatalEnabled</div>

-							<div class="methodsignature"><code>Boolean <strong>isFatalEnabled</strong>()</code></div>

-							<div class="summary">

-								Returns whether the logger is enabled for <code>FATAL</code> messages.

-							</div>

-						</li>

-					</ul>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-				<div id="enabling">

-					<h2>Enabling / disabling log4javascript Lite</h2>

-					<p>

-						All logging can be enabled or disabled in log4javascript Lite in a number of ways:

-					</p>

-					<ul>

-						<li>

-							At any time, you can call

-							<code>log4javascript.setEnabled(<em>enabled</em>)</code>. This will

-							enable or disable all logging, depending on whether <code>enabled</code>

-							is set to <code>true</code> or <code>false</code>.

-						</li>

-						<li>

-							Assign your logger object a value of <code>log4javascript.getNullLogger()</code>.

-						</li>

-						<li>

-							Replace your copy of log4javascript_lite.js with stubs/log4javascript_lite.js, provided in the

-							distribution. This file has a stub version of each of the functions and methods

-							in the log4javascript Lite API and can simply be dropped in in place of the main file.

-						</li>

-					</ul>

-					<p class="linktotop">

-						<a href="#container">Top</a>

-					</p>

-				</div>

-			</div>

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/docs/quickstart.html b/xos/core/static/log4javascript-1.4.6/docs/quickstart.html
deleted file mode 100644
index 3fe33ee..0000000
--- a/xos/core/static/log4javascript-1.4.6/docs/quickstart.html
+++ /dev/null
@@ -1,248 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript quick start tutorial</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-	</head>

-	<body>

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="index.html">log4javascript</a></h1>

-			</div>

-			<div id="content">

-				<div id="nav">

-					<a class="navitem" href="../index.html">home</a>

-					| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <a class="navitem" href="index.html">docs</a>

-					| <span class="navitem">quick start</span>

-					| <a class="navitem" href="../demos/index.html">demos</a>

-					| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>

-					| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>

-				</div>

-				<h1>log4javascript quick start tutorial</h1>

-				<h2>Three step guide</h2>

-				<ol>

-					<li>

-						<h3>Download the code</h3>

-						<p>

-							Unzip the distribution and copy log4javascript.js into the desired

-							location. No other files are necessary.

-						</p>

-					</li>

-					<li>

-						<h3>Initialize log4javascript in your web page</h3>

-						<p>

-							Include log4javascript.js in your page using the code below. This

-							code assumes log4javascript is stored in the same directory as

-							your web page.

-						</p>

-						<pre class="code">

-&lt;script type="text/javascript" src="log4javascript.js"&gt;&lt;/script&gt;

-&lt;script type="text/javascript"&gt;

-	var log = log4javascript.getDefaultLogger();

-&lt;/script&gt;

-</pre>

-						<p>

-							The default logger uses a <code><a href="manual.html#popupappender">PopUpAppender</a></code>

-							which opens a pop-up window. By default, this window will open when the first

-							log message is written. For this to work, you will need to disable any pop-up blockers

-							you may have.

-						</p>

-					</li>

-					<li>

-						<h3>Include logging statements in your code</h3>

-						<p>

-							You have six logging methods at your disposal, depending on the severity

-							of the message you wish to log. By default, all messages are logged

-							in the pop-up window. The logging methods are:

-						</p>

-						<ul>

-							<li><code>log.trace(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>

-							<li><code>log.debug(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>

-							<li><code>log.info(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>

-							<li><code>log.warn(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>

-							<li><code>log.error(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>

-							<li><code>log.fatal(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>

-						</ul>

-						<p>

-							And that's it, log away. Below are some examples of common types of logging.

-						</p>

-					</li>

-				</ol>

-				<h2>Logging examples</h2>

-				<ol>

-					<li>

-						<h3>A simple logging message string</h3>

-						<pre class="code">

-	log.info("Hello world");

-</pre>

-displays

-						<pre class="console info">

-19:52:03 INFO  - Hello world

-</pre>

-					</li>

-					<li>

-						<h3>Logging an error with a message</h3>

-						<pre class="code">

-	try {

-		throw new Error("Faking something going wrong!");

-	} catch (e) {

-		log.error("An error occurred", e);

-	}

-</pre>

-displays

-						<pre class="console error">

-19:52:32 ERROR - An error occurred

-Exception: Faking something going wrong! on line number 80 in file basic.html

-</pre>

-					</li>

-					<li>

-						<h3>Logging multiple messages with one logging call</h3>

-						<pre class="code">

-	var a = "Hello";

-	var b = 3;

-	log.debug(a, b);

-</pre>

-displays

-						<pre class="console debug">

-19:53:05 DEBUG  - Hello 3

-</pre>

-					</li>

-					<li>

-						<h3>Logging an object</h3>

-						<p>Logging an object:</p>

-						<pre class="code">

-	var obj = new Object();

-	obj.name = "Octopus";

-	obj.tentacles = 8;

-	log.info(obj);

-</pre>

-displays

-						<pre class="console info">

-19:53:17 INFO  - {

-	name: Octopus,

-	tentacles: 8

-}

-</pre>

-					</li>

-				</ol>

-				<h2>Tweaking the default logger</h2>

-				<p>

-					The default logger is fine as a starting point, but what if you want the default logger

-					with a few different options (say, bringing the pop-up to the front whenever a log message is

-					logged, or having new log messages appear at the top of the pop-up rather than the bottom)?

-				</p>

-				<p>

-					In this case, you will need to create a new logger, then create a

-					<code><a href="manual.html#popupappender">PopUpAppender</a></code>, set options

-					on it, and add it to the logger:

-				</p>

-				<pre class="code">

-&lt;script type="text/javascript" src="log4javascript.js"&gt;&lt;/script&gt;

-&lt;script type="text/javascript"&gt;

-	// Create the logger

-	var log = log4javascript.getLogger();

-

-	// Create a PopUpAppender with default options

-	var popUpAppender = new log4javascript.PopUpAppender();

-

-	// Change the desired configuration options

-	popUpAppender.setFocusPopUp(true);

-	popUpAppender.setNewestMessageAtTop(true);

-

-	// Add the appender to the logger

-	log.addAppender(popUpAppender);

-

-	// Test the logger

-	log.debug("Hello world!");

-&lt;/script&gt;

-</pre>

-				<p>

-					<a href="../examples/example_quickstart_1.html" title="View example (opens in new window)"

-						target="_blank">See this example in action</a> (opens in new window)

-				</p>

-				<p>

-					Refer to the manual for more information about

-					<a href="manual.html#configuration">configuring appenders</a> and more

-					details about <code><a href="manual.html#popupappender">PopUpAppender</a></code>.

-				</p>

-				<h2>Sending log messages to the server</h2>

-				<p>

-					For this you will need to use an <code><a href="manual.html#ajaxappender">AjaxAppender</a></code>

-					as follows:

-				</p>

-				<pre class="code">

-	var ajaxAppender = new log4javascript.AjaxAppender(<em>URL</em>);

-	log.addAppender(ajaxAppender);

-</pre>

-				<p>

-					Now your log messages will appear in the pop-up window and be sent

-					asynchronously to the URL you specify in the form of HTTP post parameters.

-					No server-side code to process these requests is provided with log4javascript.

-				</p>

-				<p>

-					See <code><a href="manual.html#ajaxappender">AjaxAppender</a></code> for more details

-					on formatting log messages.

-				</p>

-				<h2>Changing the format of log messages</h2>

-				<p>

-					Using a <code><a href="manual.html#layouts">Layout</a></code>, you can

-					format log messages however you like. For example:

-				</p>

-				<pre class="code">

-	var log = log4javascript.getLogger("mylogger");

-	var popUpAppender = new log4javascript.PopUpAppender();

-	var layout = new log4javascript.PatternLayout("[%-5p] %m");

-	popUpAppender.setLayout(layout);

-</pre>

-				<p>A call to</p>

-				<pre class="code">

-	log.debug("Hello world");

-</pre>

-				<p>will now result in output in the pop-up window of </p>

-				<pre class="console debug">

-[DEBUG] Hello world

-</pre>

-				<p>

-					See <code><a href="manual.html#patternlayout">PatternLayout</a></code> for more details

-					on formatting log messages.

-				</p>

-			</div>

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/docs/whatsnew.html b/xos/core/static/log4javascript-1.4.6/docs/whatsnew.html
deleted file mode 100644
index aa0cb51..0000000
--- a/xos/core/static/log4javascript-1.4.6/docs/whatsnew.html
+++ /dev/null
@@ -1,104 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript - what's new in version 1.4</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />

-	</head>

-	<body>

-		<div id="container" class="nonav">

-			<div id="header">

-				<h1><a href="index.html">log4javascript</a></h1>

-			</div>

-			<div id="content">

-				<div id="nav">

-					<a class="navitem" href="../index.html">home</a>

-					| <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>

-					| <a class="navitem" href="index.html">docs</a>

-					| <a class="navitem" href="quickstart.html">quick start</a>

-					| <a class="navitem" href="../demos/index.html">demos</a>

-					| <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>

-					| <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>

-				</div>

-				<h1>log4javascript - what's new in version 1.4</h1>

-				<ul>

-					<li>

-						log4javascript now comes in three different editions: Standard, Production

-						and Lite. <a href="distribution.html">Full details here</a>.

-					</li>

-					<li>

-						Loggers are now hierarchical and work exactly the same as log4j loggers.

-						This means that a logger with no level set on it inherits its level from its parent,

-						and inherits all of its parents appenders.

-					</li>

-					<li>

-						The logging console used by <code><a href="manual.html#popupappender">PopUpAppender</a></code> and

-						<code><a href="manual.html#inpageappender">InPageAppender</a></code>now has a command line, featuring

-						a command history navigated with the up and down arrow keys and a number of built-in command line

-						functions.

-					</li>

-					<li>

-						It is now possible to specify multiple messages in a single log call.

-					</li>

-					<li>

-						Log messages may be grouped in the logging console.

-					</li>

-					<li>

-						Built-in timers.

-					</li>

-					<li>

-						Improved <code><a href="manual.html#ajaxappender">AjaxAppender</a></code>, with the ability

-						to send all pending log calls to the server when navigating away from a page. Timestamps now

-						include milliseconds. All log messages or batches of log messages are now posted as

-						name-value pairs.

-					</li>

-					<li>

-						Support for IE8 beta 2.

-					</li>

-					<li>

-						Many minor enhancements and bug fixes. See the <a href="../changelog.txt">change log</a> for full

-						details.

-					</li>

-				</ul>

-				<p>

-					Please note that there are a few minor <a href="backwardsincompatibilities.html">incompatibilities

-					with earlier versions of log4javascript</a>.

-				</p>

-			</div>

-			<div id="footer">

-				<span class="externallinkinfo">

-					<strong>NB.</strong> All external links open in a new window.

-				</span>

-				Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>

-				<br />

-				log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"

-					title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,

-					Version 2.0</a>

-

-			</div>

-		</div>

-

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/examples/demo.html b/xos/core/static/log4javascript-1.4.6/examples/demo.html
deleted file mode 100644
index 41f0760..0000000
--- a/xos/core/static/log4javascript-1.4.6/examples/demo.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript demo redirect</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="noindex" />

-		<meta http-equiv="refresh" content="0; url=../demos/basic.html" />

-	</head>

-	<body>

-		This page has been replaced by <a href="/demos/basic.html">the basic demo page</a>.

-		Please use this link if you are not redirected automatically.

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/examples/example_manual.html b/xos/core/static/log4javascript-1.4.6/examples/example_manual.html
deleted file mode 100644
index 1d4a8bd..0000000
--- a/xos/core/static/log4javascript-1.4.6/examples/example_manual.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript example from  manual</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<script type="text/javascript" src="../js/log4javascript.js"></script>

-		<script type="text/javascript">

-			//<![CDATA[

-			var log = log4javascript.getLogger();

-			var popUpAppender = new log4javascript.PopUpAppender();

-			var popUpLayout = new log4javascript.PatternLayout("%d{HH:mm:ss} %-5p - %m%n");

-			popUpAppender.setLayout(popUpLayout);

-			log.addAppender(popUpAppender);

-			var ajaxAppender = new log4javascript.AjaxAppender("myloggingservlet.do");

-			ajaxAppender.setThreshold(log4javascript.Level.ERROR);

-			log.addAppender(ajaxAppender);

-			log.debug("Debugging message (appears in pop-up)");

-			log.error("Error message (appears in pop-up and in server log)");

-			//]]>

-		</script>

-	</head>

-	<body>

-		<h1>log4javascript example from  manual</h1>

-

-

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/examples/example_quickstart_1.html b/xos/core/static/log4javascript-1.4.6/examples/example_quickstart_1.html
deleted file mode 100644
index 142b71a..0000000
--- a/xos/core/static/log4javascript-1.4.6/examples/example_quickstart_1.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript quick start example 1</title>

-		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

-		<meta name="author" content="Tim Down - tim@log4javascript.org" />

-		<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />

-		<meta name="robots" content="all" />

-		<script type="text/javascript" src="../js/log4javascript.js"></script>

-		<script type="text/javascript">

-			//<![CDATA[

-			// Create the logger

-			var log = log4javascript.getLogger(); 

-		

-			// Create a PopUpAppender with default options

-			var popUpAppender = new log4javascript.PopUpAppender();

-			

-			// Change the desired configuration options

-			popUpAppender.setFocusPopUp(true);

-			popUpAppender.setNewestMessageAtTop(true);

-			

-			// Add the appender to the logger

-			log.addAppender(popUpAppender);

-			

-			// Test the logger

-			log.debug("Hello world!");

-			//]]>

-		</script>

-	</head>

-	<body>

-		<h1>log4javascript quick start example 1</h1>

-	

-	

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/examples/myloggingservlet.do b/xos/core/static/log4javascript-1.4.6/examples/myloggingservlet.do
deleted file mode 100644
index e69de29..0000000
--- a/xos/core/static/log4javascript-1.4.6/examples/myloggingservlet.do
+++ /dev/null
diff --git a/xos/core/static/log4javascript-1.4.6/js/console.html b/xos/core/static/log4javascript-1.4.6/js/console.html
deleted file mode 100644
index 1561416..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/console.html
+++ /dev/null
@@ -1,281 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-<head>

-<title>log4javascript</title>

-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

-<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->

-<meta http-equiv="X-UA-Compatible" content="IE=7" />

-<script type="text/javascript">var isIe = false, isIePre7 = false;</script>

-<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->

-<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->

-<script type="text/javascript">

-//<![CDATA[

-var loggingEnabled=true;var logQueuedEventsTimer=null;var logEntries=[];var logEntriesAndSeparators=[];var logItems=[];var renderDelay=100;var unrenderedLogItemsExist=false;var rootGroup,currentGroup=null;var loaded=false;var currentLogItem=null;var logMainContainer;function copyProperties(obj,props){for(var i in props){obj[i]=props[i];}}

-function LogItem(){}

-LogItem.prototype={mainContainer:null,wrappedContainer:null,unwrappedContainer:null,group:null,appendToLog:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].appendToLog();}

-this.group.update();},doRemove:function(doUpdate,removeFromGroup){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].remove();}

-this.unwrappedElementContainer=null;this.wrappedElementContainer=null;this.mainElementContainer=null;}

-if(this.group&&removeFromGroup){this.group.removeChild(this,doUpdate);}

-if(this===currentLogItem){currentLogItem=null;}},remove:function(doUpdate,removeFromGroup){this.doRemove(doUpdate,removeFromGroup);},render:function(){},accept:function(visitor){visitor.visit(this);},getUnwrappedDomContainer:function(){return this.group.unwrappedElementContainer.contentDiv;},getWrappedDomContainer:function(){return this.group.wrappedElementContainer.contentDiv;},getMainDomContainer:function(){return this.group.mainElementContainer.contentDiv;}};LogItem.serializedItemKeys={LOG_ENTRY:0,GROUP_START:1,GROUP_END:2};function LogItemContainerElement(){}

-LogItemContainerElement.prototype={appendToLog:function(){var insertBeforeFirst=(newestAtTop&&this.containerDomNode.hasChildNodes());if(insertBeforeFirst){this.containerDomNode.insertBefore(this.mainDiv,this.containerDomNode.firstChild);}else{this.containerDomNode.appendChild(this.mainDiv);}}};function SeparatorElementContainer(containerDomNode){this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="separator";this.mainDiv.innerHTML="&nbsp;";}

-SeparatorElementContainer.prototype=new LogItemContainerElement();SeparatorElementContainer.prototype.remove=function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;};function Separator(){this.rendered=false;}

-Separator.prototype=new LogItem();copyProperties(Separator.prototype,{render:function(){var containerDomNode=this.group.contentDiv;if(isIe){this.unwrappedElementContainer=new SeparatorElementContainer(this.getUnwrappedDomContainer());this.wrappedElementContainer=new SeparatorElementContainer(this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new SeparatorElementContainer(this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}

-this.content=this.formattedMessage;this.rendered=true;}});function GroupElementContainer(group,containerDomNode,isRoot,isWrapped){this.group=group;this.containerDomNode=containerDomNode;this.isRoot=isRoot;this.isWrapped=isWrapped;this.expandable=false;if(this.isRoot){if(isIe){this.contentDiv=logMainContainer.appendChild(document.createElement("div"));this.contentDiv.id=this.isWrapped?"log_wrapped":"log_unwrapped";}else{this.contentDiv=logMainContainer;}}else{var groupElementContainer=this;this.mainDiv=document.createElement("div");this.mainDiv.className="group";this.headingDiv=this.mainDiv.appendChild(document.createElement("div"));this.headingDiv.className="groupheading";this.expander=this.headingDiv.appendChild(document.createElement("span"));this.expander.className="expander unselectable greyedout";this.expander.unselectable=true;var expanderText=this.group.expanded?"-":"+";this.expanderTextNode=this.expander.appendChild(document.createTextNode(expanderText));this.headingDiv.appendChild(document.createTextNode(" "+this.group.name));this.contentDiv=this.mainDiv.appendChild(document.createElement("div"));var contentCssClass=this.group.expanded?"expanded":"collapsed";this.contentDiv.className="groupcontent "+contentCssClass;this.expander.onclick=function(){if(groupElementContainer.group.expandable){groupElementContainer.group.toggleExpanded();}};}}

-GroupElementContainer.prototype=new LogItemContainerElement();copyProperties(GroupElementContainer.prototype,{toggleExpanded:function(){if(!this.isRoot){var oldCssClass,newCssClass,expanderText;if(this.group.expanded){newCssClass="expanded";oldCssClass="collapsed";expanderText="-";}else{newCssClass="collapsed";oldCssClass="expanded";expanderText="+";}

-replaceClass(this.contentDiv,newCssClass,oldCssClass);this.expanderTextNode.nodeValue=expanderText;}},remove:function(){if(!this.isRoot){this.headingDiv=null;this.expander.onclick=null;this.expander=null;this.expanderTextNode=null;this.contentDiv=null;this.containerDomNode=null;this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;}},reverseChildren:function(){var node=null;var childDomNodes=[];while((node=this.contentDiv.firstChild)){this.contentDiv.removeChild(node);childDomNodes.push(node);}

-while((node=childDomNodes.pop())){this.contentDiv.appendChild(node);}},update:function(){if(!this.isRoot){if(this.group.expandable){removeClass(this.expander,"greyedout");}else{addClass(this.expander,"greyedout");}}},clear:function(){if(this.isRoot){this.contentDiv.innerHTML="";}}});function Group(name,isRoot,initiallyExpanded){this.name=name;this.group=null;this.isRoot=isRoot;this.initiallyExpanded=initiallyExpanded;this.elementContainers=[];this.children=[];this.expanded=initiallyExpanded;this.rendered=false;this.expandable=false;}

-Group.prototype=new LogItem();copyProperties(Group.prototype,{addChild:function(logItem){this.children.push(logItem);logItem.group=this;},render:function(){if(isIe){var unwrappedDomContainer,wrappedDomContainer;if(this.isRoot){unwrappedDomContainer=logMainContainer;wrappedDomContainer=logMainContainer;}else{unwrappedDomContainer=this.getUnwrappedDomContainer();wrappedDomContainer=this.getWrappedDomContainer();}

-this.unwrappedElementContainer=new GroupElementContainer(this,unwrappedDomContainer,this.isRoot,false);this.wrappedElementContainer=new GroupElementContainer(this,wrappedDomContainer,this.isRoot,true);this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{var mainDomContainer=this.isRoot?logMainContainer:this.getMainDomContainer();this.mainElementContainer=new GroupElementContainer(this,mainDomContainer,this.isRoot,false);this.elementContainers=[this.mainElementContainer];}

-this.rendered=true;},toggleExpanded:function(){this.expanded=!this.expanded;for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].toggleExpanded();}},expand:function(){if(!this.expanded){this.toggleExpanded();}},accept:function(visitor){visitor.visitGroup(this);},reverseChildren:function(){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].reverseChildren();}}},update:function(){var previouslyExpandable=this.expandable;this.expandable=(this.children.length!==0);if(this.expandable!==previouslyExpandable){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].update();}}},flatten:function(){var visitor=new GroupFlattener();this.accept(visitor);return visitor.logEntriesAndSeparators;},removeChild:function(child,doUpdate){array_remove(this.children,child);child.group=null;if(doUpdate){this.update();}},remove:function(doUpdate,removeFromGroup){for(var i=0,len=this.children.length;i<len;i++){this.children[i].remove(false,false);}

-this.children=[];this.update();if(this===currentGroup){currentGroup=this.group;}

-this.doRemove(doUpdate,removeFromGroup);},serialize:function(items){items.push([LogItem.serializedItemKeys.GROUP_START,this.name]);for(var i=0,len=this.children.length;i<len;i++){this.children[i].serialize(items);}

-if(this!==currentGroup){items.push([LogItem.serializedItemKeys.GROUP_END]);}},clear:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clear();}}});function LogEntryElementContainer(){}

-LogEntryElementContainer.prototype=new LogItemContainerElement();copyProperties(LogEntryElementContainer.prototype,{remove:function(){this.doRemove();},doRemove:function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;this.contentElement=null;this.containerDomNode=null;},setContent:function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=content;}},setSearchMatch:function(isMatch){var oldCssClass=isMatch?"searchnonmatch":"searchmatch";var newCssClass=isMatch?"searchmatch":"searchnonmatch";replaceClass(this.mainDiv,newCssClass,oldCssClass);},clearSearch:function(){removeClass(this.mainDiv,"searchmatch");removeClass(this.mainDiv,"searchnonmatch");}});function LogEntryWrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.mainDiv.className="logentry wrapped "+this.logEntry.level;this.contentElement=this.mainDiv;}

-LogEntryWrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryWrappedElementContainer.prototype.setContent=function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=wrappedContent;}};function LogEntryUnwrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry unwrapped "+this.logEntry.level;this.pre=this.mainDiv.appendChild(document.createElement("pre"));this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.pre.className="unwrapped";this.contentElement=this.pre;}

-LogEntryUnwrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryUnwrappedElementContainer.prototype.remove=function(){this.doRemove();this.pre=null;};function LogEntryMainElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry nonielogentry "+this.logEntry.level;this.contentElement=this.mainDiv.appendChild(document.createElement("span"));this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));}

-LogEntryMainElementContainer.prototype=new LogEntryElementContainer();function LogEntry(level,formattedMessage){this.level=level;this.formattedMessage=formattedMessage;this.rendered=false;}

-LogEntry.prototype=new LogItem();copyProperties(LogEntry.prototype,{render:function(){var logEntry=this;var containerDomNode=this.group.contentDiv;if(isIe){this.formattedMessage=this.formattedMessage.replace(/\r\n/g,"\r");this.unwrappedElementContainer=new LogEntryUnwrappedElementContainer(this,this.getUnwrappedDomContainer());this.wrappedElementContainer=new LogEntryWrappedElementContainer(this,this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new LogEntryMainElementContainer(this,this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}

-this.content=this.formattedMessage;this.rendered=true;},setContent:function(content,wrappedContent){if(content!=this.content){if(isIe&&(content!==this.formattedMessage)){content=content.replace(/\r\n/g,"\r");}

-for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setContent(content,wrappedContent);}

-this.content=content;}},getSearchMatches:function(){var matches=[];var i,len;if(isIe){var unwrappedEls=getElementsByClass(this.unwrappedElementContainer.mainDiv,"searchterm","span");var wrappedEls=getElementsByClass(this.wrappedElementContainer.mainDiv,"searchterm","span");for(i=0,len=unwrappedEls.length;i<len;i++){matches[i]=new Match(this.level,null,unwrappedEls[i],wrappedEls[i]);}}else{var els=getElementsByClass(this.mainElementContainer.mainDiv,"searchterm","span");for(i=0,len=els.length;i<len;i++){matches[i]=new Match(this.level,els[i]);}}

-return matches;},setSearchMatch:function(isMatch){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setSearchMatch(isMatch);}},clearSearch:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clearSearch();}},accept:function(visitor){visitor.visitLogEntry(this);},serialize:function(items){items.push([LogItem.serializedItemKeys.LOG_ENTRY,this.level,this.formattedMessage]);}});function LogItemVisitor(){}

-LogItemVisitor.prototype={visit:function(logItem){},visitParent:function(logItem){if(logItem.group){logItem.group.accept(this);}},visitChildren:function(logItem){for(var i=0,len=logItem.children.length;i<len;i++){logItem.children[i].accept(this);}},visitLogEntry:function(logEntry){this.visit(logEntry);},visitSeparator:function(separator){this.visit(separator);},visitGroup:function(group){this.visit(group);}};function GroupFlattener(){this.logEntriesAndSeparators=[];}

-GroupFlattener.prototype=new LogItemVisitor();GroupFlattener.prototype.visitGroup=function(group){this.visitChildren(group);};GroupFlattener.prototype.visitLogEntry=function(logEntry){this.logEntriesAndSeparators.push(logEntry);};GroupFlattener.prototype.visitSeparator=function(separator){this.logEntriesAndSeparators.push(separator);};window.onload=function(){if(location.search){var queryBits=unescape(location.search).substr(1).split("&"),nameValueBits;for(var i=0,len=queryBits.length;i<len;i++){nameValueBits=queryBits[i].split("=");if(nameValueBits[0]=="log4javascript_domain"){document.domain=nameValueBits[1];break;}}}

-logMainContainer=$("log");if(isIePre7){addClass(logMainContainer,"oldIe");}

-rootGroup=new Group("root",true);rootGroup.render();currentGroup=rootGroup;setCommandInputWidth();setLogContainerHeight();toggleLoggingEnabled();toggleSearchEnabled();toggleSearchFilter();toggleSearchHighlight();applyFilters();checkAllLevels();toggleWrap();toggleNewestAtTop();toggleScrollToLatest();renderQueuedLogItems();loaded=true;$("command").value="";$("command").autocomplete="off";$("command").onkeydown=function(evt){evt=getEvent(evt);if(evt.keyCode==10||evt.keyCode==13){evalCommandLine();stopPropagation(evt);}else if(evt.keyCode==27){this.value="";this.focus();}else if(evt.keyCode==38&&commandHistory.length>0){currentCommandIndex=Math.max(0,currentCommandIndex-1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}else if(evt.keyCode==40&&commandHistory.length>0){currentCommandIndex=Math.min(commandHistory.length-1,currentCommandIndex+1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}};$("command").onkeypress=function(evt){evt=getEvent(evt);if(evt.keyCode==38&&commandHistory.length>0&&evt.preventDefault){evt.preventDefault();}};$("command").onkeyup=function(evt){evt=getEvent(evt);if(evt.keyCode==27&&evt.preventDefault){evt.preventDefault();this.focus();}};document.onkeydown=function keyEventHandler(evt){evt=getEvent(evt);switch(evt.keyCode){case 69:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){evalLastCommand();cancelKeyEvent(evt);return false;}

-break;case 75:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusSearch();cancelKeyEvent(evt);return false;}

-break;case 40:case 76:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusCommandLine();cancelKeyEvent(evt);return false;}

-break;}};setTimeout(setLogContainerHeight,20);setShowCommandLine(showCommandLine);doSearch();};window.onunload=function(){if(mainWindowExists()){appender.unload();}

-appender=null;};function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}

-function setLoggingEnabled(enable){loggingEnabled=enable;}

-var appender=null;function setAppender(appenderParam){appender=appenderParam;}

-function setShowCloseButton(showCloseButton){$("closeButton").style.display=showCloseButton?"inline":"none";}

-function setShowHideButton(showHideButton){$("hideButton").style.display=showHideButton?"inline":"none";}

-var newestAtTop=false;function LogItemContentReverser(){}

-LogItemContentReverser.prototype=new LogItemVisitor();LogItemContentReverser.prototype.visitGroup=function(group){group.reverseChildren();this.visitChildren(group);};function setNewestAtTop(isNewestAtTop){var oldNewestAtTop=newestAtTop;var i,iLen,j,jLen;newestAtTop=Boolean(isNewestAtTop);if(oldNewestAtTop!=newestAtTop){var visitor=new LogItemContentReverser();rootGroup.accept(visitor);if(currentSearch){var currentMatch=currentSearch.matches[currentMatchIndex];var matchIndex=0;var matches=[];var actOnLogEntry=function(logEntry){var logEntryMatches=logEntry.getSearchMatches();for(j=0,jLen=logEntryMatches.length;j<jLen;j++){matches[matchIndex]=logEntryMatches[j];if(currentMatch&&logEntryMatches[j].equals(currentMatch)){currentMatchIndex=matchIndex;}

-matchIndex++;}};if(newestAtTop){for(i=logEntries.length-1;i>=0;i--){actOnLogEntry(logEntries[i]);}}else{for(i=0,iLen=logEntries.length;i<iLen;i++){actOnLogEntry(logEntries[i]);}}

-currentSearch.matches=matches;if(currentMatch){currentMatch.setCurrent();}}else if(scrollToLatest){doScrollToLatest();}}

-$("newestAtTop").checked=isNewestAtTop;}

-function toggleNewestAtTop(){var isNewestAtTop=$("newestAtTop").checked;setNewestAtTop(isNewestAtTop);}

-var scrollToLatest=true;function setScrollToLatest(isScrollToLatest){scrollToLatest=isScrollToLatest;if(scrollToLatest){doScrollToLatest();}

-$("scrollToLatest").checked=isScrollToLatest;}

-function toggleScrollToLatest(){var isScrollToLatest=$("scrollToLatest").checked;setScrollToLatest(isScrollToLatest);}

-function doScrollToLatest(){var l=logMainContainer;if(typeof l.scrollTop!="undefined"){if(newestAtTop){l.scrollTop=0;}else{var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}}

-var closeIfOpenerCloses=true;function setCloseIfOpenerCloses(isCloseIfOpenerCloses){closeIfOpenerCloses=isCloseIfOpenerCloses;}

-var maxMessages=null;function setMaxMessages(max){maxMessages=max;pruneLogEntries();}

-var showCommandLine=false;function setShowCommandLine(isShowCommandLine){showCommandLine=isShowCommandLine;if(loaded){$("commandLine").style.display=showCommandLine?"block":"none";setCommandInputWidth();setLogContainerHeight();}}

-function focusCommandLine(){if(loaded){$("command").focus();}}

-function focusSearch(){if(loaded){$("searchBox").focus();}}

-function getLogItems(){var items=[];for(var i=0,len=logItems.length;i<len;i++){logItems[i].serialize(items);}

-return items;}

-function setLogItems(items){var loggingReallyEnabled=loggingEnabled;loggingEnabled=true;for(var i=0,len=items.length;i<len;i++){switch(items[i][0]){case LogItem.serializedItemKeys.LOG_ENTRY:log(items[i][1],items[i][2]);break;case LogItem.serializedItemKeys.GROUP_START:group(items[i][1]);break;case LogItem.serializedItemKeys.GROUP_END:groupEnd();break;}}

-loggingEnabled=loggingReallyEnabled;}

-function log(logLevel,formattedMessage){if(loggingEnabled){var logEntry=new LogEntry(logLevel,formattedMessage);logEntries.push(logEntry);logEntriesAndSeparators.push(logEntry);logItems.push(logEntry);currentGroup.addChild(logEntry);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}

-logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}

-function renderQueuedLogItems(){logQueuedEventsTimer=null;var pruned=pruneLogEntries();var initiallyHasMatches=currentSearch?currentSearch.hasMatches():false;for(var i=0,len=logItems.length;i<len;i++){if(!logItems[i].rendered){logItems[i].render();logItems[i].appendToLog();if(currentSearch&&(logItems[i]instanceof LogEntry)){currentSearch.applyTo(logItems[i]);}}}

-if(currentSearch){if(pruned){if(currentSearch.hasVisibleMatches()){if(currentMatchIndex===null){setCurrentMatchIndex(0);}

-displayMatches();}else{displayNoMatches();}}else if(!initiallyHasMatches&&currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}}

-if(scrollToLatest){doScrollToLatest();}

-unrenderedLogItemsExist=false;}

-function pruneLogEntries(){if((maxMessages!==null)&&(logEntriesAndSeparators.length>maxMessages)){var numberToDelete=logEntriesAndSeparators.length-maxMessages;var prunedLogEntries=logEntriesAndSeparators.slice(0,numberToDelete);if(currentSearch){currentSearch.removeMatches(prunedLogEntries);}

-var group;for(var i=0;i<numberToDelete;i++){group=logEntriesAndSeparators[i].group;array_remove(logItems,logEntriesAndSeparators[i]);array_remove(logEntries,logEntriesAndSeparators[i]);logEntriesAndSeparators[i].remove(true,true);if(group.children.length===0&&group!==currentGroup&&group!==rootGroup){array_remove(logItems,group);group.remove(true,true);}}

-logEntriesAndSeparators=array_removeFromStart(logEntriesAndSeparators,numberToDelete);return true;}

-return false;}

-function group(name,startExpanded){if(loggingEnabled){initiallyExpanded=(typeof startExpanded==="undefined")?true:Boolean(startExpanded);var newGroup=new Group(name,false,initiallyExpanded);currentGroup.addChild(newGroup);currentGroup=newGroup;logItems.push(newGroup);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}

-logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}

-function groupEnd(){currentGroup=(currentGroup===rootGroup)?rootGroup:currentGroup.group;}

-function mainPageReloaded(){currentGroup=rootGroup;var separator=new Separator();logEntriesAndSeparators.push(separator);logItems.push(separator);currentGroup.addChild(separator);}

-function closeWindow(){if(appender&&mainWindowExists()){appender.close(true);}else{window.close();}}

-function hide(){if(appender&&mainWindowExists()){appender.hide();}}

-var mainWindow=window;var windowId="log4javascriptConsoleWindow_"+new Date().getTime()+"_"+(""+Math.random()).substr(2);function setMainWindow(win){mainWindow=win;mainWindow[windowId]=window;if(opener&&closeIfOpenerCloses){pollOpener();}}

-function pollOpener(){if(closeIfOpenerCloses){if(mainWindowExists()){setTimeout(pollOpener,500);}else{closeWindow();}}}

-function mainWindowExists(){try{return(mainWindow&&!mainWindow.closed&&mainWindow[windowId]==window);}catch(ex){}

-return false;}

-var logLevels=["TRACE","DEBUG","INFO","WARN","ERROR","FATAL"];function getCheckBox(logLevel){return $("switch_"+logLevel);}

-function getIeWrappedLogContainer(){return $("log_wrapped");}

-function getIeUnwrappedLogContainer(){return $("log_unwrapped");}

-function applyFilters(){for(var i=0;i<logLevels.length;i++){if(getCheckBox(logLevels[i]).checked){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}

-updateSearchFromFilters();}

-function toggleAllLevels(){var turnOn=$("switch_ALL").checked;for(var i=0;i<logLevels.length;i++){getCheckBox(logLevels[i]).checked=turnOn;if(turnOn){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}}

-function checkAllLevels(){for(var i=0;i<logLevels.length;i++){if(!getCheckBox(logLevels[i]).checked){getCheckBox("ALL").checked=false;return;}}

-getCheckBox("ALL").checked=true;}

-function clearLog(){rootGroup.clear();currentGroup=rootGroup;logEntries=[];logItems=[];logEntriesAndSeparators=[];doSearch();}

-function toggleWrap(){var enable=$("wrap").checked;if(enable){addClass(logMainContainer,"wrap");}else{removeClass(logMainContainer,"wrap");}

-refreshCurrentMatch();}

-var searchTimer=null;function scheduleSearch(){try{clearTimeout(searchTimer);}catch(ex){}

-searchTimer=setTimeout(doSearch,500);}

-function Search(searchTerm,isRegex,searchRegex,isCaseSensitive){this.searchTerm=searchTerm;this.isRegex=isRegex;this.searchRegex=searchRegex;this.isCaseSensitive=isCaseSensitive;this.matches=[];}

-Search.prototype={hasMatches:function(){return this.matches.length>0;},hasVisibleMatches:function(){if(this.hasMatches()){for(var i=0;i<this.matches.length;i++){if(this.matches[i].isVisible()){return true;}}}

-return false;},match:function(logEntry){var entryText=String(logEntry.formattedMessage);var matchesSearch=false;if(this.isRegex){matchesSearch=this.searchRegex.test(entryText);}else if(this.isCaseSensitive){matchesSearch=(entryText.indexOf(this.searchTerm)>-1);}else{matchesSearch=(entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase())>-1);}

-return matchesSearch;},getNextVisibleMatchIndex:function(){for(var i=currentMatchIndex+1;i<this.matches.length;i++){if(this.matches[i].isVisible()){return i;}}

-for(i=0;i<=currentMatchIndex;i++){if(this.matches[i].isVisible()){return i;}}

-return-1;},getPreviousVisibleMatchIndex:function(){for(var i=currentMatchIndex-1;i>=0;i--){if(this.matches[i].isVisible()){return i;}}

-for(var i=this.matches.length-1;i>=currentMatchIndex;i--){if(this.matches[i].isVisible()){return i;}}

-return-1;},applyTo:function(logEntry){var doesMatch=this.match(logEntry);if(doesMatch){logEntry.group.expand();logEntry.setSearchMatch(true);var logEntryContent;var wrappedLogEntryContent;var searchTermReplacementStartTag="<span class=\"searchterm\">";var searchTermReplacementEndTag="<"+"/span>";var preTagName=isIe?"pre":"span";var preStartTag="<"+preTagName+" class=\"pre\">";var preEndTag="<"+"/"+preTagName+">";var startIndex=0;var searchIndex,matchedText,textBeforeMatch;if(this.isRegex){var flags=this.isCaseSensitive?"g":"gi";var capturingRegex=new RegExp("("+this.searchRegex.source+")",flags);var rnd=(""+Math.random()).substr(2);var startToken="%%s"+rnd+"%%";var endToken="%%e"+rnd+"%%";logEntryContent=logEntry.formattedMessage.replace(capturingRegex,startToken+"$1"+endToken);logEntryContent=escapeHtml(logEntryContent);var result;var searchString=logEntryContent;logEntryContent="";wrappedLogEntryContent="";while((searchIndex=searchString.indexOf(startToken,startIndex))>-1){var endTokenIndex=searchString.indexOf(endToken,searchIndex);matchedText=searchString.substring(searchIndex+startToken.length,endTokenIndex);textBeforeMatch=searchString.substring(startIndex,searchIndex);logEntryContent+=preStartTag+textBeforeMatch+preEndTag;logEntryContent+=searchTermReplacementStartTag+preStartTag+matchedText+

-preEndTag+searchTermReplacementEndTag;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+

-matchedText+searchTermReplacementEndTag;}

-startIndex=endTokenIndex+endToken.length;}

-logEntryContent+=preStartTag+searchString.substr(startIndex)+preEndTag;if(isIe){wrappedLogEntryContent+=searchString.substr(startIndex);}}else{logEntryContent="";wrappedLogEntryContent="";var searchTermReplacementLength=searchTermReplacementStartTag.length+

-this.searchTerm.length+searchTermReplacementEndTag.length;var searchTermLength=this.searchTerm.length;var searchTermLowerCase=this.searchTerm.toLowerCase();var logTextLowerCase=logEntry.formattedMessage.toLowerCase();while((searchIndex=logTextLowerCase.indexOf(searchTermLowerCase,startIndex))>-1){matchedText=escapeHtml(logEntry.formattedMessage.substr(searchIndex,this.searchTerm.length));textBeforeMatch=escapeHtml(logEntry.formattedMessage.substring(startIndex,searchIndex));var searchTermReplacement=searchTermReplacementStartTag+

-preStartTag+matchedText+preEndTag+searchTermReplacementEndTag;logEntryContent+=preStartTag+textBeforeMatch+preEndTag+searchTermReplacement;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+

-matchedText+searchTermReplacementEndTag;}

-startIndex=searchIndex+searchTermLength;}

-var textAfterLastMatch=escapeHtml(logEntry.formattedMessage.substr(startIndex));logEntryContent+=preStartTag+textAfterLastMatch+preEndTag;if(isIe){wrappedLogEntryContent+=textAfterLastMatch;}}

-logEntry.setContent(logEntryContent,wrappedLogEntryContent);var logEntryMatches=logEntry.getSearchMatches();this.matches=this.matches.concat(logEntryMatches);}else{logEntry.setSearchMatch(false);logEntry.setContent(logEntry.formattedMessage,logEntry.formattedMessage);}

-return doesMatch;},removeMatches:function(logEntries){var matchesToRemoveCount=0;var currentMatchRemoved=false;var matchesToRemove=[];var i,iLen,j,jLen;for(i=0,iLen=this.matches.length;i<iLen;i++){for(j=0,jLen=logEntries.length;j<jLen;j++){if(this.matches[i].belongsTo(logEntries[j])){matchesToRemove.push(this.matches[i]);if(i===currentMatchIndex){currentMatchRemoved=true;}}}}

-var newMatch=currentMatchRemoved?null:this.matches[currentMatchIndex];if(currentMatchRemoved){for(i=currentMatchIndex,iLen=this.matches.length;i<iLen;i++){if(this.matches[i].isVisible()&&!array_contains(matchesToRemove,this.matches[i])){newMatch=this.matches[i];break;}}}

-for(i=0,iLen=matchesToRemove.length;i<iLen;i++){array_remove(this.matches,matchesToRemove[i]);matchesToRemove[i].remove();}

-if(this.hasVisibleMatches()){if(newMatch===null){setCurrentMatchIndex(0);}else{var newMatchIndex=0;for(i=0,iLen=this.matches.length;i<iLen;i++){if(newMatch===this.matches[i]){newMatchIndex=i;break;}}

-setCurrentMatchIndex(newMatchIndex);}}else{currentMatchIndex=null;displayNoMatches();}}};function getPageOffsetTop(el,container){var currentEl=el;var y=0;while(currentEl&&currentEl!=container){y+=currentEl.offsetTop;currentEl=currentEl.offsetParent;}

-return y;}

-function scrollIntoView(el){var logContainer=logMainContainer;if(!$("wrap").checked){var logContainerLeft=logContainer.scrollLeft;var logContainerRight=logContainerLeft+logContainer.offsetWidth;var elLeft=el.offsetLeft;var elRight=elLeft+el.offsetWidth;if(elLeft<logContainerLeft||elRight>logContainerRight){logContainer.scrollLeft=elLeft-(logContainer.offsetWidth-el.offsetWidth)/2;}}

-var logContainerTop=logContainer.scrollTop;var logContainerBottom=logContainerTop+logContainer.offsetHeight;var elTop=getPageOffsetTop(el)-getToolBarsHeight();var elBottom=elTop+el.offsetHeight;if(elTop<logContainerTop||elBottom>logContainerBottom){logContainer.scrollTop=elTop-(logContainer.offsetHeight-el.offsetHeight)/2;}}

-function Match(logEntryLevel,spanInMainDiv,spanInUnwrappedPre,spanInWrappedDiv){this.logEntryLevel=logEntryLevel;this.spanInMainDiv=spanInMainDiv;if(isIe){this.spanInUnwrappedPre=spanInUnwrappedPre;this.spanInWrappedDiv=spanInWrappedDiv;}

-this.mainSpan=isIe?spanInUnwrappedPre:spanInMainDiv;}

-Match.prototype={equals:function(match){return this.mainSpan===match.mainSpan;},setCurrent:function(){if(isIe){addClass(this.spanInUnwrappedPre,"currentmatch");addClass(this.spanInWrappedDiv,"currentmatch");var elementToScroll=$("wrap").checked?this.spanInWrappedDiv:this.spanInUnwrappedPre;scrollIntoView(elementToScroll);}else{addClass(this.spanInMainDiv,"currentmatch");scrollIntoView(this.spanInMainDiv);}},belongsTo:function(logEntry){if(isIe){return isDescendant(this.spanInUnwrappedPre,logEntry.unwrappedPre);}else{return isDescendant(this.spanInMainDiv,logEntry.mainDiv);}},setNotCurrent:function(){if(isIe){removeClass(this.spanInUnwrappedPre,"currentmatch");removeClass(this.spanInWrappedDiv,"currentmatch");}else{removeClass(this.spanInMainDiv,"currentmatch");}},isOrphan:function(){return isOrphan(this.mainSpan);},isVisible:function(){return getCheckBox(this.logEntryLevel).checked;},remove:function(){if(isIe){this.spanInUnwrappedPre=null;this.spanInWrappedDiv=null;}else{this.spanInMainDiv=null;}}};var currentSearch=null;var currentMatchIndex=null;function doSearch(){var searchBox=$("searchBox");var searchTerm=searchBox.value;var isRegex=$("searchRegex").checked;var isCaseSensitive=$("searchCaseSensitive").checked;var i;if(searchTerm===""){$("searchReset").disabled=true;$("searchNav").style.display="none";removeClass(document.body,"searching");removeClass(searchBox,"hasmatches");removeClass(searchBox,"nomatches");for(i=0;i<logEntries.length;i++){logEntries[i].clearSearch();logEntries[i].setContent(logEntries[i].formattedMessage,logEntries[i].formattedMessage);}

-currentSearch=null;setLogContainerHeight();}else{$("searchReset").disabled=false;$("searchNav").style.display="block";var searchRegex;var regexValid;if(isRegex){try{searchRegex=isCaseSensitive?new RegExp(searchTerm,"g"):new RegExp(searchTerm,"gi");regexValid=true;replaceClass(searchBox,"validregex","invalidregex");searchBox.title="Valid regex";}catch(ex){regexValid=false;replaceClass(searchBox,"invalidregex","validregex");searchBox.title="Invalid regex: "+(ex.message?ex.message:(ex.description?ex.description:"unknown error"));return;}}else{searchBox.title="";removeClass(searchBox,"validregex");removeClass(searchBox,"invalidregex");}

-addClass(document.body,"searching");currentSearch=new Search(searchTerm,isRegex,searchRegex,isCaseSensitive);for(i=0;i<logEntries.length;i++){currentSearch.applyTo(logEntries[i]);}

-setLogContainerHeight();if(currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}else{displayNoMatches();}}}

-function updateSearchFromFilters(){if(currentSearch){if(currentSearch.hasMatches()){if(currentMatchIndex===null){currentMatchIndex=0;}

-var currentMatch=currentSearch.matches[currentMatchIndex];if(currentMatch.isVisible()){displayMatches();setCurrentMatchIndex(currentMatchIndex);}else{currentMatch.setNotCurrent();var nextVisibleMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextVisibleMatchIndex>-1){setCurrentMatchIndex(nextVisibleMatchIndex);displayMatches();}else{displayNoMatches();}}}else{displayNoMatches();}}}

-function refreshCurrentMatch(){if(currentSearch&&currentSearch.hasVisibleMatches()){setCurrentMatchIndex(currentMatchIndex);}}

-function displayMatches(){replaceClass($("searchBox"),"hasmatches","nomatches");$("searchBox").title=""+currentSearch.matches.length+" matches found";$("searchNav").style.display="block";setLogContainerHeight();}

-function displayNoMatches(){replaceClass($("searchBox"),"nomatches","hasmatches");$("searchBox").title="No matches found";$("searchNav").style.display="none";setLogContainerHeight();}

-function toggleSearchEnabled(enable){enable=(typeof enable=="undefined")?!$("searchDisable").checked:enable;$("searchBox").disabled=!enable;$("searchReset").disabled=!enable;$("searchRegex").disabled=!enable;$("searchNext").disabled=!enable;$("searchPrevious").disabled=!enable;$("searchCaseSensitive").disabled=!enable;$("searchNav").style.display=(enable&&($("searchBox").value!=="")&&currentSearch&&currentSearch.hasVisibleMatches())?"block":"none";if(enable){removeClass($("search"),"greyedout");addClass(document.body,"searching");if($("searchHighlight").checked){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}

-if($("searchFilter").checked){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}

-$("searchDisable").checked=!enable;}else{addClass($("search"),"greyedout");removeClass(document.body,"searching");removeClass(logMainContainer,"searchhighlight");removeClass(logMainContainer,"searchfilter");}

-setLogContainerHeight();}

-function toggleSearchFilter(){var enable=$("searchFilter").checked;if(enable){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}

-refreshCurrentMatch();}

-function toggleSearchHighlight(){var enable=$("searchHighlight").checked;if(enable){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}}

-function clearSearch(){$("searchBox").value="";doSearch();}

-function searchNext(){if(currentSearch!==null&&currentMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var nextMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextMatchIndex>currentMatchIndex||confirm("Reached the end of the page. Start from the top?")){setCurrentMatchIndex(nextMatchIndex);}}}

-function searchPrevious(){if(currentSearch!==null&&currentMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var previousMatchIndex=currentSearch.getPreviousVisibleMatchIndex();if(previousMatchIndex<currentMatchIndex||confirm("Reached the start of the page. Continue from the bottom?")){setCurrentMatchIndex(previousMatchIndex);}}}

-function setCurrentMatchIndex(index){currentMatchIndex=index;currentSearch.matches[currentMatchIndex].setCurrent();}

-function addClass(el,cssClass){if(!hasClass(el,cssClass)){if(el.className){el.className+=" "+cssClass;}else{el.className=cssClass;}}}

-function hasClass(el,cssClass){if(el.className){var classNames=el.className.split(" ");return array_contains(classNames,cssClass);}

-return false;}

-function removeClass(el,cssClass){if(hasClass(el,cssClass)){var existingClasses=el.className.split(" ");var newClasses=[];for(var i=0,len=existingClasses.length;i<len;i++){if(existingClasses[i]!=cssClass){newClasses[newClasses.length]=existingClasses[i];}}

-el.className=newClasses.join(" ");}}

-function replaceClass(el,newCssClass,oldCssClass){removeClass(el,oldCssClass);addClass(el,newCssClass);}

-function getElementsByClass(el,cssClass,tagName){var elements=el.getElementsByTagName(tagName);var matches=[];for(var i=0,len=elements.length;i<len;i++){if(hasClass(elements[i],cssClass)){matches.push(elements[i]);}}

-return matches;}

-function $(id){return document.getElementById(id);}

-function isDescendant(node,ancestorNode){while(node!=null){if(node===ancestorNode){return true;}

-node=node.parentNode;}

-return false;}

-function isOrphan(node){var currentNode=node;while(currentNode){if(currentNode==document.body){return false;}

-currentNode=currentNode.parentNode;}

-return true;}

-function escapeHtml(str){return str.replace(/&/g,"&amp;").replace(/[<]/g,"&lt;").replace(/>/g,"&gt;");}

-function getWindowWidth(){if(window.innerWidth){return window.innerWidth;}else if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth;}else if(document.body){return document.body.clientWidth;}

-return 0;}

-function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}

-return 0;}

-function getToolBarsHeight(){return $("switches").offsetHeight;}

-function getChromeHeight(){var height=getToolBarsHeight();if(showCommandLine){height+=$("commandLine").offsetHeight;}

-return height;}

-function setLogContainerHeight(){if(logMainContainer){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";logMainContainer.style.height=""+

-Math.max(0,windowHeight-getChromeHeight())+"px";}}

-function setCommandInputWidth(){if(showCommandLine){$("command").style.width=""+Math.max(0,$("commandLineContainer").offsetWidth-

-($("evaluateButton").offsetWidth+13))+"px";}}

-window.onresize=function(){setCommandInputWidth();setLogContainerHeight();};if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}

-return this.length;};}

-if(!Array.prototype.pop){Array.prototype.pop=function(){if(this.length>0){var val=this[this.length-1];this.length=this.length-1;return val;}};}

-if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}

-this.length=this.length-1;return firstItem;}};}

-if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}

-var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}

-return itemsDeleted;};}

-function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}

-if(index>=0){arr.splice(index,1);return index;}else{return false;}}

-function array_removeFromStart(array,numberToRemove){if(Array.prototype.splice){array.splice(0,numberToRemove);}else{for(var i=numberToRemove,len=array.length;i<len;i++){array[i-numberToRemove]=array[i];}

-array.length=array.length-numberToRemove;}

-return array;}

-function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}

-return false;}

-function getErrorMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}

-return""+ex;}

-function moveCaretToEnd(input){if(input.setSelectionRange){input.focus();var length=input.value.length;input.setSelectionRange(length,length);}else if(input.createTextRange){var range=input.createTextRange();range.collapse(false);range.select();}

-input.focus();}

-function stopPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}}

-function getEvent(evt){return evt?evt:event;}

-function getTarget(evt){return evt.target?evt.target:evt.srcElement;}

-function getRelatedTarget(evt){if(evt.relatedTarget){return evt.relatedTarget;}else if(evt.srcElement){switch(evt.type){case"mouseover":return evt.fromElement;case"mouseout":return evt.toElement;default:return evt.srcElement;}}}

-function cancelKeyEvent(evt){evt.returnValue=false;stopPropagation(evt);}

-function evalCommandLine(){var expr=$("command").value;evalCommand(expr);$("command").value="";}

-function evalLastCommand(){if(lastCommand!=null){evalCommand(lastCommand);}}

-var lastCommand=null;var commandHistory=[];var currentCommandIndex=0;function evalCommand(expr){if(appender){appender.evalCommandAndAppend(expr);}else{var prefix=">>> "+expr+"\r\n";try{log("INFO",prefix+eval(expr));}catch(ex){log("ERROR",prefix+"Error: "+getErrorMessage(ex));}}

-if(expr!=commandHistory[commandHistory.length-1]){commandHistory.push(expr);if(appender){appender.storeCommandHistory(commandHistory);}}

-currentCommandIndex=(expr==commandHistory[currentCommandIndex])?currentCommandIndex+1:commandHistory.length;lastCommand=expr;}

-//]]>

-</script>

-<style type="text/css">

-body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#switchesContainer input{margin-bottom:0}div.toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div.toolbar,div#search input{font-family:tahoma,verdana,arial,helvetica,sans-serif}div.toolbar input.button{padding:0 5px;font-size:100%}div.toolbar input.hidden{display:none}div#switches input#clearButton{margin-left:20px}div#levels label{font-weight:bold}div#levels label,div#options label{margin-right:5px}div#levels label#wrapLabel{font-weight:normal}div#search label{margin-right:10px}div#search label.searchboxlabel{margin-right:0}div#search input{font-size:100%}div#search input.validregex{color:green}div#search input.invalidregex{color:red}div#search input.nomatches{color:white;background-color:#ff6666}div#search input.nomatches{color:white;background-color:#ff6666}div#searchNav{display:none}div#commandLine{display:none}div#commandLine input#command{font-size:100%;font-family:Courier New,Courier}div#commandLine input#evaluateButton{}*.greyedout{color:gray !important;border-color:gray !important}*.greyedout *.alwaysenabled{color:black}*.unselectable{-khtml-user-select:none;-moz-user-select:none;user-select:none}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both;position:relative}div.group{border-color:#cccccc;border-style:solid;border-width:1px 0 1px 1px;overflow:visible}div.oldIe div.group,div.oldIe div.group *,div.oldIe *.logentry{height:1%}div.group div.groupheading span.expander{border:solid black 1px;font-family:Courier New,Courier;font-size:0.833em;background-color:#eeeeee;position:relative;top:-1px;color:black;padding:0 2px;cursor:pointer;cursor:hand;height:1%}div.group div.groupcontent{margin-left:10px;padding-bottom:2px;overflow:visible}div.group div.expanded{display:block}div.group div.collapsed{display:none}*.logentry{overflow:visible;display:none;white-space:pre}span.pre{white-space:pre}pre.unwrapped{display:inline !important}pre.unwrapped pre.pre,div.wrapped pre.pre{display:inline}div.wrapped pre.pre{white-space:normal}div.wrapped{display:none}body.searching *.logentry span.currentmatch{color:white !important;background-color:green !important}body.searching div.searchhighlight *.logentry span.searchterm{color:black;background-color:yellow}div.wrap *.logentry{white-space:normal !important;border-width:0 0 1px 0;border-color:#dddddd;border-style:dotted}div.wrap #log_wrapped,#log_unwrapped{display:block}div.wrap #log_unwrapped,#log_wrapped{display:none}div.wrap *.logentry span.pre{overflow:visible;white-space:normal}div.wrap *.logentry pre.unwrapped{display:none}div.wrap *.logentry span.wrapped{display:inline}div.searchfilter *.searchnonmatch{display:none !important}div#log *.TRACE,label#label_TRACE{color:#666666}div#log *.DEBUG,label#label_DEBUG{color:green}div#log *.INFO,label#label_INFO{color:#000099}div#log *.WARN,label#label_WARN{color:#999900}div#log *.ERROR,label#label_ERROR{color:red}div#log *.FATAL,label#label_FATAL{color:#660066}div.TRACE#log *.TRACE,div.DEBUG#log *.DEBUG,div.INFO#log *.INFO,div.WARN#log *.WARN,div.ERROR#log *.ERROR,div.FATAL#log *.FATAL{display:block}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}

-</style>

-</head>

-<body id="body">

-<div id="switchesContainer">

-<div id="switches">

-<div id="levels" class="toolbar">

-Filters:

-<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>

-<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>

-<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>

-<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>

-<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>

-<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>

-<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>

-</div>

-<div id="search" class="toolbar">

-<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />

-<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />

-<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>

-<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>

-<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>

-<div id="searchNav">

-<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />

-<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />

-<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>

-<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>

-</div>

-</div>

-<div id="options" class="toolbar">

-Options:

-<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>

-<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>

-<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>

-<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>

-<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages"  />

-<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />

-<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />

-</div>

-</div>

-</div>

-<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>

-<div id="commandLine" class="toolbar">

-<div id="commandLineContainer">

-<input type="text" id="command" title="Enter a JavaScript command here and hit return or press 'Evaluate'" />

-<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />

-</div>

-</div>

-</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/js/console_uncompressed.html b/xos/core/static/log4javascript-1.4.6/js/console_uncompressed.html
deleted file mode 100644
index 220cca0..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/console_uncompressed.html
+++ /dev/null
@@ -1,2297 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript</title>

-		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

-		<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->

-		<meta http-equiv="X-UA-Compatible" content="IE=7" />

-		<script type="text/javascript">var isIe = false, isIePre7 = false;</script>

-		<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->

-		<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->

-		<script type="text/javascript">

-			//<![CDATA[

-			var loggingEnabled = true;

-			var logQueuedEventsTimer = null;

-			var logEntries = [];

-			var logEntriesAndSeparators = [];

-			var logItems = [];

-			var renderDelay = 100;

-			var unrenderedLogItemsExist = false;

-			var rootGroup, currentGroup = null;

-			var loaded = false;

-			var currentLogItem = null;

-			var logMainContainer;

-

-			function copyProperties(obj, props) {

-				for (var i in props) {

-					obj[i] = props[i];

-				}

-			}

-

-			/*----------------------------------------------------------------*/

-

-			function LogItem() {

-			}

-

-			LogItem.prototype = {

-				mainContainer: null,

-				wrappedContainer: null,

-				unwrappedContainer: null,

-				group: null,

-

-				appendToLog: function() {

-					for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-						this.elementContainers[i].appendToLog();

-					}

-					this.group.update();

-				},

-

-				doRemove: function(doUpdate, removeFromGroup) {

-					if (this.rendered) {

-						for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-							this.elementContainers[i].remove();

-						}

-						this.unwrappedElementContainer = null;

-						this.wrappedElementContainer = null;

-						this.mainElementContainer = null;

-					}

-					if (this.group && removeFromGroup) {

-						this.group.removeChild(this, doUpdate);

-					}

-					if (this === currentLogItem) {

-						currentLogItem = null;

-					}

-				},

-

-				remove: function(doUpdate, removeFromGroup) {

-					this.doRemove(doUpdate, removeFromGroup);

-				},

-

-				render: function() {},

-

-				accept: function(visitor) {

-					visitor.visit(this);

-				},

-

-				getUnwrappedDomContainer: function() {

-					return this.group.unwrappedElementContainer.contentDiv;

-				},

-

-				getWrappedDomContainer: function() {

-					return this.group.wrappedElementContainer.contentDiv;

-				},

-

-				getMainDomContainer: function() {

-					return this.group.mainElementContainer.contentDiv;

-				}

-			};

-

-			LogItem.serializedItemKeys = {LOG_ENTRY: 0, GROUP_START: 1, GROUP_END: 2};

-

-			/*----------------------------------------------------------------*/

-

-			function LogItemContainerElement() {

-			}

-

-			LogItemContainerElement.prototype = {

-				appendToLog: function() {

-					var insertBeforeFirst = (newestAtTop && this.containerDomNode.hasChildNodes());

-					if (insertBeforeFirst) {

-						this.containerDomNode.insertBefore(this.mainDiv, this.containerDomNode.firstChild);

-					} else {

-						this.containerDomNode.appendChild(this.mainDiv);

-					}

-				}

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function SeparatorElementContainer(containerDomNode) {

-				this.containerDomNode = containerDomNode;

-				this.mainDiv = document.createElement("div");

-				this.mainDiv.className = "separator";

-				this.mainDiv.innerHTML = "&nbsp;";

-			}

-

-			SeparatorElementContainer.prototype = new LogItemContainerElement();

-

-			SeparatorElementContainer.prototype.remove = function() {

-				this.mainDiv.parentNode.removeChild(this.mainDiv);

-				this.mainDiv = null;

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function Separator() {

-				this.rendered = false;

-			}

-

-			Separator.prototype = new LogItem();

-

-			copyProperties(Separator.prototype, {

-				render: function() {

-					var containerDomNode = this.group.contentDiv;

-					if (isIe) {

-						this.unwrappedElementContainer = new SeparatorElementContainer(this.getUnwrappedDomContainer());

-						this.wrappedElementContainer = new SeparatorElementContainer(this.getWrappedDomContainer());

-						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];

-					} else {

-						this.mainElementContainer = new SeparatorElementContainer(this.getMainDomContainer());

-						this.elementContainers = [this.mainElementContainer];

-					}

-					this.content = this.formattedMessage;

-					this.rendered = true;

-				}

-			});

-

-			/*----------------------------------------------------------------*/

-

-			function GroupElementContainer(group, containerDomNode, isRoot, isWrapped) {

-				this.group = group;

-				this.containerDomNode = containerDomNode;

-				this.isRoot = isRoot;

-				this.isWrapped = isWrapped;

-				this.expandable = false;

-

-				if (this.isRoot) {

-					if (isIe) {

-						this.contentDiv = logMainContainer.appendChild(document.createElement("div"));

-						this.contentDiv.id = this.isWrapped ? "log_wrapped" : "log_unwrapped";

-					} else {

-						this.contentDiv = logMainContainer;

-					}

-				} else {

-					var groupElementContainer = this;

-					

-					this.mainDiv = document.createElement("div");

-					this.mainDiv.className = "group";

-

-					this.headingDiv = this.mainDiv.appendChild(document.createElement("div"));

-					this.headingDiv.className = "groupheading";

-

-					this.expander = this.headingDiv.appendChild(document.createElement("span"));

-					this.expander.className = "expander unselectable greyedout";

-					this.expander.unselectable = true;

-					var expanderText = this.group.expanded ? "-" : "+";

-					this.expanderTextNode = this.expander.appendChild(document.createTextNode(expanderText));

-					

-					this.headingDiv.appendChild(document.createTextNode(" " + this.group.name));

-

-					this.contentDiv = this.mainDiv.appendChild(document.createElement("div"));

-					var contentCssClass = this.group.expanded ? "expanded" : "collapsed";

-					this.contentDiv.className = "groupcontent " + contentCssClass;

-

-					this.expander.onclick = function() {

-						if (groupElementContainer.group.expandable) {

-							groupElementContainer.group.toggleExpanded();

-						}

-					};

-				}

-			}

-

-			GroupElementContainer.prototype = new LogItemContainerElement();

-

-			copyProperties(GroupElementContainer.prototype, {

-				toggleExpanded: function() {

-					if (!this.isRoot) {

-						var oldCssClass, newCssClass, expanderText;

-						if (this.group.expanded) {

-							newCssClass = "expanded";

-							oldCssClass = "collapsed";

-							expanderText = "-";

-						} else {

-							newCssClass = "collapsed";

-							oldCssClass = "expanded";

-							expanderText = "+";

-						}

-						replaceClass(this.contentDiv, newCssClass, oldCssClass);

-						this.expanderTextNode.nodeValue = expanderText;

-					}

-				},

-

-				remove: function() {

-					if (!this.isRoot) {

-						this.headingDiv = null;

-						this.expander.onclick = null;

-						this.expander = null;

-						this.expanderTextNode = null;

-						this.contentDiv = null;

-						this.containerDomNode = null;

-						this.mainDiv.parentNode.removeChild(this.mainDiv);

-						this.mainDiv = null;

-					}

-				},

-

-				reverseChildren: function() {

-					// Invert the order of the log entries

-					var node = null;

-

-					// Remove all the log container nodes

-					var childDomNodes = [];

-					while ((node = this.contentDiv.firstChild)) {

-						this.contentDiv.removeChild(node);

-						childDomNodes.push(node);

-					}

-

-					// Put them all back in reverse order

-					while ((node = childDomNodes.pop())) {

-						this.contentDiv.appendChild(node);

-					}

-				},

-

-				update: function() {

-					if (!this.isRoot) {

-						if (this.group.expandable) {

-							removeClass(this.expander, "greyedout");

-						} else {

-							addClass(this.expander, "greyedout");

-						}

-					}

-				},

-

-				clear: function() {

-					if (this.isRoot) {

-						this.contentDiv.innerHTML = "";

-					}

-				}

-			});

-

-			/*----------------------------------------------------------------*/

-

-			function Group(name, isRoot, initiallyExpanded) {

-				this.name = name;

-				this.group = null;

-				this.isRoot = isRoot;

-				this.initiallyExpanded = initiallyExpanded;

-				this.elementContainers = [];

-				this.children = [];

-				this.expanded = initiallyExpanded;

-				this.rendered = false;

-				this.expandable = false;

-			}

-

-			Group.prototype = new LogItem();

-

-			copyProperties(Group.prototype, {

-				addChild: function(logItem) {

-					this.children.push(logItem);

-					logItem.group = this;

-				},

-

-				render: function() {

-					if (isIe) {

-						var unwrappedDomContainer, wrappedDomContainer;

-						if (this.isRoot) {

-							unwrappedDomContainer = logMainContainer;

-							wrappedDomContainer = logMainContainer;

-						} else {

-							unwrappedDomContainer = this.getUnwrappedDomContainer();

-							wrappedDomContainer = this.getWrappedDomContainer();

-						}

-						this.unwrappedElementContainer = new GroupElementContainer(this, unwrappedDomContainer, this.isRoot, false);

-						this.wrappedElementContainer = new GroupElementContainer(this, wrappedDomContainer, this.isRoot, true);

-						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];

-					} else {

-						var mainDomContainer = this.isRoot ? logMainContainer : this.getMainDomContainer();

-						this.mainElementContainer = new GroupElementContainer(this, mainDomContainer, this.isRoot, false);

-						this.elementContainers = [this.mainElementContainer];

-					}

-					this.rendered = true;

-				},

-

-				toggleExpanded: function() {

-					this.expanded = !this.expanded;

-					for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-						this.elementContainers[i].toggleExpanded();

-					}

-				},

-

-				expand: function() {

-					if (!this.expanded) {

-						this.toggleExpanded();

-					}

-				},

-

-				accept: function(visitor) {

-					visitor.visitGroup(this);

-				},

-

-				reverseChildren: function() {

-					if (this.rendered) {

-						for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-							this.elementContainers[i].reverseChildren();

-						}

-					}

-				},

-

-				update: function() {

-					var previouslyExpandable = this.expandable;

-					this.expandable = (this.children.length !== 0);

-					if (this.expandable !== previouslyExpandable) {

-						for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-							this.elementContainers[i].update();

-						}

-					}

-				},

-

-				flatten: function() {

-					var visitor = new GroupFlattener();

-					this.accept(visitor);

-					return visitor.logEntriesAndSeparators;

-				},

-

-				removeChild: function(child, doUpdate) {

-					array_remove(this.children, child);

-					child.group = null;

-					if (doUpdate) {

-						this.update();

-					}

-				},

-

-				remove: function(doUpdate, removeFromGroup) {

-					for (var i = 0, len = this.children.length; i < len; i++) {

-						this.children[i].remove(false, false);

-					}

-					this.children = [];

-					this.update();

-					if (this === currentGroup) {

-						currentGroup = this.group;

-					}

-					this.doRemove(doUpdate, removeFromGroup);

-				},

-

-				serialize: function(items) {

-					items.push([LogItem.serializedItemKeys.GROUP_START, this.name]);

-					for (var i = 0, len = this.children.length; i < len; i++) {

-						this.children[i].serialize(items);

-					}

-					if (this !== currentGroup) {

-						items.push([LogItem.serializedItemKeys.GROUP_END]);

-					}

-				},

-

-				clear: function() {

-					for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-						this.elementContainers[i].clear();

-					}

-				}

-			});

-

-			/*----------------------------------------------------------------*/

-

-			function LogEntryElementContainer() {

-			}

-

-			LogEntryElementContainer.prototype = new LogItemContainerElement();

-

-			copyProperties(LogEntryElementContainer.prototype, {

-				remove: function() {

-					this.doRemove();

-				},

-

-				doRemove: function() {

-					this.mainDiv.parentNode.removeChild(this.mainDiv);

-					this.mainDiv = null;

-					this.contentElement = null;

-					this.containerDomNode = null;

-				},

-

-				setContent: function(content, wrappedContent) {

-					if (content === this.formattedMessage) {

-						this.contentElement.innerHTML = "";

-						this.contentElement.appendChild(document.createTextNode(this.formattedMessage));

-					} else {

-						this.contentElement.innerHTML = content;

-					}

-				},

-

-				setSearchMatch: function(isMatch) {

-					var oldCssClass = isMatch ? "searchnonmatch" : "searchmatch";

-					var newCssClass = isMatch ? "searchmatch" : "searchnonmatch";

-					replaceClass(this.mainDiv, newCssClass, oldCssClass);

-				},

-

-				clearSearch: function() {

-					removeClass(this.mainDiv, "searchmatch");

-					removeClass(this.mainDiv, "searchnonmatch");

-				}

-			});

-

-			/*----------------------------------------------------------------*/

-

-			function LogEntryWrappedElementContainer(logEntry, containerDomNode) {

-				this.logEntry = logEntry;

-				this.containerDomNode = containerDomNode;

-				this.mainDiv = document.createElement("div");

-				this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));

-				this.mainDiv.className = "logentry wrapped " + this.logEntry.level;

-				this.contentElement = this.mainDiv;

-			}

-

-			LogEntryWrappedElementContainer.prototype = new LogEntryElementContainer();

-

-			LogEntryWrappedElementContainer.prototype.setContent = function(content, wrappedContent) {

-				if (content === this.formattedMessage) {

-					this.contentElement.innerHTML = "";

-					this.contentElement.appendChild(document.createTextNode(this.formattedMessage));

-				} else {

-					this.contentElement.innerHTML = wrappedContent;

-				}

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function LogEntryUnwrappedElementContainer(logEntry, containerDomNode) {

-				this.logEntry = logEntry;

-				this.containerDomNode = containerDomNode;

-				this.mainDiv = document.createElement("div");

-				this.mainDiv.className = "logentry unwrapped " + this.logEntry.level;

-				this.pre = this.mainDiv.appendChild(document.createElement("pre"));

-				this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));

-				this.pre.className = "unwrapped";

-				this.contentElement = this.pre;

-			}

-

-			LogEntryUnwrappedElementContainer.prototype = new LogEntryElementContainer();

-

-			LogEntryUnwrappedElementContainer.prototype.remove = function() {

-				this.doRemove();

-				this.pre = null;

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function LogEntryMainElementContainer(logEntry, containerDomNode) {

-				this.logEntry = logEntry;

-				this.containerDomNode = containerDomNode;

-				this.mainDiv = document.createElement("div");

-				this.mainDiv.className = "logentry nonielogentry " + this.logEntry.level;

-				this.contentElement = this.mainDiv.appendChild(document.createElement("span"));

-				this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));

-			}

-

-			LogEntryMainElementContainer.prototype = new LogEntryElementContainer();

-

-			/*----------------------------------------------------------------*/

-

-			function LogEntry(level, formattedMessage) {

-				this.level = level;

-				this.formattedMessage = formattedMessage;

-				this.rendered = false;

-			}

-

-			LogEntry.prototype = new LogItem();

-

-			copyProperties(LogEntry.prototype, {

-				render: function() {

-					var logEntry = this;

-					var containerDomNode = this.group.contentDiv;

-

-					// Support for the CSS attribute white-space in IE for Windows is

-					// non-existent pre version 6 and slightly odd in 6, so instead

-					// use two different HTML elements

-					if (isIe) {

-						this.formattedMessage = this.formattedMessage.replace(/\r\n/g, "\r"); // Workaround for IE's treatment of white space

-						this.unwrappedElementContainer = new LogEntryUnwrappedElementContainer(this, this.getUnwrappedDomContainer());

-						this.wrappedElementContainer = new LogEntryWrappedElementContainer(this, this.getWrappedDomContainer());

-						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];

-					} else {

-						this.mainElementContainer = new LogEntryMainElementContainer(this, this.getMainDomContainer());

-						this.elementContainers = [this.mainElementContainer];

-					}

-					this.content = this.formattedMessage;

-					this.rendered = true;

-				},

-

-				setContent: function(content, wrappedContent) {

-					if (content != this.content) {

-						if (isIe && (content !== this.formattedMessage)) {

-							content = content.replace(/\r\n/g, "\r"); // Workaround for IE's treatment of white space

-						}

-						for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-							this.elementContainers[i].setContent(content, wrappedContent);

-						}

-						this.content = content;

-					}

-				},

-

-				getSearchMatches: function() {

-					var matches = [];

-					var i, len;

-					if (isIe) {

-						var unwrappedEls = getElementsByClass(this.unwrappedElementContainer.mainDiv, "searchterm", "span");

-						var wrappedEls = getElementsByClass(this.wrappedElementContainer.mainDiv, "searchterm", "span");

-						for (i = 0, len = unwrappedEls.length; i < len; i++) {

-							matches[i] = new Match(this.level, null, unwrappedEls[i], wrappedEls[i]);

-						}

-					} else {

-						var els = getElementsByClass(this.mainElementContainer.mainDiv, "searchterm", "span");

-						for (i = 0, len = els.length; i < len; i++) {

-							matches[i] = new Match(this.level, els[i]);

-						}

-					}

-					return matches;

-				},

-

-				setSearchMatch: function(isMatch) {

-					for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-						this.elementContainers[i].setSearchMatch(isMatch);

-					}

-				},

-

-				clearSearch: function() {

-					for (var i = 0, len = this.elementContainers.length; i < len; i++) {

-						this.elementContainers[i].clearSearch();

-					}

-				},

-

-				accept: function(visitor) {

-					visitor.visitLogEntry(this);

-				},

-

-				serialize: function(items) {

-					items.push([LogItem.serializedItemKeys.LOG_ENTRY, this.level, this.formattedMessage]);

-				}

-			});

-

-			/*----------------------------------------------------------------*/

-

-			function LogItemVisitor() {

-			}

-

-			LogItemVisitor.prototype = {

-				visit: function(logItem) {

-				},

-

-				visitParent: function(logItem) {

-					if (logItem.group) {

-						logItem.group.accept(this);

-					}

-				},

-

-				visitChildren: function(logItem) {

-					for (var i = 0, len = logItem.children.length; i < len; i++) {

-						logItem.children[i].accept(this);

-					}

-				},

-

-				visitLogEntry: function(logEntry) {

-					this.visit(logEntry);

-				},

-

-				visitSeparator: function(separator) {

-					this.visit(separator);

-				},

-

-				visitGroup: function(group) {

-					this.visit(group);

-				}

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function GroupFlattener() {

-				this.logEntriesAndSeparators = [];

-			}

-

-			GroupFlattener.prototype = new LogItemVisitor();

-

-			GroupFlattener.prototype.visitGroup = function(group) {

-				this.visitChildren(group);

-			};

-

-			GroupFlattener.prototype.visitLogEntry = function(logEntry) {

-				this.logEntriesAndSeparators.push(logEntry);

-			};

-

-			GroupFlattener.prototype.visitSeparator = function(separator) {

-				this.logEntriesAndSeparators.push(separator);

-			};

-

-			/*----------------------------------------------------------------*/

-

-			window.onload = function() {

-				// Sort out document.domain

-				if (location.search) {

-					var queryBits = unescape(location.search).substr(1).split("&"), nameValueBits;

-					for (var i = 0, len = queryBits.length; i < len; i++) {

-						nameValueBits = queryBits[i].split("=");

-						if (nameValueBits[0] == "log4javascript_domain") {

-							document.domain = nameValueBits[1];

-							break;

-						}

-					}

-				}

-

-				// Create DOM objects

-				logMainContainer = $("log");

-				if (isIePre7) {

-					addClass(logMainContainer, "oldIe");

-				}

-

-				rootGroup = new Group("root", true);

-				rootGroup.render();

-				currentGroup = rootGroup;

-				

-				setCommandInputWidth();

-				setLogContainerHeight();

-				toggleLoggingEnabled();

-				toggleSearchEnabled();

-				toggleSearchFilter();

-				toggleSearchHighlight();

-				applyFilters();

-				checkAllLevels();

-				toggleWrap();

-				toggleNewestAtTop();

-				toggleScrollToLatest();

-				renderQueuedLogItems();

-				loaded = true;

-				$("command").value = "";

-				$("command").autocomplete = "off";

-				$("command").onkeydown = function(evt) {

-					evt = getEvent(evt);

-					if (evt.keyCode == 10 || evt.keyCode == 13) { // Return/Enter

-						evalCommandLine();

-						stopPropagation(evt);

-					} else if (evt.keyCode == 27) { // Escape

-						this.value = "";

-						this.focus();

-					} else if (evt.keyCode == 38 && commandHistory.length > 0) { // Up

-						currentCommandIndex = Math.max(0, currentCommandIndex - 1);

-						this.value = commandHistory[currentCommandIndex];

-						moveCaretToEnd(this);

-					} else if (evt.keyCode == 40 && commandHistory.length > 0) { // Down

-						currentCommandIndex = Math.min(commandHistory.length - 1, currentCommandIndex + 1);

-						this.value = commandHistory[currentCommandIndex];

-						moveCaretToEnd(this);

-					}

-				};

-

-				// Prevent the keypress moving the caret in Firefox

-				$("command").onkeypress = function(evt) {

-					evt = getEvent(evt);

-					if (evt.keyCode == 38 && commandHistory.length > 0 && evt.preventDefault) { // Up

-						evt.preventDefault();

-					}

-				};

-

-				// Prevent the keyup event blurring the input in Opera

-				$("command").onkeyup = function(evt) {

-					evt = getEvent(evt);

-					if (evt.keyCode == 27 && evt.preventDefault) { // Up

-						evt.preventDefault();

-						this.focus();

-					}

-				};

-

-				// Add document keyboard shortcuts

-				document.onkeydown = function keyEventHandler(evt) {

-					evt = getEvent(evt);

-					switch (evt.keyCode) {

-						case 69: // Ctrl + shift + E: re-execute last command

-							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {

-								evalLastCommand();

-								cancelKeyEvent(evt);

-								return false;

-							}

-							break;

-						case 75: // Ctrl + shift + K: focus search

-							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {

-								focusSearch();

-								cancelKeyEvent(evt);

-								return false;

-							}

-							break;

-						case 40: // Ctrl + shift + down arrow: focus command line

-						case 76: // Ctrl + shift + L: focus command line

-							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {

-								focusCommandLine();

-								cancelKeyEvent(evt);

-								return false;

-							}

-							break;

-					}

-				};

-

-				// Workaround to make sure log div starts at the correct size

-				setTimeout(setLogContainerHeight, 20);

-

-				setShowCommandLine(showCommandLine);

-				doSearch();

-			};

-

-			window.onunload = function() {

-				if (mainWindowExists()) {

-					appender.unload();

-				}

-				appender = null;

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function toggleLoggingEnabled() {

-				setLoggingEnabled($("enableLogging").checked);

-			}

-

-			function setLoggingEnabled(enable) {

-				loggingEnabled = enable;

-			}

-

-			var appender = null;

-

-			function setAppender(appenderParam) {

-				appender = appenderParam;

-			}

-

-			function setShowCloseButton(showCloseButton) {

-				$("closeButton").style.display = showCloseButton ? "inline" : "none";

-			}

-

-			function setShowHideButton(showHideButton) {

-				$("hideButton").style.display = showHideButton ? "inline" : "none";

-			}

-

-			var newestAtTop = false;

-

-			/*----------------------------------------------------------------*/

-

-			function LogItemContentReverser() {

-			}

-			

-			LogItemContentReverser.prototype = new LogItemVisitor();

-			

-			LogItemContentReverser.prototype.visitGroup = function(group) {

-				group.reverseChildren();

-				this.visitChildren(group);

-			};

-

-			/*----------------------------------------------------------------*/

-

-			function setNewestAtTop(isNewestAtTop) {

-				var oldNewestAtTop = newestAtTop;

-				var i, iLen, j, jLen;

-				newestAtTop = Boolean(isNewestAtTop);

-				if (oldNewestAtTop != newestAtTop) {

-					var visitor = new LogItemContentReverser();

-					rootGroup.accept(visitor);

-

-					// Reassemble the matches array

-					if (currentSearch) {

-						var currentMatch = currentSearch.matches[currentMatchIndex];

-						var matchIndex = 0;

-						var matches = [];

-						var actOnLogEntry = function(logEntry) {

-							var logEntryMatches = logEntry.getSearchMatches();

-							for (j = 0, jLen = logEntryMatches.length; j < jLen; j++) {

-								matches[matchIndex] = logEntryMatches[j];

-								if (currentMatch && logEntryMatches[j].equals(currentMatch)) {

-									currentMatchIndex = matchIndex;

-								}

-								matchIndex++;

-							}

-						};

-						if (newestAtTop) {

-							for (i = logEntries.length - 1; i >= 0; i--) {

-								actOnLogEntry(logEntries[i]);

-							}

-						} else {

-							for (i = 0, iLen = logEntries.length; i < iLen; i++) {

-								actOnLogEntry(logEntries[i]);

-							}

-						}

-						currentSearch.matches = matches;

-						if (currentMatch) {

-							currentMatch.setCurrent();

-						}

-					} else if (scrollToLatest) {

-						doScrollToLatest();

-					}

-				}

-				$("newestAtTop").checked = isNewestAtTop;

-			}

-

-			function toggleNewestAtTop() {

-				var isNewestAtTop = $("newestAtTop").checked;

-				setNewestAtTop(isNewestAtTop);

-			}

-

-			var scrollToLatest = true;

-

-			function setScrollToLatest(isScrollToLatest) {

-				scrollToLatest = isScrollToLatest;

-				if (scrollToLatest) {

-					doScrollToLatest();

-				}

-				$("scrollToLatest").checked = isScrollToLatest;

-			}

-

-			function toggleScrollToLatest() {

-				var isScrollToLatest = $("scrollToLatest").checked;

-				setScrollToLatest(isScrollToLatest);

-			}

-

-			function doScrollToLatest() {

-				var l = logMainContainer;

-				if (typeof l.scrollTop != "undefined") {

-					if (newestAtTop) {

-						l.scrollTop = 0;

-					} else {

-						var latestLogEntry = l.lastChild;

-						if (latestLogEntry) {

-							l.scrollTop = l.scrollHeight;

-						}

-					}

-				}

-			}

-

-			var closeIfOpenerCloses = true;

-

-			function setCloseIfOpenerCloses(isCloseIfOpenerCloses) {

-				closeIfOpenerCloses = isCloseIfOpenerCloses;

-			}

-

-			var maxMessages = null;

-

-			function setMaxMessages(max) {

-				maxMessages = max;

-				pruneLogEntries();

-			}

-

-			var showCommandLine = false;

-

-			function setShowCommandLine(isShowCommandLine) {

-				showCommandLine = isShowCommandLine;

-				if (loaded) {

-					$("commandLine").style.display = showCommandLine ? "block" : "none";

-					setCommandInputWidth();

-					setLogContainerHeight();

-				}

-			}

-

-			function focusCommandLine() {

-				if (loaded) {

-					$("command").focus();

-				}

-			}

-

-			function focusSearch() {

-				if (loaded) {

-					$("searchBox").focus();

-				}

-			}

-

-			function getLogItems() {

-				var items = [];

-				for (var i = 0, len = logItems.length; i < len; i++) {

-					logItems[i].serialize(items);

-				}

-				return items;

-			}

-

-			function setLogItems(items) {

-				var loggingReallyEnabled = loggingEnabled;

-				// Temporarily turn logging on

-				loggingEnabled = true;

-				for (var i = 0, len = items.length; i < len; i++) {

-					switch (items[i][0]) {

-						case LogItem.serializedItemKeys.LOG_ENTRY:

-							log(items[i][1], items[i][2]);

-							break;

-						case LogItem.serializedItemKeys.GROUP_START:

-							group(items[i][1]);

-							break;

-						case LogItem.serializedItemKeys.GROUP_END:

-							groupEnd();

-							break;

-					}

-				}

-				loggingEnabled = loggingReallyEnabled;

-			}

-

-			function log(logLevel, formattedMessage) {

-				if (loggingEnabled) {

-					var logEntry = new LogEntry(logLevel, formattedMessage);

-					logEntries.push(logEntry);

-					logEntriesAndSeparators.push(logEntry);

-					logItems.push(logEntry);

-					currentGroup.addChild(logEntry);

-					if (loaded) {

-						if (logQueuedEventsTimer !== null) {

-							clearTimeout(logQueuedEventsTimer);

-						}

-						logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);

-						unrenderedLogItemsExist = true;

-					}

-				}

-			}

-

-			function renderQueuedLogItems() {

-				logQueuedEventsTimer = null;

-				var pruned = pruneLogEntries();

-

-				// Render any unrendered log entries and apply the current search to them

-				var initiallyHasMatches = currentSearch ? currentSearch.hasMatches() : false;

-				for (var i = 0, len = logItems.length; i < len; i++) {

-					if (!logItems[i].rendered) {

-						logItems[i].render();

-						logItems[i].appendToLog();

-						if (currentSearch && (logItems[i] instanceof LogEntry)) {

-							currentSearch.applyTo(logItems[i]);

-						}

-					}

-				}

-				if (currentSearch) {

-					if (pruned) {

-						if (currentSearch.hasVisibleMatches()) {

-							if (currentMatchIndex === null) {

-								setCurrentMatchIndex(0);

-							}

-							displayMatches();

-						} else {

-							displayNoMatches();

-						}

-					} else if (!initiallyHasMatches && currentSearch.hasVisibleMatches()) {

-						setCurrentMatchIndex(0);

-						displayMatches();

-					}

-				}

-				if (scrollToLatest) {

-					doScrollToLatest();

-				}

-				unrenderedLogItemsExist = false;

-			}

-

-			function pruneLogEntries() {

-				if ((maxMessages !== null) && (logEntriesAndSeparators.length > maxMessages)) {

-					var numberToDelete = logEntriesAndSeparators.length - maxMessages;

-					var prunedLogEntries = logEntriesAndSeparators.slice(0, numberToDelete);

-					if (currentSearch) {

-						currentSearch.removeMatches(prunedLogEntries);

-					}

-					var group;

-					for (var i = 0; i < numberToDelete; i++) {

-						group = logEntriesAndSeparators[i].group;

-						array_remove(logItems, logEntriesAndSeparators[i]);

-						array_remove(logEntries, logEntriesAndSeparators[i]);

-						logEntriesAndSeparators[i].remove(true, true);

-						if (group.children.length === 0 && group !== currentGroup && group !== rootGroup) {

-							array_remove(logItems, group);

-							group.remove(true, true);

-						}

-					}

-					logEntriesAndSeparators = array_removeFromStart(logEntriesAndSeparators, numberToDelete);

-					return true;

-				}

-				return false;

-			}

-

-			function group(name, startExpanded) {

-				if (loggingEnabled) {

-					initiallyExpanded = (typeof startExpanded === "undefined") ? true : Boolean(startExpanded);

-					var newGroup = new Group(name, false, initiallyExpanded);

-					currentGroup.addChild(newGroup);

-					currentGroup = newGroup;

-					logItems.push(newGroup);

-					if (loaded) {

-						if (logQueuedEventsTimer !== null) {

-							clearTimeout(logQueuedEventsTimer);

-						}

-						logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);

-						unrenderedLogItemsExist = true;

-					}

-				}

-			}

-

-			function groupEnd() {

-				currentGroup = (currentGroup === rootGroup) ? rootGroup : currentGroup.group;

-			}

-

-			function mainPageReloaded() {

-				currentGroup = rootGroup;

-				var separator = new Separator();

-				logEntriesAndSeparators.push(separator);

-				logItems.push(separator);

-				currentGroup.addChild(separator);

-			}

-

-			function closeWindow() {

-				if (appender && mainWindowExists()) {

-					appender.close(true);

-				} else {

-					window.close();

-				}

-			}

-

-			function hide() {

-				if (appender && mainWindowExists()) {

-					appender.hide();

-				}

-			}

-

-			var mainWindow = window;

-			var windowId = "log4javascriptConsoleWindow_" + new Date().getTime() + "_" + ("" + Math.random()).substr(2);

-

-			function setMainWindow(win) {

-				mainWindow = win;

-				mainWindow[windowId] = window;

-				// If this is a pop-up, poll the opener to see if it's closed

-				if (opener && closeIfOpenerCloses) {

-					pollOpener();

-				}

-			}

-

-			function pollOpener() {

-				if (closeIfOpenerCloses) {

-					if (mainWindowExists()) {

-						setTimeout(pollOpener, 500);

-					} else {

-						closeWindow();

-					}

-				}

-			}

-

-			function mainWindowExists() {

-				try {

-					return (mainWindow && !mainWindow.closed &&

-						mainWindow[windowId] == window);

-				} catch (ex) {}

-				return false;

-			}

-

-			var logLevels = ["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"];

-

-			function getCheckBox(logLevel) {

-				return $("switch_" + logLevel);

-			}

-

-			function getIeWrappedLogContainer() {

-				return $("log_wrapped");

-			}

-

-			function getIeUnwrappedLogContainer() {

-				return $("log_unwrapped");

-			}

-

-			function applyFilters() {

-				for (var i = 0; i < logLevels.length; i++) {

-					if (getCheckBox(logLevels[i]).checked) {

-						addClass(logMainContainer, logLevels[i]);

-					} else {

-						removeClass(logMainContainer, logLevels[i]);

-					}

-				}

-				updateSearchFromFilters();

-			}

-

-			function toggleAllLevels() {

-				var turnOn = $("switch_ALL").checked;

-				for (var i = 0; i < logLevels.length; i++) {

-					getCheckBox(logLevels[i]).checked = turnOn;

-					if (turnOn) {

-						addClass(logMainContainer, logLevels[i]);

-					} else {

-						removeClass(logMainContainer, logLevels[i]);

-					}

-				}

-			}

-

-			function checkAllLevels() {

-				for (var i = 0; i < logLevels.length; i++) {

-					if (!getCheckBox(logLevels[i]).checked) {

-						getCheckBox("ALL").checked = false;

-						return;

-					}

-				}

-				getCheckBox("ALL").checked = true;

-			}

-

-			function clearLog() {

-				rootGroup.clear();

-				currentGroup = rootGroup;

-				logEntries = [];

-				logItems = [];

-				logEntriesAndSeparators = [];

- 				doSearch();

-			}

-

-			function toggleWrap() {

-				var enable = $("wrap").checked;

-				if (enable) {

-					addClass(logMainContainer, "wrap");

-				} else {

-					removeClass(logMainContainer, "wrap");

-				}

-				refreshCurrentMatch();

-			}

-

-			/* ------------------------------------------------------------------- */

-

-			// Search

-

-			var searchTimer = null;

-

-			function scheduleSearch() {

-				try {

-					clearTimeout(searchTimer);

-				} catch (ex) {

-					// Do nothing

-				}

-				searchTimer = setTimeout(doSearch, 500);

-			}

-

-			function Search(searchTerm, isRegex, searchRegex, isCaseSensitive) {

-				this.searchTerm = searchTerm;

-				this.isRegex = isRegex;

-				this.searchRegex = searchRegex;

-				this.isCaseSensitive = isCaseSensitive;

-				this.matches = [];

-			}

-

-			Search.prototype = {

-				hasMatches: function() {

-					return this.matches.length > 0;

-				},

-

-				hasVisibleMatches: function() {

-					if (this.hasMatches()) {

-						for (var i = 0; i < this.matches.length; i++) {

-							if (this.matches[i].isVisible()) {

-								return true;

-							}

-						}

-					}

-					return false;

-				},

-

-				match: function(logEntry) {

-					var entryText = String(logEntry.formattedMessage);

-					var matchesSearch = false;

-					if (this.isRegex) {

-						matchesSearch = this.searchRegex.test(entryText);

-					} else if (this.isCaseSensitive) {

-						matchesSearch = (entryText.indexOf(this.searchTerm) > -1);

-					} else {

-						matchesSearch = (entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1);

-					}

-					return matchesSearch;

-				},

-

-				getNextVisibleMatchIndex: function() {

-					for (var i = currentMatchIndex + 1; i < this.matches.length; i++) {

-						if (this.matches[i].isVisible()) {

-							return i;

-						}

-					}

-					// Start again from the first match

-					for (i = 0; i <= currentMatchIndex; i++) {

-						if (this.matches[i].isVisible()) {

-							return i;

-						}

-					}

-					return -1;

-				},

-

-				getPreviousVisibleMatchIndex: function() {

-					for (var i = currentMatchIndex - 1; i >= 0; i--) {

-						if (this.matches[i].isVisible()) {

-							return i;

-						}

-					}

-					// Start again from the last match

-					for (var i = this.matches.length - 1; i >= currentMatchIndex; i--) {

-						if (this.matches[i].isVisible()) {

-							return i;

-						}

-					}

-					return -1;

-				},

-

-				applyTo: function(logEntry) {

-					var doesMatch = this.match(logEntry);

-					if (doesMatch) {

-						logEntry.group.expand();

-						logEntry.setSearchMatch(true);

-						var logEntryContent;

-						var wrappedLogEntryContent;

-						var searchTermReplacementStartTag = "<span class=\"searchterm\">";

-						var searchTermReplacementEndTag = "<" + "/span>";

-						var preTagName = isIe ? "pre" : "span";

-						var preStartTag = "<" + preTagName + " class=\"pre\">";

-						var preEndTag = "<" + "/" + preTagName + ">";

-						var startIndex = 0;

-						var searchIndex, matchedText, textBeforeMatch;

-						if (this.isRegex) {

-							var flags = this.isCaseSensitive ? "g" : "gi";

-							var capturingRegex = new RegExp("(" + this.searchRegex.source + ")", flags);

-

-							// Replace the search term with temporary tokens for the start and end tags

-							var rnd = ("" + Math.random()).substr(2);

-							var startToken = "%%s" + rnd + "%%";

-							var endToken = "%%e" + rnd + "%%";

-							logEntryContent = logEntry.formattedMessage.replace(capturingRegex, startToken + "$1" + endToken);

-

-							// Escape the HTML to get rid of angle brackets

-							logEntryContent = escapeHtml(logEntryContent);

-

-							// Substitute the proper HTML back in for the search match

-							var result;

-							var searchString = logEntryContent;

-							logEntryContent = "";

-							wrappedLogEntryContent = "";

-							while ((searchIndex = searchString.indexOf(startToken, startIndex)) > -1) {

-								var endTokenIndex = searchString.indexOf(endToken, searchIndex);

-								matchedText = searchString.substring(searchIndex + startToken.length, endTokenIndex);

-								textBeforeMatch = searchString.substring(startIndex, searchIndex);

-								logEntryContent += preStartTag + textBeforeMatch + preEndTag;

-								logEntryContent += searchTermReplacementStartTag + preStartTag + matchedText +

-									preEndTag + searchTermReplacementEndTag;

-								if (isIe) {

-									wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +

-										matchedText + searchTermReplacementEndTag;

-								}

-								startIndex = endTokenIndex + endToken.length;

-							}

-							logEntryContent += preStartTag + searchString.substr(startIndex) + preEndTag;

-							if (isIe) {

-								wrappedLogEntryContent += searchString.substr(startIndex);

-							}

-						} else {

-							logEntryContent = "";

-							wrappedLogEntryContent = "";

-							var searchTermReplacementLength = searchTermReplacementStartTag.length +

-								this.searchTerm.length + searchTermReplacementEndTag.length;

-							var searchTermLength = this.searchTerm.length;

-							var searchTermLowerCase = this.searchTerm.toLowerCase();

-							var logTextLowerCase = logEntry.formattedMessage.toLowerCase();

-							while ((searchIndex = logTextLowerCase.indexOf(searchTermLowerCase, startIndex)) > -1) {

-								matchedText = escapeHtml(logEntry.formattedMessage.substr(searchIndex, this.searchTerm.length));

-								textBeforeMatch = escapeHtml(logEntry.formattedMessage.substring(startIndex, searchIndex));

-								var searchTermReplacement = searchTermReplacementStartTag +

-									preStartTag + matchedText + preEndTag + searchTermReplacementEndTag;

-								logEntryContent += preStartTag + textBeforeMatch + preEndTag + searchTermReplacement;

-								if (isIe) {

-									wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +

-										matchedText + searchTermReplacementEndTag;

-								}

-								startIndex = searchIndex + searchTermLength;

-							}

-							var textAfterLastMatch = escapeHtml(logEntry.formattedMessage.substr(startIndex));

-							logEntryContent += preStartTag + textAfterLastMatch + preEndTag;

-							if (isIe) {

-								wrappedLogEntryContent += textAfterLastMatch;

-							}

-						}

-						logEntry.setContent(logEntryContent, wrappedLogEntryContent);

-						var logEntryMatches = logEntry.getSearchMatches();

-						this.matches = this.matches.concat(logEntryMatches);

-					} else {

-						logEntry.setSearchMatch(false);

-						logEntry.setContent(logEntry.formattedMessage, logEntry.formattedMessage);

-					}

-					return doesMatch;

-				},

-

-				removeMatches: function(logEntries) {

-					var matchesToRemoveCount = 0;

-					var currentMatchRemoved = false;

-					var matchesToRemove = [];

-					var i, iLen, j, jLen;

-

-					// Establish the list of matches to be removed

-					for (i = 0, iLen = this.matches.length; i < iLen; i++) {

-						for (j = 0, jLen = logEntries.length; j < jLen; j++) {

-							if (this.matches[i].belongsTo(logEntries[j])) {

-								matchesToRemove.push(this.matches[i]);

-								if (i === currentMatchIndex) {

-									currentMatchRemoved = true;

-								}

-							}

-						}

-					}

-

-					// Set the new current match index if the current match has been deleted

-					// This will be the first match that appears after the first log entry being

-					// deleted, if one exists; otherwise, it's the first match overall

-					var newMatch = currentMatchRemoved ? null : this.matches[currentMatchIndex];

-					if (currentMatchRemoved) {

-						for (i = currentMatchIndex, iLen = this.matches.length; i < iLen; i++) {

-							if (this.matches[i].isVisible() && !array_contains(matchesToRemove, this.matches[i])) {

-								newMatch = this.matches[i];

-								break;

-							}

-						}

-					}

-

-					// Remove the matches

-					for (i = 0, iLen = matchesToRemove.length; i < iLen; i++) {

-						array_remove(this.matches, matchesToRemove[i]);

-						matchesToRemove[i].remove();

-					}

-

-					// Set the new match, if one exists

-					if (this.hasVisibleMatches()) {

-						if (newMatch === null) {

-							setCurrentMatchIndex(0);

-						} else {

-							// Get the index of the new match

-							var newMatchIndex = 0;

-							for (i = 0, iLen = this.matches.length; i < iLen; i++) {

-								if (newMatch === this.matches[i]) {

-									newMatchIndex = i;

-									break;

-								}

-							}

-							setCurrentMatchIndex(newMatchIndex);

-						}

-					} else {

-						currentMatchIndex = null;

-						displayNoMatches();

-					}

-				}

-			};

-

-			function getPageOffsetTop(el, container) {

-				var currentEl = el;

-				var y = 0;

-				while (currentEl && currentEl != container) {

-					y += currentEl.offsetTop;

-					currentEl = currentEl.offsetParent;

-				}

-				return y;

-			}

-

-			function scrollIntoView(el) {

-				var logContainer = logMainContainer;

-				// Check if the whole width of the element is visible and centre if not

-				if (!$("wrap").checked) {

-					var logContainerLeft = logContainer.scrollLeft;

-					var logContainerRight = logContainerLeft  + logContainer.offsetWidth;

-					var elLeft = el.offsetLeft;

-					var elRight = elLeft + el.offsetWidth;

-					if (elLeft < logContainerLeft || elRight > logContainerRight) {

-						logContainer.scrollLeft = elLeft - (logContainer.offsetWidth - el.offsetWidth) / 2;

-					}

-				}

-				// Check if the whole height of the element is visible and centre if not

-				var logContainerTop = logContainer.scrollTop;

-				var logContainerBottom = logContainerTop  + logContainer.offsetHeight;

-				var elTop = getPageOffsetTop(el) - getToolBarsHeight();

-				var elBottom = elTop + el.offsetHeight;

-				if (elTop < logContainerTop || elBottom > logContainerBottom) {

-					logContainer.scrollTop = elTop - (logContainer.offsetHeight - el.offsetHeight) / 2;

-				}

-			}

-

-			function Match(logEntryLevel, spanInMainDiv, spanInUnwrappedPre, spanInWrappedDiv) {

-				this.logEntryLevel = logEntryLevel;

-				this.spanInMainDiv = spanInMainDiv;

-				if (isIe) {

-					this.spanInUnwrappedPre = spanInUnwrappedPre;

-					this.spanInWrappedDiv = spanInWrappedDiv;

-				}

-				this.mainSpan = isIe ? spanInUnwrappedPre : spanInMainDiv;

-			}

-

-			Match.prototype = {

-				equals: function(match) {

-					return this.mainSpan === match.mainSpan;

-				},

-

-				setCurrent: function() {

-					if (isIe) {

-						addClass(this.spanInUnwrappedPre, "currentmatch");

-						addClass(this.spanInWrappedDiv, "currentmatch");

-						// Scroll the visible one into view

-						var elementToScroll = $("wrap").checked ? this.spanInWrappedDiv : this.spanInUnwrappedPre;

-						scrollIntoView(elementToScroll);

-					} else {

-						addClass(this.spanInMainDiv, "currentmatch");

-						scrollIntoView(this.spanInMainDiv);

-					}

-				},

-

-				belongsTo: function(logEntry) {

-					if (isIe) {

-						return isDescendant(this.spanInUnwrappedPre, logEntry.unwrappedPre);

-					} else {

-						return isDescendant(this.spanInMainDiv, logEntry.mainDiv);

-					}

-				},

-

-				setNotCurrent: function() {

-					if (isIe) {

-						removeClass(this.spanInUnwrappedPre, "currentmatch");

-						removeClass(this.spanInWrappedDiv, "currentmatch");

-					} else {

-						removeClass(this.spanInMainDiv, "currentmatch");

-					}

-				},

-

-				isOrphan: function() {

-					return isOrphan(this.mainSpan);

-				},

-

-				isVisible: function() {

-					return getCheckBox(this.logEntryLevel).checked;

-				},

-

-				remove: function() {

-					if (isIe) {

-						this.spanInUnwrappedPre = null;

-						this.spanInWrappedDiv = null;

-					} else {

-						this.spanInMainDiv = null;

-					}

-				}

-			};

-

-			var currentSearch = null;

-			var currentMatchIndex = null;

-

-			function doSearch() {

-				var searchBox = $("searchBox");

-				var searchTerm = searchBox.value;

-				var isRegex = $("searchRegex").checked;

-				var isCaseSensitive = $("searchCaseSensitive").checked;

-				var i;

-

-				if (searchTerm === "") {

-					$("searchReset").disabled = true;

-					$("searchNav").style.display = "none";

-					removeClass(document.body, "searching");

-					removeClass(searchBox, "hasmatches");

-					removeClass(searchBox, "nomatches");

-					for (i = 0; i < logEntries.length; i++) {

-						logEntries[i].clearSearch();

-						logEntries[i].setContent(logEntries[i].formattedMessage, logEntries[i].formattedMessage);

-					}

-					currentSearch = null;

-					setLogContainerHeight();

-				} else {

-					$("searchReset").disabled = false;

-					$("searchNav").style.display = "block";

-					var searchRegex;

-					var regexValid;

-					if (isRegex) {

-						try {

-							searchRegex = isCaseSensitive ? new RegExp(searchTerm, "g") : new RegExp(searchTerm, "gi");

-							regexValid = true;

-							replaceClass(searchBox, "validregex", "invalidregex");

-							searchBox.title = "Valid regex";

-						} catch (ex) {

-							regexValid = false;

-							replaceClass(searchBox, "invalidregex", "validregex");

-							searchBox.title = "Invalid regex: " + (ex.message ? ex.message : (ex.description ? ex.description : "unknown error"));

-							return;

-						}

-					} else {

-						searchBox.title = "";

-						removeClass(searchBox, "validregex");

-						removeClass(searchBox, "invalidregex");

-					}

-					addClass(document.body, "searching");

-					currentSearch = new Search(searchTerm, isRegex, searchRegex, isCaseSensitive);

-					for (i = 0; i < logEntries.length; i++) {

-						currentSearch.applyTo(logEntries[i]);

-					}

-					setLogContainerHeight();

-

-					// Highlight the first search match

-					if (currentSearch.hasVisibleMatches()) {

-						setCurrentMatchIndex(0);

-						displayMatches();

-					} else {

-						displayNoMatches();

-					}

-				}

-			}

-

-			function updateSearchFromFilters() {

-				if (currentSearch) {

-					if (currentSearch.hasMatches()) {

-						if (currentMatchIndex === null) {

-							currentMatchIndex = 0;

-						}

-						var currentMatch = currentSearch.matches[currentMatchIndex];

-						if (currentMatch.isVisible()) {

-							displayMatches();

-							setCurrentMatchIndex(currentMatchIndex);

-						} else {

-							currentMatch.setNotCurrent();

-							// Find the next visible match, if one exists

-							var nextVisibleMatchIndex = currentSearch.getNextVisibleMatchIndex();

-							if (nextVisibleMatchIndex > -1) {

-								setCurrentMatchIndex(nextVisibleMatchIndex);

-								displayMatches();

-							} else {

-								displayNoMatches();

-							}

-						}

-					} else {

-						displayNoMatches();

-					}

-				}

-			}

-

-			function refreshCurrentMatch() {

-				if (currentSearch && currentSearch.hasVisibleMatches()) {

-					setCurrentMatchIndex(currentMatchIndex);

-				}

-			}

-

-			function displayMatches() {

-				replaceClass($("searchBox"), "hasmatches", "nomatches");

-				$("searchBox").title = "" + currentSearch.matches.length + " matches found";

-				$("searchNav").style.display = "block";

-				setLogContainerHeight();

-			}

-

-			function displayNoMatches() {

-				replaceClass($("searchBox"), "nomatches", "hasmatches");

-				$("searchBox").title = "No matches found";

-				$("searchNav").style.display = "none";

-				setLogContainerHeight();

-			}

-

-			function toggleSearchEnabled(enable) {

-				enable = (typeof enable == "undefined") ? !$("searchDisable").checked : enable;

-				$("searchBox").disabled = !enable;

-				$("searchReset").disabled = !enable;

-				$("searchRegex").disabled = !enable;

-				$("searchNext").disabled = !enable;

-				$("searchPrevious").disabled = !enable;

-				$("searchCaseSensitive").disabled = !enable;

-				$("searchNav").style.display = (enable && ($("searchBox").value !== "") &&

-						currentSearch && currentSearch.hasVisibleMatches()) ?

-					"block" : "none";

-				if (enable) {

-					removeClass($("search"), "greyedout");

-					addClass(document.body, "searching");

-					if ($("searchHighlight").checked) {

-						addClass(logMainContainer, "searchhighlight");

-					} else {

-						removeClass(logMainContainer, "searchhighlight");

-					}

-					if ($("searchFilter").checked) {

-						addClass(logMainContainer, "searchfilter");

-					} else {

-						removeClass(logMainContainer, "searchfilter");

-					}

-					$("searchDisable").checked = !enable;

-				} else {

-					addClass($("search"), "greyedout");

-					removeClass(document.body, "searching");

-					removeClass(logMainContainer, "searchhighlight");

-					removeClass(logMainContainer, "searchfilter");

-				}

-				setLogContainerHeight();

-			}

-

-			function toggleSearchFilter() {

-				var enable = $("searchFilter").checked;

-				if (enable) {

-					addClass(logMainContainer, "searchfilter");

-				} else {

-					removeClass(logMainContainer, "searchfilter");

-				}

-				refreshCurrentMatch();

-			}

-

-			function toggleSearchHighlight() {

-				var enable = $("searchHighlight").checked;

-				if (enable) {

-					addClass(logMainContainer, "searchhighlight");

-				} else {

-					removeClass(logMainContainer, "searchhighlight");

-				}

-			}

-

-			function clearSearch() {

-				$("searchBox").value = "";

-				doSearch();

-			}

-

-			function searchNext() {

-				if (currentSearch !== null && currentMatchIndex !== null) {

-					currentSearch.matches[currentMatchIndex].setNotCurrent();

-					var nextMatchIndex = currentSearch.getNextVisibleMatchIndex();

-					if (nextMatchIndex > currentMatchIndex || confirm("Reached the end of the page. Start from the top?")) {

-						setCurrentMatchIndex(nextMatchIndex);

-					}

-				}

-			}

-

-			function searchPrevious() {

-				if (currentSearch !== null && currentMatchIndex !== null) {

-					currentSearch.matches[currentMatchIndex].setNotCurrent();

-					var previousMatchIndex = currentSearch.getPreviousVisibleMatchIndex();

-					if (previousMatchIndex < currentMatchIndex || confirm("Reached the start of the page. Continue from the bottom?")) {

-						setCurrentMatchIndex(previousMatchIndex);

-					}

-				}

-			}

-

-			function setCurrentMatchIndex(index) {

-				currentMatchIndex = index;

-				currentSearch.matches[currentMatchIndex].setCurrent();

-			}

-

-			/* ------------------------------------------------------------------------- */

-

-			// CSS Utilities

-

-			function addClass(el, cssClass) {

-				if (!hasClass(el, cssClass)) {

-					if (el.className) {

-						el.className += " " + cssClass;

-					} else {

-						el.className = cssClass;

-					}

-				}

-			}

-

-			function hasClass(el, cssClass) {

-				if (el.className) {

-					var classNames = el.className.split(" ");

-					return array_contains(classNames, cssClass);

-				}

-				return false;

-			}

-

-			function removeClass(el, cssClass) {

-				if (hasClass(el, cssClass)) {

-					// Rebuild the className property

-					var existingClasses = el.className.split(" ");

-					var newClasses = [];

-					for (var i = 0, len = existingClasses.length; i < len; i++) {

-						if (existingClasses[i] != cssClass) {

-							newClasses[newClasses.length] = existingClasses[i];

-						}

-					}

-					el.className = newClasses.join(" ");

-				}

-			}

-

-			function replaceClass(el, newCssClass, oldCssClass) {

-				removeClass(el, oldCssClass);

-				addClass(el, newCssClass);

-			}

-

-			/* ------------------------------------------------------------------------- */

-

-			// Other utility functions

-

-			function getElementsByClass(el, cssClass, tagName) {

-				var elements = el.getElementsByTagName(tagName);

-				var matches = [];

-				for (var i = 0, len = elements.length; i < len; i++) {

-					if (hasClass(elements[i], cssClass)) {

-						matches.push(elements[i]);

-					}

-				}

-				return matches;

-			}

-

-			// Syntax borrowed from Prototype library

-			function $(id) {

-				return document.getElementById(id);

-			}

-

-			function isDescendant(node, ancestorNode) {

-				while (node != null) {

-					if (node === ancestorNode) {

-						return true;

-					}

-					node = node.parentNode;

-				}

-				return false;

-			}

-

-			function isOrphan(node) {

-				var currentNode = node;

-				while (currentNode) {

-					if (currentNode == document.body) {

-						return false;

-					}

-					currentNode = currentNode.parentNode;

-				}

-				return true;

-			}

-

-			function escapeHtml(str) {

-				return str.replace(/&/g, "&amp;").replace(/[<]/g, "&lt;").replace(/>/g, "&gt;");

-			}

-

-			function getWindowWidth() {

-				if (window.innerWidth) {

-					return window.innerWidth;

-				} else if (document.documentElement && document.documentElement.clientWidth) {

-					return document.documentElement.clientWidth;

-				} else if (document.body) {

-					return document.body.clientWidth;

-				}

-				return 0;

-			}

-

-			function getWindowHeight() {

-				if (window.innerHeight) {

-					return window.innerHeight;

-				} else if (document.documentElement && document.documentElement.clientHeight) {

-					return document.documentElement.clientHeight;

-				} else if (document.body) {

-					return document.body.clientHeight;

-				}

-				return 0;

-			}

-

-			function getToolBarsHeight() {

-				return $("switches").offsetHeight;

-			}

-

-			function getChromeHeight() {

-				var height = getToolBarsHeight();

-				if (showCommandLine) {

-					height += $("commandLine").offsetHeight;

-				}

-				return height;

-			}

-

-			function setLogContainerHeight() {

-				if (logMainContainer) {

-					var windowHeight = getWindowHeight();

-					$("body").style.height = getWindowHeight() + "px";

-					logMainContainer.style.height = "" +

-						Math.max(0, windowHeight - getChromeHeight()) + "px";

-				}

-			}

-

-			function setCommandInputWidth() {

-				if (showCommandLine) {

-					$("command").style.width = "" + Math.max(0, $("commandLineContainer").offsetWidth -

-						($("evaluateButton").offsetWidth + 13)) + "px";

-				}

-			}

-

-			window.onresize = function() {

-				setCommandInputWidth();

-				setLogContainerHeight();

-			};

-

-			if (!Array.prototype.push) {

-				Array.prototype.push = function() {

-			        for (var i = 0, len = arguments.length; i < len; i++){

-			            this[this.length] = arguments[i];

-			        }

-			        return this.length;

-				};

-			}

-

-			if (!Array.prototype.pop) {

-				Array.prototype.pop = function() {

-					if (this.length > 0) {

-						var val = this[this.length - 1];

-						this.length = this.length - 1;

-						return val;

-					}

-				};

-			}

-

-			if (!Array.prototype.shift) {

-				Array.prototype.shift = function() {

-					if (this.length > 0) {

-						var firstItem = this[0];

-						for (var i = 0, len = this.length - 1; i < len; i++) {

-							this[i] = this[i + 1];

-						}

-						this.length = this.length - 1;

-						return firstItem;

-					}

-				};

-			}

-

-			if (!Array.prototype.splice) {

-				Array.prototype.splice = function(startIndex, deleteCount) {

-					var itemsAfterDeleted = this.slice(startIndex + deleteCount);

-					var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);

-					this.length = startIndex;

-					// Copy the arguments into a proper Array object

-					var argumentsArray = [];

-					for (var i = 0, len = arguments.length; i < len; i++) {

-						argumentsArray[i] = arguments[i];

-					}

-					var itemsToAppend = (argumentsArray.length > 2) ?

-						itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;

-					for (i = 0, len = itemsToAppend.length; i < len; i++) {

-						this.push(itemsToAppend[i]);

-					}

-					return itemsDeleted;

-				};

-			}

-

-			function array_remove(arr, val) {

-				var index = -1;

-				for (var i = 0, len = arr.length; i < len; i++) {

-					if (arr[i] === val) {

-						index = i;

-						break;

-					}

-				}

-				if (index >= 0) {

-					arr.splice(index, 1);

-					return index;

-				} else {

-					return false;

-				}

-			}

-

-			function array_removeFromStart(array, numberToRemove) {

-				if (Array.prototype.splice) {

-					array.splice(0, numberToRemove);

-				} else {

-					for (var i = numberToRemove, len = array.length; i < len; i++) {

-						array[i - numberToRemove] = array[i];

-					}

-					array.length = array.length - numberToRemove;

-				}

-				return array;

-			}

-

-			function array_contains(arr, val) {

-				for (var i = 0, len = arr.length; i < len; i++) {

-					if (arr[i] == val) {

-						return true;

-					}

-				}

-				return false;

-			}

-

-			function getErrorMessage(ex) {

-				if (ex.message) {

-					return ex.message;

-				} else if (ex.description) {

-					return ex.description;

-				}

-				return "" + ex;

-			}

-

-			function moveCaretToEnd(input) {

-				if (input.setSelectionRange) {

-					input.focus();

-					var length = input.value.length;

-					input.setSelectionRange(length, length);

-				} else if (input.createTextRange) {

-					var range = input.createTextRange();

-					range.collapse(false);

-					range.select();

-				}

-				input.focus();

-			}

-

-			function stopPropagation(evt) {

-				if (evt.stopPropagation) {

-					evt.stopPropagation();

-				} else if (typeof evt.cancelBubble != "undefined") {

-					evt.cancelBubble = true;

-				}

-			}

-

-			function getEvent(evt) {

-				return evt ? evt : event;

-			}

-

-			function getTarget(evt) {

-				return evt.target ? evt.target : evt.srcElement;

-			}

-

-			function getRelatedTarget(evt) {

-				if (evt.relatedTarget) {

-					return evt.relatedTarget;

-				} else if (evt.srcElement) {

-					switch(evt.type) {

-						case "mouseover":

-							return evt.fromElement;

-						case "mouseout":

-							return evt.toElement;

-						default:

-							return evt.srcElement;

-					}

-				}

-			}

-

-			function cancelKeyEvent(evt) {

-				evt.returnValue = false;

-				stopPropagation(evt);

-			}

-

-			function evalCommandLine() {

-				var expr = $("command").value;

-				evalCommand(expr);

-				$("command").value = "";

-			}

-

-			function evalLastCommand() {

-				if (lastCommand != null) {

-					evalCommand(lastCommand);

-				}

-			}

-

-			var lastCommand = null;

-			var commandHistory = [];

-			var currentCommandIndex = 0;

-

-			function evalCommand(expr) {

-				if (appender) {

-					appender.evalCommandAndAppend(expr);

-				} else {

-					var prefix = ">>> " + expr + "\r\n";

-					try {

-						log("INFO", prefix + eval(expr));

-					} catch (ex) {

-						log("ERROR", prefix + "Error: " + getErrorMessage(ex));

-					}

-				}

-				// Update command history

-				if (expr != commandHistory[commandHistory.length - 1]) {

-					commandHistory.push(expr);

-					// Update the appender

-					if (appender) {

-						appender.storeCommandHistory(commandHistory);

-					}

-				}

-				currentCommandIndex = (expr == commandHistory[currentCommandIndex]) ? currentCommandIndex + 1 : commandHistory.length;

-				lastCommand = expr;

-			}

-			//]]>

-		</script>

-		<style type="text/css">

-			body {

-				background-color: white;

-				color: black;

-				padding: 0;

-				margin: 0;

-				font-family: tahoma, verdana, arial, helvetica, sans-serif;

-				overflow: hidden;

-			}

-

-			div#switchesContainer input {

-				margin-bottom: 0;

-			}

-

-			div.toolbar {

-				border-top: solid #ffffff 1px;

-				border-bottom: solid #aca899 1px;

-				background-color: #f1efe7;

-				padding: 3px 5px;

-				font-size: 68.75%;

-			}

-

-			div.toolbar, div#search input {

-				font-family: tahoma, verdana, arial, helvetica, sans-serif;

-			}

-

-			div.toolbar input.button {

-				padding: 0 5px;

-				font-size: 100%;

-			}

-

-			div.toolbar input.hidden {

-				display: none;

-			}

-

-			div#switches input#clearButton {

-				margin-left: 20px;

-			}

-

-			div#levels label {

-				font-weight: bold;

-			}

-

-			div#levels label, div#options label {

-				margin-right: 5px;

-			}

-

-			div#levels label#wrapLabel {

-				font-weight: normal;

-			}

-

-			div#search label {

-				margin-right: 10px;

-			}

-

-			div#search label.searchboxlabel {

-				margin-right: 0;

-			}

-

-			div#search input {

-				font-size: 100%;

-			}

-

-			div#search input.validregex {

-				color: green;

-			}

-

-			div#search input.invalidregex {

-				color: red;

-			}

-

-			div#search input.nomatches {

-				color: white;

-				background-color: #ff6666;

-			}

-

-			div#search input.nomatches {

-				color: white;

-				background-color: #ff6666;

-			}

-

-			div#searchNav {

-				display: none;

-			}

-

-			div#commandLine {

-				display: none;

-			}

-

-			div#commandLine input#command {

-				font-size: 100%;

-				font-family: Courier New, Courier;

-			}

-

-			div#commandLine input#evaluateButton {

-			}

-

-			*.greyedout {

-				color: gray !important;

-				border-color: gray !important;

-			}

-

-			*.greyedout *.alwaysenabled { color: black; }

-

-			*.unselectable {

-				-khtml-user-select: none;

-				-moz-user-select: none;

-				user-select: none;

-			}

-

-			div#log {

-				font-family: Courier New, Courier;

-				font-size: 75%;

-				width: 100%;

-				overflow: auto;

-				clear: both;

-				position: relative;

-			}

-

-			div.group {

-				border-color: #cccccc;

-				border-style: solid;

-				border-width: 1px 0 1px 1px;

-				overflow: visible;

-			}

-

-			div.oldIe div.group, div.oldIe div.group *, div.oldIe *.logentry {

-				height: 1%;

-			}

-

-			div.group div.groupheading span.expander {

-				border: solid black 1px;

-				font-family: Courier New, Courier;

-				font-size: 0.833em;

-				background-color: #eeeeee;

-				position: relative;

-				top: -1px;

-				color: black;

-				padding: 0 2px;

-				cursor: pointer;

-				cursor: hand;

-				height: 1%;

-			}

-

-			div.group div.groupcontent {

-				margin-left: 10px;

-				padding-bottom: 2px;

-				overflow: visible;

-			}

-

-			div.group div.expanded {

-				display: block;

-			}

-

-			div.group div.collapsed {

-				display: none;

-			}

-

-			*.logentry {

-				overflow: visible;

-				display: none;

-				white-space: pre;

-			}

-

-			span.pre {

-				white-space: pre;

-			}

-			

-			pre.unwrapped {

-				display: inline !important;

-			}

-

-			pre.unwrapped pre.pre, div.wrapped pre.pre {

-				display: inline;

-			}

-

-			div.wrapped pre.pre {

-				white-space: normal;

-			}

-

-			div.wrapped {

-				display: none;

-			}

-

-			body.searching *.logentry span.currentmatch {

-				color: white !important;

-				background-color: green !important;

-			}

-

-			body.searching div.searchhighlight *.logentry span.searchterm {

-				color: black;

-				background-color: yellow;

-			}

-

-			div.wrap *.logentry {

-				white-space: normal !important;

-				border-width: 0 0 1px 0;

-				border-color: #dddddd;

-				border-style: dotted;

-			}

-

-			div.wrap #log_wrapped, #log_unwrapped {

-				display: block;

-			}

-

-			div.wrap #log_unwrapped, #log_wrapped {

-				display: none;

-			}

-

-			div.wrap *.logentry span.pre {

-				overflow: visible;

-				white-space: normal;

-			}

-

-			div.wrap *.logentry pre.unwrapped {

-				display: none;

-			}

-

-			div.wrap *.logentry span.wrapped {

-				display: inline;

-			}

-

-			div.searchfilter *.searchnonmatch {

-				display: none !important;

-			}

-

-			div#log *.TRACE, label#label_TRACE {

-				color: #666666;

-			}

-

-			div#log *.DEBUG, label#label_DEBUG {

-				color: green;

-			}

-

-			div#log *.INFO, label#label_INFO {

-				color: #000099;

-			}

-

-			div#log *.WARN, label#label_WARN {

-				color: #999900;

-			}

-

-			div#log *.ERROR, label#label_ERROR {

-				color: red;

-			}

-

-			div#log *.FATAL, label#label_FATAL {

-				color: #660066;

-			}

-

-			div.TRACE#log *.TRACE,

-			div.DEBUG#log *.DEBUG,

-			div.INFO#log *.INFO,

-			div.WARN#log *.WARN,

-			div.ERROR#log *.ERROR,

-			div.FATAL#log *.FATAL {

-				display: block;

-			}

-

-			div#log div.separator {

-				background-color: #cccccc;

-				margin: 5px 0;

-				line-height: 1px;

-			}

-		</style>

-	</head>

-

-	<body id="body">

-		<div id="switchesContainer">

-			<div id="switches">

-				<div id="levels" class="toolbar">

-					Filters:

-					<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>

-					<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>

-					<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>

-					<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>

-					<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>

-					<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>

-					<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>

-				</div>

-				<div id="search" class="toolbar">

-					<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />

-					<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />

-					<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>

-					<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>

-					<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>

-					<div id="searchNav">

-						<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />

-						<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />

-						<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>

-						<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>

-					</div>

-				</div>

-				<div id="options" class="toolbar">

-					Options:

-					<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>

-					<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>

-					<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>

-					<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>

-					<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages"  />

-					<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />

-					<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />

-				</div>

-			</div>

-		</div>

-		<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>

-		<div id="commandLine" class="toolbar">

-			<div id="commandLineContainer">

-				<input type="text" id="command" title="Enter a JavaScript command here and hit return or press 'Evaluate'" />

-				<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />

-			</div>

-		</div>

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/js/liteconsole.html b/xos/core/static/log4javascript-1.4.6/js/liteconsole.html
deleted file mode 100644
index f948bae..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/liteconsole.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-<head>

-<title>log4javascript</title>

-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

-<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->

-<meta http-equiv="X-UA-Compatible" content="IE=7" />

-<script type="text/javascript">

-//<![CDATA[

-var loggingEnabled=true;var messagesBeforeDocLoaded=[];function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}

-function setLoggingEnabled(enable){loggingEnabled=enable;}

-function scrollToLatestEntry(){var l=getLogContainer();if(typeof l.scrollTop!="undefined"){var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}

-function log(logLevel,formattedMessage){if(loggingEnabled){if(loaded){doLog(logLevel,formattedMessage);}else{messagesBeforeDocLoaded.push([logLevel,formattedMessage]);}}}

-function doLog(logLevel,formattedMessage){var logEntry=document.createElement("div");logEntry.appendChild(document.createTextNode(formattedMessage));logEntry.className="logentry "+logLevel.name;getLogContainer().appendChild(logEntry);scrollToLatestEntry();}

-function mainPageReloaded(){var separator=document.createElement("div");separator.className="separator";separator.innerHTML="&nbsp;";getLogContainer().appendChild(separator);}

-var loaded=false;var logLevels=["DEBUG","INFO","WARN","ERROR","FATAL"];window.onload=function(){setLogContainerHeight();toggleLoggingEnabled();for(var i=0;i<messagesBeforeDocLoaded.length;i++){doLog(messagesBeforeDocLoaded[i][0],messagesBeforeDocLoaded[i][1]);}

-messagesBeforeDocLoaded=[];loaded=true;setTimeout(setLogContainerHeight,20);};function getLogContainer(){return $("log");}

-function clearLog(){getLogContainer().innerHTML="";}

-function $(id){return document.getElementById(id);}

-function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}

-return 0;}

-function getChromeHeight(){return $("toolbar").offsetHeight;}

-function setLogContainerHeight(){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";getLogContainer().style.height=""+

-Math.max(0,windowHeight-getChromeHeight())+"px";}

-window.onresize=function(){setLogContainerHeight();};

-//]]>

-</script>

-<style type="text/css">

-body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div#toolbar input.button{padding:0 5px;font-size:100%}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both}*.logentry{overflow:visible;white-space:pre}*.TRACE{color:#666666}*.DEBUG{color:green}*.INFO{color:#000099}*.WARN{color:#999900}*.ERROR{color:red}*.FATAL{color:#660066}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}

-</style>

-</head>

-<body id="body">

-<div id="toolbar">

-Options:

-<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" class="stateful" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Enable logging</label>

-<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="stateful button" title="Clear all log messages"  />

-<input type="button" id="closeButton" value="Close" onclick="window.close()" class="stateful button" title="Close the window" />

-</div>

-<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>

-</body>

-</html>
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/js/liteconsole_uncompressed.html b/xos/core/static/log4javascript-1.4.6/js/liteconsole_uncompressed.html
deleted file mode 100644
index b0340e5..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/liteconsole_uncompressed.html
+++ /dev/null
@@ -1,212 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript</title>

-		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

-		<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->

-		<meta http-equiv="X-UA-Compatible" content="IE=7" />

-		<script type="text/javascript">

-			//<![CDATA[

-			var loggingEnabled = true;

-			var messagesBeforeDocLoaded = [];

-

-			function toggleLoggingEnabled() {

-				setLoggingEnabled($("enableLogging").checked);

-			}

-

-			function setLoggingEnabled(enable) {

-				loggingEnabled = enable;

-			}

-

-			function scrollToLatestEntry() {

-				var l = getLogContainer();

-				if (typeof l.scrollTop != "undefined") {

-					var latestLogEntry = l.lastChild;

-					if (latestLogEntry) {

-						l.scrollTop = l.scrollHeight;

-					}

-				}

-			}

-

-			function log(logLevel, formattedMessage) {

-				if (loggingEnabled) {

-					if (loaded) {

-						doLog(logLevel, formattedMessage);

-					} else {

-						messagesBeforeDocLoaded.push([logLevel, formattedMessage]);

-					}

-				}

-			}

-

-			function doLog(logLevel, formattedMessage) {

-				var logEntry = document.createElement("div");

-				logEntry.appendChild(document.createTextNode(formattedMessage));

-				logEntry.className = "logentry " + logLevel.name;

-				getLogContainer().appendChild(logEntry);

-				scrollToLatestEntry();

-			}

-

-			function mainPageReloaded() {

-				var separator = document.createElement("div");

-				separator.className = "separator";

-				separator.innerHTML = "&nbsp;";

-				getLogContainer().appendChild(separator);

-			}

-

-			var loaded = false;

-			var logLevels = ["DEBUG", "INFO", "WARN", "ERROR", "FATAL"];

-

-			window.onload = function() {

-				setLogContainerHeight();

-				toggleLoggingEnabled();

-				for (var i = 0; i < messagesBeforeDocLoaded.length; i++) {

-					doLog(messagesBeforeDocLoaded[i][0], messagesBeforeDocLoaded[i][1]);

-				}

-				messagesBeforeDocLoaded = [];

-				loaded = true;

-

-				// Workaround to make sure log div starts at the correct size

-				setTimeout(setLogContainerHeight, 20);

-			};

-

-			function getLogContainer() {

-				return $("log");

-			}

-

-			function clearLog() {

-				getLogContainer().innerHTML = "";

-			}

-

-			/* ------------------------------------------------------------------------- */

-

-			// Other utility functions

-

-			// Syntax borrowed from Prototype library

-			function $(id) {

-				return document.getElementById(id);

-			}

-

-			function getWindowHeight() {

-				if (window.innerHeight) {

-					return window.innerHeight;

-				} else if (document.documentElement && document.documentElement.clientHeight) {

-					return document.documentElement.clientHeight;

-				} else if (document.body) {

-					return document.body.clientHeight;

-				}

-				return 0;

-			}

-

-			function getChromeHeight() {

-				return $("toolbar").offsetHeight;

-			}

-

-			function setLogContainerHeight() {

-				var windowHeight = getWindowHeight();

-				$("body").style.height = getWindowHeight() + "px";

-				getLogContainer().style.height = "" +

-					Math.max(0, windowHeight - getChromeHeight()) + "px";

-			}

-

-			window.onresize = function() {

-				setLogContainerHeight();

-			};

-

-			//]]>

-		</script>

-		<style type="text/css">

-			body {

-				background-color: white;

-				color: black;

-				padding: 0;

-				margin: 0;

-				font-family: tahoma, verdana, arial, helvetica, sans-serif;

-				overflow: hidden;

-			}

-			

-			div#toolbar {

-				border-top: solid #ffffff 1px;

-				border-bottom: solid #aca899 1px;

-				background-color: #f1efe7;

-				padding: 3px 5px;

-				font-size: 68.75%;

-			}

-

-			div#toolbar input.button {

-				padding: 0 5px;

-				font-size: 100%;

-			}

-

-			div#log {

-				font-family: Courier New, Courier;

-				font-size: 75%;

-				width: 100%;

-				overflow: auto;

-				clear: both;

-			}

-

-			*.logentry {

-				overflow: visible;

-				white-space: pre;

-			}

-

-			*.TRACE {

-				color: #666666;

-			}

-

-			*.DEBUG {

-				color: green;

-			}

-

-			*.INFO {

-				color: #000099;

-			}

-

-			*.WARN {

-				color: #999900;

-			}

-

-			*.ERROR {

-				color: red;

-			}

-

-			*.FATAL {

-				color: #660066;

-			}

-

-			div#log div.separator {

-				background-color: #cccccc;

-				margin: 5px 0;

-				line-height: 1px;

-			}

-		</style>

-	</head>

-

-	<body id="body">

-		<div id="toolbar">

-			Options:

-			<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" class="stateful" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Enable logging</label>

-			<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="stateful button" title="Clear all log messages"  />

-			<input type="button" id="closeButton" value="Close" onclick="window.close()" class="stateful button" title="Close the window" />

-		</div>

-		<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>

-	</body>

-</html>
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/js/log4javascript.js b/xos/core/static/log4javascript-1.4.6/js/log4javascript.js
deleted file mode 100644
index b555b9f..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/log4javascript.js
+++ /dev/null
@@ -1,292 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-

-if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}

-return this.length;};}

-if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}

-this.length=this.length-1;return firstItem;}};}

-if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}

-var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}

-return itemsDeleted;};}

-var log4javascript=(function(){function isUndefined(obj){return typeof obj=="undefined";}

-function EventSupport(){}

-EventSupport.prototype={eventTypes:[],eventListeners:{},setEventTypes:function(eventTypesParam){if(eventTypesParam instanceof Array){this.eventTypes=eventTypesParam;this.eventListeners={};for(var i=0,len=this.eventTypes.length;i<len;i++){this.eventListeners[this.eventTypes[i]]=[];}}else{handleError("log4javascript.EventSupport ["+this+"]: setEventTypes: eventTypes parameter must be an Array");}},addEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: addEventListener: no event called '"+eventType+"'");}

-this.eventListeners[eventType].push(listener);}else{handleError("log4javascript.EventSupport ["+this+"]: addEventListener: listener must be a function");}},removeEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: no event called '"+eventType+"'");}

-array_remove(this.eventListeners[eventType],listener);}else{handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: listener must be a function");}},dispatchEvent:function(eventType,eventArgs){if(array_contains(this.eventTypes,eventType)){var listeners=this.eventListeners[eventType];for(var i=0,len=listeners.length;i<len;i++){listeners[i](this,eventType,eventArgs);}}else{handleError("log4javascript.EventSupport ["+this+"]: dispatchEvent: no event called '"+eventType+"'");}}};var applicationStartDate=new Date();var uniqueId="log4javascript_"+applicationStartDate.getTime()+"_"+

-Math.floor(Math.random()*100000000);var emptyFunction=function(){};var newLine="\r\n";var pageLoaded=false;function Log4JavaScript(){}

-Log4JavaScript.prototype=new EventSupport();log4javascript=new Log4JavaScript();log4javascript.version="1.4.6";log4javascript.edition="log4javascript";function toStr(obj){if(obj&&obj.toString){return obj.toString();}else{return String(obj);}}

-function getExceptionMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}else{return toStr(ex);}}

-function getUrlFileName(url){var lastSlashIndex=Math.max(url.lastIndexOf("/"),url.lastIndexOf("\\"));return url.substr(lastSlashIndex+1);}

-function getExceptionStringRep(ex){if(ex){var exStr="Exception: "+getExceptionMessage(ex);try{if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber;}

-if(ex.fileName){exStr+=" in file "+getUrlFileName(ex.fileName);}}catch(localEx){logLog.warn("Unable to obtain file and line information for error");}

-if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack;}

-return exStr;}

-return null;}

-function bool(obj){return Boolean(obj);}

-function trim(str){return str.replace(/^\s+/,"").replace(/\s+$/,"");}

-function splitIntoLines(text){var text2=text.replace(/\r\n/g,"\n").replace(/\r/g,"\n");return text2.split("\n");}

-var urlEncode=(typeof window.encodeURIComponent!="undefined")?function(str){return encodeURIComponent(str);}:function(str){return escape(str).replace(/\+/g,"%2B").replace(/"/g,"%22").replace(/'/g,"%27").replace(/\//g,"%2F").replace(/=/g,"%3D");};var urlDecode=(typeof window.decodeURIComponent!="undefined")?function(str){return decodeURIComponent(str);}:function(str){return unescape(str).replace(/%2B/g,"+").replace(/%22/g,"\"").replace(/%27/g,"'").replace(/%2F/g,"/").replace(/%3D/g,"=");};function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}

-if(index>=0){arr.splice(index,1);return true;}else{return false;}}

-function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}

-return false;}

-function extractBooleanFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return bool(param);}}

-function extractStringFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return String(param);}}

-function extractIntFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{try{var value=parseInt(param,10);return isNaN(value)?defaultValue:value;}catch(ex){logLog.warn("Invalid int param "+param,ex);return defaultValue;}}}

-function extractFunctionFromParam(param,defaultValue){if(typeof param=="function"){return param;}else{return defaultValue;}}

-function isError(err){return(err instanceof Error);}

-if(!Function.prototype.apply){Function.prototype.apply=function(obj,args){var methodName="__apply__";if(typeof obj[methodName]!="undefined"){methodName+=String(Math.random()).substr(2);}

-obj[methodName]=this;var argsStrings=[];for(var i=0,len=args.length;i<len;i++){argsStrings[i]="args["+i+"]";}

-var script="obj."+methodName+"("+argsStrings.join(",")+")";var returnValue=eval(script);delete obj[methodName];return returnValue;};}

-if(!Function.prototype.call){Function.prototype.call=function(obj){var args=[];for(var i=1,len=arguments.length;i<len;i++){args[i-1]=arguments[i];}

-return this.apply(obj,args);};}

-function getListenersPropertyName(eventName){return"__log4javascript_listeners__"+eventName;}

-function addEvent(node,eventName,listener,useCapture,win){win=win?win:window;if(node.addEventListener){node.addEventListener(eventName,listener,useCapture);}else if(node.attachEvent){node.attachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(!node[propertyName]){node[propertyName]=[];node["on"+eventName]=function(evt){evt=getEvent(evt,win);var listenersPropertyName=getListenersPropertyName(eventName);var listeners=this[listenersPropertyName].concat([]);var currentListener;while((currentListener=listeners.shift())){currentListener.call(this,evt);}};}

-node[propertyName].push(listener);}}

-function removeEvent(node,eventName,listener,useCapture){if(node.removeEventListener){node.removeEventListener(eventName,listener,useCapture);}else if(node.detachEvent){node.detachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(node[propertyName]){array_remove(node[propertyName],listener);}}}

-function getEvent(evt,win){win=win?win:window;return evt?evt:win.event;}

-function stopEventPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}

-evt.returnValue=false;}

-var logLog={quietMode:false,debugMessages:[],setQuietMode:function(quietMode){this.quietMode=bool(quietMode);},numberOfErrors:0,alertAllErrors:false,setAlertAllErrors:function(alertAllErrors){this.alertAllErrors=alertAllErrors;},debug:function(message){this.debugMessages.push(message);},displayDebug:function(){alert(this.debugMessages.join(newLine));},warn:function(message,exception){},error:function(message,exception){if(++this.numberOfErrors==1||this.alertAllErrors){if(!this.quietMode){var alertMessage="log4javascript error: "+message;if(exception){alertMessage+=newLine+newLine+"Original error: "+getExceptionStringRep(exception);}

-alert(alertMessage);}}}};log4javascript.logLog=logLog;log4javascript.setEventTypes(["load","error"]);function handleError(message,exception){logLog.error(message,exception);log4javascript.dispatchEvent("error",{"message":message,"exception":exception});}

-log4javascript.handleError=handleError;var enabled=!((typeof log4javascript_disabled!="undefined")&&log4javascript_disabled);log4javascript.setEnabled=function(enable){enabled=bool(enable);};log4javascript.isEnabled=function(){return enabled;};var useTimeStampsInMilliseconds=true;log4javascript.setTimeStampsInMilliseconds=function(timeStampsInMilliseconds){useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);};log4javascript.isTimeStampsInMilliseconds=function(){return useTimeStampsInMilliseconds;};log4javascript.evalInScope=function(expr){return eval(expr);};var showStackTraces=false;log4javascript.setShowStackTraces=function(show){showStackTraces=bool(show);};var Level=function(level,name){this.level=level;this.name=name;};Level.prototype={toString:function(){return this.name;},equals:function(level){return this.level==level.level;},isGreaterOrEqual:function(level){return this.level>=level.level;}};Level.ALL=new Level(Number.MIN_VALUE,"ALL");Level.TRACE=new Level(10000,"TRACE");Level.DEBUG=new Level(20000,"DEBUG");Level.INFO=new Level(30000,"INFO");Level.WARN=new Level(40000,"WARN");Level.ERROR=new Level(50000,"ERROR");Level.FATAL=new Level(60000,"FATAL");Level.OFF=new Level(Number.MAX_VALUE,"OFF");log4javascript.Level=Level;function Timer(name,level){this.name=name;this.level=isUndefined(level)?Level.INFO:level;this.start=new Date();}

-Timer.prototype.getElapsedTime=function(){return new Date().getTime()-this.start.getTime();};var anonymousLoggerName="[anonymous]";var defaultLoggerName="[default]";var nullLoggerName="[null]";var rootLoggerName="root";function Logger(name){this.name=name;this.parent=null;this.children=[];var appenders=[];var loggerLevel=null;var isRoot=(this.name===rootLoggerName);var isNull=(this.name===nullLoggerName);var appenderCache=null;var appenderCacheInvalidated=false;this.addChild=function(childLogger){this.children.push(childLogger);childLogger.parent=this;childLogger.invalidateAppenderCache();};var additive=true;this.getAdditivity=function(){return additive;};this.setAdditivity=function(additivity){var valueChanged=(additive!=additivity);additive=additivity;if(valueChanged){this.invalidateAppenderCache();}};this.addAppender=function(appender){if(isNull){handleError("Logger.addAppender: you may not add an appender to the null logger");}else{if(appender instanceof log4javascript.Appender){if(!array_contains(appenders,appender)){appenders.push(appender);appender.setAddedToLogger(this);this.invalidateAppenderCache();}}else{handleError("Logger.addAppender: appender supplied ('"+

-toStr(appender)+"') is not a subclass of Appender");}}};this.removeAppender=function(appender){array_remove(appenders,appender);appender.setRemovedFromLogger(this);this.invalidateAppenderCache();};this.removeAllAppenders=function(){var appenderCount=appenders.length;if(appenderCount>0){for(var i=0;i<appenderCount;i++){appenders[i].setRemovedFromLogger(this);}

-appenders.length=0;this.invalidateAppenderCache();}};this.getEffectiveAppenders=function(){if(appenderCache===null||appenderCacheInvalidated){var parentEffectiveAppenders=(isRoot||!this.getAdditivity())?[]:this.parent.getEffectiveAppenders();appenderCache=parentEffectiveAppenders.concat(appenders);appenderCacheInvalidated=false;}

-return appenderCache;};this.invalidateAppenderCache=function(){appenderCacheInvalidated=true;for(var i=0,len=this.children.length;i<len;i++){this.children[i].invalidateAppenderCache();}};this.log=function(level,params){if(enabled&&level.isGreaterOrEqual(this.getEffectiveLevel())){var exception;var finalParamIndex=params.length-1;var lastParam=params[finalParamIndex];if(params.length>1&&isError(lastParam)){exception=lastParam;finalParamIndex--;}

-var messages=[];for(var i=0;i<=finalParamIndex;i++){messages[i]=params[i];}

-var loggingEvent=new LoggingEvent(this,new Date(),level,messages,exception);this.callAppenders(loggingEvent);}};this.callAppenders=function(loggingEvent){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].doAppend(loggingEvent);}};this.setLevel=function(level){if(isRoot&&level===null){handleError("Logger.setLevel: you cannot set the level of the root logger to null");}else if(level instanceof Level){loggerLevel=level;}else{handleError("Logger.setLevel: level supplied to logger "+

-this.name+" is not an instance of log4javascript.Level");}};this.getLevel=function(){return loggerLevel;};this.getEffectiveLevel=function(){for(var logger=this;logger!==null;logger=logger.parent){var level=logger.getLevel();if(level!==null){return level;}}};this.group=function(name,initiallyExpanded){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].group(name,initiallyExpanded);}}};this.groupEnd=function(){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].groupEnd();}}};var timers={};this.time=function(name,level){if(enabled){if(isUndefined(name)){handleError("Logger.time: a name for the timer must be supplied");}else if(level&&!(level instanceof Level)){handleError("Logger.time: level supplied to timer "+

-name+" is not an instance of log4javascript.Level");}else{timers[name]=new Timer(name,level);}}};this.timeEnd=function(name){if(enabled){if(isUndefined(name)){handleError("Logger.timeEnd: a name for the timer must be supplied");}else if(timers[name]){var timer=timers[name];var milliseconds=timer.getElapsedTime();this.log(timer.level,["Timer "+toStr(name)+" completed in "+milliseconds+"ms"]);delete timers[name];}else{logLog.warn("Logger.timeEnd: no timer found with name "+name);}}};this.assert=function(expr){if(enabled&&!expr){var args=[];for(var i=1,len=arguments.length;i<len;i++){args.push(arguments[i]);}

-args=(args.length>0)?args:["Assertion Failure"];args.push(newLine);args.push(expr);this.log(Level.ERROR,args);}};this.toString=function(){return"Logger["+this.name+"]";};}

-Logger.prototype={trace:function(){this.log(Level.TRACE,arguments);},debug:function(){this.log(Level.DEBUG,arguments);},info:function(){this.log(Level.INFO,arguments);},warn:function(){this.log(Level.WARN,arguments);},error:function(){this.log(Level.ERROR,arguments);},fatal:function(){this.log(Level.FATAL,arguments);},isEnabledFor:function(level){return level.isGreaterOrEqual(this.getEffectiveLevel());},isTraceEnabled:function(){return this.isEnabledFor(Level.TRACE);},isDebugEnabled:function(){return this.isEnabledFor(Level.DEBUG);},isInfoEnabled:function(){return this.isEnabledFor(Level.INFO);},isWarnEnabled:function(){return this.isEnabledFor(Level.WARN);},isErrorEnabled:function(){return this.isEnabledFor(Level.ERROR);},isFatalEnabled:function(){return this.isEnabledFor(Level.FATAL);}};Logger.prototype.trace.isEntryPoint=true;Logger.prototype.debug.isEntryPoint=true;Logger.prototype.info.isEntryPoint=true;Logger.prototype.warn.isEntryPoint=true;Logger.prototype.error.isEntryPoint=true;Logger.prototype.fatal.isEntryPoint=true;var loggers={};var loggerNames=[];var ROOT_LOGGER_DEFAULT_LEVEL=Level.DEBUG;var rootLogger=new Logger(rootLoggerName);rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);log4javascript.getRootLogger=function(){return rootLogger;};log4javascript.getLogger=function(loggerName){if(!(typeof loggerName=="string")){loggerName=anonymousLoggerName;logLog.warn("log4javascript.getLogger: non-string logger name "+

-toStr(loggerName)+" supplied, returning anonymous logger");}

-if(loggerName==rootLoggerName){handleError("log4javascript.getLogger: root logger may not be obtained by name");}

-if(!loggers[loggerName]){var logger=new Logger(loggerName);loggers[loggerName]=logger;loggerNames.push(loggerName);var lastDotIndex=loggerName.lastIndexOf(".");var parentLogger;if(lastDotIndex>-1){var parentLoggerName=loggerName.substring(0,lastDotIndex);parentLogger=log4javascript.getLogger(parentLoggerName);}else{parentLogger=rootLogger;}

-parentLogger.addChild(logger);}

-return loggers[loggerName];};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=log4javascript.getLogger(defaultLoggerName);var a=new log4javascript.PopUpAppender();defaultLogger.addAppender(a);}

-return defaultLogger;};var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=new Logger(nullLoggerName);nullLogger.setLevel(Level.OFF);}

-return nullLogger;};log4javascript.resetConfiguration=function(){rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);loggers={};};var LoggingEvent=function(logger,timeStamp,level,messages,exception){this.logger=logger;this.timeStamp=timeStamp;this.timeStampInMilliseconds=timeStamp.getTime();this.timeStampInSeconds=Math.floor(this.timeStampInMilliseconds/1000);this.milliseconds=this.timeStamp.getMilliseconds();this.level=level;this.messages=messages;this.exception=exception;};LoggingEvent.prototype={getThrowableStrRep:function(){return this.exception?getExceptionStringRep(this.exception):"";},getCombinedMessages:function(){return(this.messages.length==1)?this.messages[0]:this.messages.join(newLine);},toString:function(){return"LoggingEvent["+this.level+"]";}};log4javascript.LoggingEvent=LoggingEvent;var Layout=function(){};Layout.prototype={defaults:{loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url"},loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url",batchHeader:"",batchFooter:"",batchSeparator:"",returnsPostData:false,overrideTimeStampsSetting:false,useTimeStampsInMilliseconds:null,format:function(){handleError("Layout.format: layout supplied has no format() method");},ignoresThrowable:function(){handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");},getContentType:function(){return"text/plain";},allowBatching:function(){return true;},setTimeStampsInMilliseconds:function(timeStampsInMilliseconds){this.overrideTimeStampsSetting=true;this.useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);},isTimeStampsInMilliseconds:function(){return this.overrideTimeStampsSetting?this.useTimeStampsInMilliseconds:useTimeStampsInMilliseconds;},getTimeStampValue:function(loggingEvent){return this.isTimeStampsInMilliseconds()?loggingEvent.timeStampInMilliseconds:loggingEvent.timeStampInSeconds;},getDataValues:function(loggingEvent,combineMessages){var dataValues=[[this.loggerKey,loggingEvent.logger.name],[this.timeStampKey,this.getTimeStampValue(loggingEvent)],[this.levelKey,loggingEvent.level.name],[this.urlKey,window.location.href],[this.messageKey,combineMessages?loggingEvent.getCombinedMessages():loggingEvent.messages]];if(!this.isTimeStampsInMilliseconds()){dataValues.push([this.millisecondsKey,loggingEvent.milliseconds]);}

-if(loggingEvent.exception){dataValues.push([this.exceptionKey,getExceptionStringRep(loggingEvent.exception)]);}

-if(this.hasCustomFields()){for(var i=0,len=this.customFields.length;i<len;i++){var val=this.customFields[i].value;if(typeof val==="function"){val=val(this,loggingEvent);}

-dataValues.push([this.customFields[i].name,val]);}}

-return dataValues;},setKeys:function(loggerKey,timeStampKey,levelKey,messageKey,exceptionKey,urlKey,millisecondsKey){this.loggerKey=extractStringFromParam(loggerKey,this.defaults.loggerKey);this.timeStampKey=extractStringFromParam(timeStampKey,this.defaults.timeStampKey);this.levelKey=extractStringFromParam(levelKey,this.defaults.levelKey);this.messageKey=extractStringFromParam(messageKey,this.defaults.messageKey);this.exceptionKey=extractStringFromParam(exceptionKey,this.defaults.exceptionKey);this.urlKey=extractStringFromParam(urlKey,this.defaults.urlKey);this.millisecondsKey=extractStringFromParam(millisecondsKey,this.defaults.millisecondsKey);},setCustomField:function(name,value){var fieldUpdated=false;for(var i=0,len=this.customFields.length;i<len;i++){if(this.customFields[i].name===name){this.customFields[i].value=value;fieldUpdated=true;}}

-if(!fieldUpdated){this.customFields.push({"name":name,"value":value});}},hasCustomFields:function(){return(this.customFields.length>0);},toString:function(){handleError("Layout.toString: all layouts must override this method");}};log4javascript.Layout=Layout;var Appender=function(){};Appender.prototype=new EventSupport();Appender.prototype.layout=new PatternLayout();Appender.prototype.threshold=Level.ALL;Appender.prototype.loggers=[];Appender.prototype.doAppend=function(loggingEvent){if(enabled&&loggingEvent.level.level>=this.threshold.level){this.append(loggingEvent);}};Appender.prototype.append=function(loggingEvent){};Appender.prototype.setLayout=function(layout){if(layout instanceof Layout){this.layout=layout;}else{handleError("Appender.setLayout: layout supplied to "+

-this.toString()+" is not a subclass of Layout");}};Appender.prototype.getLayout=function(){return this.layout;};Appender.prototype.setThreshold=function(threshold){if(threshold instanceof Level){this.threshold=threshold;}else{handleError("Appender.setThreshold: threshold supplied to "+

-this.toString()+" is not a subclass of Level");}};Appender.prototype.getThreshold=function(){return this.threshold;};Appender.prototype.setAddedToLogger=function(logger){this.loggers.push(logger);};Appender.prototype.setRemovedFromLogger=function(logger){array_remove(this.loggers,logger);};Appender.prototype.group=emptyFunction;Appender.prototype.groupEnd=emptyFunction;Appender.prototype.toString=function(){handleError("Appender.toString: all appenders must override this method");};log4javascript.Appender=Appender;function SimpleLayout(){this.customFields=[];}

-SimpleLayout.prototype=new Layout();SimpleLayout.prototype.format=function(loggingEvent){return loggingEvent.level.name+" - "+loggingEvent.getCombinedMessages();};SimpleLayout.prototype.ignoresThrowable=function(){return true;};SimpleLayout.prototype.toString=function(){return"SimpleLayout";};log4javascript.SimpleLayout=SimpleLayout;function NullLayout(){this.customFields=[];}

-NullLayout.prototype=new Layout();NullLayout.prototype.format=function(loggingEvent){return loggingEvent.messages;};NullLayout.prototype.ignoresThrowable=function(){return true;};NullLayout.prototype.toString=function(){return"NullLayout";};log4javascript.NullLayout=NullLayout;function XmlLayout(combineMessages){this.combineMessages=extractBooleanFromParam(combineMessages,true);this.customFields=[];}

-XmlLayout.prototype=new Layout();XmlLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};XmlLayout.prototype.getContentType=function(){return"text/xml";};XmlLayout.prototype.escapeCdata=function(str){return str.replace(/\]\]>/,"]]>]]&gt;<![CDATA[");};XmlLayout.prototype.format=function(loggingEvent){var layout=this;var i,len;function formatMessage(message){message=(typeof message==="string")?message:toStr(message);return"<log4javascript:message><![CDATA["+

-layout.escapeCdata(message)+"]]></log4javascript:message>";}

-var str="<log4javascript:event logger=\""+loggingEvent.logger.name+"\" timestamp=\""+this.getTimeStampValue(loggingEvent)+"\"";if(!this.isTimeStampsInMilliseconds()){str+=" milliseconds=\""+loggingEvent.milliseconds+"\"";}

-str+=" level=\""+loggingEvent.level.name+"\">"+newLine;if(this.combineMessages){str+=formatMessage(loggingEvent.getCombinedMessages());}else{str+="<log4javascript:messages>"+newLine;for(i=0,len=loggingEvent.messages.length;i<len;i++){str+=formatMessage(loggingEvent.messages[i])+newLine;}

-str+="</log4javascript:messages>"+newLine;}

-if(this.hasCustomFields()){for(i=0,len=this.customFields.length;i<len;i++){str+="<log4javascript:customfield name=\""+

-this.customFields[i].name+"\"><![CDATA["+

-this.customFields[i].value.toString()+"]]></log4javascript:customfield>"+newLine;}}

-if(loggingEvent.exception){str+="<log4javascript:exception><![CDATA["+

-getExceptionStringRep(loggingEvent.exception)+"]]></log4javascript:exception>"+newLine;}

-str+="</log4javascript:event>"+newLine+newLine;return str;};XmlLayout.prototype.ignoresThrowable=function(){return false;};XmlLayout.prototype.toString=function(){return"XmlLayout";};log4javascript.XmlLayout=XmlLayout;function escapeNewLines(str){return str.replace(/\r\n|\r|\n/g,"\\r\\n");}

-function JsonLayout(readable,combineMessages){this.readable=extractBooleanFromParam(readable,false);this.combineMessages=extractBooleanFromParam(combineMessages,true);this.batchHeader=this.readable?"["+newLine:"[";this.batchFooter=this.readable?"]"+newLine:"]";this.batchSeparator=this.readable?","+newLine:",";this.setKeys();this.colon=this.readable?": ":":";this.tab=this.readable?"\t":"";this.lineBreak=this.readable?newLine:"";this.customFields=[];}

-JsonLayout.prototype=new Layout();JsonLayout.prototype.isReadable=function(){return this.readable;};JsonLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};JsonLayout.prototype.format=function(loggingEvent){var layout=this;var dataValues=this.getDataValues(loggingEvent,this.combineMessages);var str="{"+this.lineBreak;var i,len;function formatValue(val,prefix,expand){var formattedValue;var valType=typeof val;if(val instanceof Date){formattedValue=String(val.getTime());}else if(expand&&(val instanceof Array)){formattedValue="["+layout.lineBreak;for(var i=0,len=val.length;i<len;i++){var childPrefix=prefix+layout.tab;formattedValue+=childPrefix+formatValue(val[i],childPrefix,false);if(i<val.length-1){formattedValue+=",";}

-formattedValue+=layout.lineBreak;}

-formattedValue+=prefix+"]";}else if(valType!=="number"&&valType!=="boolean"){formattedValue="\""+escapeNewLines(toStr(val).replace(/\"/g,"\\\""))+"\"";}else{formattedValue=val;}

-return formattedValue;}

-for(i=0,len=dataValues.length-1;i<=len;i++){str+=this.tab+"\""+dataValues[i][0]+"\""+this.colon+formatValue(dataValues[i][1],this.tab,true);if(i<len){str+=",";}

-str+=this.lineBreak;}

-str+="}"+this.lineBreak;return str;};JsonLayout.prototype.ignoresThrowable=function(){return false;};JsonLayout.prototype.toString=function(){return"JsonLayout";};JsonLayout.prototype.getContentType=function(){return"application/json";};log4javascript.JsonLayout=JsonLayout;function HttpPostDataLayout(){this.setKeys();this.customFields=[];this.returnsPostData=true;}

-HttpPostDataLayout.prototype=new Layout();HttpPostDataLayout.prototype.allowBatching=function(){return false;};HttpPostDataLayout.prototype.format=function(loggingEvent){var dataValues=this.getDataValues(loggingEvent);var queryBits=[];for(var i=0,len=dataValues.length;i<len;i++){var val=(dataValues[i][1]instanceof Date)?String(dataValues[i][1].getTime()):dataValues[i][1];queryBits.push(urlEncode(dataValues[i][0])+"="+urlEncode(val));}

-return queryBits.join("&");};HttpPostDataLayout.prototype.ignoresThrowable=function(loggingEvent){return false;};HttpPostDataLayout.prototype.toString=function(){return"HttpPostDataLayout";};log4javascript.HttpPostDataLayout=HttpPostDataLayout;function formatObjectExpansion(obj,depth,indentation){var objectsExpanded=[];function doFormat(obj,depth,indentation){var i,j,len,childDepth,childIndentation,childLines,expansion,childExpansion;if(!indentation){indentation="";}

-function formatString(text){var lines=splitIntoLines(text);for(var j=1,jLen=lines.length;j<jLen;j++){lines[j]=indentation+lines[j];}

-return lines.join(newLine);}

-if(obj===null){return"null";}else if(typeof obj=="undefined"){return"undefined";}else if(typeof obj=="string"){return formatString(obj);}else if(typeof obj=="object"&&array_contains(objectsExpanded,obj)){try{expansion=toStr(obj);}catch(ex){expansion="Error formatting property. Details: "+getExceptionStringRep(ex);}

-return expansion+" [already expanded]";}else if((obj instanceof Array)&&depth>0){objectsExpanded.push(obj);expansion="["+newLine;childDepth=depth-1;childIndentation=indentation+"  ";childLines=[];for(i=0,len=obj.length;i<len;i++){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+childExpansion);}catch(ex){childLines.push(childIndentation+"Error formatting array member. Details: "+

-getExceptionStringRep(ex)+"");}}

-expansion+=childLines.join(","+newLine)+newLine+indentation+"]";return expansion;}else if(Object.prototype.toString.call(obj)=="[object Date]"){return obj.toString();}else if(typeof obj=="object"&&depth>0){objectsExpanded.push(obj);expansion="{"+newLine;childDepth=depth-1;childIndentation=indentation+"  ";childLines=[];for(i in obj){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+i+": "+childExpansion);}catch(ex){childLines.push(childIndentation+i+": Error formatting property. Details: "+

-getExceptionStringRep(ex));}}

-expansion+=childLines.join(","+newLine)+newLine+indentation+"}";return expansion;}else{return formatString(toStr(obj));}}

-return doFormat(obj,depth,indentation);}

-var SimpleDateFormat;(function(){var regex=/('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;var monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];var dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var TEXT2=0,TEXT3=1,NUMBER=2,YEAR=3,MONTH=4,TIMEZONE=5;var types={G:TEXT2,y:YEAR,M:MONTH,w:NUMBER,W:NUMBER,D:NUMBER,d:NUMBER,F:NUMBER,E:TEXT3,a:TEXT2,H:NUMBER,k:NUMBER,K:NUMBER,h:NUMBER,m:NUMBER,s:NUMBER,S:NUMBER,Z:TIMEZONE};var ONE_DAY=24*60*60*1000;var ONE_WEEK=7*ONE_DAY;var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK=1;var newDateAtMidnight=function(year,month,day){var d=new Date(year,month,day,0,0,0);d.setMilliseconds(0);return d;};Date.prototype.getDifference=function(date){return this.getTime()-date.getTime();};Date.prototype.isBefore=function(d){return this.getTime()<d.getTime();};Date.prototype.getUTCTime=function(){return Date.UTC(this.getFullYear(),this.getMonth(),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds(),this.getMilliseconds());};Date.prototype.getTimeSince=function(d){return this.getUTCTime()-d.getUTCTime();};Date.prototype.getPreviousSunday=function(){var midday=new Date(this.getFullYear(),this.getMonth(),this.getDate(),12,0,0);var previousSunday=new Date(midday.getTime()-this.getDay()*ONE_DAY);return newDateAtMidnight(previousSunday.getFullYear(),previousSunday.getMonth(),previousSunday.getDate());};Date.prototype.getWeekInYear=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}

-var previousSunday=this.getPreviousSunday();var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);var numberOfSundays=previousSunday.isBefore(startOfYear)?0:1+Math.floor(previousSunday.getTimeSince(startOfYear)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfYear.getDay();var weekInYear=numberOfSundays;if(numberOfDaysInFirstWeek<minimalDaysInFirstWeek){weekInYear--;}

-return weekInYear;};Date.prototype.getWeekInMonth=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}

-var previousSunday=this.getPreviousSunday();var startOfMonth=newDateAtMidnight(this.getFullYear(),this.getMonth(),1);var numberOfSundays=previousSunday.isBefore(startOfMonth)?0:1+Math.floor(previousSunday.getTimeSince(startOfMonth)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfMonth.getDay();var weekInMonth=numberOfSundays;if(numberOfDaysInFirstWeek>=minimalDaysInFirstWeek){weekInMonth++;}

-return weekInMonth;};Date.prototype.getDayInYear=function(){var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);return 1+Math.floor(this.getTimeSince(startOfYear)/ONE_DAY);};SimpleDateFormat=function(formatString){this.formatString=formatString;};SimpleDateFormat.prototype.setMinimalDaysInFirstWeek=function(days){this.minimalDaysInFirstWeek=days;};SimpleDateFormat.prototype.getMinimalDaysInFirstWeek=function(){return isUndefined(this.minimalDaysInFirstWeek)?DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK:this.minimalDaysInFirstWeek;};var padWithZeroes=function(str,len){while(str.length<len){str="0"+str;}

-return str;};var formatText=function(data,numberOfLetters,minLength){return(numberOfLetters>=4)?data:data.substr(0,Math.max(minLength,numberOfLetters));};var formatNumber=function(data,numberOfLetters){var dataString=""+data;return padWithZeroes(dataString,numberOfLetters);};SimpleDateFormat.prototype.format=function(date){var formattedString="";var result;var searchString=this.formatString;while((result=regex.exec(searchString))){var quotedString=result[1];var patternLetters=result[2];var otherLetters=result[3];var otherCharacters=result[4];if(quotedString){if(quotedString=="''"){formattedString+="'";}else{formattedString+=quotedString.substring(1,quotedString.length-1);}}else if(otherLetters){}else if(otherCharacters){formattedString+=otherCharacters;}else if(patternLetters){var patternLetter=patternLetters.charAt(0);var numberOfLetters=patternLetters.length;var rawData="";switch(patternLetter){case"G":rawData="AD";break;case"y":rawData=date.getFullYear();break;case"M":rawData=date.getMonth();break;case"w":rawData=date.getWeekInYear(this.getMinimalDaysInFirstWeek());break;case"W":rawData=date.getWeekInMonth(this.getMinimalDaysInFirstWeek());break;case"D":rawData=date.getDayInYear();break;case"d":rawData=date.getDate();break;case"F":rawData=1+Math.floor((date.getDate()-1)/7);break;case"E":rawData=dayNames[date.getDay()];break;case"a":rawData=(date.getHours()>=12)?"PM":"AM";break;case"H":rawData=date.getHours();break;case"k":rawData=date.getHours()||24;break;case"K":rawData=date.getHours()%12;break;case"h":rawData=(date.getHours()%12)||12;break;case"m":rawData=date.getMinutes();break;case"s":rawData=date.getSeconds();break;case"S":rawData=date.getMilliseconds();break;case"Z":rawData=date.getTimezoneOffset();break;}

-switch(types[patternLetter]){case TEXT2:formattedString+=formatText(rawData,numberOfLetters,2);break;case TEXT3:formattedString+=formatText(rawData,numberOfLetters,3);break;case NUMBER:formattedString+=formatNumber(rawData,numberOfLetters);break;case YEAR:if(numberOfLetters<=3){var dataString=""+rawData;formattedString+=dataString.substr(2,2);}else{formattedString+=formatNumber(rawData,numberOfLetters);}

-break;case MONTH:if(numberOfLetters>=3){formattedString+=formatText(monthNames[rawData],numberOfLetters,numberOfLetters);}else{formattedString+=formatNumber(rawData+1,numberOfLetters);}

-break;case TIMEZONE:var isPositive=(rawData>0);var prefix=isPositive?"-":"+";var absData=Math.abs(rawData);var hours=""+Math.floor(absData/60);hours=padWithZeroes(hours,2);var minutes=""+(absData%60);minutes=padWithZeroes(minutes,2);formattedString+=prefix+hours+minutes;break;}}

-searchString=searchString.substr(result.index+result[0].length);}

-return formattedString;};})();log4javascript.SimpleDateFormat=SimpleDateFormat;function PatternLayout(pattern){if(pattern){this.pattern=pattern;}else{this.pattern=PatternLayout.DEFAULT_CONVERSION_PATTERN;}

-this.customFields=[];}

-PatternLayout.TTCC_CONVERSION_PATTERN="%r %p %c - %m%n";PatternLayout.DEFAULT_CONVERSION_PATTERN="%m%n";PatternLayout.ISO8601_DATEFORMAT="yyyy-MM-dd HH:mm:ss,SSS";PatternLayout.DATETIME_DATEFORMAT="dd MMM yyyy HH:mm:ss,SSS";PatternLayout.ABSOLUTETIME_DATEFORMAT="HH:mm:ss,SSS";PatternLayout.prototype=new Layout();PatternLayout.prototype.format=function(loggingEvent){var regex=/%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;var formattedString="";var result;var searchString=this.pattern;while((result=regex.exec(searchString))){var matchedString=result[0];var padding=result[1];var truncation=result[2];var conversionCharacter=result[3];var specifier=result[5];var text=result[6];if(text){formattedString+=""+text;}else{var replacement="";switch(conversionCharacter){case"a":case"m":var depth=0;if(specifier){depth=parseInt(specifier,10);if(isNaN(depth)){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character '"+conversionCharacter+"' - should be a number");depth=0;}}

-var messages=(conversionCharacter==="a")?loggingEvent.messages[0]:loggingEvent.messages;for(var i=0,len=messages.length;i<len;i++){if(i>0&&(replacement.charAt(replacement.length-1)!==" ")){replacement+=" ";}

-if(depth===0){replacement+=messages[i];}else{replacement+=formatObjectExpansion(messages[i],depth);}}

-break;case"c":var loggerName=loggingEvent.logger.name;if(specifier){var precision=parseInt(specifier,10);var loggerNameBits=loggingEvent.logger.name.split(".");if(precision>=loggerNameBits.length){replacement=loggerName;}else{replacement=loggerNameBits.slice(loggerNameBits.length-precision).join(".");}}else{replacement=loggerName;}

-break;case"d":var dateFormat=PatternLayout.ISO8601_DATEFORMAT;if(specifier){dateFormat=specifier;if(dateFormat=="ISO8601"){dateFormat=PatternLayout.ISO8601_DATEFORMAT;}else if(dateFormat=="ABSOLUTE"){dateFormat=PatternLayout.ABSOLUTETIME_DATEFORMAT;}else if(dateFormat=="DATE"){dateFormat=PatternLayout.DATETIME_DATEFORMAT;}}

-replacement=(new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);break;case"f":if(this.hasCustomFields()){var fieldIndex=0;if(specifier){fieldIndex=parseInt(specifier,10);if(isNaN(fieldIndex)){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character 'f' - should be a number");}else if(fieldIndex===0){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character 'f' - must be greater than zero");}else if(fieldIndex>this.customFields.length){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character 'f' - there aren't that many custom fields");}else{fieldIndex=fieldIndex-1;}}

-var val=this.customFields[fieldIndex].value;if(typeof val=="function"){val=val(this,loggingEvent);}

-replacement=val;}

-break;case"n":replacement=newLine;break;case"p":replacement=loggingEvent.level.name;break;case"r":replacement=""+loggingEvent.timeStamp.getDifference(applicationStartDate);break;case"%":replacement="%";break;default:replacement=matchedString;break;}

-var l;if(truncation){l=parseInt(truncation.substr(1),10);var strLen=replacement.length;if(l<strLen){replacement=replacement.substring(strLen-l,strLen);}}

-if(padding){if(padding.charAt(0)=="-"){l=parseInt(padding.substr(1),10);while(replacement.length<l){replacement+=" ";}}else{l=parseInt(padding,10);while(replacement.length<l){replacement=" "+replacement;}}}

-formattedString+=replacement;}

-searchString=searchString.substr(result.index+result[0].length);}

-return formattedString;};PatternLayout.prototype.ignoresThrowable=function(){return true;};PatternLayout.prototype.toString=function(){return"PatternLayout";};log4javascript.PatternLayout=PatternLayout;function AlertAppender(){}

-AlertAppender.prototype=new Appender();AlertAppender.prototype.layout=new SimpleLayout();AlertAppender.prototype.append=function(loggingEvent){var formattedMessage=this.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}

-alert(formattedMessage);};AlertAppender.prototype.toString=function(){return"AlertAppender";};log4javascript.AlertAppender=AlertAppender;function BrowserConsoleAppender(){}

-BrowserConsoleAppender.prototype=new log4javascript.Appender();BrowserConsoleAppender.prototype.layout=new NullLayout();BrowserConsoleAppender.prototype.threshold=Level.DEBUG;BrowserConsoleAppender.prototype.append=function(loggingEvent){var appender=this;var getFormattedMessage=function(){var layout=appender.getLayout();var formattedMessage=layout.format(loggingEvent);if(layout.ignoresThrowable()&&loggingEvent.exception){formattedMessage+=loggingEvent.getThrowableStrRep();}

-return formattedMessage;};if((typeof opera!="undefined")&&opera.postError){opera.postError(getFormattedMessage());}else if(window.console&&window.console.log){var formattedMesage=getFormattedMessage();if(window.console.debug&&Level.DEBUG.isGreaterOrEqual(loggingEvent.level)){window.console.debug(formattedMesage);}else if(window.console.info&&Level.INFO.equals(loggingEvent.level)){window.console.info(formattedMesage);}else if(window.console.warn&&Level.WARN.equals(loggingEvent.level)){window.console.warn(formattedMesage);}else if(window.console.error&&loggingEvent.level.isGreaterOrEqual(Level.ERROR)){window.console.error(formattedMesage);}else{window.console.log(formattedMesage);}}};BrowserConsoleAppender.prototype.group=function(name){if(window.console&&window.console.group){window.console.group(name);}};BrowserConsoleAppender.prototype.groupEnd=function(){if(window.console&&window.console.groupEnd){window.console.groupEnd();}};BrowserConsoleAppender.prototype.toString=function(){return"BrowserConsoleAppender";};log4javascript.BrowserConsoleAppender=BrowserConsoleAppender;var xmlHttpFactories=[function(){return new XMLHttpRequest();},function(){return new ActiveXObject("Msxml2.XMLHTTP");},function(){return new ActiveXObject("Microsoft.XMLHTTP");}];var getXmlHttp=function(errorHandler){var xmlHttp=null,factory;for(var i=0,len=xmlHttpFactories.length;i<len;i++){factory=xmlHttpFactories[i];try{xmlHttp=factory();getXmlHttp=factory;return xmlHttp;}catch(e){}}

-if(errorHandler){errorHandler();}else{handleError("getXmlHttp: unable to obtain XMLHttpRequest object");}};function isHttpRequestSuccessful(xmlHttp){return isUndefined(xmlHttp.status)||xmlHttp.status===0||(xmlHttp.status>=200&&xmlHttp.status<300)||xmlHttp.status==1223;}

-function AjaxAppender(url){var appender=this;var isSupported=true;if(!url){handleError("AjaxAppender: URL must be specified in constructor");isSupported=false;}

-var timed=this.defaults.timed;var waitForResponse=this.defaults.waitForResponse;var batchSize=this.defaults.batchSize;var timerInterval=this.defaults.timerInterval;var requestSuccessCallback=this.defaults.requestSuccessCallback;var failCallback=this.defaults.failCallback;var postVarName=this.defaults.postVarName;var sendAllOnUnload=this.defaults.sendAllOnUnload;var contentType=this.defaults.contentType;var sessionId=null;var queuedLoggingEvents=[];var queuedRequests=[];var headers=[];var sending=false;var initialized=false;function checkCanConfigure(configOptionName){if(initialized){handleError("AjaxAppender: configuration option '"+

-configOptionName+"' may not be set after the appender has been initialized");return false;}

-return true;}

-this.getSessionId=function(){return sessionId;};this.setSessionId=function(sessionIdParam){sessionId=extractStringFromParam(sessionIdParam,null);this.layout.setCustomField("sessionid",sessionId);};this.setLayout=function(layoutParam){if(checkCanConfigure("layout")){this.layout=layoutParam;if(sessionId!==null){this.setSessionId(sessionId);}}};this.isTimed=function(){return timed;};this.setTimed=function(timedParam){if(checkCanConfigure("timed")){timed=bool(timedParam);}};this.getTimerInterval=function(){return timerInterval;};this.setTimerInterval=function(timerIntervalParam){if(checkCanConfigure("timerInterval")){timerInterval=extractIntFromParam(timerIntervalParam,timerInterval);}};this.isWaitForResponse=function(){return waitForResponse;};this.setWaitForResponse=function(waitForResponseParam){if(checkCanConfigure("waitForResponse")){waitForResponse=bool(waitForResponseParam);}};this.getBatchSize=function(){return batchSize;};this.setBatchSize=function(batchSizeParam){if(checkCanConfigure("batchSize")){batchSize=extractIntFromParam(batchSizeParam,batchSize);}};this.isSendAllOnUnload=function(){return sendAllOnUnload;};this.setSendAllOnUnload=function(sendAllOnUnloadParam){if(checkCanConfigure("sendAllOnUnload")){sendAllOnUnload=extractBooleanFromParam(sendAllOnUnloadParam,sendAllOnUnload);}};this.setRequestSuccessCallback=function(requestSuccessCallbackParam){requestSuccessCallback=extractFunctionFromParam(requestSuccessCallbackParam,requestSuccessCallback);};this.setFailCallback=function(failCallbackParam){failCallback=extractFunctionFromParam(failCallbackParam,failCallback);};this.getPostVarName=function(){return postVarName;};this.setPostVarName=function(postVarNameParam){if(checkCanConfigure("postVarName")){postVarName=extractStringFromParam(postVarNameParam,postVarName);}};this.getHeaders=function(){return headers;};this.addHeader=function(name,value){if(name.toLowerCase()=="content-type"){contentType=value;}else{headers.push({name:name,value:value});}};function sendAll(){if(isSupported&&enabled){sending=true;var currentRequestBatch;if(waitForResponse){if(queuedRequests.length>0){currentRequestBatch=queuedRequests.shift();sendRequest(preparePostData(currentRequestBatch),sendAll);}else{sending=false;if(timed){scheduleSending();}}}else{while((currentRequestBatch=queuedRequests.shift())){sendRequest(preparePostData(currentRequestBatch));}

-sending=false;if(timed){scheduleSending();}}}}

-this.sendAll=sendAll;function sendAllRemaining(){var sendingAnything=false;if(isSupported&&enabled){var actualBatchSize=appender.getLayout().allowBatching()?batchSize:1;var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);if(queuedLoggingEvents.length>=actualBatchSize){queuedRequests.push(batchedLoggingEvents);batchedLoggingEvents=[];}}

-if(batchedLoggingEvents.length>0){queuedRequests.push(batchedLoggingEvents);}

-sendingAnything=(queuedRequests.length>0);waitForResponse=false;timed=false;sendAll();}

-return sendingAnything;}

-this.sendAllRemaining=sendAllRemaining;function preparePostData(batchedLoggingEvents){var formattedMessages=[];var currentLoggingEvent;var postData="";while((currentLoggingEvent=batchedLoggingEvents.shift())){var currentFormattedMessage=appender.getLayout().format(currentLoggingEvent);if(appender.getLayout().ignoresThrowable()){currentFormattedMessage+=currentLoggingEvent.getThrowableStrRep();}

-formattedMessages.push(currentFormattedMessage);}

-if(batchedLoggingEvents.length==1){postData=formattedMessages.join("");}else{postData=appender.getLayout().batchHeader+

-formattedMessages.join(appender.getLayout().batchSeparator)+

-appender.getLayout().batchFooter;}

-if(contentType==appender.defaults.contentType){postData=appender.getLayout().returnsPostData?postData:urlEncode(postVarName)+"="+urlEncode(postData);if(postData.length>0){postData+="&";}

-postData+="layout="+urlEncode(appender.getLayout().toString());}

-return postData;}

-function scheduleSending(){window.setTimeout(sendAll,timerInterval);}

-function xmlHttpErrorHandler(){var msg="AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}}

-function sendRequest(postData,successCallback){try{var xmlHttp=getXmlHttp(xmlHttpErrorHandler);if(isSupported){if(xmlHttp.overrideMimeType){xmlHttp.overrideMimeType(appender.getLayout().getContentType());}

-xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4){if(isHttpRequestSuccessful(xmlHttp)){if(requestSuccessCallback){requestSuccessCallback(xmlHttp);}

-if(successCallback){successCallback(xmlHttp);}}else{var msg="AjaxAppender.append: XMLHttpRequest request to URL "+

-url+" returned status code "+xmlHttp.status;handleError(msg);if(failCallback){failCallback(msg);}}

-xmlHttp.onreadystatechange=emptyFunction;xmlHttp=null;}};xmlHttp.open("POST",url,true);try{for(var i=0,header;header=headers[i++];){xmlHttp.setRequestHeader(header.name,header.value);}

-xmlHttp.setRequestHeader("Content-Type",contentType);}catch(headerEx){var msg="AjaxAppender.append: your browser's XMLHttpRequest implementation"+" does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}

-return;}

-xmlHttp.send(postData);}}catch(ex){var errMsg="AjaxAppender.append: error sending log message to "+url;handleError(errMsg,ex);isSupported=false;if(failCallback){failCallback(errMsg+". Details: "+getExceptionStringRep(ex));}}}

-this.append=function(loggingEvent){if(isSupported){if(!initialized){init();}

-queuedLoggingEvents.push(loggingEvent);var actualBatchSize=this.getLayout().allowBatching()?batchSize:1;if(queuedLoggingEvents.length>=actualBatchSize){var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);}

-queuedRequests.push(batchedLoggingEvents);if(!timed&&(!waitForResponse||(waitForResponse&&!sending))){sendAll();}}}};function init(){initialized=true;if(sendAllOnUnload){var oldBeforeUnload=window.onbeforeunload;window.onbeforeunload=function(){if(oldBeforeUnload){oldBeforeUnload();}

-if(sendAllRemaining()){return"Sending log messages";}};}

-if(timed){scheduleSending();}}}

-AjaxAppender.prototype=new Appender();AjaxAppender.prototype.defaults={waitForResponse:false,timed:false,timerInterval:1000,batchSize:1,sendAllOnUnload:false,requestSuccessCallback:null,failCallback:null,postVarName:"data",contentType:"application/x-www-form-urlencoded"};AjaxAppender.prototype.layout=new HttpPostDataLayout();AjaxAppender.prototype.toString=function(){return"AjaxAppender";};log4javascript.AjaxAppender=AjaxAppender;function setCookie(name,value,days,path){var expires;path=path?"; path="+path:"";if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));expires="; expires="+date.toGMTString();}else{expires="";}

-document.cookie=escape(name)+"="+escape(value)+expires+path;}

-function getCookie(name){var nameEquals=escape(name)+"=";var ca=document.cookie.split(";");for(var i=0,len=ca.length;i<len;i++){var c=ca[i];while(c.charAt(0)===" "){c=c.substring(1,c.length);}

-if(c.indexOf(nameEquals)===0){return unescape(c.substring(nameEquals.length,c.length));}}

-return null;}

-function getBaseUrl(){var scripts=document.getElementsByTagName("script");for(var i=0,len=scripts.length;i<len;++i){if(scripts[i].src.indexOf("log4javascript")!=-1){var lastSlash=scripts[i].src.lastIndexOf("/");return(lastSlash==-1)?"":scripts[i].src.substr(0,lastSlash+1);}}

-return null;}

-function isLoaded(win){try{return bool(win.loaded);}catch(ex){return false;}}

-var ConsoleAppender;(function(){var getConsoleHtmlLines=function(){return['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">','<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">','<head>','<title>log4javascript</title>','<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />','<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->','<meta http-equiv="X-UA-Compatible" content="IE=7" />','<script type="text/javascript">var isIe = false, isIePre7 = false;</script>','<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->','<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->','<script type="text/javascript">','//<![CDATA[','var loggingEnabled=true;var logQueuedEventsTimer=null;var logEntries=[];var logEntriesAndSeparators=[];var logItems=[];var renderDelay=100;var unrenderedLogItemsExist=false;var rootGroup,currentGroup=null;var loaded=false;var currentLogItem=null;var logMainContainer;function copyProperties(obj,props){for(var i in props){obj[i]=props[i];}}','function LogItem(){}','LogItem.prototype={mainContainer:null,wrappedContainer:null,unwrappedContainer:null,group:null,appendToLog:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].appendToLog();}','this.group.update();},doRemove:function(doUpdate,removeFromGroup){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].remove();}','this.unwrappedElementContainer=null;this.wrappedElementContainer=null;this.mainElementContainer=null;}','if(this.group&&removeFromGroup){this.group.removeChild(this,doUpdate);}','if(this===currentLogItem){currentLogItem=null;}},remove:function(doUpdate,removeFromGroup){this.doRemove(doUpdate,removeFromGroup);},render:function(){},accept:function(visitor){visitor.visit(this);},getUnwrappedDomContainer:function(){return this.group.unwrappedElementContainer.contentDiv;},getWrappedDomContainer:function(){return this.group.wrappedElementContainer.contentDiv;},getMainDomContainer:function(){return this.group.mainElementContainer.contentDiv;}};LogItem.serializedItemKeys={LOG_ENTRY:0,GROUP_START:1,GROUP_END:2};function LogItemContainerElement(){}','LogItemContainerElement.prototype={appendToLog:function(){var insertBeforeFirst=(newestAtTop&&this.containerDomNode.hasChildNodes());if(insertBeforeFirst){this.containerDomNode.insertBefore(this.mainDiv,this.containerDomNode.firstChild);}else{this.containerDomNode.appendChild(this.mainDiv);}}};function SeparatorElementContainer(containerDomNode){this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="separator";this.mainDiv.innerHTML="&nbsp;";}','SeparatorElementContainer.prototype=new LogItemContainerElement();SeparatorElementContainer.prototype.remove=function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;};function Separator(){this.rendered=false;}','Separator.prototype=new LogItem();copyProperties(Separator.prototype,{render:function(){var containerDomNode=this.group.contentDiv;if(isIe){this.unwrappedElementContainer=new SeparatorElementContainer(this.getUnwrappedDomContainer());this.wrappedElementContainer=new SeparatorElementContainer(this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new SeparatorElementContainer(this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}','this.content=this.formattedMessage;this.rendered=true;}});function GroupElementContainer(group,containerDomNode,isRoot,isWrapped){this.group=group;this.containerDomNode=containerDomNode;this.isRoot=isRoot;this.isWrapped=isWrapped;this.expandable=false;if(this.isRoot){if(isIe){this.contentDiv=logMainContainer.appendChild(document.createElement("div"));this.contentDiv.id=this.isWrapped?"log_wrapped":"log_unwrapped";}else{this.contentDiv=logMainContainer;}}else{var groupElementContainer=this;this.mainDiv=document.createElement("div");this.mainDiv.className="group";this.headingDiv=this.mainDiv.appendChild(document.createElement("div"));this.headingDiv.className="groupheading";this.expander=this.headingDiv.appendChild(document.createElement("span"));this.expander.className="expander unselectable greyedout";this.expander.unselectable=true;var expanderText=this.group.expanded?"-":"+";this.expanderTextNode=this.expander.appendChild(document.createTextNode(expanderText));this.headingDiv.appendChild(document.createTextNode(" "+this.group.name));this.contentDiv=this.mainDiv.appendChild(document.createElement("div"));var contentCssClass=this.group.expanded?"expanded":"collapsed";this.contentDiv.className="groupcontent "+contentCssClass;this.expander.onclick=function(){if(groupElementContainer.group.expandable){groupElementContainer.group.toggleExpanded();}};}}','GroupElementContainer.prototype=new LogItemContainerElement();copyProperties(GroupElementContainer.prototype,{toggleExpanded:function(){if(!this.isRoot){var oldCssClass,newCssClass,expanderText;if(this.group.expanded){newCssClass="expanded";oldCssClass="collapsed";expanderText="-";}else{newCssClass="collapsed";oldCssClass="expanded";expanderText="+";}','replaceClass(this.contentDiv,newCssClass,oldCssClass);this.expanderTextNode.nodeValue=expanderText;}},remove:function(){if(!this.isRoot){this.headingDiv=null;this.expander.onclick=null;this.expander=null;this.expanderTextNode=null;this.contentDiv=null;this.containerDomNode=null;this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;}},reverseChildren:function(){var node=null;var childDomNodes=[];while((node=this.contentDiv.firstChild)){this.contentDiv.removeChild(node);childDomNodes.push(node);}','while((node=childDomNodes.pop())){this.contentDiv.appendChild(node);}},update:function(){if(!this.isRoot){if(this.group.expandable){removeClass(this.expander,"greyedout");}else{addClass(this.expander,"greyedout");}}},clear:function(){if(this.isRoot){this.contentDiv.innerHTML="";}}});function Group(name,isRoot,initiallyExpanded){this.name=name;this.group=null;this.isRoot=isRoot;this.initiallyExpanded=initiallyExpanded;this.elementContainers=[];this.children=[];this.expanded=initiallyExpanded;this.rendered=false;this.expandable=false;}','Group.prototype=new LogItem();copyProperties(Group.prototype,{addChild:function(logItem){this.children.push(logItem);logItem.group=this;},render:function(){if(isIe){var unwrappedDomContainer,wrappedDomContainer;if(this.isRoot){unwrappedDomContainer=logMainContainer;wrappedDomContainer=logMainContainer;}else{unwrappedDomContainer=this.getUnwrappedDomContainer();wrappedDomContainer=this.getWrappedDomContainer();}','this.unwrappedElementContainer=new GroupElementContainer(this,unwrappedDomContainer,this.isRoot,false);this.wrappedElementContainer=new GroupElementContainer(this,wrappedDomContainer,this.isRoot,true);this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{var mainDomContainer=this.isRoot?logMainContainer:this.getMainDomContainer();this.mainElementContainer=new GroupElementContainer(this,mainDomContainer,this.isRoot,false);this.elementContainers=[this.mainElementContainer];}','this.rendered=true;},toggleExpanded:function(){this.expanded=!this.expanded;for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].toggleExpanded();}},expand:function(){if(!this.expanded){this.toggleExpanded();}},accept:function(visitor){visitor.visitGroup(this);},reverseChildren:function(){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].reverseChildren();}}},update:function(){var previouslyExpandable=this.expandable;this.expandable=(this.children.length!==0);if(this.expandable!==previouslyExpandable){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].update();}}},flatten:function(){var visitor=new GroupFlattener();this.accept(visitor);return visitor.logEntriesAndSeparators;},removeChild:function(child,doUpdate){array_remove(this.children,child);child.group=null;if(doUpdate){this.update();}},remove:function(doUpdate,removeFromGroup){for(var i=0,len=this.children.length;i<len;i++){this.children[i].remove(false,false);}','this.children=[];this.update();if(this===currentGroup){currentGroup=this.group;}','this.doRemove(doUpdate,removeFromGroup);},serialize:function(items){items.push([LogItem.serializedItemKeys.GROUP_START,this.name]);for(var i=0,len=this.children.length;i<len;i++){this.children[i].serialize(items);}','if(this!==currentGroup){items.push([LogItem.serializedItemKeys.GROUP_END]);}},clear:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clear();}}});function LogEntryElementContainer(){}','LogEntryElementContainer.prototype=new LogItemContainerElement();copyProperties(LogEntryElementContainer.prototype,{remove:function(){this.doRemove();},doRemove:function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;this.contentElement=null;this.containerDomNode=null;},setContent:function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=content;}},setSearchMatch:function(isMatch){var oldCssClass=isMatch?"searchnonmatch":"searchmatch";var newCssClass=isMatch?"searchmatch":"searchnonmatch";replaceClass(this.mainDiv,newCssClass,oldCssClass);},clearSearch:function(){removeClass(this.mainDiv,"searchmatch");removeClass(this.mainDiv,"searchnonmatch");}});function LogEntryWrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.mainDiv.className="logentry wrapped "+this.logEntry.level;this.contentElement=this.mainDiv;}','LogEntryWrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryWrappedElementContainer.prototype.setContent=function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=wrappedContent;}};function LogEntryUnwrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry unwrapped "+this.logEntry.level;this.pre=this.mainDiv.appendChild(document.createElement("pre"));this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.pre.className="unwrapped";this.contentElement=this.pre;}','LogEntryUnwrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryUnwrappedElementContainer.prototype.remove=function(){this.doRemove();this.pre=null;};function LogEntryMainElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry nonielogentry "+this.logEntry.level;this.contentElement=this.mainDiv.appendChild(document.createElement("span"));this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));}','LogEntryMainElementContainer.prototype=new LogEntryElementContainer();function LogEntry(level,formattedMessage){this.level=level;this.formattedMessage=formattedMessage;this.rendered=false;}','LogEntry.prototype=new LogItem();copyProperties(LogEntry.prototype,{render:function(){var logEntry=this;var containerDomNode=this.group.contentDiv;if(isIe){this.formattedMessage=this.formattedMessage.replace(/\\r\\n/g,"\\r");this.unwrappedElementContainer=new LogEntryUnwrappedElementContainer(this,this.getUnwrappedDomContainer());this.wrappedElementContainer=new LogEntryWrappedElementContainer(this,this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new LogEntryMainElementContainer(this,this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}','this.content=this.formattedMessage;this.rendered=true;},setContent:function(content,wrappedContent){if(content!=this.content){if(isIe&&(content!==this.formattedMessage)){content=content.replace(/\\r\\n/g,"\\r");}','for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setContent(content,wrappedContent);}','this.content=content;}},getSearchMatches:function(){var matches=[];var i,len;if(isIe){var unwrappedEls=getElementsByClass(this.unwrappedElementContainer.mainDiv,"searchterm","span");var wrappedEls=getElementsByClass(this.wrappedElementContainer.mainDiv,"searchterm","span");for(i=0,len=unwrappedEls.length;i<len;i++){matches[i]=new Match(this.level,null,unwrappedEls[i],wrappedEls[i]);}}else{var els=getElementsByClass(this.mainElementContainer.mainDiv,"searchterm","span");for(i=0,len=els.length;i<len;i++){matches[i]=new Match(this.level,els[i]);}}','return matches;},setSearchMatch:function(isMatch){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setSearchMatch(isMatch);}},clearSearch:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clearSearch();}},accept:function(visitor){visitor.visitLogEntry(this);},serialize:function(items){items.push([LogItem.serializedItemKeys.LOG_ENTRY,this.level,this.formattedMessage]);}});function LogItemVisitor(){}','LogItemVisitor.prototype={visit:function(logItem){},visitParent:function(logItem){if(logItem.group){logItem.group.accept(this);}},visitChildren:function(logItem){for(var i=0,len=logItem.children.length;i<len;i++){logItem.children[i].accept(this);}},visitLogEntry:function(logEntry){this.visit(logEntry);},visitSeparator:function(separator){this.visit(separator);},visitGroup:function(group){this.visit(group);}};function GroupFlattener(){this.logEntriesAndSeparators=[];}','GroupFlattener.prototype=new LogItemVisitor();GroupFlattener.prototype.visitGroup=function(group){this.visitChildren(group);};GroupFlattener.prototype.visitLogEntry=function(logEntry){this.logEntriesAndSeparators.push(logEntry);};GroupFlattener.prototype.visitSeparator=function(separator){this.logEntriesAndSeparators.push(separator);};window.onload=function(){if(location.search){var queryBits=unescape(location.search).substr(1).split("&"),nameValueBits;for(var i=0,len=queryBits.length;i<len;i++){nameValueBits=queryBits[i].split("=");if(nameValueBits[0]=="log4javascript_domain"){document.domain=nameValueBits[1];break;}}}','logMainContainer=$("log");if(isIePre7){addClass(logMainContainer,"oldIe");}','rootGroup=new Group("root",true);rootGroup.render();currentGroup=rootGroup;setCommandInputWidth();setLogContainerHeight();toggleLoggingEnabled();toggleSearchEnabled();toggleSearchFilter();toggleSearchHighlight();applyFilters();checkAllLevels();toggleWrap();toggleNewestAtTop();toggleScrollToLatest();renderQueuedLogItems();loaded=true;$("command").value="";$("command").autocomplete="off";$("command").onkeydown=function(evt){evt=getEvent(evt);if(evt.keyCode==10||evt.keyCode==13){evalCommandLine();stopPropagation(evt);}else if(evt.keyCode==27){this.value="";this.focus();}else if(evt.keyCode==38&&commandHistory.length>0){currentCommandIndex=Math.max(0,currentCommandIndex-1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}else if(evt.keyCode==40&&commandHistory.length>0){currentCommandIndex=Math.min(commandHistory.length-1,currentCommandIndex+1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}};$("command").onkeypress=function(evt){evt=getEvent(evt);if(evt.keyCode==38&&commandHistory.length>0&&evt.preventDefault){evt.preventDefault();}};$("command").onkeyup=function(evt){evt=getEvent(evt);if(evt.keyCode==27&&evt.preventDefault){evt.preventDefault();this.focus();}};document.onkeydown=function keyEventHandler(evt){evt=getEvent(evt);switch(evt.keyCode){case 69:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){evalLastCommand();cancelKeyEvent(evt);return false;}','break;case 75:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusSearch();cancelKeyEvent(evt);return false;}','break;case 40:case 76:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusCommandLine();cancelKeyEvent(evt);return false;}','break;}};setTimeout(setLogContainerHeight,20);setShowCommandLine(showCommandLine);doSearch();};window.onunload=function(){if(mainWindowExists()){appender.unload();}','appender=null;};function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}','function setLoggingEnabled(enable){loggingEnabled=enable;}','var appender=null;function setAppender(appenderParam){appender=appenderParam;}','function setShowCloseButton(showCloseButton){$("closeButton").style.display=showCloseButton?"inline":"none";}','function setShowHideButton(showHideButton){$("hideButton").style.display=showHideButton?"inline":"none";}','var newestAtTop=false;function LogItemContentReverser(){}','LogItemContentReverser.prototype=new LogItemVisitor();LogItemContentReverser.prototype.visitGroup=function(group){group.reverseChildren();this.visitChildren(group);};function setNewestAtTop(isNewestAtTop){var oldNewestAtTop=newestAtTop;var i,iLen,j,jLen;newestAtTop=Boolean(isNewestAtTop);if(oldNewestAtTop!=newestAtTop){var visitor=new LogItemContentReverser();rootGroup.accept(visitor);if(currentSearch){var currentMatch=currentSearch.matches[currentMatchIndex];var matchIndex=0;var matches=[];var actOnLogEntry=function(logEntry){var logEntryMatches=logEntry.getSearchMatches();for(j=0,jLen=logEntryMatches.length;j<jLen;j++){matches[matchIndex]=logEntryMatches[j];if(currentMatch&&logEntryMatches[j].equals(currentMatch)){currentMatchIndex=matchIndex;}','matchIndex++;}};if(newestAtTop){for(i=logEntries.length-1;i>=0;i--){actOnLogEntry(logEntries[i]);}}else{for(i=0,iLen=logEntries.length;i<iLen;i++){actOnLogEntry(logEntries[i]);}}','currentSearch.matches=matches;if(currentMatch){currentMatch.setCurrent();}}else if(scrollToLatest){doScrollToLatest();}}','$("newestAtTop").checked=isNewestAtTop;}','function toggleNewestAtTop(){var isNewestAtTop=$("newestAtTop").checked;setNewestAtTop(isNewestAtTop);}','var scrollToLatest=true;function setScrollToLatest(isScrollToLatest){scrollToLatest=isScrollToLatest;if(scrollToLatest){doScrollToLatest();}','$("scrollToLatest").checked=isScrollToLatest;}','function toggleScrollToLatest(){var isScrollToLatest=$("scrollToLatest").checked;setScrollToLatest(isScrollToLatest);}','function doScrollToLatest(){var l=logMainContainer;if(typeof l.scrollTop!="undefined"){if(newestAtTop){l.scrollTop=0;}else{var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}}','var closeIfOpenerCloses=true;function setCloseIfOpenerCloses(isCloseIfOpenerCloses){closeIfOpenerCloses=isCloseIfOpenerCloses;}','var maxMessages=null;function setMaxMessages(max){maxMessages=max;pruneLogEntries();}','var showCommandLine=false;function setShowCommandLine(isShowCommandLine){showCommandLine=isShowCommandLine;if(loaded){$("commandLine").style.display=showCommandLine?"block":"none";setCommandInputWidth();setLogContainerHeight();}}','function focusCommandLine(){if(loaded){$("command").focus();}}','function focusSearch(){if(loaded){$("searchBox").focus();}}','function getLogItems(){var items=[];for(var i=0,len=logItems.length;i<len;i++){logItems[i].serialize(items);}','return items;}','function setLogItems(items){var loggingReallyEnabled=loggingEnabled;loggingEnabled=true;for(var i=0,len=items.length;i<len;i++){switch(items[i][0]){case LogItem.serializedItemKeys.LOG_ENTRY:log(items[i][1],items[i][2]);break;case LogItem.serializedItemKeys.GROUP_START:group(items[i][1]);break;case LogItem.serializedItemKeys.GROUP_END:groupEnd();break;}}','loggingEnabled=loggingReallyEnabled;}','function log(logLevel,formattedMessage){if(loggingEnabled){var logEntry=new LogEntry(logLevel,formattedMessage);logEntries.push(logEntry);logEntriesAndSeparators.push(logEntry);logItems.push(logEntry);currentGroup.addChild(logEntry);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}','logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}','function renderQueuedLogItems(){logQueuedEventsTimer=null;var pruned=pruneLogEntries();var initiallyHasMatches=currentSearch?currentSearch.hasMatches():false;for(var i=0,len=logItems.length;i<len;i++){if(!logItems[i].rendered){logItems[i].render();logItems[i].appendToLog();if(currentSearch&&(logItems[i]instanceof LogEntry)){currentSearch.applyTo(logItems[i]);}}}','if(currentSearch){if(pruned){if(currentSearch.hasVisibleMatches()){if(currentMatchIndex===null){setCurrentMatchIndex(0);}','displayMatches();}else{displayNoMatches();}}else if(!initiallyHasMatches&&currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}}','if(scrollToLatest){doScrollToLatest();}','unrenderedLogItemsExist=false;}','function pruneLogEntries(){if((maxMessages!==null)&&(logEntriesAndSeparators.length>maxMessages)){var numberToDelete=logEntriesAndSeparators.length-maxMessages;var prunedLogEntries=logEntriesAndSeparators.slice(0,numberToDelete);if(currentSearch){currentSearch.removeMatches(prunedLogEntries);}','var group;for(var i=0;i<numberToDelete;i++){group=logEntriesAndSeparators[i].group;array_remove(logItems,logEntriesAndSeparators[i]);array_remove(logEntries,logEntriesAndSeparators[i]);logEntriesAndSeparators[i].remove(true,true);if(group.children.length===0&&group!==currentGroup&&group!==rootGroup){array_remove(logItems,group);group.remove(true,true);}}','logEntriesAndSeparators=array_removeFromStart(logEntriesAndSeparators,numberToDelete);return true;}','return false;}','function group(name,startExpanded){if(loggingEnabled){initiallyExpanded=(typeof startExpanded==="undefined")?true:Boolean(startExpanded);var newGroup=new Group(name,false,initiallyExpanded);currentGroup.addChild(newGroup);currentGroup=newGroup;logItems.push(newGroup);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}','logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}','function groupEnd(){currentGroup=(currentGroup===rootGroup)?rootGroup:currentGroup.group;}','function mainPageReloaded(){currentGroup=rootGroup;var separator=new Separator();logEntriesAndSeparators.push(separator);logItems.push(separator);currentGroup.addChild(separator);}','function closeWindow(){if(appender&&mainWindowExists()){appender.close(true);}else{window.close();}}','function hide(){if(appender&&mainWindowExists()){appender.hide();}}','var mainWindow=window;var windowId="log4javascriptConsoleWindow_"+new Date().getTime()+"_"+(""+Math.random()).substr(2);function setMainWindow(win){mainWindow=win;mainWindow[windowId]=window;if(opener&&closeIfOpenerCloses){pollOpener();}}','function pollOpener(){if(closeIfOpenerCloses){if(mainWindowExists()){setTimeout(pollOpener,500);}else{closeWindow();}}}','function mainWindowExists(){try{return(mainWindow&&!mainWindow.closed&&mainWindow[windowId]==window);}catch(ex){}','return false;}','var logLevels=["TRACE","DEBUG","INFO","WARN","ERROR","FATAL"];function getCheckBox(logLevel){return $("switch_"+logLevel);}','function getIeWrappedLogContainer(){return $("log_wrapped");}','function getIeUnwrappedLogContainer(){return $("log_unwrapped");}','function applyFilters(){for(var i=0;i<logLevels.length;i++){if(getCheckBox(logLevels[i]).checked){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}','updateSearchFromFilters();}','function toggleAllLevels(){var turnOn=$("switch_ALL").checked;for(var i=0;i<logLevels.length;i++){getCheckBox(logLevels[i]).checked=turnOn;if(turnOn){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}}','function checkAllLevels(){for(var i=0;i<logLevels.length;i++){if(!getCheckBox(logLevels[i]).checked){getCheckBox("ALL").checked=false;return;}}','getCheckBox("ALL").checked=true;}','function clearLog(){rootGroup.clear();currentGroup=rootGroup;logEntries=[];logItems=[];logEntriesAndSeparators=[];doSearch();}','function toggleWrap(){var enable=$("wrap").checked;if(enable){addClass(logMainContainer,"wrap");}else{removeClass(logMainContainer,"wrap");}','refreshCurrentMatch();}','var searchTimer=null;function scheduleSearch(){try{clearTimeout(searchTimer);}catch(ex){}','searchTimer=setTimeout(doSearch,500);}','function Search(searchTerm,isRegex,searchRegex,isCaseSensitive){this.searchTerm=searchTerm;this.isRegex=isRegex;this.searchRegex=searchRegex;this.isCaseSensitive=isCaseSensitive;this.matches=[];}','Search.prototype={hasMatches:function(){return this.matches.length>0;},hasVisibleMatches:function(){if(this.hasMatches()){for(var i=0;i<this.matches.length;i++){if(this.matches[i].isVisible()){return true;}}}','return false;},match:function(logEntry){var entryText=String(logEntry.formattedMessage);var matchesSearch=false;if(this.isRegex){matchesSearch=this.searchRegex.test(entryText);}else if(this.isCaseSensitive){matchesSearch=(entryText.indexOf(this.searchTerm)>-1);}else{matchesSearch=(entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase())>-1);}','return matchesSearch;},getNextVisibleMatchIndex:function(){for(var i=currentMatchIndex+1;i<this.matches.length;i++){if(this.matches[i].isVisible()){return i;}}','for(i=0;i<=currentMatchIndex;i++){if(this.matches[i].isVisible()){return i;}}','return-1;},getPreviousVisibleMatchIndex:function(){for(var i=currentMatchIndex-1;i>=0;i--){if(this.matches[i].isVisible()){return i;}}','for(var i=this.matches.length-1;i>=currentMatchIndex;i--){if(this.matches[i].isVisible()){return i;}}','return-1;},applyTo:function(logEntry){var doesMatch=this.match(logEntry);if(doesMatch){logEntry.group.expand();logEntry.setSearchMatch(true);var logEntryContent;var wrappedLogEntryContent;var searchTermReplacementStartTag="<span class=\\\"searchterm\\\">";var searchTermReplacementEndTag="<"+"/span>";var preTagName=isIe?"pre":"span";var preStartTag="<"+preTagName+" class=\\\"pre\\\">";var preEndTag="<"+"/"+preTagName+">";var startIndex=0;var searchIndex,matchedText,textBeforeMatch;if(this.isRegex){var flags=this.isCaseSensitive?"g":"gi";var capturingRegex=new RegExp("("+this.searchRegex.source+")",flags);var rnd=(""+Math.random()).substr(2);var startToken="%%s"+rnd+"%%";var endToken="%%e"+rnd+"%%";logEntryContent=logEntry.formattedMessage.replace(capturingRegex,startToken+"$1"+endToken);logEntryContent=escapeHtml(logEntryContent);var result;var searchString=logEntryContent;logEntryContent="";wrappedLogEntryContent="";while((searchIndex=searchString.indexOf(startToken,startIndex))>-1){var endTokenIndex=searchString.indexOf(endToken,searchIndex);matchedText=searchString.substring(searchIndex+startToken.length,endTokenIndex);textBeforeMatch=searchString.substring(startIndex,searchIndex);logEntryContent+=preStartTag+textBeforeMatch+preEndTag;logEntryContent+=searchTermReplacementStartTag+preStartTag+matchedText+','preEndTag+searchTermReplacementEndTag;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+','matchedText+searchTermReplacementEndTag;}','startIndex=endTokenIndex+endToken.length;}','logEntryContent+=preStartTag+searchString.substr(startIndex)+preEndTag;if(isIe){wrappedLogEntryContent+=searchString.substr(startIndex);}}else{logEntryContent="";wrappedLogEntryContent="";var searchTermReplacementLength=searchTermReplacementStartTag.length+','this.searchTerm.length+searchTermReplacementEndTag.length;var searchTermLength=this.searchTerm.length;var searchTermLowerCase=this.searchTerm.toLowerCase();var logTextLowerCase=logEntry.formattedMessage.toLowerCase();while((searchIndex=logTextLowerCase.indexOf(searchTermLowerCase,startIndex))>-1){matchedText=escapeHtml(logEntry.formattedMessage.substr(searchIndex,this.searchTerm.length));textBeforeMatch=escapeHtml(logEntry.formattedMessage.substring(startIndex,searchIndex));var searchTermReplacement=searchTermReplacementStartTag+','preStartTag+matchedText+preEndTag+searchTermReplacementEndTag;logEntryContent+=preStartTag+textBeforeMatch+preEndTag+searchTermReplacement;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+','matchedText+searchTermReplacementEndTag;}','startIndex=searchIndex+searchTermLength;}','var textAfterLastMatch=escapeHtml(logEntry.formattedMessage.substr(startIndex));logEntryContent+=preStartTag+textAfterLastMatch+preEndTag;if(isIe){wrappedLogEntryContent+=textAfterLastMatch;}}','logEntry.setContent(logEntryContent,wrappedLogEntryContent);var logEntryMatches=logEntry.getSearchMatches();this.matches=this.matches.concat(logEntryMatches);}else{logEntry.setSearchMatch(false);logEntry.setContent(logEntry.formattedMessage,logEntry.formattedMessage);}','return doesMatch;},removeMatches:function(logEntries){var matchesToRemoveCount=0;var currentMatchRemoved=false;var matchesToRemove=[];var i,iLen,j,jLen;for(i=0,iLen=this.matches.length;i<iLen;i++){for(j=0,jLen=logEntries.length;j<jLen;j++){if(this.matches[i].belongsTo(logEntries[j])){matchesToRemove.push(this.matches[i]);if(i===currentMatchIndex){currentMatchRemoved=true;}}}}','var newMatch=currentMatchRemoved?null:this.matches[currentMatchIndex];if(currentMatchRemoved){for(i=currentMatchIndex,iLen=this.matches.length;i<iLen;i++){if(this.matches[i].isVisible()&&!array_contains(matchesToRemove,this.matches[i])){newMatch=this.matches[i];break;}}}','for(i=0,iLen=matchesToRemove.length;i<iLen;i++){array_remove(this.matches,matchesToRemove[i]);matchesToRemove[i].remove();}','if(this.hasVisibleMatches()){if(newMatch===null){setCurrentMatchIndex(0);}else{var newMatchIndex=0;for(i=0,iLen=this.matches.length;i<iLen;i++){if(newMatch===this.matches[i]){newMatchIndex=i;break;}}','setCurrentMatchIndex(newMatchIndex);}}else{currentMatchIndex=null;displayNoMatches();}}};function getPageOffsetTop(el,container){var currentEl=el;var y=0;while(currentEl&&currentEl!=container){y+=currentEl.offsetTop;currentEl=currentEl.offsetParent;}','return y;}','function scrollIntoView(el){var logContainer=logMainContainer;if(!$("wrap").checked){var logContainerLeft=logContainer.scrollLeft;var logContainerRight=logContainerLeft+logContainer.offsetWidth;var elLeft=el.offsetLeft;var elRight=elLeft+el.offsetWidth;if(elLeft<logContainerLeft||elRight>logContainerRight){logContainer.scrollLeft=elLeft-(logContainer.offsetWidth-el.offsetWidth)/2;}}','var logContainerTop=logContainer.scrollTop;var logContainerBottom=logContainerTop+logContainer.offsetHeight;var elTop=getPageOffsetTop(el)-getToolBarsHeight();var elBottom=elTop+el.offsetHeight;if(elTop<logContainerTop||elBottom>logContainerBottom){logContainer.scrollTop=elTop-(logContainer.offsetHeight-el.offsetHeight)/2;}}','function Match(logEntryLevel,spanInMainDiv,spanInUnwrappedPre,spanInWrappedDiv){this.logEntryLevel=logEntryLevel;this.spanInMainDiv=spanInMainDiv;if(isIe){this.spanInUnwrappedPre=spanInUnwrappedPre;this.spanInWrappedDiv=spanInWrappedDiv;}','this.mainSpan=isIe?spanInUnwrappedPre:spanInMainDiv;}','Match.prototype={equals:function(match){return this.mainSpan===match.mainSpan;},setCurrent:function(){if(isIe){addClass(this.spanInUnwrappedPre,"currentmatch");addClass(this.spanInWrappedDiv,"currentmatch");var elementToScroll=$("wrap").checked?this.spanInWrappedDiv:this.spanInUnwrappedPre;scrollIntoView(elementToScroll);}else{addClass(this.spanInMainDiv,"currentmatch");scrollIntoView(this.spanInMainDiv);}},belongsTo:function(logEntry){if(isIe){return isDescendant(this.spanInUnwrappedPre,logEntry.unwrappedPre);}else{return isDescendant(this.spanInMainDiv,logEntry.mainDiv);}},setNotCurrent:function(){if(isIe){removeClass(this.spanInUnwrappedPre,"currentmatch");removeClass(this.spanInWrappedDiv,"currentmatch");}else{removeClass(this.spanInMainDiv,"currentmatch");}},isOrphan:function(){return isOrphan(this.mainSpan);},isVisible:function(){return getCheckBox(this.logEntryLevel).checked;},remove:function(){if(isIe){this.spanInUnwrappedPre=null;this.spanInWrappedDiv=null;}else{this.spanInMainDiv=null;}}};var currentSearch=null;var currentMatchIndex=null;function doSearch(){var searchBox=$("searchBox");var searchTerm=searchBox.value;var isRegex=$("searchRegex").checked;var isCaseSensitive=$("searchCaseSensitive").checked;var i;if(searchTerm===""){$("searchReset").disabled=true;$("searchNav").style.display="none";removeClass(document.body,"searching");removeClass(searchBox,"hasmatches");removeClass(searchBox,"nomatches");for(i=0;i<logEntries.length;i++){logEntries[i].clearSearch();logEntries[i].setContent(logEntries[i].formattedMessage,logEntries[i].formattedMessage);}','currentSearch=null;setLogContainerHeight();}else{$("searchReset").disabled=false;$("searchNav").style.display="block";var searchRegex;var regexValid;if(isRegex){try{searchRegex=isCaseSensitive?new RegExp(searchTerm,"g"):new RegExp(searchTerm,"gi");regexValid=true;replaceClass(searchBox,"validregex","invalidregex");searchBox.title="Valid regex";}catch(ex){regexValid=false;replaceClass(searchBox,"invalidregex","validregex");searchBox.title="Invalid regex: "+(ex.message?ex.message:(ex.description?ex.description:"unknown error"));return;}}else{searchBox.title="";removeClass(searchBox,"validregex");removeClass(searchBox,"invalidregex");}','addClass(document.body,"searching");currentSearch=new Search(searchTerm,isRegex,searchRegex,isCaseSensitive);for(i=0;i<logEntries.length;i++){currentSearch.applyTo(logEntries[i]);}','setLogContainerHeight();if(currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}else{displayNoMatches();}}}','function updateSearchFromFilters(){if(currentSearch){if(currentSearch.hasMatches()){if(currentMatchIndex===null){currentMatchIndex=0;}','var currentMatch=currentSearch.matches[currentMatchIndex];if(currentMatch.isVisible()){displayMatches();setCurrentMatchIndex(currentMatchIndex);}else{currentMatch.setNotCurrent();var nextVisibleMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextVisibleMatchIndex>-1){setCurrentMatchIndex(nextVisibleMatchIndex);displayMatches();}else{displayNoMatches();}}}else{displayNoMatches();}}}','function refreshCurrentMatch(){if(currentSearch&&currentSearch.hasVisibleMatches()){setCurrentMatchIndex(currentMatchIndex);}}','function displayMatches(){replaceClass($("searchBox"),"hasmatches","nomatches");$("searchBox").title=""+currentSearch.matches.length+" matches found";$("searchNav").style.display="block";setLogContainerHeight();}','function displayNoMatches(){replaceClass($("searchBox"),"nomatches","hasmatches");$("searchBox").title="No matches found";$("searchNav").style.display="none";setLogContainerHeight();}','function toggleSearchEnabled(enable){enable=(typeof enable=="undefined")?!$("searchDisable").checked:enable;$("searchBox").disabled=!enable;$("searchReset").disabled=!enable;$("searchRegex").disabled=!enable;$("searchNext").disabled=!enable;$("searchPrevious").disabled=!enable;$("searchCaseSensitive").disabled=!enable;$("searchNav").style.display=(enable&&($("searchBox").value!=="")&&currentSearch&&currentSearch.hasVisibleMatches())?"block":"none";if(enable){removeClass($("search"),"greyedout");addClass(document.body,"searching");if($("searchHighlight").checked){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}','if($("searchFilter").checked){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}','$("searchDisable").checked=!enable;}else{addClass($("search"),"greyedout");removeClass(document.body,"searching");removeClass(logMainContainer,"searchhighlight");removeClass(logMainContainer,"searchfilter");}','setLogContainerHeight();}','function toggleSearchFilter(){var enable=$("searchFilter").checked;if(enable){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}','refreshCurrentMatch();}','function toggleSearchHighlight(){var enable=$("searchHighlight").checked;if(enable){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}}','function clearSearch(){$("searchBox").value="";doSearch();}','function searchNext(){if(currentSearch!==null&&currentMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var nextMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextMatchIndex>currentMatchIndex||confirm("Reached the end of the page. Start from the top?")){setCurrentMatchIndex(nextMatchIndex);}}}','function searchPrevious(){if(currentSearch!==null&&currentMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var previousMatchIndex=currentSearch.getPreviousVisibleMatchIndex();if(previousMatchIndex<currentMatchIndex||confirm("Reached the start of the page. Continue from the bottom?")){setCurrentMatchIndex(previousMatchIndex);}}}','function setCurrentMatchIndex(index){currentMatchIndex=index;currentSearch.matches[currentMatchIndex].setCurrent();}','function addClass(el,cssClass){if(!hasClass(el,cssClass)){if(el.className){el.className+=" "+cssClass;}else{el.className=cssClass;}}}','function hasClass(el,cssClass){if(el.className){var classNames=el.className.split(" ");return array_contains(classNames,cssClass);}','return false;}','function removeClass(el,cssClass){if(hasClass(el,cssClass)){var existingClasses=el.className.split(" ");var newClasses=[];for(var i=0,len=existingClasses.length;i<len;i++){if(existingClasses[i]!=cssClass){newClasses[newClasses.length]=existingClasses[i];}}','el.className=newClasses.join(" ");}}','function replaceClass(el,newCssClass,oldCssClass){removeClass(el,oldCssClass);addClass(el,newCssClass);}','function getElementsByClass(el,cssClass,tagName){var elements=el.getElementsByTagName(tagName);var matches=[];for(var i=0,len=elements.length;i<len;i++){if(hasClass(elements[i],cssClass)){matches.push(elements[i]);}}','return matches;}','function $(id){return document.getElementById(id);}','function isDescendant(node,ancestorNode){while(node!=null){if(node===ancestorNode){return true;}','node=node.parentNode;}','return false;}','function isOrphan(node){var currentNode=node;while(currentNode){if(currentNode==document.body){return false;}','currentNode=currentNode.parentNode;}','return true;}','function escapeHtml(str){return str.replace(/&/g,"&amp;").replace(/[<]/g,"&lt;").replace(/>/g,"&gt;");}','function getWindowWidth(){if(window.innerWidth){return window.innerWidth;}else if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth;}else if(document.body){return document.body.clientWidth;}','return 0;}','function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}','return 0;}','function getToolBarsHeight(){return $("switches").offsetHeight;}','function getChromeHeight(){var height=getToolBarsHeight();if(showCommandLine){height+=$("commandLine").offsetHeight;}','return height;}','function setLogContainerHeight(){if(logMainContainer){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";logMainContainer.style.height=""+','Math.max(0,windowHeight-getChromeHeight())+"px";}}','function setCommandInputWidth(){if(showCommandLine){$("command").style.width=""+Math.max(0,$("commandLineContainer").offsetWidth-','($("evaluateButton").offsetWidth+13))+"px";}}','window.onresize=function(){setCommandInputWidth();setLogContainerHeight();};if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}','return this.length;};}','if(!Array.prototype.pop){Array.prototype.pop=function(){if(this.length>0){var val=this[this.length-1];this.length=this.length-1;return val;}};}','if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}','this.length=this.length-1;return firstItem;}};}','if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}','var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}','return itemsDeleted;};}','function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}','if(index>=0){arr.splice(index,1);return index;}else{return false;}}','function array_removeFromStart(array,numberToRemove){if(Array.prototype.splice){array.splice(0,numberToRemove);}else{for(var i=numberToRemove,len=array.length;i<len;i++){array[i-numberToRemove]=array[i];}','array.length=array.length-numberToRemove;}','return array;}','function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}','return false;}','function getErrorMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}','return""+ex;}','function moveCaretToEnd(input){if(input.setSelectionRange){input.focus();var length=input.value.length;input.setSelectionRange(length,length);}else if(input.createTextRange){var range=input.createTextRange();range.collapse(false);range.select();}','input.focus();}','function stopPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}}','function getEvent(evt){return evt?evt:event;}','function getTarget(evt){return evt.target?evt.target:evt.srcElement;}','function getRelatedTarget(evt){if(evt.relatedTarget){return evt.relatedTarget;}else if(evt.srcElement){switch(evt.type){case"mouseover":return evt.fromElement;case"mouseout":return evt.toElement;default:return evt.srcElement;}}}','function cancelKeyEvent(evt){evt.returnValue=false;stopPropagation(evt);}','function evalCommandLine(){var expr=$("command").value;evalCommand(expr);$("command").value="";}','function evalLastCommand(){if(lastCommand!=null){evalCommand(lastCommand);}}','var lastCommand=null;var commandHistory=[];var currentCommandIndex=0;function evalCommand(expr){if(appender){appender.evalCommandAndAppend(expr);}else{var prefix=">>> "+expr+"\\r\\n";try{log("INFO",prefix+eval(expr));}catch(ex){log("ERROR",prefix+"Error: "+getErrorMessage(ex));}}','if(expr!=commandHistory[commandHistory.length-1]){commandHistory.push(expr);if(appender){appender.storeCommandHistory(commandHistory);}}','currentCommandIndex=(expr==commandHistory[currentCommandIndex])?currentCommandIndex+1:commandHistory.length;lastCommand=expr;}','//]]>','</script>','<style type="text/css">','body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#switchesContainer input{margin-bottom:0}div.toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div.toolbar,div#search input{font-family:tahoma,verdana,arial,helvetica,sans-serif}div.toolbar input.button{padding:0 5px;font-size:100%}div.toolbar input.hidden{display:none}div#switches input#clearButton{margin-left:20px}div#levels label{font-weight:bold}div#levels label,div#options label{margin-right:5px}div#levels label#wrapLabel{font-weight:normal}div#search label{margin-right:10px}div#search label.searchboxlabel{margin-right:0}div#search input{font-size:100%}div#search input.validregex{color:green}div#search input.invalidregex{color:red}div#search input.nomatches{color:white;background-color:#ff6666}div#search input.nomatches{color:white;background-color:#ff6666}div#searchNav{display:none}div#commandLine{display:none}div#commandLine input#command{font-size:100%;font-family:Courier New,Courier}div#commandLine input#evaluateButton{}*.greyedout{color:gray !important;border-color:gray !important}*.greyedout *.alwaysenabled{color:black}*.unselectable{-khtml-user-select:none;-moz-user-select:none;user-select:none}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both;position:relative}div.group{border-color:#cccccc;border-style:solid;border-width:1px 0 1px 1px;overflow:visible}div.oldIe div.group,div.oldIe div.group *,div.oldIe *.logentry{height:1%}div.group div.groupheading span.expander{border:solid black 1px;font-family:Courier New,Courier;font-size:0.833em;background-color:#eeeeee;position:relative;top:-1px;color:black;padding:0 2px;cursor:pointer;cursor:hand;height:1%}div.group div.groupcontent{margin-left:10px;padding-bottom:2px;overflow:visible}div.group div.expanded{display:block}div.group div.collapsed{display:none}*.logentry{overflow:visible;display:none;white-space:pre}span.pre{white-space:pre}pre.unwrapped{display:inline !important}pre.unwrapped pre.pre,div.wrapped pre.pre{display:inline}div.wrapped pre.pre{white-space:normal}div.wrapped{display:none}body.searching *.logentry span.currentmatch{color:white !important;background-color:green !important}body.searching div.searchhighlight *.logentry span.searchterm{color:black;background-color:yellow}div.wrap *.logentry{white-space:normal !important;border-width:0 0 1px 0;border-color:#dddddd;border-style:dotted}div.wrap #log_wrapped,#log_unwrapped{display:block}div.wrap #log_unwrapped,#log_wrapped{display:none}div.wrap *.logentry span.pre{overflow:visible;white-space:normal}div.wrap *.logentry pre.unwrapped{display:none}div.wrap *.logentry span.wrapped{display:inline}div.searchfilter *.searchnonmatch{display:none !important}div#log *.TRACE,label#label_TRACE{color:#666666}div#log *.DEBUG,label#label_DEBUG{color:green}div#log *.INFO,label#label_INFO{color:#000099}div#log *.WARN,label#label_WARN{color:#999900}div#log *.ERROR,label#label_ERROR{color:red}div#log *.FATAL,label#label_FATAL{color:#660066}div.TRACE#log *.TRACE,div.DEBUG#log *.DEBUG,div.INFO#log *.INFO,div.WARN#log *.WARN,div.ERROR#log *.ERROR,div.FATAL#log *.FATAL{display:block}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}','</style>','</head>','<body id="body">','<div id="switchesContainer">','<div id="switches">','<div id="levels" class="toolbar">','Filters:','<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>','<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>','<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>','<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>','<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>','<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>','<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>','</div>','<div id="search" class="toolbar">','<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />','<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />','<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>','<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>','<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>','<div id="searchNav">','<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />','<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />','<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>','<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>','</div>','</div>','<div id="options" class="toolbar">','Options:','<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>','<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>','<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>','<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>','<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages"  />','<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />','<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />','</div>','</div>','</div>','<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>','<div id="commandLine" class="toolbar">','<div id="commandLineContainer">','<input type="text" id="command" title="Enter a JavaScript command here and hit return or press \'Evaluate\'" />','<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />','</div>','</div>','</body>','</html>',''];};var defaultCommandLineFunctions=[];ConsoleAppender=function(){};var consoleAppenderIdCounter=1;ConsoleAppender.prototype=new Appender();ConsoleAppender.prototype.create=function(inPage,container,lazyInit,initiallyMinimized,useDocumentWrite,width,height,focusConsoleWindow){var appender=this;var initialized=false;var consoleWindowCreated=false;var consoleWindowLoaded=false;var consoleClosed=false;var queuedLoggingEvents=[];var isSupported=true;var consoleAppenderId=consoleAppenderIdCounter++;initiallyMinimized=extractBooleanFromParam(initiallyMinimized,this.defaults.initiallyMinimized);lazyInit=extractBooleanFromParam(lazyInit,this.defaults.lazyInit);useDocumentWrite=extractBooleanFromParam(useDocumentWrite,this.defaults.useDocumentWrite);var newestMessageAtTop=this.defaults.newestMessageAtTop;var scrollToLatestMessage=this.defaults.scrollToLatestMessage;width=width?width:this.defaults.width;height=height?height:this.defaults.height;var maxMessages=this.defaults.maxMessages;var showCommandLine=this.defaults.showCommandLine;var commandLineObjectExpansionDepth=this.defaults.commandLineObjectExpansionDepth;var showHideButton=this.defaults.showHideButton;var showCloseButton=this.defaults.showCloseButton;var showLogEntryDeleteButtons=this.defaults.showLogEntryDeleteButtons;this.setLayout(this.defaults.layout);var init,createWindow,safeToAppend,getConsoleWindow,open;var appenderName=inPage?"InPageAppender":"PopUpAppender";var checkCanConfigure=function(configOptionName){if(consoleWindowCreated){handleError(appenderName+": configuration option '"+configOptionName+"' may not be set after the appender has been initialized");return false;}

-return true;};var consoleWindowExists=function(){return(consoleWindowLoaded&&isSupported&&!consoleClosed);};this.isNewestMessageAtTop=function(){return newestMessageAtTop;};this.setNewestMessageAtTop=function(newestMessageAtTopParam){newestMessageAtTop=bool(newestMessageAtTopParam);if(consoleWindowExists()){getConsoleWindow().setNewestAtTop(newestMessageAtTop);}};this.isScrollToLatestMessage=function(){return scrollToLatestMessage;};this.setScrollToLatestMessage=function(scrollToLatestMessageParam){scrollToLatestMessage=bool(scrollToLatestMessageParam);if(consoleWindowExists()){getConsoleWindow().setScrollToLatest(scrollToLatestMessage);}};this.getWidth=function(){return width;};this.setWidth=function(widthParam){if(checkCanConfigure("width")){width=extractStringFromParam(widthParam,width);}};this.getHeight=function(){return height;};this.setHeight=function(heightParam){if(checkCanConfigure("height")){height=extractStringFromParam(heightParam,height);}};this.getMaxMessages=function(){return maxMessages;};this.setMaxMessages=function(maxMessagesParam){maxMessages=extractIntFromParam(maxMessagesParam,maxMessages);if(consoleWindowExists()){getConsoleWindow().setMaxMessages(maxMessages);}};this.isShowCommandLine=function(){return showCommandLine;};this.setShowCommandLine=function(showCommandLineParam){showCommandLine=bool(showCommandLineParam);if(consoleWindowExists()){getConsoleWindow().setShowCommandLine(showCommandLine);}};this.isShowHideButton=function(){return showHideButton;};this.setShowHideButton=function(showHideButtonParam){showHideButton=bool(showHideButtonParam);if(consoleWindowExists()){getConsoleWindow().setShowHideButton(showHideButton);}};this.isShowCloseButton=function(){return showCloseButton;};this.setShowCloseButton=function(showCloseButtonParam){showCloseButton=bool(showCloseButtonParam);if(consoleWindowExists()){getConsoleWindow().setShowCloseButton(showCloseButton);}};this.getCommandLineObjectExpansionDepth=function(){return commandLineObjectExpansionDepth;};this.setCommandLineObjectExpansionDepth=function(commandLineObjectExpansionDepthParam){commandLineObjectExpansionDepth=extractIntFromParam(commandLineObjectExpansionDepthParam,commandLineObjectExpansionDepth);};var minimized=initiallyMinimized;this.isInitiallyMinimized=function(){return initiallyMinimized;};this.setInitiallyMinimized=function(initiallyMinimizedParam){if(checkCanConfigure("initiallyMinimized")){initiallyMinimized=bool(initiallyMinimizedParam);minimized=initiallyMinimized;}};this.isUseDocumentWrite=function(){return useDocumentWrite;};this.setUseDocumentWrite=function(useDocumentWriteParam){if(checkCanConfigure("useDocumentWrite")){useDocumentWrite=bool(useDocumentWriteParam);}};function QueuedLoggingEvent(loggingEvent,formattedMessage){this.loggingEvent=loggingEvent;this.levelName=loggingEvent.level.name;this.formattedMessage=formattedMessage;}

-QueuedLoggingEvent.prototype.append=function(){getConsoleWindow().log(this.levelName,this.formattedMessage);};function QueuedGroup(name,initiallyExpanded){this.name=name;this.initiallyExpanded=initiallyExpanded;}

-QueuedGroup.prototype.append=function(){getConsoleWindow().group(this.name,this.initiallyExpanded);};function QueuedGroupEnd(){}

-QueuedGroupEnd.prototype.append=function(){getConsoleWindow().groupEnd();};var checkAndAppend=function(){safeToAppend();if(!initialized){init();}else if(consoleClosed&&reopenWhenClosed){createWindow();}

-if(safeToAppend()){appendQueuedLoggingEvents();}};this.append=function(loggingEvent){if(isSupported){var formattedMessage=appender.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}

-queuedLoggingEvents.push(new QueuedLoggingEvent(loggingEvent,formattedMessage));checkAndAppend();}};this.group=function(name,initiallyExpanded){if(isSupported){queuedLoggingEvents.push(new QueuedGroup(name,initiallyExpanded));checkAndAppend();}};this.groupEnd=function(){if(isSupported){queuedLoggingEvents.push(new QueuedGroupEnd());checkAndAppend();}};var appendQueuedLoggingEvents=function(){var currentLoggingEvent;while(queuedLoggingEvents.length>0){queuedLoggingEvents.shift().append();}

-if(focusConsoleWindow){getConsoleWindow().focus();}};this.setAddedToLogger=function(logger){this.loggers.push(logger);if(enabled&&!lazyInit){init();}};this.clear=function(){if(consoleWindowExists()){getConsoleWindow().clearLog();}

-queuedLoggingEvents.length=0;};this.focus=function(){if(consoleWindowExists()){getConsoleWindow().focus();}};this.focusCommandLine=function(){if(consoleWindowExists()){getConsoleWindow().focusCommandLine();}};this.focusSearch=function(){if(consoleWindowExists()){getConsoleWindow().focusSearch();}};var commandWindow=window;this.getCommandWindow=function(){return commandWindow;};this.setCommandWindow=function(commandWindowParam){commandWindow=commandWindowParam;};this.executeLastCommand=function(){if(consoleWindowExists()){getConsoleWindow().evalLastCommand();}};var commandLayout=new PatternLayout("%m");this.getCommandLayout=function(){return commandLayout;};this.setCommandLayout=function(commandLayoutParam){commandLayout=commandLayoutParam;};this.evalCommandAndAppend=function(expr){var commandReturnValue={appendResult:true,isError:false};var commandOutput="";try{var result,i;if(!commandWindow.eval&&commandWindow.execScript){commandWindow.execScript("null");}

-var commandLineFunctionsHash={};for(i=0,len=commandLineFunctions.length;i<len;i++){commandLineFunctionsHash[commandLineFunctions[i][0]]=commandLineFunctions[i][1];}

-var objectsToRestore=[];var addObjectToRestore=function(name){objectsToRestore.push([name,commandWindow[name]]);};addObjectToRestore("appender");commandWindow.appender=appender;addObjectToRestore("commandReturnValue");commandWindow.commandReturnValue=commandReturnValue;addObjectToRestore("commandLineFunctionsHash");commandWindow.commandLineFunctionsHash=commandLineFunctionsHash;var addFunctionToWindow=function(name){addObjectToRestore(name);commandWindow[name]=function(){return this.commandLineFunctionsHash[name](appender,arguments,commandReturnValue);};};for(i=0,len=commandLineFunctions.length;i<len;i++){addFunctionToWindow(commandLineFunctions[i][0]);}

-if(commandWindow===window&&commandWindow.execScript){addObjectToRestore("evalExpr");addObjectToRestore("result");window.evalExpr=expr;commandWindow.execScript("window.result=eval(window.evalExpr);");result=window.result;}else{result=commandWindow.eval(expr);}

-commandOutput=isUndefined(result)?result:formatObjectExpansion(result,commandLineObjectExpansionDepth);for(i=0,len=objectsToRestore.length;i<len;i++){commandWindow[objectsToRestore[i][0]]=objectsToRestore[i][1];}}catch(ex){commandOutput="Error evaluating command: "+getExceptionStringRep(ex);commandReturnValue.isError=true;}

-if(commandReturnValue.appendResult){var message=">>> "+expr;if(!isUndefined(commandOutput)){message+=newLine+commandOutput;}

-var level=commandReturnValue.isError?Level.ERROR:Level.INFO;var loggingEvent=new LoggingEvent(null,new Date(),level,[message],null);var mainLayout=this.getLayout();this.setLayout(commandLayout);this.append(loggingEvent);this.setLayout(mainLayout);}};var commandLineFunctions=defaultCommandLineFunctions.concat([]);this.addCommandLineFunction=function(functionName,commandLineFunction){commandLineFunctions.push([functionName,commandLineFunction]);};var commandHistoryCookieName="log4javascriptCommandHistory";this.storeCommandHistory=function(commandHistory){setCookie(commandHistoryCookieName,commandHistory.join(","));};var writeHtml=function(doc){var lines=getConsoleHtmlLines();doc.open();for(var i=0,len=lines.length;i<len;i++){doc.writeln(lines[i]);}

-doc.close();};this.setEventTypes(["load","unload"]);var consoleWindowLoadHandler=function(){var win=getConsoleWindow();win.setAppender(appender);win.setNewestAtTop(newestMessageAtTop);win.setScrollToLatest(scrollToLatestMessage);win.setMaxMessages(maxMessages);win.setShowCommandLine(showCommandLine);win.setShowHideButton(showHideButton);win.setShowCloseButton(showCloseButton);win.setMainWindow(window);var storedValue=getCookie(commandHistoryCookieName);if(storedValue){win.commandHistory=storedValue.split(",");win.currentCommandIndex=win.commandHistory.length;}

-appender.dispatchEvent("load",{"win":win});};this.unload=function(){logLog.debug("unload "+this+", caller: "+this.unload.caller);if(!consoleClosed){logLog.debug("really doing unload "+this);consoleClosed=true;consoleWindowLoaded=false;consoleWindowCreated=false;appender.dispatchEvent("unload",{});}};var pollConsoleWindow=function(windowTest,interval,successCallback,errorMessage){function doPoll(){try{if(consoleClosed){clearInterval(poll);}

-if(windowTest(getConsoleWindow())){clearInterval(poll);successCallback();}}catch(ex){clearInterval(poll);isSupported=false;handleError(errorMessage,ex);}}

-var poll=setInterval(doPoll,interval);};var getConsoleUrl=function(){var documentDomainSet=(document.domain!=location.hostname);return useDocumentWrite?"":getBaseUrl()+"console.html"+

-(documentDomainSet?"?log4javascript_domain="+escape(document.domain):"");};if(inPage){var containerElement=null;var cssProperties=[];this.addCssProperty=function(name,value){if(checkCanConfigure("cssProperties")){cssProperties.push([name,value]);}};var windowCreationStarted=false;var iframeContainerDiv;var iframeId=uniqueId+"_InPageAppender_"+consoleAppenderId;this.hide=function(){if(initialized&&consoleWindowCreated){if(consoleWindowExists()){getConsoleWindow().$("command").blur();}

-iframeContainerDiv.style.display="none";minimized=true;}};this.show=function(){if(initialized){if(consoleWindowCreated){iframeContainerDiv.style.display="block";this.setShowCommandLine(showCommandLine);minimized=false;}else if(!windowCreationStarted){createWindow(true);}}};this.isVisible=function(){return!minimized&&!consoleClosed;};this.close=function(fromButton){if(!consoleClosed&&(!fromButton||confirm("This will permanently remove the console from the page. No more messages will be logged. Do you wish to continue?"))){iframeContainerDiv.parentNode.removeChild(iframeContainerDiv);this.unload();}};open=function(){var initErrorMessage="InPageAppender.open: unable to create console iframe";function finalInit(){try{if(!initiallyMinimized){appender.show();}

-consoleWindowLoadHandler();consoleWindowLoaded=true;appendQueuedLoggingEvents();}catch(ex){isSupported=false;handleError(initErrorMessage,ex);}}

-function writeToDocument(){try{var windowTest=function(win){return isLoaded(win);};if(useDocumentWrite){writeHtml(getConsoleWindow().document);}

-if(windowTest(getConsoleWindow())){finalInit();}else{pollConsoleWindow(windowTest,100,finalInit,initErrorMessage);}}catch(ex){isSupported=false;handleError(initErrorMessage,ex);}}

-minimized=false;iframeContainerDiv=containerElement.appendChild(document.createElement("div"));iframeContainerDiv.style.width=width;iframeContainerDiv.style.height=height;iframeContainerDiv.style.border="solid gray 1px";for(var i=0,len=cssProperties.length;i<len;i++){iframeContainerDiv.style[cssProperties[i][0]]=cssProperties[i][1];}

-var iframeSrc=useDocumentWrite?"":" src='"+getConsoleUrl()+"'";iframeContainerDiv.innerHTML="<iframe id='"+iframeId+"' name='"+iframeId+"' width='100%' height='100%' frameborder='0'"+iframeSrc+" scrolling='no'></iframe>";consoleClosed=false;var iframeDocumentExistsTest=function(win){try{return bool(win)&&bool(win.document);}catch(ex){return false;}};if(iframeDocumentExistsTest(getConsoleWindow())){writeToDocument();}else{pollConsoleWindow(iframeDocumentExistsTest,100,writeToDocument,initErrorMessage);}

-consoleWindowCreated=true;};createWindow=function(show){if(show||!initiallyMinimized){var pageLoadHandler=function(){if(!container){containerElement=document.createElement("div");containerElement.style.position="fixed";containerElement.style.left="0";containerElement.style.right="0";containerElement.style.bottom="0";document.body.appendChild(containerElement);appender.addCssProperty("borderWidth","1px 0 0 0");appender.addCssProperty("zIndex",1000000);open();}else{try{var el=document.getElementById(container);if(el.nodeType==1){containerElement=el;}

-open();}catch(ex){handleError("InPageAppender.init: invalid container element '"+container+"' supplied",ex);}}};if(pageLoaded&&container&&container.appendChild){containerElement=container;open();}else if(pageLoaded){pageLoadHandler();}else{log4javascript.addEventListener("load",pageLoadHandler);}

-windowCreationStarted=true;}};init=function(){createWindow();initialized=true;};getConsoleWindow=function(){var iframe=window.frames[iframeId];if(iframe){return iframe;}};safeToAppend=function(){if(isSupported&&!consoleClosed){if(consoleWindowCreated&&!consoleWindowLoaded&&getConsoleWindow()&&isLoaded(getConsoleWindow())){consoleWindowLoaded=true;}

-return consoleWindowLoaded;}

-return false;};}else{var useOldPopUp=appender.defaults.useOldPopUp;var complainAboutPopUpBlocking=appender.defaults.complainAboutPopUpBlocking;var reopenWhenClosed=this.defaults.reopenWhenClosed;this.isUseOldPopUp=function(){return useOldPopUp;};this.setUseOldPopUp=function(useOldPopUpParam){if(checkCanConfigure("useOldPopUp")){useOldPopUp=bool(useOldPopUpParam);}};this.isComplainAboutPopUpBlocking=function(){return complainAboutPopUpBlocking;};this.setComplainAboutPopUpBlocking=function(complainAboutPopUpBlockingParam){if(checkCanConfigure("complainAboutPopUpBlocking")){complainAboutPopUpBlocking=bool(complainAboutPopUpBlockingParam);}};this.isFocusPopUp=function(){return focusConsoleWindow;};this.setFocusPopUp=function(focusPopUpParam){focusConsoleWindow=bool(focusPopUpParam);};this.isReopenWhenClosed=function(){return reopenWhenClosed;};this.setReopenWhenClosed=function(reopenWhenClosedParam){reopenWhenClosed=bool(reopenWhenClosedParam);};this.close=function(){logLog.debug("close "+this);try{popUp.close();this.unload();}catch(ex){}};this.hide=function(){logLog.debug("hide "+this);if(consoleWindowExists()){this.close();}};this.show=function(){logLog.debug("show "+this);if(!consoleWindowCreated){open();}};this.isVisible=function(){return safeToAppend();};var popUp;open=function(){var windowProperties="width="+width+",height="+height+",status,resizable";var frameInfo="";try{var frameEl=window.frameElement;if(frameEl){frameInfo="_"+frameEl.tagName+"_"+(frameEl.name||frameEl.id||"");}}catch(e){frameInfo="_inaccessibleParentFrame";}

-var windowName="PopUp_"+location.host.replace(/[^a-z0-9]/gi,"_")+"_"+consoleAppenderId+frameInfo;if(!useOldPopUp||!useDocumentWrite){windowName=windowName+"_"+uniqueId;}

-var checkPopUpClosed=function(win){if(consoleClosed){return true;}else{try{return bool(win)&&win.closed;}catch(ex){}}

-return false;};var popUpClosedCallback=function(){if(!consoleClosed){appender.unload();}};function finalInit(){getConsoleWindow().setCloseIfOpenerCloses(!useOldPopUp||!useDocumentWrite);consoleWindowLoadHandler();consoleWindowLoaded=true;appendQueuedLoggingEvents();pollConsoleWindow(checkPopUpClosed,500,popUpClosedCallback,"PopUpAppender.checkPopUpClosed: error checking pop-up window");}

-try{popUp=window.open(getConsoleUrl(),windowName,windowProperties);consoleClosed=false;consoleWindowCreated=true;if(popUp&&popUp.document){if(useDocumentWrite&&useOldPopUp&&isLoaded(popUp)){popUp.mainPageReloaded();finalInit();}else{if(useDocumentWrite){writeHtml(popUp.document);}

-var popUpLoadedTest=function(win){return bool(win)&&isLoaded(win);};if(isLoaded(popUp)){finalInit();}else{pollConsoleWindow(popUpLoadedTest,100,finalInit,"PopUpAppender.init: unable to create console window");}}}else{isSupported=false;logLog.warn("PopUpAppender.init: pop-ups blocked, please unblock to use PopUpAppender");if(complainAboutPopUpBlocking){handleError("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");}}}catch(ex){handleError("PopUpAppender.init: error creating pop-up",ex);}};createWindow=function(){if(!initiallyMinimized){open();}};init=function(){createWindow();initialized=true;};getConsoleWindow=function(){return popUp;};safeToAppend=function(){if(isSupported&&!isUndefined(popUp)&&!consoleClosed){if(popUp.closed||(consoleWindowLoaded&&isUndefined(popUp.closed))){appender.unload();logLog.debug("PopUpAppender: pop-up closed");return false;}

-if(!consoleWindowLoaded&&isLoaded(popUp)){consoleWindowLoaded=true;}}

-return isSupported&&consoleWindowLoaded&&!consoleClosed;};}

-this.getConsoleWindow=getConsoleWindow;};ConsoleAppender.addGlobalCommandLineFunction=function(functionName,commandLineFunction){defaultCommandLineFunctions.push([functionName,commandLineFunction]);};function PopUpAppender(lazyInit,initiallyMinimized,useDocumentWrite,width,height){this.create(false,null,lazyInit,initiallyMinimized,useDocumentWrite,width,height,this.defaults.focusPopUp);}

-PopUpAppender.prototype=new ConsoleAppender();PopUpAppender.prototype.defaults={layout:new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),initiallyMinimized:false,focusPopUp:false,lazyInit:true,useOldPopUp:true,complainAboutPopUpBlocking:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:"600",height:"400",reopenWhenClosed:false,maxMessages:null,showCommandLine:true,commandLineObjectExpansionDepth:1,showHideButton:false,showCloseButton:true,showLogEntryDeleteButtons:true,useDocumentWrite:true};PopUpAppender.prototype.toString=function(){return"PopUpAppender";};log4javascript.PopUpAppender=PopUpAppender;function InPageAppender(container,lazyInit,initiallyMinimized,useDocumentWrite,width,height){this.create(true,container,lazyInit,initiallyMinimized,useDocumentWrite,width,height,false);}

-InPageAppender.prototype=new ConsoleAppender();InPageAppender.prototype.defaults={layout:new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),initiallyMinimized:false,lazyInit:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:"100%",height:"220px",maxMessages:null,showCommandLine:true,commandLineObjectExpansionDepth:1,showHideButton:false,showCloseButton:false,showLogEntryDeleteButtons:true,useDocumentWrite:true};InPageAppender.prototype.toString=function(){return"InPageAppender";};log4javascript.InPageAppender=InPageAppender;log4javascript.InlineAppender=InPageAppender;})();function padWithSpaces(str,len){if(str.length<len){var spaces=[];var numberOfSpaces=Math.max(0,len-str.length);for(var i=0;i<numberOfSpaces;i++){spaces[i]=" ";}

-str+=spaces.join("");}

-return str;}

-(function(){function dir(obj){var maxLen=0;for(var p in obj){maxLen=Math.max(toStr(p).length,maxLen);}

-var propList=[];for(p in obj){var propNameStr="  "+padWithSpaces(toStr(p),maxLen+2);var propVal;try{propVal=splitIntoLines(toStr(obj[p])).join(padWithSpaces(newLine,maxLen+6));}catch(ex){propVal="[Error obtaining property. Details: "+getExceptionMessage(ex)+"]";}

-propList.push(propNameStr+propVal);}

-return propList.join(newLine);}

-var nodeTypes={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12};var preFormattedElements=["script","pre"];var emptyElements=["br","img","hr","param","link","area","input","col","base","meta"];var indentationUnit="  ";function getXhtml(rootNode,includeRootNode,indentation,startNewLine,preformatted){includeRootNode=(typeof includeRootNode=="undefined")?true:!!includeRootNode;if(typeof indentation!="string"){indentation="";}

-startNewLine=!!startNewLine;preformatted=!!preformatted;var xhtml;function isWhitespace(node){return((node.nodeType==nodeTypes.TEXT_NODE)&&/^[ \t\r\n]*$/.test(node.nodeValue));}

-function fixAttributeValue(attrValue){return attrValue.toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/"/g,"&quot;");}

-function getStyleAttributeValue(el){var stylePairs=el.style.cssText.split(";");var styleValue="";var isFirst=true;for(var j=0,len=stylePairs.length;j<len;j++){var nameValueBits=stylePairs[j].split(":");var props=[];if(!/^\s*$/.test(nameValueBits[0])){props.push(trim(nameValueBits[0]).toLowerCase()+":"+trim(nameValueBits[1]));}

-styleValue=props.join(";");}

-return styleValue;}

-function getNamespace(el){if(el.prefix){return el.prefix;}else if(el.outerHTML){var regex=new RegExp("<([^:]+):"+el.tagName+"[^>]*>","i");if(regex.test(el.outerHTML)){return RegExp.$1.toLowerCase();}}

-return"";}

-var lt="<";var gt=">";if(includeRootNode&&rootNode.nodeType!=nodeTypes.DOCUMENT_FRAGMENT_NODE){switch(rootNode.nodeType){case nodeTypes.ELEMENT_NODE:var tagName=rootNode.tagName.toLowerCase();xhtml=startNewLine?newLine+indentation:"";xhtml+=lt;var prefix=getNamespace(rootNode);var hasPrefix=!!prefix;if(hasPrefix){xhtml+=prefix+":";}

-xhtml+=tagName;for(i=0,len=rootNode.attributes.length;i<len;i++){var currentAttr=rootNode.attributes[i];if(!currentAttr.specified||currentAttr.nodeValue===null||currentAttr.nodeName.toLowerCase()==="style"||typeof currentAttr.nodeValue!=="string"||currentAttr.nodeName.indexOf("_moz")===0){continue;}

-xhtml+=" "+currentAttr.nodeName.toLowerCase()+"=\"";xhtml+=fixAttributeValue(currentAttr.nodeValue);xhtml+="\"";}

-if(rootNode.style.cssText){var styleValue=getStyleAttributeValue(rootNode);if(styleValue!==""){xhtml+=" style=\""+getStyleAttributeValue(rootNode)+"\"";}}

-if(array_contains(emptyElements,tagName)||(hasPrefix&&!rootNode.hasChildNodes())){xhtml+="/"+gt;}else{xhtml+=gt;var childStartNewLine=!(rootNode.childNodes.length===1&&rootNode.childNodes[0].nodeType===nodeTypes.TEXT_NODE);var childPreformatted=array_contains(preFormattedElements,tagName);for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation+indentationUnit,childStartNewLine,childPreformatted);}

-var endTag=lt+"/"+tagName+gt;xhtml+=childStartNewLine?newLine+indentation+endTag:endTag;}

-return xhtml;case nodeTypes.TEXT_NODE:if(isWhitespace(rootNode)){xhtml="";}else{if(preformatted){xhtml=rootNode.nodeValue;}else{var lines=splitIntoLines(trim(rootNode.nodeValue));var trimmedLines=[];for(var i=0,len=lines.length;i<len;i++){trimmedLines[i]=trim(lines[i]);}

-xhtml=trimmedLines.join(newLine+indentation);}

-if(startNewLine){xhtml=newLine+indentation+xhtml;}}

-return xhtml;case nodeTypes.CDATA_SECTION_NODE:return"<![CDA"+"TA["+rootNode.nodeValue+"]"+"]>"+newLine;case nodeTypes.DOCUMENT_NODE:xhtml="";for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation);}

-return xhtml;default:return"";}}else{xhtml="";for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation+indentationUnit);}

-return xhtml;}}

-function createCommandLineFunctions(){ConsoleAppender.addGlobalCommandLineFunction("$",function(appender,args,returnValue){return document.getElementById(args[0]);});ConsoleAppender.addGlobalCommandLineFunction("dir",function(appender,args,returnValue){var lines=[];for(var i=0,len=args.length;i<len;i++){lines[i]=dir(args[i]);}

-return lines.join(newLine+newLine);});ConsoleAppender.addGlobalCommandLineFunction("dirxml",function(appender,args,returnValue){var lines=[];for(var i=0,len=args.length;i<len;i++){var win=appender.getCommandWindow();lines[i]=getXhtml(args[i]);}

-return lines.join(newLine+newLine);});ConsoleAppender.addGlobalCommandLineFunction("cd",function(appender,args,returnValue){var win,message;if(args.length===0||args[0]===""){win=window;message="Command line set to run in main window";}else{if(args[0].window==args[0]){win=args[0];message="Command line set to run in frame '"+args[0].name+"'";}else{win=window.frames[args[0]];if(win){message="Command line set to run in frame '"+args[0]+"'";}else{returnValue.isError=true;message="Frame '"+args[0]+"' does not exist";win=appender.getCommandWindow();}}}

-appender.setCommandWindow(win);return message;});ConsoleAppender.addGlobalCommandLineFunction("clear",function(appender,args,returnValue){returnValue.appendResult=false;appender.clear();});ConsoleAppender.addGlobalCommandLineFunction("keys",function(appender,args,returnValue){var keys=[];for(var k in args[0]){keys.push(k);}

-return keys;});ConsoleAppender.addGlobalCommandLineFunction("values",function(appender,args,returnValue){var values=[];for(var k in args[0]){try{values.push(args[0][k]);}catch(ex){logLog.warn("values(): Unable to obtain value for key "+k+". Details: "+getExceptionMessage(ex));}}

-return values;});ConsoleAppender.addGlobalCommandLineFunction("expansionDepth",function(appender,args,returnValue){var expansionDepth=parseInt(args[0],10);if(isNaN(expansionDepth)||expansionDepth<0){returnValue.isError=true;return""+args[0]+" is not a valid expansion depth";}else{appender.setCommandLineObjectExpansionDepth(expansionDepth);return"Object expansion depth set to "+expansionDepth;}});}

-function init(){createCommandLineFunctions();}

-init();})();log4javascript.setDocumentReady=function(){pageLoaded=true;log4javascript.dispatchEvent("load",{});};if(window.addEventListener){window.addEventListener("load",log4javascript.setDocumentReady,false);}else if(window.attachEvent){window.attachEvent("onload",log4javascript.setDocumentReady);}else{var oldOnload=window.onload;if(typeof window.onload!="function"){window.onload=log4javascript.setDocumentReady;}else{window.onload=function(evt){if(oldOnload){oldOnload(evt);}

-log4javascript.setDocumentReady();};}}

-window.log4javascript=log4javascript;return log4javascript;})();

diff --git a/xos/core/static/log4javascript-1.4.6/js/log4javascript_lite.js b/xos/core/static/log4javascript-1.4.6/js/log4javascript_lite.js
deleted file mode 100644
index 0d6046e..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/log4javascript_lite.js
+++ /dev/null
@@ -1,73 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-

-if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}

-this.length--;return firstItem;}};}

-var log4javascript;(function(){var newLine="\r\n";function Log4JavaScript(){}

-log4javascript=new Log4JavaScript();log4javascript.version="1.4.6";log4javascript.edition="log4javascript_lite";function getExceptionMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}else{return String(ex);}}

-function getUrlFileName(url){var lastSlashIndex=Math.max(url.lastIndexOf("/"),url.lastIndexOf("\\"));return url.substr(lastSlashIndex+1);}

-function getExceptionStringRep(ex){if(ex){var exStr="Exception: "+getExceptionMessage(ex);try{if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber;}

-if(ex.fileName){exStr+=" in file "+getUrlFileName(ex.fileName);}}catch(localEx){}

-if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack;}

-return exStr;}

-return null;}

-function isError(err){return(err instanceof Error);}

-function bool(obj){return Boolean(obj);}

-var enabled=(typeof log4javascript_disabled!="undefined")&&log4javascript_disabled?false:true;log4javascript.setEnabled=function(enable){enabled=bool(enable);};log4javascript.isEnabled=function(){return enabled;};var showStackTraces=false;log4javascript.setShowStackTraces=function(show){showStackTraces=bool(show);};var Level=function(level,name){this.level=level;this.name=name;};Level.prototype={toString:function(){return this.name;},equals:function(level){return this.level==level.level;},isGreaterOrEqual:function(level){return this.level>=level.level;}};Level.ALL=new Level(Number.MIN_VALUE,"ALL");Level.TRACE=new Level(10000,"TRACE");Level.DEBUG=new Level(20000,"DEBUG");Level.INFO=new Level(30000,"INFO");Level.WARN=new Level(40000,"WARN");Level.ERROR=new Level(50000,"ERROR");Level.FATAL=new Level(60000,"FATAL");Level.OFF=new Level(Number.MAX_VALUE,"OFF");log4javascript.Level=Level;function Appender(){var getConsoleHtmlLines=function(){return['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">','<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">','<head>','<title>log4javascript</title>','<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />','<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->','<meta http-equiv="X-UA-Compatible" content="IE=7" />','<script type="text/javascript">','//<![CDATA[','var loggingEnabled=true;var messagesBeforeDocLoaded=[];function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}','function setLoggingEnabled(enable){loggingEnabled=enable;}','function scrollToLatestEntry(){var l=getLogContainer();if(typeof l.scrollTop!="undefined"){var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}','function log(logLevel,formattedMessage){if(loggingEnabled){if(loaded){doLog(logLevel,formattedMessage);}else{messagesBeforeDocLoaded.push([logLevel,formattedMessage]);}}}','function doLog(logLevel,formattedMessage){var logEntry=document.createElement("div");logEntry.appendChild(document.createTextNode(formattedMessage));logEntry.className="logentry "+logLevel.name;getLogContainer().appendChild(logEntry);scrollToLatestEntry();}','function mainPageReloaded(){var separator=document.createElement("div");separator.className="separator";separator.innerHTML="&nbsp;";getLogContainer().appendChild(separator);}','var loaded=false;var logLevels=["DEBUG","INFO","WARN","ERROR","FATAL"];window.onload=function(){setLogContainerHeight();toggleLoggingEnabled();for(var i=0;i<messagesBeforeDocLoaded.length;i++){doLog(messagesBeforeDocLoaded[i][0],messagesBeforeDocLoaded[i][1]);}','messagesBeforeDocLoaded=[];loaded=true;setTimeout(setLogContainerHeight,20);};function getLogContainer(){return $("log");}','function clearLog(){getLogContainer().innerHTML="";}','function $(id){return document.getElementById(id);}','function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}','return 0;}','function getChromeHeight(){return $("toolbar").offsetHeight;}','function setLogContainerHeight(){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";getLogContainer().style.height=""+','Math.max(0,windowHeight-getChromeHeight())+"px";}','window.onresize=function(){setLogContainerHeight();};','//]]>','</script>','<style type="text/css">','body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div#toolbar input.button{padding:0 5px;font-size:100%}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both}*.logentry{overflow:visible;white-space:pre}*.TRACE{color:#666666}*.DEBUG{color:green}*.INFO{color:#000099}*.WARN{color:#999900}*.ERROR{color:red}*.FATAL{color:#660066}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}','</style>','</head>','<body id="body">','<div id="toolbar">','Options:','<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" class="stateful" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Enable logging</label>','<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="stateful button" title="Clear all log messages"  />','<input type="button" id="closeButton" value="Close" onclick="window.close()" class="stateful button" title="Close the window" />','</div>','<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>','</body>','</html>'];};var popUp=null;var popUpsBlocked=false;var popUpClosed=false;var popUpLoaded=false;var complainAboutPopUpBlocking=true;var initialized=false;var isSupported=true;var width=600;var height=400;var focusPopUp=false;var queuedLoggingEvents=new Array();function isLoaded(win){try{return bool(win.loaded);}catch(ex){return false;}}

-function finalInit(){popUpLoaded=true;appendQueuedLoggingEvents();}

-function writeHtml(doc){var lines=getConsoleHtmlLines();doc.open();for(var i=0,len=lines.length;i<len;i++){doc.writeln(lines[i]);}

-doc.close();}

-function pollConsoleWindow(){function pollConsoleWindowLoaded(){if(popUpLoaded){clearInterval(poll);}else if(bool(popUp)&&isLoaded(popUp)){clearInterval(poll);finalInit();}}

-var poll=setInterval(pollConsoleWindowLoaded,100);}

-function init(){var windowProperties="width="+width+",height="+height+",status,resizable";var windowName="log4javascriptLitePopUp"+location.host.replace(/[^a-z0-9]/gi,"_");popUp=window.open("",windowName,windowProperties);popUpClosed=false;if(popUp){if(isLoaded(popUp)){popUp.mainPageReloaded();finalInit();}else{writeHtml(popUp.document);if(isLoaded(popUp)){finalInit();}else{pollConsoleWindow();}}}else{isSupported=false;if(complainAboutPopUpBlocking){alert("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");}}

-initialized=true;}

-function safeToAppend(){if(!popUpsBlocked&&!popUpClosed){if(popUp.closed){popUpClosed=true;return false;}

-if(!popUpLoaded&&popUp.loaded){popUpLoaded=true;}}

-return!popUpsBlocked&&popUpLoaded&&!popUpClosed;}

-function padWithZeroes(num,len){var str=""+num;while(str.length<len){str="0"+str;}

-return str;}

-function padWithSpaces(str,len){while(str.length<len){str+=" ";}

-return str;}

-this.append=function(loggingEvent){if(!initialized){init();}

-queuedLoggingEvents.push(loggingEvent);if(safeToAppend()){appendQueuedLoggingEvents();}};function appendQueuedLoggingEvents(){if(safeToAppend()){while(queuedLoggingEvents.length>0){var currentLoggingEvent=queuedLoggingEvents.shift();var date=currentLoggingEvent.timeStamp;var formattedDate=padWithZeroes(date.getHours(),2)+":"+

-padWithZeroes(date.getMinutes(),2)+":"+padWithZeroes(date.getSeconds(),2);var formattedMessage=formattedDate+" "+padWithSpaces(currentLoggingEvent.level.name,5)+" - "+currentLoggingEvent.getCombinedMessages();var throwableStringRep=currentLoggingEvent.getThrowableStrRep();if(throwableStringRep){formattedMessage+=newLine+throwableStringRep;}

-popUp.log(currentLoggingEvent.level,formattedMessage);}

-if(focusPopUp){popUp.focus();}}}}

-log4javascript.Appender=Appender;function Logger(){var appender=new Appender();var loggerLevel=Level.ALL;this.log=function(level,params){if(enabled&&level.isGreaterOrEqual(this.getLevel())){var exception;var finalParamIndex=params.length-1;var lastParam=params[params.length-1];if(params.length>1&&isError(lastParam)){exception=lastParam;finalParamIndex--;}

-var messages=[];for(var i=0;i<=finalParamIndex;i++){messages[i]=params[i];}

-var loggingEvent=new LoggingEvent(this,new Date(),level,messages,exception);appender.append(loggingEvent);}};this.setLevel=function(level){loggerLevel=level;};this.getLevel=function(){return loggerLevel;};}

-Logger.prototype={trace:function(){this.log(Level.TRACE,arguments);},debug:function(){this.log(Level.DEBUG,arguments);},info:function(){this.log(Level.INFO,arguments);},warn:function(){this.log(Level.WARN,arguments);},error:function(){this.log(Level.ERROR,arguments);},fatal:function(){this.log(Level.FATAL,arguments);},isEnabledFor:function(level){return level.isGreaterOrEqual(this.getLevel());},isTraceEnabled:function(){return this.isEnabledFor(Level.TRACE);},isDebugEnabled:function(){return this.isEnabledFor(Level.DEBUG);},isInfoEnabled:function(){return this.isEnabledFor(Level.INFO);},isWarnEnabled:function(){return this.isEnabledFor(Level.WARN);},isErrorEnabled:function(){return this.isEnabledFor(Level.ERROR);},isFatalEnabled:function(){return this.isEnabledFor(Level.FATAL);}};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=new Logger();}

-return defaultLogger;};log4javascript.getLogger=log4javascript.getDefaultLogger;var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=new Logger();nullLogger.setLevel(Level.OFF);}

-return nullLogger;};var LoggingEvent=function(logger,timeStamp,level,messages,exception){this.logger=logger;this.timeStamp=timeStamp;this.level=level;this.messages=messages;this.exception=exception;};LoggingEvent.prototype={getThrowableStrRep:function(){return this.exception?getExceptionStringRep(this.exception):"";},getCombinedMessages:function(){return(this.messages.length===1)?this.messages[0]:this.messages.join(newLine);}};log4javascript.LoggingEvent=LoggingEvent;window.log4javascript=log4javascript;})();

diff --git a/xos/core/static/log4javascript-1.4.6/js/log4javascript_lite_uncompressed.js b/xos/core/static/log4javascript-1.4.6/js/log4javascript_lite_uncompressed.js
deleted file mode 100644
index 15be858..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/log4javascript_lite_uncompressed.js
+++ /dev/null
@@ -1,638 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-if (!Array.prototype.shift) {

-	Array.prototype.shift = function() {

-		if (this.length > 0) {

-			var firstItem = this[0];

-			for (var i = 0, len = this.length - 1; i < len; i++) {

-				this[i] = this[i + 1];

-			}

-			this.length--;

-			return firstItem;

-		}

-	};

-}

-

-var log4javascript;

-

-(function() {

-	var newLine = "\r\n";

-	function Log4JavaScript() {}

-	log4javascript = new Log4JavaScript();

-	log4javascript.version = "1.4.6";

-	log4javascript.edition = "log4javascript_lite";

-

-	function getExceptionMessage(ex) {

-		if (ex.message) {

-			return ex.message;

-		} else if (ex.description) {

-			return ex.description;

-		} else {

-			return String(ex);

-		}

-	}

-

-	// Gets the portion of the URL after the last slash

-	function getUrlFileName(url) {

-		var lastSlashIndex = Math.max(url.lastIndexOf("/"), url.lastIndexOf("\\"));

-		return url.substr(lastSlashIndex + 1);

-	}

-

-	// Returns a nicely formatted representation of an error

-	function getExceptionStringRep(ex) {

-		if (ex) {

-			var exStr = "Exception: " + getExceptionMessage(ex);

-			try {

-				if (ex.lineNumber) {

-					exStr += " on line number " + ex.lineNumber;

-				}

-				if (ex.fileName) {

-					exStr += " in file " + getUrlFileName(ex.fileName);

-				}

-			} catch (localEx) {

-			}

-			if (showStackTraces && ex.stack) {

-				exStr += newLine + "Stack trace:" + newLine + ex.stack;

-			}

-			return exStr;

-		}

-		return null;

-	}

-

-	function isError(err) {

-		return (err instanceof Error);

-	}

-

-	function bool(obj) {

-		return Boolean(obj);

-	}

-

-	var enabled = (typeof log4javascript_disabled != "undefined") &&

-		log4javascript_disabled ? false : true;

-

-	log4javascript.setEnabled = function(enable) {

-		enabled = bool(enable);

-	};

-

-	log4javascript.isEnabled = function() {

-		return enabled;

-	};

-

-	var showStackTraces = false;

-

-	log4javascript.setShowStackTraces = function(show) {

-		showStackTraces = bool(show);

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Levels

-

-	var Level = function(level, name) {

-		this.level = level;

-		this.name = name;

-	};

-

-	Level.prototype = {

-		toString: function() {

-			return this.name;

-		},

-		equals: function(level) {

-			return this.level == level.level;

-		},

-		isGreaterOrEqual: function(level) {

-			return this.level >= level.level;

-		}

-	};

-

-	Level.ALL = new Level(Number.MIN_VALUE, "ALL");

-	Level.TRACE = new Level(10000, "TRACE");

-	Level.DEBUG = new Level(20000, "DEBUG");

-	Level.INFO = new Level(30000, "INFO");

-	Level.WARN = new Level(40000, "WARN");

-	Level.ERROR = new Level(50000, "ERROR");

-	Level.FATAL = new Level(60000, "FATAL");

-	Level.OFF = new Level(Number.MAX_VALUE, "OFF");

-

-	log4javascript.Level = Level;

-

-	/* ---------------------------------------------------------------------- */

-	// Appenders

-

-	function Appender() {

-		var getConsoleHtmlLines = function() {

-			return [

-'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',

-'<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">',

-'	<head>',

-'		<title>log4javascript</title>',

-'		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />',

-'		<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->',

-'		<meta http-equiv="X-UA-Compatible" content="IE=7" />',

-'		<script type="text/javascript">',

-'			//<![CDATA[',

-'			var loggingEnabled = true;',

-'			var messagesBeforeDocLoaded = [];',

-'',

-'			function toggleLoggingEnabled() {',

-'				setLoggingEnabled($("enableLogging").checked);',

-'			}',

-'',

-'			function setLoggingEnabled(enable) {',

-'				loggingEnabled = enable;',

-'			}',

-'',

-'			function scrollToLatestEntry() {',

-'				var l = getLogContainer();',

-'				if (typeof l.scrollTop != "undefined") {',

-'					var latestLogEntry = l.lastChild;',

-'					if (latestLogEntry) {',

-'						l.scrollTop = l.scrollHeight;',

-'					}',

-'				}',

-'			}',

-'',

-'			function log(logLevel, formattedMessage) {',

-'				if (loggingEnabled) {',

-'					if (loaded) {',

-'						doLog(logLevel, formattedMessage);',

-'					} else {',

-'						messagesBeforeDocLoaded.push([logLevel, formattedMessage]);',

-'					}',

-'				}',

-'			}',

-'',

-'			function doLog(logLevel, formattedMessage) {',

-'				var logEntry = document.createElement("div");',

-'				logEntry.appendChild(document.createTextNode(formattedMessage));',

-'				logEntry.className = "logentry " + logLevel.name;',

-'				getLogContainer().appendChild(logEntry);',

-'				scrollToLatestEntry();',

-'			}',

-'',

-'			function mainPageReloaded() {',

-'				var separator = document.createElement("div");',

-'				separator.className = "separator";',

-'				separator.innerHTML = "&nbsp;";',

-'				getLogContainer().appendChild(separator);',

-'			}',

-'',

-'			var loaded = false;',

-'			var logLevels = ["DEBUG", "INFO", "WARN", "ERROR", "FATAL"];',

-'',

-'			window.onload = function() {',

-'				setLogContainerHeight();',

-'				toggleLoggingEnabled();',

-'				for (var i = 0; i < messagesBeforeDocLoaded.length; i++) {',

-'					doLog(messagesBeforeDocLoaded[i][0], messagesBeforeDocLoaded[i][1]);',

-'				}',

-'				messagesBeforeDocLoaded = [];',

-'				loaded = true;',

-'',

-'				// Workaround to make sure log div starts at the correct size',

-'				setTimeout(setLogContainerHeight, 20);',

-'			};',

-'',

-'			function getLogContainer() {',

-'				return $("log");',

-'			}',

-'',

-'			function clearLog() {',

-'				getLogContainer().innerHTML = "";',

-'			}',

-'',

-'			/* ------------------------------------------------------------------------- */',

-'',

-'			// Other utility functions',

-'',

-'			// Syntax borrowed from Prototype library',

-'			function $(id) {',

-'				return document.getElementById(id);',

-'			}',

-'',

-'			function getWindowHeight() {',

-'				if (window.innerHeight) {',

-'					return window.innerHeight;',

-'				} else if (document.documentElement && document.documentElement.clientHeight) {',

-'					return document.documentElement.clientHeight;',

-'				} else if (document.body) {',

-'					return document.body.clientHeight;',

-'				}',

-'				return 0;',

-'			}',

-'',

-'			function getChromeHeight() {',

-'				return $("toolbar").offsetHeight;',

-'			}',

-'',

-'			function setLogContainerHeight() {',

-'				var windowHeight = getWindowHeight();',

-'				$("body").style.height = getWindowHeight() + "px";',

-'				getLogContainer().style.height = "" +',

-'					Math.max(0, windowHeight - getChromeHeight()) + "px";',

-'			}',

-'',

-'			window.onresize = function() {',

-'				setLogContainerHeight();',

-'			};',

-'',

-'			//]]>',

-'		</script>',

-'		<style type="text/css">',

-'			body {',

-'				background-color: white;',

-'				color: black;',

-'				padding: 0;',

-'				margin: 0;',

-'				font-family: tahoma, verdana, arial, helvetica, sans-serif;',

-'				overflow: hidden;',

-'			}',

-'			',

-'			div#toolbar {',

-'				border-top: solid #ffffff 1px;',

-'				border-bottom: solid #aca899 1px;',

-'				background-color: #f1efe7;',

-'				padding: 3px 5px;',

-'				font-size: 68.75%;',

-'			}',

-'',

-'			div#toolbar input.button {',

-'				padding: 0 5px;',

-'				font-size: 100%;',

-'			}',

-'',

-'			div#log {',

-'				font-family: Courier New, Courier;',

-'				font-size: 75%;',

-'				width: 100%;',

-'				overflow: auto;',

-'				clear: both;',

-'			}',

-'',

-'			*.logentry {',

-'				overflow: visible;',

-'				white-space: pre;',

-'			}',

-'',

-'			*.TRACE {',

-'				color: #666666;',

-'			}',

-'',

-'			*.DEBUG {',

-'				color: green;',

-'			}',

-'',

-'			*.INFO {',

-'				color: #000099;',

-'			}',

-'',

-'			*.WARN {',

-'				color: #999900;',

-'			}',

-'',

-'			*.ERROR {',

-'				color: red;',

-'			}',

-'',

-'			*.FATAL {',

-'				color: #660066;',

-'			}',

-'',

-'			div#log div.separator {',

-'				background-color: #cccccc;',

-'				margin: 5px 0;',

-'				line-height: 1px;',

-'			}',

-'		</style>',

-'	</head>',

-'',

-'	<body id="body">',

-'		<div id="toolbar">',

-'			Options:',

-'			<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" class="stateful" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Enable logging</label>',

-'			<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="stateful button" title="Clear all log messages"  />',

-'			<input type="button" id="closeButton" value="Close" onclick="window.close()" class="stateful button" title="Close the window" />',

-'		</div>',

-'		<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>',

-'	</body>',

-'</html>'

-];

-		};

-

-		var popUp = null;

-		var popUpsBlocked = false;

-		var popUpClosed = false;

-		var popUpLoaded = false;

-		var complainAboutPopUpBlocking = true;

-		var initialized = false;

-		var isSupported = true;

-		var width = 600;

-		var height = 400;

-		var focusPopUp = false;

-		var queuedLoggingEvents = new Array();

-

-		function isLoaded(win) {

-			try {

-				return bool(win.loaded);

-			} catch (ex) {

-				return false;

-			}

-		}

-

-		function finalInit() {

-			popUpLoaded = true;

-			appendQueuedLoggingEvents();

-		}

-

-		function writeHtml(doc) {

-			var lines = getConsoleHtmlLines();

-			doc.open();

-			for (var i = 0, len = lines.length; i < len; i++) {

-				doc.writeln(lines[i]);

-			}

-			doc.close();

-		}

-

-		function pollConsoleWindow() {

-			function pollConsoleWindowLoaded() {

-				if (popUpLoaded) {

-					clearInterval(poll);

-				} else if (bool(popUp) && isLoaded(popUp)) {

-					clearInterval(poll);

-					finalInit();

-				}

-			}

-

-			// Poll the pop-up since the onload event is not reliable

-			var poll = setInterval(pollConsoleWindowLoaded, 100);

-		}

-

-		function init() {

-			var windowProperties = "width=" + width + ",height=" + height + ",status,resizable";

-			var windowName = "log4javascriptLitePopUp" + location.host.replace(/[^a-z0-9]/gi, "_");

-

-			popUp = window.open("", windowName, windowProperties);

-			popUpClosed = false;

-			if (popUp) {

-				if (isLoaded(popUp)) {

-					popUp.mainPageReloaded();

-					finalInit();

-				} else {

-					writeHtml(popUp.document);

-

-					// Check if the pop-up window object is available

-					if (isLoaded(popUp)) {

-						finalInit();

-					} else {

-						pollConsoleWindow();

-					}

-				}

-			} else {

-				isSupported = false;

-				if (complainAboutPopUpBlocking) {

-					alert("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");

-				}

-			}

-			initialized = true;

-		}

-

-		function safeToAppend() {

-			if (!popUpsBlocked && !popUpClosed) {

-				if (popUp.closed) {

-					popUpClosed = true;

-					return false;

-				}

-				if (!popUpLoaded && popUp.loaded) {

-					popUpLoaded = true;

-				}

-			}

-			return !popUpsBlocked && popUpLoaded && !popUpClosed;

-		}

-

-		function padWithZeroes(num, len) {

-			var str = "" + num;

-			while (str.length < len) {

-				str = "0" + str;

-			}

-			return str;

-		}

-

-		function padWithSpaces(str, len) {

-			while (str.length < len) {

-				str += " ";

-			}

-			return str;

-		}

-

-		this.append = function(loggingEvent) {

-			if (!initialized) {

-				init();

-			}

-			queuedLoggingEvents.push(loggingEvent);

-			if (safeToAppend()) {

-				appendQueuedLoggingEvents();

-			}

-		};

-

-		function appendQueuedLoggingEvents() {

-			if (safeToAppend()) {

-				while (queuedLoggingEvents.length > 0) {

-					var currentLoggingEvent = queuedLoggingEvents.shift();

-					var date = currentLoggingEvent.timeStamp;

-					var formattedDate = padWithZeroes(date.getHours(), 2) + ":" +

-						padWithZeroes(date.getMinutes(), 2) + ":" + padWithZeroes(date.getSeconds(), 2);

-					var formattedMessage = formattedDate + " " + padWithSpaces(currentLoggingEvent.level.name, 5) +

-						" - " + currentLoggingEvent.getCombinedMessages();

-					var throwableStringRep = currentLoggingEvent.getThrowableStrRep();

-					if (throwableStringRep) {

-						formattedMessage += newLine + throwableStringRep;

-					}

-					popUp.log(currentLoggingEvent.level, formattedMessage);

-				}

-				if (focusPopUp) {

-					popUp.focus();

-				}

-			}

-		}

-	}

-

-	log4javascript.Appender = Appender;

-

-	/* ---------------------------------------------------------------------- */

-	// Loggers

-

-	function Logger() {

-		var appender = new Appender();

-		var loggerLevel = Level.ALL;

-

-		this.log = function(level, params) {

-			if (enabled && level.isGreaterOrEqual(this.getLevel())) {

-				// Check whether last param is an exception

-				var exception;

-				var finalParamIndex = params.length - 1;

-				var lastParam = params[params.length - 1];

-				if (params.length > 1 && isError(lastParam)) {

-					exception = lastParam;

-					finalParamIndex--;

-				}

-

-				// Construct genuine array for the params

-				var messages = [];

-				for (var i = 0; i <= finalParamIndex; i++) {

-					messages[i] = params[i];

-				}

-

-				var loggingEvent = new LoggingEvent(

-					this, new Date(), level, messages, exception);

-

-				appender.append(loggingEvent);

-			}

-		};

-

-		this.setLevel = function(level) {

-			loggerLevel = level;

-		};

-

-		this.getLevel = function() {

-			return loggerLevel;

-		};

-	}

-

-	Logger.prototype = {

-		trace: function() {

-			this.log(Level.TRACE, arguments);

-		},

-

-		debug: function() {

-			this.log(Level.DEBUG, arguments);

-		},

-

-		info: function() {

-			this.log(Level.INFO, arguments);

-		},

-

-		warn: function() {

-			this.log(Level.WARN, arguments);

-		},

-

-		error: function() {

-			this.log(Level.ERROR, arguments);

-		},

-

-		fatal: function() {

-			this.log(Level.FATAL, arguments);

-		},

-

-		isEnabledFor: function(level) {

-			return level.isGreaterOrEqual(this.getLevel());

-		},

-

-		isTraceEnabled: function() {

-			return this.isEnabledFor(Level.TRACE);

-		},

-

-		isDebugEnabled: function() {

-			return this.isEnabledFor(Level.DEBUG);

-		},

-

-		isInfoEnabled: function() {

-			return this.isEnabledFor(Level.INFO);

-		},

-

-		isWarnEnabled: function() {

-			return this.isEnabledFor(Level.WARN);

-		},

-

-		isErrorEnabled: function() {

-			return this.isEnabledFor(Level.ERROR);

-		},

-

-		isFatalEnabled: function() {

-			return this.isEnabledFor(Level.FATAL);

-		}

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Logger access methods

-

-	var defaultLogger = null;

-	log4javascript.getDefaultLogger = function() {

-		if (!defaultLogger) {

-			defaultLogger = new Logger();

-		}

-		return defaultLogger;

-	};

-

-	log4javascript.getLogger = log4javascript.getDefaultLogger;

-

-	var nullLogger = null;

-	log4javascript.getNullLogger = function() {

-		if (!nullLogger) {

-			nullLogger = new Logger();

-			nullLogger.setLevel(Level.OFF);

-		}

-		return nullLogger;

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Logging events

-

-	var LoggingEvent = function(logger, timeStamp, level, messages,

-			exception) {

-		this.logger = logger;

-		this.timeStamp = timeStamp;

-		this.level = level;

-		this.messages = messages;

-		this.exception = exception;

-	};

-

-	LoggingEvent.prototype = {

-		getThrowableStrRep: function() {

-			return this.exception ?

-				getExceptionStringRep(this.exception) : "";

-		},

-

-		getCombinedMessages: function() {

-			return (this.messages.length === 1) ? this.messages[0] :

-				   this.messages.join(newLine);

-		}

-	};

-

-	log4javascript.LoggingEvent = LoggingEvent;

-

-	// Ensure that the log4javascript object is available in the window. This

-	// is necessary for log4javascript to be available in IE if loaded using

-	// Dojo's module system

-	window.log4javascript = log4javascript;

-})();
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/js/log4javascript_production.js b/xos/core/static/log4javascript-1.4.6/js/log4javascript_production.js
deleted file mode 100644
index 701c6ac..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/log4javascript_production.js
+++ /dev/null
@@ -1,206 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-

-if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}

-return this.length;};}

-if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}

-this.length=this.length-1;return firstItem;}};}

-if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}

-var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}

-return itemsDeleted;};}

-var log4javascript=(function(){function isUndefined(obj){return typeof obj=="undefined";}

-function EventSupport(){}

-EventSupport.prototype={eventTypes:[],eventListeners:{},setEventTypes:function(eventTypesParam){if(eventTypesParam instanceof Array){this.eventTypes=eventTypesParam;this.eventListeners={};for(var i=0,len=this.eventTypes.length;i<len;i++){this.eventListeners[this.eventTypes[i]]=[];}}else{handleError("log4javascript.EventSupport ["+this+"]: setEventTypes: eventTypes parameter must be an Array");}},addEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: addEventListener: no event called '"+eventType+"'");}

-this.eventListeners[eventType].push(listener);}else{handleError("log4javascript.EventSupport ["+this+"]: addEventListener: listener must be a function");}},removeEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: no event called '"+eventType+"'");}

-array_remove(this.eventListeners[eventType],listener);}else{handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: listener must be a function");}},dispatchEvent:function(eventType,eventArgs){if(array_contains(this.eventTypes,eventType)){var listeners=this.eventListeners[eventType];for(var i=0,len=listeners.length;i<len;i++){listeners[i](this,eventType,eventArgs);}}else{handleError("log4javascript.EventSupport ["+this+"]: dispatchEvent: no event called '"+eventType+"'");}}};var applicationStartDate=new Date();var uniqueId="log4javascript_"+applicationStartDate.getTime()+"_"+

-Math.floor(Math.random()*100000000);var emptyFunction=function(){};var newLine="\r\n";var pageLoaded=false;function Log4JavaScript(){}

-Log4JavaScript.prototype=new EventSupport();log4javascript=new Log4JavaScript();log4javascript.version="1.4.6";log4javascript.edition="log4javascript_production";function toStr(obj){if(obj&&obj.toString){return obj.toString();}else{return String(obj);}}

-function getExceptionMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}else{return toStr(ex);}}

-function getUrlFileName(url){var lastSlashIndex=Math.max(url.lastIndexOf("/"),url.lastIndexOf("\\"));return url.substr(lastSlashIndex+1);}

-function getExceptionStringRep(ex){if(ex){var exStr="Exception: "+getExceptionMessage(ex);try{if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber;}

-if(ex.fileName){exStr+=" in file "+getUrlFileName(ex.fileName);}}catch(localEx){logLog.warn("Unable to obtain file and line information for error");}

-if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack;}

-return exStr;}

-return null;}

-function bool(obj){return Boolean(obj);}

-function trim(str){return str.replace(/^\s+/,"").replace(/\s+$/,"");}

-function splitIntoLines(text){var text2=text.replace(/\r\n/g,"\n").replace(/\r/g,"\n");return text2.split("\n");}

-var urlEncode=(typeof window.encodeURIComponent!="undefined")?function(str){return encodeURIComponent(str);}:function(str){return escape(str).replace(/\+/g,"%2B").replace(/"/g,"%22").replace(/'/g,"%27").replace(/\//g,"%2F").replace(/=/g,"%3D");};var urlDecode=(typeof window.decodeURIComponent!="undefined")?function(str){return decodeURIComponent(str);}:function(str){return unescape(str).replace(/%2B/g,"+").replace(/%22/g,"\"").replace(/%27/g,"'").replace(/%2F/g,"/").replace(/%3D/g,"=");};function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}

-if(index>=0){arr.splice(index,1);return true;}else{return false;}}

-function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}

-return false;}

-function extractBooleanFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return bool(param);}}

-function extractStringFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return String(param);}}

-function extractIntFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{try{var value=parseInt(param,10);return isNaN(value)?defaultValue:value;}catch(ex){logLog.warn("Invalid int param "+param,ex);return defaultValue;}}}

-function extractFunctionFromParam(param,defaultValue){if(typeof param=="function"){return param;}else{return defaultValue;}}

-function isError(err){return(err instanceof Error);}

-if(!Function.prototype.apply){Function.prototype.apply=function(obj,args){var methodName="__apply__";if(typeof obj[methodName]!="undefined"){methodName+=String(Math.random()).substr(2);}

-obj[methodName]=this;var argsStrings=[];for(var i=0,len=args.length;i<len;i++){argsStrings[i]="args["+i+"]";}

-var script="obj."+methodName+"("+argsStrings.join(",")+")";var returnValue=eval(script);delete obj[methodName];return returnValue;};}

-if(!Function.prototype.call){Function.prototype.call=function(obj){var args=[];for(var i=1,len=arguments.length;i<len;i++){args[i-1]=arguments[i];}

-return this.apply(obj,args);};}

-function getListenersPropertyName(eventName){return"__log4javascript_listeners__"+eventName;}

-function addEvent(node,eventName,listener,useCapture,win){win=win?win:window;if(node.addEventListener){node.addEventListener(eventName,listener,useCapture);}else if(node.attachEvent){node.attachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(!node[propertyName]){node[propertyName]=[];node["on"+eventName]=function(evt){evt=getEvent(evt,win);var listenersPropertyName=getListenersPropertyName(eventName);var listeners=this[listenersPropertyName].concat([]);var currentListener;while((currentListener=listeners.shift())){currentListener.call(this,evt);}};}

-node[propertyName].push(listener);}}

-function removeEvent(node,eventName,listener,useCapture){if(node.removeEventListener){node.removeEventListener(eventName,listener,useCapture);}else if(node.detachEvent){node.detachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(node[propertyName]){array_remove(node[propertyName],listener);}}}

-function getEvent(evt,win){win=win?win:window;return evt?evt:win.event;}

-function stopEventPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}

-evt.returnValue=false;}

-var logLog={quietMode:false,debugMessages:[],setQuietMode:function(quietMode){this.quietMode=bool(quietMode);},numberOfErrors:0,alertAllErrors:false,setAlertAllErrors:function(alertAllErrors){this.alertAllErrors=alertAllErrors;},debug:function(message){this.debugMessages.push(message);},displayDebug:function(){alert(this.debugMessages.join(newLine));},warn:function(message,exception){},error:function(message,exception){if(++this.numberOfErrors==1||this.alertAllErrors){if(!this.quietMode){var alertMessage="log4javascript error: "+message;if(exception){alertMessage+=newLine+newLine+"Original error: "+getExceptionStringRep(exception);}

-alert(alertMessage);}}}};log4javascript.logLog=logLog;log4javascript.setEventTypes(["load","error"]);function handleError(message,exception){logLog.error(message,exception);log4javascript.dispatchEvent("error",{"message":message,"exception":exception});}

-log4javascript.handleError=handleError;var enabled=!((typeof log4javascript_disabled!="undefined")&&log4javascript_disabled);log4javascript.setEnabled=function(enable){enabled=bool(enable);};log4javascript.isEnabled=function(){return enabled;};var useTimeStampsInMilliseconds=true;log4javascript.setTimeStampsInMilliseconds=function(timeStampsInMilliseconds){useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);};log4javascript.isTimeStampsInMilliseconds=function(){return useTimeStampsInMilliseconds;};log4javascript.evalInScope=function(expr){return eval(expr);};var showStackTraces=false;log4javascript.setShowStackTraces=function(show){showStackTraces=bool(show);};var Level=function(level,name){this.level=level;this.name=name;};Level.prototype={toString:function(){return this.name;},equals:function(level){return this.level==level.level;},isGreaterOrEqual:function(level){return this.level>=level.level;}};Level.ALL=new Level(Number.MIN_VALUE,"ALL");Level.TRACE=new Level(10000,"TRACE");Level.DEBUG=new Level(20000,"DEBUG");Level.INFO=new Level(30000,"INFO");Level.WARN=new Level(40000,"WARN");Level.ERROR=new Level(50000,"ERROR");Level.FATAL=new Level(60000,"FATAL");Level.OFF=new Level(Number.MAX_VALUE,"OFF");log4javascript.Level=Level;function Timer(name,level){this.name=name;this.level=isUndefined(level)?Level.INFO:level;this.start=new Date();}

-Timer.prototype.getElapsedTime=function(){return new Date().getTime()-this.start.getTime();};var anonymousLoggerName="[anonymous]";var defaultLoggerName="[default]";var nullLoggerName="[null]";var rootLoggerName="root";function Logger(name){this.name=name;this.parent=null;this.children=[];var appenders=[];var loggerLevel=null;var isRoot=(this.name===rootLoggerName);var isNull=(this.name===nullLoggerName);var appenderCache=null;var appenderCacheInvalidated=false;this.addChild=function(childLogger){this.children.push(childLogger);childLogger.parent=this;childLogger.invalidateAppenderCache();};var additive=true;this.getAdditivity=function(){return additive;};this.setAdditivity=function(additivity){var valueChanged=(additive!=additivity);additive=additivity;if(valueChanged){this.invalidateAppenderCache();}};this.addAppender=function(appender){if(isNull){handleError("Logger.addAppender: you may not add an appender to the null logger");}else{if(appender instanceof log4javascript.Appender){if(!array_contains(appenders,appender)){appenders.push(appender);appender.setAddedToLogger(this);this.invalidateAppenderCache();}}else{handleError("Logger.addAppender: appender supplied ('"+

-toStr(appender)+"') is not a subclass of Appender");}}};this.removeAppender=function(appender){array_remove(appenders,appender);appender.setRemovedFromLogger(this);this.invalidateAppenderCache();};this.removeAllAppenders=function(){var appenderCount=appenders.length;if(appenderCount>0){for(var i=0;i<appenderCount;i++){appenders[i].setRemovedFromLogger(this);}

-appenders.length=0;this.invalidateAppenderCache();}};this.getEffectiveAppenders=function(){if(appenderCache===null||appenderCacheInvalidated){var parentEffectiveAppenders=(isRoot||!this.getAdditivity())?[]:this.parent.getEffectiveAppenders();appenderCache=parentEffectiveAppenders.concat(appenders);appenderCacheInvalidated=false;}

-return appenderCache;};this.invalidateAppenderCache=function(){appenderCacheInvalidated=true;for(var i=0,len=this.children.length;i<len;i++){this.children[i].invalidateAppenderCache();}};this.log=function(level,params){if(enabled&&level.isGreaterOrEqual(this.getEffectiveLevel())){var exception;var finalParamIndex=params.length-1;var lastParam=params[finalParamIndex];if(params.length>1&&isError(lastParam)){exception=lastParam;finalParamIndex--;}

-var messages=[];for(var i=0;i<=finalParamIndex;i++){messages[i]=params[i];}

-var loggingEvent=new LoggingEvent(this,new Date(),level,messages,exception);this.callAppenders(loggingEvent);}};this.callAppenders=function(loggingEvent){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].doAppend(loggingEvent);}};this.setLevel=function(level){if(isRoot&&level===null){handleError("Logger.setLevel: you cannot set the level of the root logger to null");}else if(level instanceof Level){loggerLevel=level;}else{handleError("Logger.setLevel: level supplied to logger "+

-this.name+" is not an instance of log4javascript.Level");}};this.getLevel=function(){return loggerLevel;};this.getEffectiveLevel=function(){for(var logger=this;logger!==null;logger=logger.parent){var level=logger.getLevel();if(level!==null){return level;}}};this.group=function(name,initiallyExpanded){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].group(name,initiallyExpanded);}}};this.groupEnd=function(){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].groupEnd();}}};var timers={};this.time=function(name,level){if(enabled){if(isUndefined(name)){handleError("Logger.time: a name for the timer must be supplied");}else if(level&&!(level instanceof Level)){handleError("Logger.time: level supplied to timer "+

-name+" is not an instance of log4javascript.Level");}else{timers[name]=new Timer(name,level);}}};this.timeEnd=function(name){if(enabled){if(isUndefined(name)){handleError("Logger.timeEnd: a name for the timer must be supplied");}else if(timers[name]){var timer=timers[name];var milliseconds=timer.getElapsedTime();this.log(timer.level,["Timer "+toStr(name)+" completed in "+milliseconds+"ms"]);delete timers[name];}else{logLog.warn("Logger.timeEnd: no timer found with name "+name);}}};this.assert=function(expr){if(enabled&&!expr){var args=[];for(var i=1,len=arguments.length;i<len;i++){args.push(arguments[i]);}

-args=(args.length>0)?args:["Assertion Failure"];args.push(newLine);args.push(expr);this.log(Level.ERROR,args);}};this.toString=function(){return"Logger["+this.name+"]";};}

-Logger.prototype={trace:function(){this.log(Level.TRACE,arguments);},debug:function(){this.log(Level.DEBUG,arguments);},info:function(){this.log(Level.INFO,arguments);},warn:function(){this.log(Level.WARN,arguments);},error:function(){this.log(Level.ERROR,arguments);},fatal:function(){this.log(Level.FATAL,arguments);},isEnabledFor:function(level){return level.isGreaterOrEqual(this.getEffectiveLevel());},isTraceEnabled:function(){return this.isEnabledFor(Level.TRACE);},isDebugEnabled:function(){return this.isEnabledFor(Level.DEBUG);},isInfoEnabled:function(){return this.isEnabledFor(Level.INFO);},isWarnEnabled:function(){return this.isEnabledFor(Level.WARN);},isErrorEnabled:function(){return this.isEnabledFor(Level.ERROR);},isFatalEnabled:function(){return this.isEnabledFor(Level.FATAL);}};Logger.prototype.trace.isEntryPoint=true;Logger.prototype.debug.isEntryPoint=true;Logger.prototype.info.isEntryPoint=true;Logger.prototype.warn.isEntryPoint=true;Logger.prototype.error.isEntryPoint=true;Logger.prototype.fatal.isEntryPoint=true;var loggers={};var loggerNames=[];var ROOT_LOGGER_DEFAULT_LEVEL=Level.DEBUG;var rootLogger=new Logger(rootLoggerName);rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);log4javascript.getRootLogger=function(){return rootLogger;};log4javascript.getLogger=function(loggerName){if(!(typeof loggerName=="string")){loggerName=anonymousLoggerName;logLog.warn("log4javascript.getLogger: non-string logger name "+

-toStr(loggerName)+" supplied, returning anonymous logger");}

-if(loggerName==rootLoggerName){handleError("log4javascript.getLogger: root logger may not be obtained by name");}

-if(!loggers[loggerName]){var logger=new Logger(loggerName);loggers[loggerName]=logger;loggerNames.push(loggerName);var lastDotIndex=loggerName.lastIndexOf(".");var parentLogger;if(lastDotIndex>-1){var parentLoggerName=loggerName.substring(0,lastDotIndex);parentLogger=log4javascript.getLogger(parentLoggerName);}else{parentLogger=rootLogger;}

-parentLogger.addChild(logger);}

-return loggers[loggerName];};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=log4javascript.getLogger(defaultLoggerName);var a=new log4javascript.PopUpAppender();defaultLogger.addAppender(a);}

-return defaultLogger;};var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=new Logger(nullLoggerName);nullLogger.setLevel(Level.OFF);}

-return nullLogger;};log4javascript.resetConfiguration=function(){rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);loggers={};};var LoggingEvent=function(logger,timeStamp,level,messages,exception){this.logger=logger;this.timeStamp=timeStamp;this.timeStampInMilliseconds=timeStamp.getTime();this.timeStampInSeconds=Math.floor(this.timeStampInMilliseconds/1000);this.milliseconds=this.timeStamp.getMilliseconds();this.level=level;this.messages=messages;this.exception=exception;};LoggingEvent.prototype={getThrowableStrRep:function(){return this.exception?getExceptionStringRep(this.exception):"";},getCombinedMessages:function(){return(this.messages.length==1)?this.messages[0]:this.messages.join(newLine);},toString:function(){return"LoggingEvent["+this.level+"]";}};log4javascript.LoggingEvent=LoggingEvent;var Layout=function(){};Layout.prototype={defaults:{loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url"},loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url",batchHeader:"",batchFooter:"",batchSeparator:"",returnsPostData:false,overrideTimeStampsSetting:false,useTimeStampsInMilliseconds:null,format:function(){handleError("Layout.format: layout supplied has no format() method");},ignoresThrowable:function(){handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");},getContentType:function(){return"text/plain";},allowBatching:function(){return true;},setTimeStampsInMilliseconds:function(timeStampsInMilliseconds){this.overrideTimeStampsSetting=true;this.useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);},isTimeStampsInMilliseconds:function(){return this.overrideTimeStampsSetting?this.useTimeStampsInMilliseconds:useTimeStampsInMilliseconds;},getTimeStampValue:function(loggingEvent){return this.isTimeStampsInMilliseconds()?loggingEvent.timeStampInMilliseconds:loggingEvent.timeStampInSeconds;},getDataValues:function(loggingEvent,combineMessages){var dataValues=[[this.loggerKey,loggingEvent.logger.name],[this.timeStampKey,this.getTimeStampValue(loggingEvent)],[this.levelKey,loggingEvent.level.name],[this.urlKey,window.location.href],[this.messageKey,combineMessages?loggingEvent.getCombinedMessages():loggingEvent.messages]];if(!this.isTimeStampsInMilliseconds()){dataValues.push([this.millisecondsKey,loggingEvent.milliseconds]);}

-if(loggingEvent.exception){dataValues.push([this.exceptionKey,getExceptionStringRep(loggingEvent.exception)]);}

-if(this.hasCustomFields()){for(var i=0,len=this.customFields.length;i<len;i++){var val=this.customFields[i].value;if(typeof val==="function"){val=val(this,loggingEvent);}

-dataValues.push([this.customFields[i].name,val]);}}

-return dataValues;},setKeys:function(loggerKey,timeStampKey,levelKey,messageKey,exceptionKey,urlKey,millisecondsKey){this.loggerKey=extractStringFromParam(loggerKey,this.defaults.loggerKey);this.timeStampKey=extractStringFromParam(timeStampKey,this.defaults.timeStampKey);this.levelKey=extractStringFromParam(levelKey,this.defaults.levelKey);this.messageKey=extractStringFromParam(messageKey,this.defaults.messageKey);this.exceptionKey=extractStringFromParam(exceptionKey,this.defaults.exceptionKey);this.urlKey=extractStringFromParam(urlKey,this.defaults.urlKey);this.millisecondsKey=extractStringFromParam(millisecondsKey,this.defaults.millisecondsKey);},setCustomField:function(name,value){var fieldUpdated=false;for(var i=0,len=this.customFields.length;i<len;i++){if(this.customFields[i].name===name){this.customFields[i].value=value;fieldUpdated=true;}}

-if(!fieldUpdated){this.customFields.push({"name":name,"value":value});}},hasCustomFields:function(){return(this.customFields.length>0);},toString:function(){handleError("Layout.toString: all layouts must override this method");}};log4javascript.Layout=Layout;var Appender=function(){};Appender.prototype=new EventSupport();Appender.prototype.layout=new PatternLayout();Appender.prototype.threshold=Level.ALL;Appender.prototype.loggers=[];Appender.prototype.doAppend=function(loggingEvent){if(enabled&&loggingEvent.level.level>=this.threshold.level){this.append(loggingEvent);}};Appender.prototype.append=function(loggingEvent){};Appender.prototype.setLayout=function(layout){if(layout instanceof Layout){this.layout=layout;}else{handleError("Appender.setLayout: layout supplied to "+

-this.toString()+" is not a subclass of Layout");}};Appender.prototype.getLayout=function(){return this.layout;};Appender.prototype.setThreshold=function(threshold){if(threshold instanceof Level){this.threshold=threshold;}else{handleError("Appender.setThreshold: threshold supplied to "+

-this.toString()+" is not a subclass of Level");}};Appender.prototype.getThreshold=function(){return this.threshold;};Appender.prototype.setAddedToLogger=function(logger){this.loggers.push(logger);};Appender.prototype.setRemovedFromLogger=function(logger){array_remove(this.loggers,logger);};Appender.prototype.group=emptyFunction;Appender.prototype.groupEnd=emptyFunction;Appender.prototype.toString=function(){handleError("Appender.toString: all appenders must override this method");};log4javascript.Appender=Appender;function SimpleLayout(){this.customFields=[];}

-SimpleLayout.prototype=new Layout();SimpleLayout.prototype.format=function(loggingEvent){return loggingEvent.level.name+" - "+loggingEvent.getCombinedMessages();};SimpleLayout.prototype.ignoresThrowable=function(){return true;};SimpleLayout.prototype.toString=function(){return"SimpleLayout";};log4javascript.SimpleLayout=SimpleLayout;function NullLayout(){this.customFields=[];}

-NullLayout.prototype=new Layout();NullLayout.prototype.format=function(loggingEvent){return loggingEvent.messages;};NullLayout.prototype.ignoresThrowable=function(){return true;};NullLayout.prototype.toString=function(){return"NullLayout";};log4javascript.NullLayout=NullLayout;function XmlLayout(combineMessages){this.combineMessages=extractBooleanFromParam(combineMessages,true);this.customFields=[];}

-XmlLayout.prototype=new Layout();XmlLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};XmlLayout.prototype.getContentType=function(){return"text/xml";};XmlLayout.prototype.escapeCdata=function(str){return str.replace(/\]\]>/,"]]>]]&gt;<![CDATA[");};XmlLayout.prototype.format=function(loggingEvent){var layout=this;var i,len;function formatMessage(message){message=(typeof message==="string")?message:toStr(message);return"<log4javascript:message><![CDATA["+

-layout.escapeCdata(message)+"]]></log4javascript:message>";}

-var str="<log4javascript:event logger=\""+loggingEvent.logger.name+"\" timestamp=\""+this.getTimeStampValue(loggingEvent)+"\"";if(!this.isTimeStampsInMilliseconds()){str+=" milliseconds=\""+loggingEvent.milliseconds+"\"";}

-str+=" level=\""+loggingEvent.level.name+"\">"+newLine;if(this.combineMessages){str+=formatMessage(loggingEvent.getCombinedMessages());}else{str+="<log4javascript:messages>"+newLine;for(i=0,len=loggingEvent.messages.length;i<len;i++){str+=formatMessage(loggingEvent.messages[i])+newLine;}

-str+="</log4javascript:messages>"+newLine;}

-if(this.hasCustomFields()){for(i=0,len=this.customFields.length;i<len;i++){str+="<log4javascript:customfield name=\""+

-this.customFields[i].name+"\"><![CDATA["+

-this.customFields[i].value.toString()+"]]></log4javascript:customfield>"+newLine;}}

-if(loggingEvent.exception){str+="<log4javascript:exception><![CDATA["+

-getExceptionStringRep(loggingEvent.exception)+"]]></log4javascript:exception>"+newLine;}

-str+="</log4javascript:event>"+newLine+newLine;return str;};XmlLayout.prototype.ignoresThrowable=function(){return false;};XmlLayout.prototype.toString=function(){return"XmlLayout";};log4javascript.XmlLayout=XmlLayout;function escapeNewLines(str){return str.replace(/\r\n|\r|\n/g,"\\r\\n");}

-function JsonLayout(readable,combineMessages){this.readable=extractBooleanFromParam(readable,false);this.combineMessages=extractBooleanFromParam(combineMessages,true);this.batchHeader=this.readable?"["+newLine:"[";this.batchFooter=this.readable?"]"+newLine:"]";this.batchSeparator=this.readable?","+newLine:",";this.setKeys();this.colon=this.readable?": ":":";this.tab=this.readable?"\t":"";this.lineBreak=this.readable?newLine:"";this.customFields=[];}

-JsonLayout.prototype=new Layout();JsonLayout.prototype.isReadable=function(){return this.readable;};JsonLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};JsonLayout.prototype.format=function(loggingEvent){var layout=this;var dataValues=this.getDataValues(loggingEvent,this.combineMessages);var str="{"+this.lineBreak;var i,len;function formatValue(val,prefix,expand){var formattedValue;var valType=typeof val;if(val instanceof Date){formattedValue=String(val.getTime());}else if(expand&&(val instanceof Array)){formattedValue="["+layout.lineBreak;for(var i=0,len=val.length;i<len;i++){var childPrefix=prefix+layout.tab;formattedValue+=childPrefix+formatValue(val[i],childPrefix,false);if(i<val.length-1){formattedValue+=",";}

-formattedValue+=layout.lineBreak;}

-formattedValue+=prefix+"]";}else if(valType!=="number"&&valType!=="boolean"){formattedValue="\""+escapeNewLines(toStr(val).replace(/\"/g,"\\\""))+"\"";}else{formattedValue=val;}

-return formattedValue;}

-for(i=0,len=dataValues.length-1;i<=len;i++){str+=this.tab+"\""+dataValues[i][0]+"\""+this.colon+formatValue(dataValues[i][1],this.tab,true);if(i<len){str+=",";}

-str+=this.lineBreak;}

-str+="}"+this.lineBreak;return str;};JsonLayout.prototype.ignoresThrowable=function(){return false;};JsonLayout.prototype.toString=function(){return"JsonLayout";};JsonLayout.prototype.getContentType=function(){return"application/json";};log4javascript.JsonLayout=JsonLayout;function HttpPostDataLayout(){this.setKeys();this.customFields=[];this.returnsPostData=true;}

-HttpPostDataLayout.prototype=new Layout();HttpPostDataLayout.prototype.allowBatching=function(){return false;};HttpPostDataLayout.prototype.format=function(loggingEvent){var dataValues=this.getDataValues(loggingEvent);var queryBits=[];for(var i=0,len=dataValues.length;i<len;i++){var val=(dataValues[i][1]instanceof Date)?String(dataValues[i][1].getTime()):dataValues[i][1];queryBits.push(urlEncode(dataValues[i][0])+"="+urlEncode(val));}

-return queryBits.join("&");};HttpPostDataLayout.prototype.ignoresThrowable=function(loggingEvent){return false;};HttpPostDataLayout.prototype.toString=function(){return"HttpPostDataLayout";};log4javascript.HttpPostDataLayout=HttpPostDataLayout;function formatObjectExpansion(obj,depth,indentation){var objectsExpanded=[];function doFormat(obj,depth,indentation){var i,j,len,childDepth,childIndentation,childLines,expansion,childExpansion;if(!indentation){indentation="";}

-function formatString(text){var lines=splitIntoLines(text);for(var j=1,jLen=lines.length;j<jLen;j++){lines[j]=indentation+lines[j];}

-return lines.join(newLine);}

-if(obj===null){return"null";}else if(typeof obj=="undefined"){return"undefined";}else if(typeof obj=="string"){return formatString(obj);}else if(typeof obj=="object"&&array_contains(objectsExpanded,obj)){try{expansion=toStr(obj);}catch(ex){expansion="Error formatting property. Details: "+getExceptionStringRep(ex);}

-return expansion+" [already expanded]";}else if((obj instanceof Array)&&depth>0){objectsExpanded.push(obj);expansion="["+newLine;childDepth=depth-1;childIndentation=indentation+"  ";childLines=[];for(i=0,len=obj.length;i<len;i++){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+childExpansion);}catch(ex){childLines.push(childIndentation+"Error formatting array member. Details: "+

-getExceptionStringRep(ex)+"");}}

-expansion+=childLines.join(","+newLine)+newLine+indentation+"]";return expansion;}else if(Object.prototype.toString.call(obj)=="[object Date]"){return obj.toString();}else if(typeof obj=="object"&&depth>0){objectsExpanded.push(obj);expansion="{"+newLine;childDepth=depth-1;childIndentation=indentation+"  ";childLines=[];for(i in obj){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+i+": "+childExpansion);}catch(ex){childLines.push(childIndentation+i+": Error formatting property. Details: "+

-getExceptionStringRep(ex));}}

-expansion+=childLines.join(","+newLine)+newLine+indentation+"}";return expansion;}else{return formatString(toStr(obj));}}

-return doFormat(obj,depth,indentation);}

-var SimpleDateFormat;(function(){var regex=/('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;var monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];var dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var TEXT2=0,TEXT3=1,NUMBER=2,YEAR=3,MONTH=4,TIMEZONE=5;var types={G:TEXT2,y:YEAR,M:MONTH,w:NUMBER,W:NUMBER,D:NUMBER,d:NUMBER,F:NUMBER,E:TEXT3,a:TEXT2,H:NUMBER,k:NUMBER,K:NUMBER,h:NUMBER,m:NUMBER,s:NUMBER,S:NUMBER,Z:TIMEZONE};var ONE_DAY=24*60*60*1000;var ONE_WEEK=7*ONE_DAY;var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK=1;var newDateAtMidnight=function(year,month,day){var d=new Date(year,month,day,0,0,0);d.setMilliseconds(0);return d;};Date.prototype.getDifference=function(date){return this.getTime()-date.getTime();};Date.prototype.isBefore=function(d){return this.getTime()<d.getTime();};Date.prototype.getUTCTime=function(){return Date.UTC(this.getFullYear(),this.getMonth(),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds(),this.getMilliseconds());};Date.prototype.getTimeSince=function(d){return this.getUTCTime()-d.getUTCTime();};Date.prototype.getPreviousSunday=function(){var midday=new Date(this.getFullYear(),this.getMonth(),this.getDate(),12,0,0);var previousSunday=new Date(midday.getTime()-this.getDay()*ONE_DAY);return newDateAtMidnight(previousSunday.getFullYear(),previousSunday.getMonth(),previousSunday.getDate());};Date.prototype.getWeekInYear=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}

-var previousSunday=this.getPreviousSunday();var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);var numberOfSundays=previousSunday.isBefore(startOfYear)?0:1+Math.floor(previousSunday.getTimeSince(startOfYear)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfYear.getDay();var weekInYear=numberOfSundays;if(numberOfDaysInFirstWeek<minimalDaysInFirstWeek){weekInYear--;}

-return weekInYear;};Date.prototype.getWeekInMonth=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}

-var previousSunday=this.getPreviousSunday();var startOfMonth=newDateAtMidnight(this.getFullYear(),this.getMonth(),1);var numberOfSundays=previousSunday.isBefore(startOfMonth)?0:1+Math.floor(previousSunday.getTimeSince(startOfMonth)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfMonth.getDay();var weekInMonth=numberOfSundays;if(numberOfDaysInFirstWeek>=minimalDaysInFirstWeek){weekInMonth++;}

-return weekInMonth;};Date.prototype.getDayInYear=function(){var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);return 1+Math.floor(this.getTimeSince(startOfYear)/ONE_DAY);};SimpleDateFormat=function(formatString){this.formatString=formatString;};SimpleDateFormat.prototype.setMinimalDaysInFirstWeek=function(days){this.minimalDaysInFirstWeek=days;};SimpleDateFormat.prototype.getMinimalDaysInFirstWeek=function(){return isUndefined(this.minimalDaysInFirstWeek)?DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK:this.minimalDaysInFirstWeek;};var padWithZeroes=function(str,len){while(str.length<len){str="0"+str;}

-return str;};var formatText=function(data,numberOfLetters,minLength){return(numberOfLetters>=4)?data:data.substr(0,Math.max(minLength,numberOfLetters));};var formatNumber=function(data,numberOfLetters){var dataString=""+data;return padWithZeroes(dataString,numberOfLetters);};SimpleDateFormat.prototype.format=function(date){var formattedString="";var result;var searchString=this.formatString;while((result=regex.exec(searchString))){var quotedString=result[1];var patternLetters=result[2];var otherLetters=result[3];var otherCharacters=result[4];if(quotedString){if(quotedString=="''"){formattedString+="'";}else{formattedString+=quotedString.substring(1,quotedString.length-1);}}else if(otherLetters){}else if(otherCharacters){formattedString+=otherCharacters;}else if(patternLetters){var patternLetter=patternLetters.charAt(0);var numberOfLetters=patternLetters.length;var rawData="";switch(patternLetter){case"G":rawData="AD";break;case"y":rawData=date.getFullYear();break;case"M":rawData=date.getMonth();break;case"w":rawData=date.getWeekInYear(this.getMinimalDaysInFirstWeek());break;case"W":rawData=date.getWeekInMonth(this.getMinimalDaysInFirstWeek());break;case"D":rawData=date.getDayInYear();break;case"d":rawData=date.getDate();break;case"F":rawData=1+Math.floor((date.getDate()-1)/7);break;case"E":rawData=dayNames[date.getDay()];break;case"a":rawData=(date.getHours()>=12)?"PM":"AM";break;case"H":rawData=date.getHours();break;case"k":rawData=date.getHours()||24;break;case"K":rawData=date.getHours()%12;break;case"h":rawData=(date.getHours()%12)||12;break;case"m":rawData=date.getMinutes();break;case"s":rawData=date.getSeconds();break;case"S":rawData=date.getMilliseconds();break;case"Z":rawData=date.getTimezoneOffset();break;}

-switch(types[patternLetter]){case TEXT2:formattedString+=formatText(rawData,numberOfLetters,2);break;case TEXT3:formattedString+=formatText(rawData,numberOfLetters,3);break;case NUMBER:formattedString+=formatNumber(rawData,numberOfLetters);break;case YEAR:if(numberOfLetters<=3){var dataString=""+rawData;formattedString+=dataString.substr(2,2);}else{formattedString+=formatNumber(rawData,numberOfLetters);}

-break;case MONTH:if(numberOfLetters>=3){formattedString+=formatText(monthNames[rawData],numberOfLetters,numberOfLetters);}else{formattedString+=formatNumber(rawData+1,numberOfLetters);}

-break;case TIMEZONE:var isPositive=(rawData>0);var prefix=isPositive?"-":"+";var absData=Math.abs(rawData);var hours=""+Math.floor(absData/60);hours=padWithZeroes(hours,2);var minutes=""+(absData%60);minutes=padWithZeroes(minutes,2);formattedString+=prefix+hours+minutes;break;}}

-searchString=searchString.substr(result.index+result[0].length);}

-return formattedString;};})();log4javascript.SimpleDateFormat=SimpleDateFormat;function PatternLayout(pattern){if(pattern){this.pattern=pattern;}else{this.pattern=PatternLayout.DEFAULT_CONVERSION_PATTERN;}

-this.customFields=[];}

-PatternLayout.TTCC_CONVERSION_PATTERN="%r %p %c - %m%n";PatternLayout.DEFAULT_CONVERSION_PATTERN="%m%n";PatternLayout.ISO8601_DATEFORMAT="yyyy-MM-dd HH:mm:ss,SSS";PatternLayout.DATETIME_DATEFORMAT="dd MMM yyyy HH:mm:ss,SSS";PatternLayout.ABSOLUTETIME_DATEFORMAT="HH:mm:ss,SSS";PatternLayout.prototype=new Layout();PatternLayout.prototype.format=function(loggingEvent){var regex=/%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;var formattedString="";var result;var searchString=this.pattern;while((result=regex.exec(searchString))){var matchedString=result[0];var padding=result[1];var truncation=result[2];var conversionCharacter=result[3];var specifier=result[5];var text=result[6];if(text){formattedString+=""+text;}else{var replacement="";switch(conversionCharacter){case"a":case"m":var depth=0;if(specifier){depth=parseInt(specifier,10);if(isNaN(depth)){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character '"+conversionCharacter+"' - should be a number");depth=0;}}

-var messages=(conversionCharacter==="a")?loggingEvent.messages[0]:loggingEvent.messages;for(var i=0,len=messages.length;i<len;i++){if(i>0&&(replacement.charAt(replacement.length-1)!==" ")){replacement+=" ";}

-if(depth===0){replacement+=messages[i];}else{replacement+=formatObjectExpansion(messages[i],depth);}}

-break;case"c":var loggerName=loggingEvent.logger.name;if(specifier){var precision=parseInt(specifier,10);var loggerNameBits=loggingEvent.logger.name.split(".");if(precision>=loggerNameBits.length){replacement=loggerName;}else{replacement=loggerNameBits.slice(loggerNameBits.length-precision).join(".");}}else{replacement=loggerName;}

-break;case"d":var dateFormat=PatternLayout.ISO8601_DATEFORMAT;if(specifier){dateFormat=specifier;if(dateFormat=="ISO8601"){dateFormat=PatternLayout.ISO8601_DATEFORMAT;}else if(dateFormat=="ABSOLUTE"){dateFormat=PatternLayout.ABSOLUTETIME_DATEFORMAT;}else if(dateFormat=="DATE"){dateFormat=PatternLayout.DATETIME_DATEFORMAT;}}

-replacement=(new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);break;case"f":if(this.hasCustomFields()){var fieldIndex=0;if(specifier){fieldIndex=parseInt(specifier,10);if(isNaN(fieldIndex)){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character 'f' - should be a number");}else if(fieldIndex===0){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character 'f' - must be greater than zero");}else if(fieldIndex>this.customFields.length){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character 'f' - there aren't that many custom fields");}else{fieldIndex=fieldIndex-1;}}

-var val=this.customFields[fieldIndex].value;if(typeof val=="function"){val=val(this,loggingEvent);}

-replacement=val;}

-break;case"n":replacement=newLine;break;case"p":replacement=loggingEvent.level.name;break;case"r":replacement=""+loggingEvent.timeStamp.getDifference(applicationStartDate);break;case"%":replacement="%";break;default:replacement=matchedString;break;}

-var l;if(truncation){l=parseInt(truncation.substr(1),10);var strLen=replacement.length;if(l<strLen){replacement=replacement.substring(strLen-l,strLen);}}

-if(padding){if(padding.charAt(0)=="-"){l=parseInt(padding.substr(1),10);while(replacement.length<l){replacement+=" ";}}else{l=parseInt(padding,10);while(replacement.length<l){replacement=" "+replacement;}}}

-formattedString+=replacement;}

-searchString=searchString.substr(result.index+result[0].length);}

-return formattedString;};PatternLayout.prototype.ignoresThrowable=function(){return true;};PatternLayout.prototype.toString=function(){return"PatternLayout";};log4javascript.PatternLayout=PatternLayout;var xmlHttpFactories=[function(){return new XMLHttpRequest();},function(){return new ActiveXObject("Msxml2.XMLHTTP");},function(){return new ActiveXObject("Microsoft.XMLHTTP");}];var getXmlHttp=function(errorHandler){var xmlHttp=null,factory;for(var i=0,len=xmlHttpFactories.length;i<len;i++){factory=xmlHttpFactories[i];try{xmlHttp=factory();getXmlHttp=factory;return xmlHttp;}catch(e){}}

-if(errorHandler){errorHandler();}else{handleError("getXmlHttp: unable to obtain XMLHttpRequest object");}};function isHttpRequestSuccessful(xmlHttp){return isUndefined(xmlHttp.status)||xmlHttp.status===0||(xmlHttp.status>=200&&xmlHttp.status<300)||xmlHttp.status==1223;}

-function AjaxAppender(url){var appender=this;var isSupported=true;if(!url){handleError("AjaxAppender: URL must be specified in constructor");isSupported=false;}

-var timed=this.defaults.timed;var waitForResponse=this.defaults.waitForResponse;var batchSize=this.defaults.batchSize;var timerInterval=this.defaults.timerInterval;var requestSuccessCallback=this.defaults.requestSuccessCallback;var failCallback=this.defaults.failCallback;var postVarName=this.defaults.postVarName;var sendAllOnUnload=this.defaults.sendAllOnUnload;var contentType=this.defaults.contentType;var sessionId=null;var queuedLoggingEvents=[];var queuedRequests=[];var headers=[];var sending=false;var initialized=false;function checkCanConfigure(configOptionName){if(initialized){handleError("AjaxAppender: configuration option '"+

-configOptionName+"' may not be set after the appender has been initialized");return false;}

-return true;}

-this.getSessionId=function(){return sessionId;};this.setSessionId=function(sessionIdParam){sessionId=extractStringFromParam(sessionIdParam,null);this.layout.setCustomField("sessionid",sessionId);};this.setLayout=function(layoutParam){if(checkCanConfigure("layout")){this.layout=layoutParam;if(sessionId!==null){this.setSessionId(sessionId);}}};this.isTimed=function(){return timed;};this.setTimed=function(timedParam){if(checkCanConfigure("timed")){timed=bool(timedParam);}};this.getTimerInterval=function(){return timerInterval;};this.setTimerInterval=function(timerIntervalParam){if(checkCanConfigure("timerInterval")){timerInterval=extractIntFromParam(timerIntervalParam,timerInterval);}};this.isWaitForResponse=function(){return waitForResponse;};this.setWaitForResponse=function(waitForResponseParam){if(checkCanConfigure("waitForResponse")){waitForResponse=bool(waitForResponseParam);}};this.getBatchSize=function(){return batchSize;};this.setBatchSize=function(batchSizeParam){if(checkCanConfigure("batchSize")){batchSize=extractIntFromParam(batchSizeParam,batchSize);}};this.isSendAllOnUnload=function(){return sendAllOnUnload;};this.setSendAllOnUnload=function(sendAllOnUnloadParam){if(checkCanConfigure("sendAllOnUnload")){sendAllOnUnload=extractBooleanFromParam(sendAllOnUnloadParam,sendAllOnUnload);}};this.setRequestSuccessCallback=function(requestSuccessCallbackParam){requestSuccessCallback=extractFunctionFromParam(requestSuccessCallbackParam,requestSuccessCallback);};this.setFailCallback=function(failCallbackParam){failCallback=extractFunctionFromParam(failCallbackParam,failCallback);};this.getPostVarName=function(){return postVarName;};this.setPostVarName=function(postVarNameParam){if(checkCanConfigure("postVarName")){postVarName=extractStringFromParam(postVarNameParam,postVarName);}};this.getHeaders=function(){return headers;};this.addHeader=function(name,value){if(name.toLowerCase()=="content-type"){contentType=value;}else{headers.push({name:name,value:value});}};function sendAll(){if(isSupported&&enabled){sending=true;var currentRequestBatch;if(waitForResponse){if(queuedRequests.length>0){currentRequestBatch=queuedRequests.shift();sendRequest(preparePostData(currentRequestBatch),sendAll);}else{sending=false;if(timed){scheduleSending();}}}else{while((currentRequestBatch=queuedRequests.shift())){sendRequest(preparePostData(currentRequestBatch));}

-sending=false;if(timed){scheduleSending();}}}}

-this.sendAll=sendAll;function sendAllRemaining(){var sendingAnything=false;if(isSupported&&enabled){var actualBatchSize=appender.getLayout().allowBatching()?batchSize:1;var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);if(queuedLoggingEvents.length>=actualBatchSize){queuedRequests.push(batchedLoggingEvents);batchedLoggingEvents=[];}}

-if(batchedLoggingEvents.length>0){queuedRequests.push(batchedLoggingEvents);}

-sendingAnything=(queuedRequests.length>0);waitForResponse=false;timed=false;sendAll();}

-return sendingAnything;}

-this.sendAllRemaining=sendAllRemaining;function preparePostData(batchedLoggingEvents){var formattedMessages=[];var currentLoggingEvent;var postData="";while((currentLoggingEvent=batchedLoggingEvents.shift())){var currentFormattedMessage=appender.getLayout().format(currentLoggingEvent);if(appender.getLayout().ignoresThrowable()){currentFormattedMessage+=currentLoggingEvent.getThrowableStrRep();}

-formattedMessages.push(currentFormattedMessage);}

-if(batchedLoggingEvents.length==1){postData=formattedMessages.join("");}else{postData=appender.getLayout().batchHeader+

-formattedMessages.join(appender.getLayout().batchSeparator)+

-appender.getLayout().batchFooter;}

-if(contentType==appender.defaults.contentType){postData=appender.getLayout().returnsPostData?postData:urlEncode(postVarName)+"="+urlEncode(postData);if(postData.length>0){postData+="&";}

-postData+="layout="+urlEncode(appender.getLayout().toString());}

-return postData;}

-function scheduleSending(){window.setTimeout(sendAll,timerInterval);}

-function xmlHttpErrorHandler(){var msg="AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}}

-function sendRequest(postData,successCallback){try{var xmlHttp=getXmlHttp(xmlHttpErrorHandler);if(isSupported){if(xmlHttp.overrideMimeType){xmlHttp.overrideMimeType(appender.getLayout().getContentType());}

-xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4){if(isHttpRequestSuccessful(xmlHttp)){if(requestSuccessCallback){requestSuccessCallback(xmlHttp);}

-if(successCallback){successCallback(xmlHttp);}}else{var msg="AjaxAppender.append: XMLHttpRequest request to URL "+

-url+" returned status code "+xmlHttp.status;handleError(msg);if(failCallback){failCallback(msg);}}

-xmlHttp.onreadystatechange=emptyFunction;xmlHttp=null;}};xmlHttp.open("POST",url,true);try{for(var i=0,header;header=headers[i++];){xmlHttp.setRequestHeader(header.name,header.value);}

-xmlHttp.setRequestHeader("Content-Type",contentType);}catch(headerEx){var msg="AjaxAppender.append: your browser's XMLHttpRequest implementation"+" does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}

-return;}

-xmlHttp.send(postData);}}catch(ex){var errMsg="AjaxAppender.append: error sending log message to "+url;handleError(errMsg,ex);isSupported=false;if(failCallback){failCallback(errMsg+". Details: "+getExceptionStringRep(ex));}}}

-this.append=function(loggingEvent){if(isSupported){if(!initialized){init();}

-queuedLoggingEvents.push(loggingEvent);var actualBatchSize=this.getLayout().allowBatching()?batchSize:1;if(queuedLoggingEvents.length>=actualBatchSize){var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);}

-queuedRequests.push(batchedLoggingEvents);if(!timed&&(!waitForResponse||(waitForResponse&&!sending))){sendAll();}}}};function init(){initialized=true;if(sendAllOnUnload){var oldBeforeUnload=window.onbeforeunload;window.onbeforeunload=function(){if(oldBeforeUnload){oldBeforeUnload();}

-if(sendAllRemaining()){return"Sending log messages";}};}

-if(timed){scheduleSending();}}}

-AjaxAppender.prototype=new Appender();AjaxAppender.prototype.defaults={waitForResponse:false,timed:false,timerInterval:1000,batchSize:1,sendAllOnUnload:false,requestSuccessCallback:null,failCallback:null,postVarName:"data",contentType:"application/x-www-form-urlencoded"};AjaxAppender.prototype.layout=new HttpPostDataLayout();AjaxAppender.prototype.toString=function(){return"AjaxAppender";};log4javascript.AjaxAppender=AjaxAppender;log4javascript.setDocumentReady=function(){pageLoaded=true;log4javascript.dispatchEvent("load",{});};if(window.addEventListener){window.addEventListener("load",log4javascript.setDocumentReady,false);}else if(window.attachEvent){window.attachEvent("onload",log4javascript.setDocumentReady);}else{var oldOnload=window.onload;if(typeof window.onload!="function"){window.onload=log4javascript.setDocumentReady;}else{window.onload=function(evt){if(oldOnload){oldOnload(evt);}

-log4javascript.setDocumentReady();};}}

-window.log4javascript=log4javascript;return log4javascript;})();

diff --git a/xos/core/static/log4javascript-1.4.6/js/log4javascript_production_uncompressed.js b/xos/core/static/log4javascript-1.4.6/js/log4javascript_production_uncompressed.js
deleted file mode 100644
index 2b7c993..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/log4javascript_production_uncompressed.js
+++ /dev/null
@@ -1,2308 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-/**

- * log4javascript

- *

- * log4javascript is a logging framework for JavaScript based on log4j

- * for Java. This file contains all core log4javascript code and is the only

- * file required to use log4javascript, unless you require support for

- * document.domain, in which case you will also need console.html, which must be

- * stored in the same directory as the main log4javascript.js file.

- *

- * Author: Tim Down <tim@log4javascript.org>

- * Version: 1.4.6

- * Edition: log4javascript_production

- * Build date: 19 March 2013

- * Website: http://log4javascript.org

- */

-

-/* -------------------------------------------------------------------------- */

-// Array-related stuff

-

-// Next three methods are solely for IE5, which is missing them

-if (!Array.prototype.push) {

-	Array.prototype.push = function() {

-		for (var i = 0, len = arguments.length; i < len; i++){

-			this[this.length] = arguments[i];

-		}

-		return this.length;

-	};

-}

-

-if (!Array.prototype.shift) {

-	Array.prototype.shift = function() {

-		if (this.length > 0) {

-			var firstItem = this[0];

-			for (var i = 0, len = this.length - 1; i < len; i++) {

-				this[i] = this[i + 1];

-			}

-			this.length = this.length - 1;

-			return firstItem;

-		}

-	};

-}

-

-if (!Array.prototype.splice) {

-	Array.prototype.splice = function(startIndex, deleteCount) {

-		var itemsAfterDeleted = this.slice(startIndex + deleteCount);

-		var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);

-		this.length = startIndex;

-		// Copy the arguments into a proper Array object

-		var argumentsArray = [];

-		for (var i = 0, len = arguments.length; i < len; i++) {

-			argumentsArray[i] = arguments[i];

-		}

-		var itemsToAppend = (argumentsArray.length > 2) ?

-			itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;

-		for (i = 0, len = itemsToAppend.length; i < len; i++) {

-			this.push(itemsToAppend[i]);

-		}

-		return itemsDeleted;

-	};

-}

-

-/* -------------------------------------------------------------------------- */

-

-var log4javascript = (function() {

-

-	function isUndefined(obj) {

-		return typeof obj == "undefined";

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// Custom event support

-

-	function EventSupport() {}

-

-	EventSupport.prototype = {

-		eventTypes: [],

-		eventListeners: {},

-		setEventTypes: function(eventTypesParam) {

-			if (eventTypesParam instanceof Array) {

-				this.eventTypes = eventTypesParam;

-				this.eventListeners = {};

-				for (var i = 0, len = this.eventTypes.length; i < len; i++) {

-					this.eventListeners[this.eventTypes[i]] = [];

-				}

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: setEventTypes: eventTypes parameter must be an Array");

-			}

-		},

-

-		addEventListener: function(eventType, listener) {

-			if (typeof listener == "function") {

-				if (!array_contains(this.eventTypes, eventType)) {

-					handleError("log4javascript.EventSupport [" + this + "]: addEventListener: no event called '" + eventType + "'");

-				}

-				this.eventListeners[eventType].push(listener);

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: addEventListener: listener must be a function");

-			}

-		},

-

-		removeEventListener: function(eventType, listener) {

-			if (typeof listener == "function") {

-				if (!array_contains(this.eventTypes, eventType)) {

-					handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: no event called '" + eventType + "'");

-				}

-				array_remove(this.eventListeners[eventType], listener);

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: listener must be a function");

-			}

-		},

-

-		dispatchEvent: function(eventType, eventArgs) {

-			if (array_contains(this.eventTypes, eventType)) {

-				var listeners = this.eventListeners[eventType];

-				for (var i = 0, len = listeners.length; i < len; i++) {

-					listeners[i](this, eventType, eventArgs);

-				}

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: dispatchEvent: no event called '" + eventType + "'");

-			}

-		}

-	};

-

-	/* -------------------------------------------------------------------------- */

-

-	var applicationStartDate = new Date();

-	var uniqueId = "log4javascript_" + applicationStartDate.getTime() + "_" +

-		Math.floor(Math.random() * 100000000);

-	var emptyFunction = function() {};

-	var newLine = "\r\n";

-	var pageLoaded = false;

-

-	// Create main log4javascript object; this will be assigned public properties

-	function Log4JavaScript() {}

-	Log4JavaScript.prototype = new EventSupport();

-

-	log4javascript = new Log4JavaScript();

-	log4javascript.version = "1.4.6";

-	log4javascript.edition = "log4javascript_production";

-

-	/* -------------------------------------------------------------------------- */

-	// Utility functions

-

-	function toStr(obj) {

-		if (obj && obj.toString) {

-			return obj.toString();

-		} else {

-			return String(obj);

-		}

-	}

-

-	function getExceptionMessage(ex) {

-		if (ex.message) {

-			return ex.message;

-		} else if (ex.description) {

-			return ex.description;

-		} else {

-			return toStr(ex);

-		}

-	}

-

-	// Gets the portion of the URL after the last slash

-	function getUrlFileName(url) {

-		var lastSlashIndex = Math.max(url.lastIndexOf("/"), url.lastIndexOf("\\"));

-		return url.substr(lastSlashIndex + 1);

-	}

-

-	// Returns a nicely formatted representation of an error

-	function getExceptionStringRep(ex) {

-		if (ex) {

-			var exStr = "Exception: " + getExceptionMessage(ex);

-			try {

-				if (ex.lineNumber) {

-					exStr += " on line number " + ex.lineNumber;

-				}

-				if (ex.fileName) {

-					exStr += " in file " + getUrlFileName(ex.fileName);

-				}

-			} catch (localEx) {

-				logLog.warn("Unable to obtain file and line information for error");

-			}

-			if (showStackTraces && ex.stack) {

-				exStr += newLine + "Stack trace:" + newLine + ex.stack;

-			}

-			return exStr;

-		}

-		return null;

-	}

-

-	function bool(obj) {

-		return Boolean(obj);

-	}

-

-	function trim(str) {

-		return str.replace(/^\s+/, "").replace(/\s+$/, "");

-	}

-

-	function splitIntoLines(text) {

-		// Ensure all line breaks are \n only

-		var text2 = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");

-		return text2.split("\n");

-	}

-

-	var urlEncode = (typeof window.encodeURIComponent != "undefined") ?

-		function(str) {

-			return encodeURIComponent(str);

-		}: 

-		function(str) {

-			return escape(str).replace(/\+/g, "%2B").replace(/"/g, "%22").replace(/'/g, "%27").replace(/\//g, "%2F").replace(/=/g, "%3D");

-		};

-

-	var urlDecode = (typeof window.decodeURIComponent != "undefined") ?

-		function(str) {

-			return decodeURIComponent(str);

-		}: 

-		function(str) {

-			return unescape(str).replace(/%2B/g, "+").replace(/%22/g, "\"").replace(/%27/g, "'").replace(/%2F/g, "/").replace(/%3D/g, "=");

-		};

-

-	function array_remove(arr, val) {

-		var index = -1;

-		for (var i = 0, len = arr.length; i < len; i++) {

-			if (arr[i] === val) {

-				index = i;

-				break;

-			}

-		}

-		if (index >= 0) {

-			arr.splice(index, 1);

-			return true;

-		} else {

-			return false;

-		}

-	}

-

-	function array_contains(arr, val) {

-		for(var i = 0, len = arr.length; i < len; i++) {

-			if (arr[i] == val) {

-				return true;

-			}

-		}

-		return false;

-	}

-

-	function extractBooleanFromParam(param, defaultValue) {

-		if (isUndefined(param)) {

-			return defaultValue;

-		} else {

-			return bool(param);

-		}

-	}

-

-	function extractStringFromParam(param, defaultValue) {

-		if (isUndefined(param)) {

-			return defaultValue;

-		} else {

-			return String(param);

-		}

-	}

-

-	function extractIntFromParam(param, defaultValue) {

-		if (isUndefined(param)) {

-			return defaultValue;

-		} else {

-			try {

-				var value = parseInt(param, 10);

-				return isNaN(value) ? defaultValue : value;

-			} catch (ex) {

-				logLog.warn("Invalid int param " + param, ex);

-				return defaultValue;

-			}

-		}

-	}

-

-	function extractFunctionFromParam(param, defaultValue) {

-		if (typeof param == "function") {

-			return param;

-		} else {

-			return defaultValue;

-		}

-	}

-

-	function isError(err) {

-		return (err instanceof Error);

-	}

-

-	if (!Function.prototype.apply){

-		Function.prototype.apply = function(obj, args) {

-			var methodName = "__apply__";

-			if (typeof obj[methodName] != "undefined") {

-				methodName += String(Math.random()).substr(2);

-			}

-			obj[methodName] = this;

-

-			var argsStrings = [];

-			for (var i = 0, len = args.length; i < len; i++) {

-				argsStrings[i] = "args[" + i + "]";

-			}

-			var script = "obj." + methodName + "(" + argsStrings.join(",") + ")";

-			var returnValue = eval(script);

-			delete obj[methodName];

-			return returnValue;

-		};

-	}

-

-	if (!Function.prototype.call){

-		Function.prototype.call = function(obj) {

-			var args = [];

-			for (var i = 1, len = arguments.length; i < len; i++) {

-				args[i - 1] = arguments[i];

-			}

-			return this.apply(obj, args);

-		};

-	}

-

-	function getListenersPropertyName(eventName) {

-		return "__log4javascript_listeners__" + eventName;

-	}

-

-	function addEvent(node, eventName, listener, useCapture, win) {

-		win = win ? win : window;

-		if (node.addEventListener) {

-			node.addEventListener(eventName, listener, useCapture);

-		} else if (node.attachEvent) {

-			node.attachEvent("on" + eventName, listener);

-		} else {

-			var propertyName = getListenersPropertyName(eventName);

-			if (!node[propertyName]) {

-				node[propertyName] = [];

-				// Set event handler

-				node["on" + eventName] = function(evt) {

-					evt = getEvent(evt, win);

-					var listenersPropertyName = getListenersPropertyName(eventName);

-

-					// Clone the array of listeners to leave the original untouched

-					var listeners = this[listenersPropertyName].concat([]);

-					var currentListener;

-

-					// Call each listener in turn

-					while ((currentListener = listeners.shift())) {

-						currentListener.call(this, evt);

-					}

-				};

-			}

-			node[propertyName].push(listener);

-		}

-	}

-

-	function removeEvent(node, eventName, listener, useCapture) {

-		if (node.removeEventListener) {

-			node.removeEventListener(eventName, listener, useCapture);

-		} else if (node.detachEvent) {

-			node.detachEvent("on" + eventName, listener);

-		} else {

-			var propertyName = getListenersPropertyName(eventName);

-			if (node[propertyName]) {

-				array_remove(node[propertyName], listener);

-			}

-		}

-	}

-

-	function getEvent(evt, win) {

-		win = win ? win : window;

-		return evt ? evt : win.event;

-	}

-

-	function stopEventPropagation(evt) {

-		if (evt.stopPropagation) {

-			evt.stopPropagation();

-		} else if (typeof evt.cancelBubble != "undefined") {

-			evt.cancelBubble = true;

-		}

-		evt.returnValue = false;

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// Simple logging for log4javascript itself

-

-	var logLog = {

-		quietMode: false,

-

-		debugMessages: [],

-

-		setQuietMode: function(quietMode) {

-			this.quietMode = bool(quietMode);

-		},

-

-		numberOfErrors: 0,

-

-		alertAllErrors: false,

-

-		setAlertAllErrors: function(alertAllErrors) {

-			this.alertAllErrors = alertAllErrors;

-		},

-

-		debug: function(message) {

-			this.debugMessages.push(message);

-		},

-

-		displayDebug: function() {

-			alert(this.debugMessages.join(newLine));

-		},

-

-		warn: function(message, exception) {

-		},

-

-		error: function(message, exception) {

-			if (++this.numberOfErrors == 1 || this.alertAllErrors) {

-				if (!this.quietMode) {

-					var alertMessage = "log4javascript error: " + message;

-					if (exception) {

-						alertMessage += newLine + newLine + "Original error: " + getExceptionStringRep(exception);

-					}

-					alert(alertMessage);

-				}

-			}

-		}

-	};

-	log4javascript.logLog = logLog;

-

-	log4javascript.setEventTypes(["load", "error"]);

-

-	function handleError(message, exception) {

-		logLog.error(message, exception);

-		log4javascript.dispatchEvent("error", { "message": message, "exception": exception });

-	}

-

-	log4javascript.handleError = handleError;

-

-	/* ---------------------------------------------------------------------- */

-

-	var enabled = !((typeof log4javascript_disabled != "undefined") &&

-					log4javascript_disabled);

-

-	log4javascript.setEnabled = function(enable) {

-		enabled = bool(enable);

-	};

-

-	log4javascript.isEnabled = function() {

-		return enabled;

-	};

-

-	var useTimeStampsInMilliseconds = true;

-

-	log4javascript.setTimeStampsInMilliseconds = function(timeStampsInMilliseconds) {

-		useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);

-	};

-

-	log4javascript.isTimeStampsInMilliseconds = function() {

-		return useTimeStampsInMilliseconds;

-	};

-	

-

-	// This evaluates the given expression in the current scope, thus allowing

-	// scripts to access private variables. Particularly useful for testing

-	log4javascript.evalInScope = function(expr) {

-		return eval(expr);

-	};

-

-	var showStackTraces = false;

-

-	log4javascript.setShowStackTraces = function(show) {

-		showStackTraces = bool(show);

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Levels

-

-	var Level = function(level, name) {

-		this.level = level;

-		this.name = name;

-	};

-

-	Level.prototype = {

-		toString: function() {

-			return this.name;

-		},

-		equals: function(level) {

-			return this.level == level.level;

-		},

-		isGreaterOrEqual: function(level) {

-			return this.level >= level.level;

-		}

-	};

-

-	Level.ALL = new Level(Number.MIN_VALUE, "ALL");

-	Level.TRACE = new Level(10000, "TRACE");

-	Level.DEBUG = new Level(20000, "DEBUG");

-	Level.INFO = new Level(30000, "INFO");

-	Level.WARN = new Level(40000, "WARN");

-	Level.ERROR = new Level(50000, "ERROR");

-	Level.FATAL = new Level(60000, "FATAL");

-	Level.OFF = new Level(Number.MAX_VALUE, "OFF");

-

-	log4javascript.Level = Level;

-

-	/* ---------------------------------------------------------------------- */

-	// Timers

-

-	function Timer(name, level) {

-		this.name = name;

-		this.level = isUndefined(level) ? Level.INFO : level;

-		this.start = new Date();

-	}

-

-	Timer.prototype.getElapsedTime = function() {

-		return new Date().getTime() - this.start.getTime();

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Loggers

-

-	var anonymousLoggerName = "[anonymous]";

-	var defaultLoggerName = "[default]";

-	var nullLoggerName = "[null]";

-	var rootLoggerName = "root";

-

-	function Logger(name) {

-		this.name = name;

-		this.parent = null;

-		this.children = [];

-

-		var appenders = [];

-		var loggerLevel = null;

-		var isRoot = (this.name === rootLoggerName);

-		var isNull = (this.name === nullLoggerName);

-

-		var appenderCache = null;

-		var appenderCacheInvalidated = false;

-		

-		this.addChild = function(childLogger) {

-			this.children.push(childLogger);

-			childLogger.parent = this;

-			childLogger.invalidateAppenderCache();

-		};

-

-		// Additivity

-		var additive = true;

-		this.getAdditivity = function() {

-			return additive;

-		};

-

-		this.setAdditivity = function(additivity) {

-			var valueChanged = (additive != additivity);

-			additive = additivity;

-			if (valueChanged) {

-				this.invalidateAppenderCache();

-			}

-		};

-

-		// Create methods that use the appenders variable in this scope

-		this.addAppender = function(appender) {

-			if (isNull) {

-				handleError("Logger.addAppender: you may not add an appender to the null logger");

-			} else {

-				if (appender instanceof log4javascript.Appender) {

-					if (!array_contains(appenders, appender)) {

-						appenders.push(appender);

-						appender.setAddedToLogger(this);

-						this.invalidateAppenderCache();

-					}

-				} else {

-					handleError("Logger.addAppender: appender supplied ('" +

-						toStr(appender) + "') is not a subclass of Appender");

-				}

-			}

-		};

-

-		this.removeAppender = function(appender) {

-			array_remove(appenders, appender);

-			appender.setRemovedFromLogger(this);

-			this.invalidateAppenderCache();

-		};

-

-		this.removeAllAppenders = function() {

-			var appenderCount = appenders.length;

-			if (appenderCount > 0) {

-				for (var i = 0; i < appenderCount; i++) {

-					appenders[i].setRemovedFromLogger(this);

-				}

-				appenders.length = 0;

-				this.invalidateAppenderCache();

-			}

-		};

-

-		this.getEffectiveAppenders = function() {

-			if (appenderCache === null || appenderCacheInvalidated) {

-				// Build appender cache

-				var parentEffectiveAppenders = (isRoot || !this.getAdditivity()) ?

-					[] : this.parent.getEffectiveAppenders();

-				appenderCache = parentEffectiveAppenders.concat(appenders);

-				appenderCacheInvalidated = false;

-			}

-			return appenderCache;

-		};

-		

-		this.invalidateAppenderCache = function() {

-			appenderCacheInvalidated = true;

-			for (var i = 0, len = this.children.length; i < len; i++) {

-				this.children[i].invalidateAppenderCache();

-			}

-		};

-

-		this.log = function(level, params) {

-			if (enabled && level.isGreaterOrEqual(this.getEffectiveLevel())) {

-				// Check whether last param is an exception

-				var exception;

-				var finalParamIndex = params.length - 1;

-				var lastParam = params[finalParamIndex];

-				if (params.length > 1 && isError(lastParam)) {

-					exception = lastParam;

-					finalParamIndex--;

-				}

-

-				// Construct genuine array for the params

-				var messages = [];

-				for (var i = 0; i <= finalParamIndex; i++) {

-					messages[i] = params[i];

-				}

-

-				var loggingEvent = new LoggingEvent(

-					this, new Date(), level, messages, exception);

-

-				this.callAppenders(loggingEvent);

-			}

-		};

-

-		this.callAppenders = function(loggingEvent) {

-			var effectiveAppenders = this.getEffectiveAppenders();

-			for (var i = 0, len = effectiveAppenders.length; i < len; i++) {

-				effectiveAppenders[i].doAppend(loggingEvent);

-			}

-		};

-

-		this.setLevel = function(level) {

-			// Having a level of null on the root logger would be very bad.

-			if (isRoot && level === null) {

-				handleError("Logger.setLevel: you cannot set the level of the root logger to null");

-			} else if (level instanceof Level) {

-				loggerLevel = level;

-			} else {

-				handleError("Logger.setLevel: level supplied to logger " +

-					this.name + " is not an instance of log4javascript.Level");

-			}

-		};

-

-		this.getLevel = function() {

-			return loggerLevel;

-		};

-

-		this.getEffectiveLevel = function() {

-			for (var logger = this; logger !== null; logger = logger.parent) {

-				var level = logger.getLevel();

-				if (level !== null) {

-					return level;

-				}

-			}

-		};

-

-		this.group = function(name, initiallyExpanded) {

-			if (enabled) {

-				var effectiveAppenders = this.getEffectiveAppenders();

-				for (var i = 0, len = effectiveAppenders.length; i < len; i++) {

-					effectiveAppenders[i].group(name, initiallyExpanded);

-				}

-			}

-		};

-

-		this.groupEnd = function() {

-			if (enabled) {

-				var effectiveAppenders = this.getEffectiveAppenders();

-				for (var i = 0, len = effectiveAppenders.length; i < len; i++) {

-					effectiveAppenders[i].groupEnd();

-				}

-			}

-		};

-

-		var timers = {};

-

-		this.time = function(name, level) {

-			if (enabled) {

-				if (isUndefined(name)) {

-					handleError("Logger.time: a name for the timer must be supplied");

-				} else if (level && !(level instanceof Level)) {

-					handleError("Logger.time: level supplied to timer " +

-						name + " is not an instance of log4javascript.Level");

-				} else {

-					timers[name] = new Timer(name, level);

-				}

-			}

-		};

-

-		this.timeEnd = function(name) {

-			if (enabled) {

-				if (isUndefined(name)) {

-					handleError("Logger.timeEnd: a name for the timer must be supplied");

-				} else if (timers[name]) {

-					var timer = timers[name];

-					var milliseconds = timer.getElapsedTime();

-					this.log(timer.level, ["Timer " + toStr(name) + " completed in " + milliseconds + "ms"]);

-					delete timers[name];

-				} else {

-					logLog.warn("Logger.timeEnd: no timer found with name " + name);

-				}

-			}

-		};

-

-		this.assert = function(expr) {

-			if (enabled && !expr) {

-				var args = [];

-				for (var i = 1, len = arguments.length; i < len; i++) {

-					args.push(arguments[i]);

-				}

-				args = (args.length > 0) ? args : ["Assertion Failure"];

-				args.push(newLine);

-				args.push(expr);

-				this.log(Level.ERROR, args);

-			}

-		};

-

-		this.toString = function() {

-			return "Logger[" + this.name + "]";

-		};

-	}

-

-	Logger.prototype = {

-		trace: function() {

-			this.log(Level.TRACE, arguments);

-		},

-

-		debug: function() {

-			this.log(Level.DEBUG, arguments);

-		},

-

-		info: function() {

-			this.log(Level.INFO, arguments);

-		},

-

-		warn: function() {

-			this.log(Level.WARN, arguments);

-		},

-

-		error: function() {

-			this.log(Level.ERROR, arguments);

-		},

-

-		fatal: function() {

-			this.log(Level.FATAL, arguments);

-		},

-

-		isEnabledFor: function(level) {

-			return level.isGreaterOrEqual(this.getEffectiveLevel());

-		},

-

-		isTraceEnabled: function() {

-			return this.isEnabledFor(Level.TRACE);

-		},

-

-		isDebugEnabled: function() {

-			return this.isEnabledFor(Level.DEBUG);

-		},

-

-		isInfoEnabled: function() {

-			return this.isEnabledFor(Level.INFO);

-		},

-

-		isWarnEnabled: function() {

-			return this.isEnabledFor(Level.WARN);

-		},

-

-		isErrorEnabled: function() {

-			return this.isEnabledFor(Level.ERROR);

-		},

-

-		isFatalEnabled: function() {

-			return this.isEnabledFor(Level.FATAL);

-		}

-	};

-

-	Logger.prototype.trace.isEntryPoint = true;

-	Logger.prototype.debug.isEntryPoint = true;

-	Logger.prototype.info.isEntryPoint = true;

-	Logger.prototype.warn.isEntryPoint = true;

-	Logger.prototype.error.isEntryPoint = true;

-	Logger.prototype.fatal.isEntryPoint = true;

-

-	/* ---------------------------------------------------------------------- */

-	// Logger access methods

-

-	// Hashtable of loggers keyed by logger name

-	var loggers = {};

-	var loggerNames = [];

-

-	var ROOT_LOGGER_DEFAULT_LEVEL = Level.DEBUG;

-	var rootLogger = new Logger(rootLoggerName);

-	rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);

-

-	log4javascript.getRootLogger = function() {

-		return rootLogger;

-	};

-

-	log4javascript.getLogger = function(loggerName) {

-		// Use default logger if loggerName is not specified or invalid

-		if (!(typeof loggerName == "string")) {

-			loggerName = anonymousLoggerName;

-			logLog.warn("log4javascript.getLogger: non-string logger name "	+

-				toStr(loggerName) + " supplied, returning anonymous logger");

-		}

-

-		// Do not allow retrieval of the root logger by name

-		if (loggerName == rootLoggerName) {

-			handleError("log4javascript.getLogger: root logger may not be obtained by name");

-		}

-

-		// Create the logger for this name if it doesn't already exist

-		if (!loggers[loggerName]) {

-			var logger = new Logger(loggerName);

-			loggers[loggerName] = logger;

-			loggerNames.push(loggerName);

-

-			// Set up parent logger, if it doesn't exist

-			var lastDotIndex = loggerName.lastIndexOf(".");

-			var parentLogger;

-			if (lastDotIndex > -1) {

-				var parentLoggerName = loggerName.substring(0, lastDotIndex);

-				parentLogger = log4javascript.getLogger(parentLoggerName); // Recursively sets up grandparents etc.

-			} else {

-				parentLogger = rootLogger;

-			}

-			parentLogger.addChild(logger);

-		}

-		return loggers[loggerName];

-	};

-

-	var defaultLogger = null;

-	log4javascript.getDefaultLogger = function() {

-		if (!defaultLogger) {

-			defaultLogger = log4javascript.getLogger(defaultLoggerName);

-			var a = new log4javascript.PopUpAppender();

-			defaultLogger.addAppender(a);

-		}

-		return defaultLogger;

-	};

-

-	var nullLogger = null;

-	log4javascript.getNullLogger = function() {

-		if (!nullLogger) {

-			nullLogger = new Logger(nullLoggerName);

-			nullLogger.setLevel(Level.OFF);

-		}

-		return nullLogger;

-	};

-

-	// Destroys all loggers

-	log4javascript.resetConfiguration = function() {

-		rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);

-		loggers = {};

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Logging events

-

-	var LoggingEvent = function(logger, timeStamp, level, messages,

-			exception) {

-		this.logger = logger;

-		this.timeStamp = timeStamp;

-		this.timeStampInMilliseconds = timeStamp.getTime();

-		this.timeStampInSeconds = Math.floor(this.timeStampInMilliseconds / 1000);

-		this.milliseconds = this.timeStamp.getMilliseconds();

-		this.level = level;

-		this.messages = messages;

-		this.exception = exception;

-	};

-

-	LoggingEvent.prototype = {

-		getThrowableStrRep: function() {

-			return this.exception ?

-				getExceptionStringRep(this.exception) : "";

-		},

-		getCombinedMessages: function() {

-			return (this.messages.length == 1) ? this.messages[0] :

-				   this.messages.join(newLine);

-		},

-		toString: function() {

-			return "LoggingEvent[" + this.level + "]";

-		}

-	};

-

-	log4javascript.LoggingEvent = LoggingEvent;

-

-	/* ---------------------------------------------------------------------- */

-	// Layout prototype

-

-	var Layout = function() {

-	};

-

-	Layout.prototype = {

-		defaults: {

-			loggerKey: "logger",

-			timeStampKey: "timestamp",

-			millisecondsKey: "milliseconds",

-			levelKey: "level",

-			messageKey: "message",

-			exceptionKey: "exception",

-			urlKey: "url"

-		},

-		loggerKey: "logger",

-		timeStampKey: "timestamp",

-		millisecondsKey: "milliseconds",

-		levelKey: "level",

-		messageKey: "message",

-		exceptionKey: "exception",

-		urlKey: "url",

-		batchHeader: "",

-		batchFooter: "",

-		batchSeparator: "",

-		returnsPostData: false,

-		overrideTimeStampsSetting: false,

-		useTimeStampsInMilliseconds: null,

-

-		format: function() {

-			handleError("Layout.format: layout supplied has no format() method");

-		},

-

-		ignoresThrowable: function() {

-			handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");

-		},

-

-		getContentType: function() {

-			return "text/plain";

-		},

-

-		allowBatching: function() {

-			return true;

-		},

-

-		setTimeStampsInMilliseconds: function(timeStampsInMilliseconds) {

-			this.overrideTimeStampsSetting = true;

-			this.useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);

-		},

-

-		isTimeStampsInMilliseconds: function() {

-			return this.overrideTimeStampsSetting ?

-				this.useTimeStampsInMilliseconds : useTimeStampsInMilliseconds;

-		},

-

-		getTimeStampValue: function(loggingEvent) {

-			return this.isTimeStampsInMilliseconds() ?

-				loggingEvent.timeStampInMilliseconds : loggingEvent.timeStampInSeconds;

-		},

-

-		getDataValues: function(loggingEvent, combineMessages) {

-			var dataValues = [

-				[this.loggerKey, loggingEvent.logger.name],

-				[this.timeStampKey, this.getTimeStampValue(loggingEvent)],

-				[this.levelKey, loggingEvent.level.name],

-				[this.urlKey, window.location.href],

-				[this.messageKey, combineMessages ? loggingEvent.getCombinedMessages() : loggingEvent.messages]

-			];

-			if (!this.isTimeStampsInMilliseconds()) {

-				dataValues.push([this.millisecondsKey, loggingEvent.milliseconds]);

-			}

-			if (loggingEvent.exception) {

-				dataValues.push([this.exceptionKey, getExceptionStringRep(loggingEvent.exception)]);

-			}

-			if (this.hasCustomFields()) {

-				for (var i = 0, len = this.customFields.length; i < len; i++) {

-					var val = this.customFields[i].value;

-

-					// Check if the value is a function. If so, execute it, passing it the

-					// current layout and the logging event

-					if (typeof val === "function") {

-						val = val(this, loggingEvent);

-					}

-					dataValues.push([this.customFields[i].name, val]);

-				}

-			}

-			return dataValues;

-		},

-

-		setKeys: function(loggerKey, timeStampKey, levelKey, messageKey,

-				exceptionKey, urlKey, millisecondsKey) {

-			this.loggerKey = extractStringFromParam(loggerKey, this.defaults.loggerKey);

-			this.timeStampKey = extractStringFromParam(timeStampKey, this.defaults.timeStampKey);

-			this.levelKey = extractStringFromParam(levelKey, this.defaults.levelKey);

-			this.messageKey = extractStringFromParam(messageKey, this.defaults.messageKey);

-			this.exceptionKey = extractStringFromParam(exceptionKey, this.defaults.exceptionKey);

-			this.urlKey = extractStringFromParam(urlKey, this.defaults.urlKey);

-			this.millisecondsKey = extractStringFromParam(millisecondsKey, this.defaults.millisecondsKey);

-		},

-

-		setCustomField: function(name, value) {

-			var fieldUpdated = false;

-			for (var i = 0, len = this.customFields.length; i < len; i++) {

-				if (this.customFields[i].name === name) {

-					this.customFields[i].value = value;

-					fieldUpdated = true;

-				}

-			}

-			if (!fieldUpdated) {

-				this.customFields.push({"name": name, "value": value});

-			}

-		},

-

-		hasCustomFields: function() {

-			return (this.customFields.length > 0);

-		},

-

-		toString: function() {

-			handleError("Layout.toString: all layouts must override this method");

-		}

-	};

-

-	log4javascript.Layout = Layout;

-

-	/* ---------------------------------------------------------------------- */

-	// Appender prototype

-

-	var Appender = function() {};

-

-	Appender.prototype = new EventSupport();

-

-	Appender.prototype.layout = new PatternLayout();

-	Appender.prototype.threshold = Level.ALL;

-	Appender.prototype.loggers = [];

-

-	// Performs threshold checks before delegating actual logging to the

-	// subclass's specific append method.

-	Appender.prototype.doAppend = function(loggingEvent) {

-		if (enabled && loggingEvent.level.level >= this.threshold.level) {

-			this.append(loggingEvent);

-		}

-	};

-

-	Appender.prototype.append = function(loggingEvent) {};

-

-	Appender.prototype.setLayout = function(layout) {

-		if (layout instanceof Layout) {

-			this.layout = layout;

-		} else {

-			handleError("Appender.setLayout: layout supplied to " +

-				this.toString() + " is not a subclass of Layout");

-		}

-	};

-

-	Appender.prototype.getLayout = function() {

-		return this.layout;

-	};

-

-	Appender.prototype.setThreshold = function(threshold) {

-		if (threshold instanceof Level) {

-			this.threshold = threshold;

-		} else {

-			handleError("Appender.setThreshold: threshold supplied to " +

-				this.toString() + " is not a subclass of Level");

-		}

-	};

-

-	Appender.prototype.getThreshold = function() {

-		return this.threshold;

-	};

-

-	Appender.prototype.setAddedToLogger = function(logger) {

-		this.loggers.push(logger);

-	};

-

-	Appender.prototype.setRemovedFromLogger = function(logger) {

-		array_remove(this.loggers, logger);

-	};

-

-	Appender.prototype.group = emptyFunction;

-	Appender.prototype.groupEnd = emptyFunction;

-

-	Appender.prototype.toString = function() {

-		handleError("Appender.toString: all appenders must override this method");

-	};

-

-	log4javascript.Appender = Appender;

-

-	/* ---------------------------------------------------------------------- */

-	// SimpleLayout 

-

-	function SimpleLayout() {

-		this.customFields = [];

-	}

-

-	SimpleLayout.prototype = new Layout();

-

-	SimpleLayout.prototype.format = function(loggingEvent) {

-		return loggingEvent.level.name + " - " + loggingEvent.getCombinedMessages();

-	};

-

-	SimpleLayout.prototype.ignoresThrowable = function() {

-	    return true;

-	};

-

-	SimpleLayout.prototype.toString = function() {

-	    return "SimpleLayout";

-	};

-

-	log4javascript.SimpleLayout = SimpleLayout;

-	/* ----------------------------------------------------------------------- */

-	// NullLayout 

-

-	function NullLayout() {

-		this.customFields = [];

-	}

-

-	NullLayout.prototype = new Layout();

-

-	NullLayout.prototype.format = function(loggingEvent) {

-		return loggingEvent.messages;

-	};

-

-	NullLayout.prototype.ignoresThrowable = function() {

-	    return true;

-	};

-

-	NullLayout.prototype.toString = function() {

-	    return "NullLayout";

-	};

-

-	log4javascript.NullLayout = NullLayout;

-/* ---------------------------------------------------------------------- */

-	// XmlLayout

-

-	function XmlLayout(combineMessages) {

-		this.combineMessages = extractBooleanFromParam(combineMessages, true);

-		this.customFields = [];

-	}

-

-	XmlLayout.prototype = new Layout();

-

-	XmlLayout.prototype.isCombinedMessages = function() {

-		return this.combineMessages;

-	};

-

-	XmlLayout.prototype.getContentType = function() {

-		return "text/xml";

-	};

-

-	XmlLayout.prototype.escapeCdata = function(str) {

-		return str.replace(/\]\]>/, "]]>]]&gt;<![CDATA[");

-	};

-

-	XmlLayout.prototype.format = function(loggingEvent) {

-		var layout = this;

-		var i, len;

-		function formatMessage(message) {

-			message = (typeof message === "string") ? message : toStr(message);

-			return "<log4javascript:message><![CDATA[" +

-				layout.escapeCdata(message) + "]]></log4javascript:message>";

-		}

-

-		var str = "<log4javascript:event logger=\"" + loggingEvent.logger.name +

-			"\" timestamp=\"" + this.getTimeStampValue(loggingEvent) + "\"";

-		if (!this.isTimeStampsInMilliseconds()) {

-			str += " milliseconds=\"" + loggingEvent.milliseconds + "\"";

-		}

-		str += " level=\"" + loggingEvent.level.name + "\">" + newLine;

-		if (this.combineMessages) {

-			str += formatMessage(loggingEvent.getCombinedMessages());

-		} else {

-			str += "<log4javascript:messages>" + newLine;

-			for (i = 0, len = loggingEvent.messages.length; i < len; i++) {

-				str += formatMessage(loggingEvent.messages[i]) + newLine;

-			}

-			str += "</log4javascript:messages>" + newLine;

-		}

-		if (this.hasCustomFields()) {

-			for (i = 0, len = this.customFields.length; i < len; i++) {

-				str += "<log4javascript:customfield name=\"" +

-					this.customFields[i].name + "\"><![CDATA[" +

-					this.customFields[i].value.toString() +

-					"]]></log4javascript:customfield>" + newLine;

-			}

-		}

-		if (loggingEvent.exception) {

-			str += "<log4javascript:exception><![CDATA[" +

-				getExceptionStringRep(loggingEvent.exception) +

-				"]]></log4javascript:exception>" + newLine;

-		}

-		str += "</log4javascript:event>" + newLine + newLine;

-		return str;

-	};

-

-	XmlLayout.prototype.ignoresThrowable = function() {

-	    return false;

-	};

-

-	XmlLayout.prototype.toString = function() {

-	    return "XmlLayout";

-	};

-

-	log4javascript.XmlLayout = XmlLayout;

-	/* ---------------------------------------------------------------------- */

-	// JsonLayout related

-

-	function escapeNewLines(str) {

-		return str.replace(/\r\n|\r|\n/g, "\\r\\n");

-	}

-

-	function JsonLayout(readable, combineMessages) {

-		this.readable = extractBooleanFromParam(readable, false);

-		this.combineMessages = extractBooleanFromParam(combineMessages, true);

-		this.batchHeader = this.readable ? "[" + newLine : "[";

-		this.batchFooter = this.readable ? "]" + newLine : "]";

-		this.batchSeparator = this.readable ? "," + newLine : ",";

-		this.setKeys();

-		this.colon = this.readable ? ": " : ":";

-		this.tab = this.readable ? "\t" : "";

-		this.lineBreak = this.readable ? newLine : "";

-		this.customFields = [];

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// JsonLayout

-

-	JsonLayout.prototype = new Layout();

-

-	JsonLayout.prototype.isReadable = function() {

-		return this.readable;

-	};

-

-	JsonLayout.prototype.isCombinedMessages = function() {

-		return this.combineMessages;

-	};

-

-    JsonLayout.prototype.format = function(loggingEvent) {

-        var layout = this;

-        var dataValues = this.getDataValues(loggingEvent, this.combineMessages);

-        var str = "{" + this.lineBreak;

-        var i, len;

-

-        function formatValue(val, prefix, expand) {

-            // Check the type of the data value to decide whether quotation marks

-            // or expansion are required

-            var formattedValue;

-            var valType = typeof val;

-            if (val instanceof Date) {

-                formattedValue = String(val.getTime());

-            } else if (expand && (val instanceof Array)) {

-                formattedValue = "[" + layout.lineBreak;

-                for (var i = 0, len = val.length; i < len; i++) {

-                    var childPrefix = prefix + layout.tab;

-                    formattedValue += childPrefix + formatValue(val[i], childPrefix, false);

-                    if (i < val.length - 1) {

-                        formattedValue += ",";

-                    }

-                    formattedValue += layout.lineBreak;

-                }

-                formattedValue += prefix + "]";

-            } else if (valType !== "number" && valType !== "boolean") {

-                formattedValue = "\"" + escapeNewLines(toStr(val).replace(/\"/g, "\\\"")) + "\"";

-            } else {

-                formattedValue = val;

-            }

-            return formattedValue;

-        }

-

-        for (i = 0, len = dataValues.length - 1; i <= len; i++) {

-            str += this.tab + "\"" + dataValues[i][0] + "\"" + this.colon + formatValue(dataValues[i][1], this.tab, true);

-            if (i < len) {

-                str += ",";

-            }

-            str += this.lineBreak;

-        }

-

-        str += "}" + this.lineBreak;

-        return str;

-    };

-

-	JsonLayout.prototype.ignoresThrowable = function() {

-	    return false;

-	};

-

-	JsonLayout.prototype.toString = function() {

-	    return "JsonLayout";

-	};

-

-	JsonLayout.prototype.getContentType = function() {

-		return "application/json";

-	};

-

-	log4javascript.JsonLayout = JsonLayout;

-	/* ---------------------------------------------------------------------- */

-	// HttpPostDataLayout

-

-	function HttpPostDataLayout() {

-		this.setKeys();

-		this.customFields = [];

-		this.returnsPostData = true;

-	}

-

-	HttpPostDataLayout.prototype = new Layout();

-

-	// Disable batching

-	HttpPostDataLayout.prototype.allowBatching = function() {

-		return false;

-	};

-

-	HttpPostDataLayout.prototype.format = function(loggingEvent) {

-		var dataValues = this.getDataValues(loggingEvent);

-		var queryBits = [];

-		for (var i = 0, len = dataValues.length; i < len; i++) {

-			var val = (dataValues[i][1] instanceof Date) ?

-				String(dataValues[i][1].getTime()) : dataValues[i][1];

-			queryBits.push(urlEncode(dataValues[i][0]) + "=" + urlEncode(val));

-		}

-		return queryBits.join("&");

-	};

-

-	HttpPostDataLayout.prototype.ignoresThrowable = function(loggingEvent) {

-	    return false;

-	};

-

-	HttpPostDataLayout.prototype.toString = function() {

-	    return "HttpPostDataLayout";

-	};

-

-	log4javascript.HttpPostDataLayout = HttpPostDataLayout;

-	/* ---------------------------------------------------------------------- */

-	// formatObjectExpansion

-

-	function formatObjectExpansion(obj, depth, indentation) {

-		var objectsExpanded = [];

-

-		function doFormat(obj, depth, indentation) {

-			var i, j, len, childDepth, childIndentation, childLines, expansion,

-				childExpansion;

-

-			if (!indentation) {

-				indentation = "";

-			}

-

-			function formatString(text) {

-				var lines = splitIntoLines(text);

-				for (var j = 1, jLen = lines.length; j < jLen; j++) {

-					lines[j] = indentation + lines[j];

-				}

-				return lines.join(newLine);

-			}

-

-			if (obj === null) {

-				return "null";

-			} else if (typeof obj == "undefined") {

-				return "undefined";

-			} else if (typeof obj == "string") {

-				return formatString(obj);

-			} else if (typeof obj == "object" && array_contains(objectsExpanded, obj)) {

-				try {

-					expansion = toStr(obj);

-				} catch (ex) {

-					expansion = "Error formatting property. Details: " + getExceptionStringRep(ex);

-				}

-				return expansion + " [already expanded]";

-			} else if ((obj instanceof Array) && depth > 0) {

-				objectsExpanded.push(obj);

-				expansion = "[" + newLine;

-				childDepth = depth - 1;

-				childIndentation = indentation + "  ";

-				childLines = [];

-				for (i = 0, len = obj.length; i < len; i++) {

-					try {

-						childExpansion = doFormat(obj[i], childDepth, childIndentation);

-						childLines.push(childIndentation + childExpansion);

-					} catch (ex) {

-						childLines.push(childIndentation + "Error formatting array member. Details: " +

-							getExceptionStringRep(ex) + "");

-					}

-				}

-				expansion += childLines.join("," + newLine) + newLine + indentation + "]";

-				return expansion;

-            } else if (Object.prototype.toString.call(obj) == "[object Date]") {

-                return obj.toString();

-			} else if (typeof obj == "object" && depth > 0) {

-				objectsExpanded.push(obj);

-				expansion = "{" + newLine;

-				childDepth = depth - 1;

-				childIndentation = indentation + "  ";

-				childLines = [];

-				for (i in obj) {

-					try {

-						childExpansion = doFormat(obj[i], childDepth, childIndentation);

-						childLines.push(childIndentation + i + ": " + childExpansion);

-					} catch (ex) {

-						childLines.push(childIndentation + i + ": Error formatting property. Details: " +

-							getExceptionStringRep(ex));

-					}

-				}

-				expansion += childLines.join("," + newLine) + newLine + indentation + "}";

-				return expansion;

-			} else {

-				return formatString(toStr(obj));

-			}

-		}

-		return doFormat(obj, depth, indentation);

-	}

-	/* ---------------------------------------------------------------------- */

-	// Date-related stuff

-

-	var SimpleDateFormat;

-

-	(function() {

-		var regex = /('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;

-		var monthNames = ["January", "February", "March", "April", "May", "June",

-			"July", "August", "September", "October", "November", "December"];

-		var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

-		var TEXT2 = 0, TEXT3 = 1, NUMBER = 2, YEAR = 3, MONTH = 4, TIMEZONE = 5;

-		var types = {

-			G : TEXT2,

-			y : YEAR,

-			M : MONTH,

-			w : NUMBER,

-			W : NUMBER,

-			D : NUMBER,

-			d : NUMBER,

-			F : NUMBER,

-			E : TEXT3,

-			a : TEXT2,

-			H : NUMBER,

-			k : NUMBER,

-			K : NUMBER,

-			h : NUMBER,

-			m : NUMBER,

-			s : NUMBER,

-			S : NUMBER,

-			Z : TIMEZONE

-		};

-		var ONE_DAY = 24 * 60 * 60 * 1000;

-		var ONE_WEEK = 7 * ONE_DAY;

-		var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK = 1;

-

-		var newDateAtMidnight = function(year, month, day) {

-			var d = new Date(year, month, day, 0, 0, 0);

-			d.setMilliseconds(0);

-			return d;

-		};

-

-		Date.prototype.getDifference = function(date) {

-			return this.getTime() - date.getTime();

-		};

-

-		Date.prototype.isBefore = function(d) {

-			return this.getTime() < d.getTime();

-		};

-

-		Date.prototype.getUTCTime = function() {

-			return Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(),

-					this.getSeconds(), this.getMilliseconds());

-		};

-

-		Date.prototype.getTimeSince = function(d) {

-			return this.getUTCTime() - d.getUTCTime();

-		};

-

-		Date.prototype.getPreviousSunday = function() {

-			// Using midday avoids any possibility of DST messing things up

-			var midday = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 12, 0, 0);

-			var previousSunday = new Date(midday.getTime() - this.getDay() * ONE_DAY);

-			return newDateAtMidnight(previousSunday.getFullYear(), previousSunday.getMonth(),

-					previousSunday.getDate());

-		};

-

-		Date.prototype.getWeekInYear = function(minimalDaysInFirstWeek) {

-			if (isUndefined(this.minimalDaysInFirstWeek)) {

-				minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;

-			}

-			var previousSunday = this.getPreviousSunday();

-			var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);

-			var numberOfSundays = previousSunday.isBefore(startOfYear) ?

-				0 : 1 + Math.floor(previousSunday.getTimeSince(startOfYear) / ONE_WEEK);

-			var numberOfDaysInFirstWeek =  7 - startOfYear.getDay();

-			var weekInYear = numberOfSundays;

-			if (numberOfDaysInFirstWeek < minimalDaysInFirstWeek) {

-				weekInYear--;

-			}

-			return weekInYear;

-		};

-

-		Date.prototype.getWeekInMonth = function(minimalDaysInFirstWeek) {

-			if (isUndefined(this.minimalDaysInFirstWeek)) {

-				minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;

-			}

-			var previousSunday = this.getPreviousSunday();

-			var startOfMonth = newDateAtMidnight(this.getFullYear(), this.getMonth(), 1);

-			var numberOfSundays = previousSunday.isBefore(startOfMonth) ?

-				0 : 1 + Math.floor(previousSunday.getTimeSince(startOfMonth) / ONE_WEEK);

-			var numberOfDaysInFirstWeek =  7 - startOfMonth.getDay();

-			var weekInMonth = numberOfSundays;

-			if (numberOfDaysInFirstWeek >= minimalDaysInFirstWeek) {

-				weekInMonth++;

-			}

-			return weekInMonth;

-		};

-

-		Date.prototype.getDayInYear = function() {

-			var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);

-			return 1 + Math.floor(this.getTimeSince(startOfYear) / ONE_DAY);

-		};

-

-		/* ------------------------------------------------------------------ */

-

-		SimpleDateFormat = function(formatString) {

-			this.formatString = formatString;

-		};

-

-		/**

-		 * Sets the minimum number of days in a week in order for that week to

-		 * be considered as belonging to a particular month or year

-		 */

-		SimpleDateFormat.prototype.setMinimalDaysInFirstWeek = function(days) {

-			this.minimalDaysInFirstWeek = days;

-		};

-

-		SimpleDateFormat.prototype.getMinimalDaysInFirstWeek = function() {

-			return isUndefined(this.minimalDaysInFirstWeek)	?

-				DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK : this.minimalDaysInFirstWeek;

-		};

-

-		var padWithZeroes = function(str, len) {

-			while (str.length < len) {

-				str = "0" + str;

-			}

-			return str;

-		};

-

-		var formatText = function(data, numberOfLetters, minLength) {

-			return (numberOfLetters >= 4) ? data : data.substr(0, Math.max(minLength, numberOfLetters));

-		};

-

-		var formatNumber = function(data, numberOfLetters) {

-			var dataString = "" + data;

-			// Pad with 0s as necessary

-			return padWithZeroes(dataString, numberOfLetters);

-		};

-

-		SimpleDateFormat.prototype.format = function(date) {

-			var formattedString = "";

-			var result;

-			var searchString = this.formatString;

-			while ((result = regex.exec(searchString))) {

-				var quotedString = result[1];

-				var patternLetters = result[2];

-				var otherLetters = result[3];

-				var otherCharacters = result[4];

-

-				// If the pattern matched is quoted string, output the text between the quotes

-				if (quotedString) {

-					if (quotedString == "''") {

-						formattedString += "'";

-					} else {

-						formattedString += quotedString.substring(1, quotedString.length - 1);

-					}

-				} else if (otherLetters) {

-					// Swallow non-pattern letters by doing nothing here

-				} else if (otherCharacters) {

-					// Simply output other characters

-					formattedString += otherCharacters;

-				} else if (patternLetters) {

-					// Replace pattern letters

-					var patternLetter = patternLetters.charAt(0);

-					var numberOfLetters = patternLetters.length;

-					var rawData = "";

-					switch(patternLetter) {

-						case "G":

-							rawData = "AD";

-							break;

-						case "y":

-							rawData = date.getFullYear();

-							break;

-						case "M":

-							rawData = date.getMonth();

-							break;

-						case "w":

-							rawData = date.getWeekInYear(this.getMinimalDaysInFirstWeek());

-							break;

-						case "W":

-							rawData = date.getWeekInMonth(this.getMinimalDaysInFirstWeek());

-							break;

-						case "D":

-							rawData = date.getDayInYear();

-							break;

-						case "d":

-							rawData = date.getDate();

-							break;

-						case "F":

-							rawData = 1 + Math.floor((date.getDate() - 1) / 7);

-							break;

-						case "E":

-							rawData = dayNames[date.getDay()];

-							break;

-						case "a":

-							rawData = (date.getHours() >= 12) ? "PM" : "AM";

-							break;

-						case "H":

-							rawData = date.getHours();

-							break;

-						case "k":

-							rawData = date.getHours() || 24;

-							break;

-						case "K":

-							rawData = date.getHours() % 12;

-							break;

-						case "h":

-							rawData = (date.getHours() % 12) || 12;

-							break;

-						case "m":

-							rawData = date.getMinutes();

-							break;

-						case "s":

-							rawData = date.getSeconds();

-							break;

-						case "S":

-							rawData = date.getMilliseconds();

-							break;

-						case "Z":

-							rawData = date.getTimezoneOffset(); // This returns the number of minutes since GMT was this time.

-							break;

-					}

-					// Format the raw data depending on the type

-					switch(types[patternLetter]) {

-						case TEXT2:

-							formattedString += formatText(rawData, numberOfLetters, 2);

-							break;

-						case TEXT3:

-							formattedString += formatText(rawData, numberOfLetters, 3);

-							break;

-						case NUMBER:

-							formattedString += formatNumber(rawData, numberOfLetters);

-							break;

-						case YEAR:

-							if (numberOfLetters <= 3) {

-								// Output a 2-digit year

-								var dataString = "" + rawData;

-								formattedString += dataString.substr(2, 2);

-							} else {

-								formattedString += formatNumber(rawData, numberOfLetters);

-							}

-							break;

-						case MONTH:

-							if (numberOfLetters >= 3) {

-								formattedString += formatText(monthNames[rawData], numberOfLetters, numberOfLetters);

-							} else {

-								// NB. Months returned by getMonth are zero-based

-								formattedString += formatNumber(rawData + 1, numberOfLetters);

-							}

-							break;

-						case TIMEZONE:

-							var isPositive = (rawData > 0);

-							// The following line looks like a mistake but isn't

-							// because of the way getTimezoneOffset measures.

-							var prefix = isPositive ? "-" : "+";

-							var absData = Math.abs(rawData);

-

-							// Hours

-							var hours = "" + Math.floor(absData / 60);

-							hours = padWithZeroes(hours, 2);

-							// Minutes

-							var minutes = "" + (absData % 60);

-							minutes = padWithZeroes(minutes, 2);

-

-							formattedString += prefix + hours + minutes;

-							break;

-					}

-				}

-				searchString = searchString.substr(result.index + result[0].length);

-			}

-			return formattedString;

-		};

-	})();

-

-	log4javascript.SimpleDateFormat = SimpleDateFormat;

-

-	/* ---------------------------------------------------------------------- */

-	// PatternLayout

-

-	function PatternLayout(pattern) {

-		if (pattern) {

-			this.pattern = pattern;

-		} else {

-			this.pattern = PatternLayout.DEFAULT_CONVERSION_PATTERN;

-		}

-		this.customFields = [];

-	}

-

-	PatternLayout.TTCC_CONVERSION_PATTERN = "%r %p %c - %m%n";

-	PatternLayout.DEFAULT_CONVERSION_PATTERN = "%m%n";

-	PatternLayout.ISO8601_DATEFORMAT = "yyyy-MM-dd HH:mm:ss,SSS";

-	PatternLayout.DATETIME_DATEFORMAT = "dd MMM yyyy HH:mm:ss,SSS";

-	PatternLayout.ABSOLUTETIME_DATEFORMAT = "HH:mm:ss,SSS";

-

-	PatternLayout.prototype = new Layout();

-

-	PatternLayout.prototype.format = function(loggingEvent) {

-		var regex = /%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;

-		var formattedString = "";

-		var result;

-		var searchString = this.pattern;

-

-		// Cannot use regex global flag since it doesn't work with exec in IE5

-		while ((result = regex.exec(searchString))) {

-			var matchedString = result[0];

-			var padding = result[1];

-			var truncation = result[2];

-			var conversionCharacter = result[3];

-			var specifier = result[5];

-			var text = result[6];

-

-			// Check if the pattern matched was just normal text

-			if (text) {

-				formattedString += "" + text;

-			} else {

-				// Create a raw replacement string based on the conversion

-				// character and specifier

-				var replacement = "";

-				switch(conversionCharacter) {

-					case "a": // Array of messages

-					case "m": // Message

-						var depth = 0;

-						if (specifier) {

-							depth = parseInt(specifier, 10);

-							if (isNaN(depth)) {

-								handleError("PatternLayout.format: invalid specifier '" +

-									specifier + "' for conversion character '" + conversionCharacter +

-									"' - should be a number");

-								depth = 0;

-							}

-						}

-						var messages = (conversionCharacter === "a") ? loggingEvent.messages[0] : loggingEvent.messages;

-						for (var i = 0, len = messages.length; i < len; i++) {

-							if (i > 0 && (replacement.charAt(replacement.length - 1) !== " ")) {

-								replacement += " ";

-							}

-							if (depth === 0) {

-								replacement += messages[i];

-							} else {

-								replacement += formatObjectExpansion(messages[i], depth);

-							}

-						}

-						break;

-					case "c": // Logger name

-						var loggerName = loggingEvent.logger.name;

-						if (specifier) {

-							var precision = parseInt(specifier, 10);

-							var loggerNameBits = loggingEvent.logger.name.split(".");

-							if (precision >= loggerNameBits.length) {

-								replacement = loggerName;

-							} else {

-								replacement = loggerNameBits.slice(loggerNameBits.length - precision).join(".");

-							}

-						} else {

-							replacement = loggerName;

-						}

-						break;

-					case "d": // Date

-						var dateFormat = PatternLayout.ISO8601_DATEFORMAT;

-						if (specifier) {

-							dateFormat = specifier;

-							// Pick up special cases

-							if (dateFormat == "ISO8601") {

-								dateFormat = PatternLayout.ISO8601_DATEFORMAT;

-							} else if (dateFormat == "ABSOLUTE") {

-								dateFormat = PatternLayout.ABSOLUTETIME_DATEFORMAT;

-							} else if (dateFormat == "DATE") {

-								dateFormat = PatternLayout.DATETIME_DATEFORMAT;

-							}

-						}

-						// Format the date

-						replacement = (new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);

-						break;

-					case "f": // Custom field

-						if (this.hasCustomFields()) {

-							var fieldIndex = 0;

-							if (specifier) {

-								fieldIndex = parseInt(specifier, 10);

-								if (isNaN(fieldIndex)) {

-									handleError("PatternLayout.format: invalid specifier '" +

-										specifier + "' for conversion character 'f' - should be a number");

-								} else if (fieldIndex === 0) {

-									handleError("PatternLayout.format: invalid specifier '" +

-										specifier + "' for conversion character 'f' - must be greater than zero");

-								} else if (fieldIndex > this.customFields.length) {

-									handleError("PatternLayout.format: invalid specifier '" +

-										specifier + "' for conversion character 'f' - there aren't that many custom fields");

-								} else {

-									fieldIndex = fieldIndex - 1;

-								}

-							}

-                            var val = this.customFields[fieldIndex].value;

-                            if (typeof val == "function") {

-                                val = val(this, loggingEvent);

-                            }

-                            replacement = val;

-						}

-						break;

-					case "n": // New line

-						replacement = newLine;

-						break;

-					case "p": // Level

-						replacement = loggingEvent.level.name;

-						break;

-					case "r": // Milliseconds since log4javascript startup

-						replacement = "" + loggingEvent.timeStamp.getDifference(applicationStartDate);

-						break;

-					case "%": // Literal % sign

-						replacement = "%";

-						break;

-					default:

-						replacement = matchedString;

-						break;

-				}

-				// Format the replacement according to any padding or

-				// truncation specified

-				var l;

-

-				// First, truncation

-				if (truncation) {

-					l = parseInt(truncation.substr(1), 10);

-					var strLen = replacement.length;

-					if (l < strLen) {

-						replacement = replacement.substring(strLen - l, strLen);

-					}

-				}

-				// Next, padding

-				if (padding) {

-					if (padding.charAt(0) == "-") {

-						l = parseInt(padding.substr(1), 10);

-						// Right pad with spaces

-						while (replacement.length < l) {

-							replacement += " ";

-						}

-					} else {

-						l = parseInt(padding, 10);

-						// Left pad with spaces

-						while (replacement.length < l) {

-							replacement = " " + replacement;

-						}

-					}

-				}

-				formattedString += replacement;

-			}

-			searchString = searchString.substr(result.index + result[0].length);

-		}

-		return formattedString;

-	};

-

-	PatternLayout.prototype.ignoresThrowable = function() {

-	    return true;

-	};

-

-	PatternLayout.prototype.toString = function() {

-	    return "PatternLayout";

-	};

-

-	log4javascript.PatternLayout = PatternLayout;

-	/* ---------------------------------------------------------------------- */

-	// AjaxAppender related

-

-	var xmlHttpFactories = [

-		function() { return new XMLHttpRequest(); },

-		function() { return new ActiveXObject("Msxml2.XMLHTTP"); },

-		function() { return new ActiveXObject("Microsoft.XMLHTTP"); }

-	];

-

-	var getXmlHttp = function(errorHandler) {

-		// This is only run the first time; the value of getXmlHttp gets

-		// replaced with the factory that succeeds on the first run

-		var xmlHttp = null, factory;

-		for (var i = 0, len = xmlHttpFactories.length; i < len; i++) {

-			factory = xmlHttpFactories[i];

-			try {

-				xmlHttp = factory();

-				getXmlHttp = factory;

-				return xmlHttp;

-			} catch (e) {

-			}

-		}

-		// If we're here, all factories have failed, so throw an error

-		if (errorHandler) {

-			errorHandler();

-		} else {

-			handleError("getXmlHttp: unable to obtain XMLHttpRequest object");

-		}

-	};

-

-	function isHttpRequestSuccessful(xmlHttp) {

-		return isUndefined(xmlHttp.status) || xmlHttp.status === 0 ||

-			(xmlHttp.status >= 200 && xmlHttp.status < 300) ||

-			xmlHttp.status == 1223 /* Fix for IE */;

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// AjaxAppender

-

-	function AjaxAppender(url) {

-		var appender = this;

-		var isSupported = true;

-		if (!url) {

-			handleError("AjaxAppender: URL must be specified in constructor");

-			isSupported = false;

-		}

-

-		var timed = this.defaults.timed;

-		var waitForResponse = this.defaults.waitForResponse;

-		var batchSize = this.defaults.batchSize;

-		var timerInterval = this.defaults.timerInterval;

-		var requestSuccessCallback = this.defaults.requestSuccessCallback;

-		var failCallback = this.defaults.failCallback;

-		var postVarName = this.defaults.postVarName;

-		var sendAllOnUnload = this.defaults.sendAllOnUnload;

-		var contentType = this.defaults.contentType;

-		var sessionId = null;

-

-		var queuedLoggingEvents = [];

-		var queuedRequests = [];

-		var headers = [];

-		var sending = false;

-		var initialized = false;

-

-		// Configuration methods. The function scope is used to prevent

-		// direct alteration to the appender configuration properties.

-		function checkCanConfigure(configOptionName) {

-			if (initialized) {

-				handleError("AjaxAppender: configuration option '" +

-					configOptionName +

-					"' may not be set after the appender has been initialized");

-				return false;

-			}

-			return true;

-		}

-

-		this.getSessionId = function() { return sessionId; };

-		this.setSessionId = function(sessionIdParam) {

-			sessionId = extractStringFromParam(sessionIdParam, null);

-			this.layout.setCustomField("sessionid", sessionId);

-		};

-

-		this.setLayout = function(layoutParam) {

-			if (checkCanConfigure("layout")) {

-				this.layout = layoutParam;

-				// Set the session id as a custom field on the layout, if not already present

-				if (sessionId !== null) {

-					this.setSessionId(sessionId);

-				}

-			}

-		};

-

-		this.isTimed = function() { return timed; };

-		this.setTimed = function(timedParam) {

-			if (checkCanConfigure("timed")) {

-				timed = bool(timedParam);

-			}

-		};

-

-		this.getTimerInterval = function() { return timerInterval; };

-		this.setTimerInterval = function(timerIntervalParam) {

-			if (checkCanConfigure("timerInterval")) {

-				timerInterval = extractIntFromParam(timerIntervalParam, timerInterval);

-			}

-		};

-

-		this.isWaitForResponse = function() { return waitForResponse; };

-		this.setWaitForResponse = function(waitForResponseParam) {

-			if (checkCanConfigure("waitForResponse")) {

-				waitForResponse = bool(waitForResponseParam);

-			}

-		};

-

-		this.getBatchSize = function() { return batchSize; };

-		this.setBatchSize = function(batchSizeParam) {

-			if (checkCanConfigure("batchSize")) {

-				batchSize = extractIntFromParam(batchSizeParam, batchSize);

-			}

-		};

-

-		this.isSendAllOnUnload = function() { return sendAllOnUnload; };

-		this.setSendAllOnUnload = function(sendAllOnUnloadParam) {

-			if (checkCanConfigure("sendAllOnUnload")) {

-				sendAllOnUnload = extractBooleanFromParam(sendAllOnUnloadParam, sendAllOnUnload);

-			}

-		};

-

-		this.setRequestSuccessCallback = function(requestSuccessCallbackParam) {

-			requestSuccessCallback = extractFunctionFromParam(requestSuccessCallbackParam, requestSuccessCallback);

-		};

-

-		this.setFailCallback = function(failCallbackParam) {

-			failCallback = extractFunctionFromParam(failCallbackParam, failCallback);

-		};

-

-		this.getPostVarName = function() { return postVarName; };

-		this.setPostVarName = function(postVarNameParam) {

-			if (checkCanConfigure("postVarName")) {

-				postVarName = extractStringFromParam(postVarNameParam, postVarName);

-			}

-		};

-

-		this.getHeaders = function() { return headers; };

-		this.addHeader = function(name, value) {

-			if (name.toLowerCase() == "content-type") {

-				contentType = value;

-			} else {

-				headers.push( { name: name, value: value } );

-			}

-		};

-

-		// Internal functions

-		function sendAll() {

-			if (isSupported && enabled) {

-				sending = true;

-				var currentRequestBatch;

-				if (waitForResponse) {

-					// Send the first request then use this function as the callback once

-					// the response comes back

-					if (queuedRequests.length > 0) {

-						currentRequestBatch = queuedRequests.shift();

-						sendRequest(preparePostData(currentRequestBatch), sendAll);

-					} else {

-						sending = false;

-						if (timed) {

-							scheduleSending();

-						}

-					}

-				} else {

-					// Rattle off all the requests without waiting to see the response

-					while ((currentRequestBatch = queuedRequests.shift())) {

-						sendRequest(preparePostData(currentRequestBatch));

-					}

-					sending = false;

-					if (timed) {

-						scheduleSending();

-					}

-				}

-			}

-		}

-

-		this.sendAll = sendAll;

-

-		// Called when the window unloads. At this point we're past caring about

-		// waiting for responses or timers or incomplete batches - everything

-		// must go, now

-		function sendAllRemaining() {

-			var sendingAnything = false;

-			if (isSupported && enabled) {

-				// Create requests for everything left over, batched as normal

-				var actualBatchSize = appender.getLayout().allowBatching() ? batchSize : 1;

-				var currentLoggingEvent;

-				var batchedLoggingEvents = [];

-				while ((currentLoggingEvent = queuedLoggingEvents.shift())) {

-					batchedLoggingEvents.push(currentLoggingEvent);

-					if (queuedLoggingEvents.length >= actualBatchSize) {

-						// Queue this batch of log entries

-						queuedRequests.push(batchedLoggingEvents);

-						batchedLoggingEvents = [];

-					}

-				}

-				// If there's a partially completed batch, add it

-				if (batchedLoggingEvents.length > 0) {

-					queuedRequests.push(batchedLoggingEvents);

-				}

-				sendingAnything = (queuedRequests.length > 0);

-				waitForResponse = false;

-				timed = false;

-				sendAll();

-			}

-			return sendingAnything;

-		}

-

-		this.sendAllRemaining = sendAllRemaining;

-

-		function preparePostData(batchedLoggingEvents) {

-			// Format the logging events

-			var formattedMessages = [];

-			var currentLoggingEvent;

-			var postData = "";

-			while ((currentLoggingEvent = batchedLoggingEvents.shift())) {

-				var currentFormattedMessage = appender.getLayout().format(currentLoggingEvent);

-				if (appender.getLayout().ignoresThrowable()) {

-					currentFormattedMessage += currentLoggingEvent.getThrowableStrRep();

-				}

-				formattedMessages.push(currentFormattedMessage);

-			}

-			// Create the post data string

-			if (batchedLoggingEvents.length == 1) {

-				postData = formattedMessages.join("");

-			} else {

-				postData = appender.getLayout().batchHeader +

-					formattedMessages.join(appender.getLayout().batchSeparator) +

-					appender.getLayout().batchFooter;

-			}

-			if (contentType == appender.defaults.contentType) {

-				postData = appender.getLayout().returnsPostData ? postData :

-					urlEncode(postVarName) + "=" + urlEncode(postData);

-				// Add the layout name to the post data

-				if (postData.length > 0) {

-					postData += "&";

-				}

-				postData += "layout=" + urlEncode(appender.getLayout().toString());

-			}

-			return postData;

-		}

-

-		function scheduleSending() {

-			window.setTimeout(sendAll, timerInterval);

-		}

-

-		function xmlHttpErrorHandler() {

-			var msg = "AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";

-			handleError(msg);

-			isSupported = false;

-			if (failCallback) {

-				failCallback(msg);

-			}

-		}

-

-		function sendRequest(postData, successCallback) {

-			try {

-				var xmlHttp = getXmlHttp(xmlHttpErrorHandler);

-				if (isSupported) {

-					if (xmlHttp.overrideMimeType) {

-						xmlHttp.overrideMimeType(appender.getLayout().getContentType());

-					}

-					xmlHttp.onreadystatechange = function() {

-						if (xmlHttp.readyState == 4) {

-							if (isHttpRequestSuccessful(xmlHttp)) {

-								if (requestSuccessCallback) {

-									requestSuccessCallback(xmlHttp);

-								}

-								if (successCallback) {

-									successCallback(xmlHttp);

-								}

-							} else {

-								var msg = "AjaxAppender.append: XMLHttpRequest request to URL " +

-									url + " returned status code " + xmlHttp.status;

-								handleError(msg);

-								if (failCallback) {

-									failCallback(msg);

-								}

-							}

-							xmlHttp.onreadystatechange = emptyFunction;

-							xmlHttp = null;

-						}

-					};

-					xmlHttp.open("POST", url, true);

-					try {

-						for (var i = 0, header; header = headers[i++]; ) {

-							xmlHttp.setRequestHeader(header.name, header.value);

-						}

-						xmlHttp.setRequestHeader("Content-Type", contentType);

-					} catch (headerEx) {

-						var msg = "AjaxAppender.append: your browser's XMLHttpRequest implementation" +

-							" does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";

-						handleError(msg);

-						isSupported = false;

-						if (failCallback) {

-							failCallback(msg);

-						}

-						return;

-					}

-					xmlHttp.send(postData);

-				}

-			} catch (ex) {

-				var errMsg = "AjaxAppender.append: error sending log message to " + url;

-				handleError(errMsg, ex);

-				isSupported = false;

-				if (failCallback) {

-					failCallback(errMsg + ". Details: " + getExceptionStringRep(ex));

-				}

-			}

-		}

-

-		this.append = function(loggingEvent) {

-			if (isSupported) {

-				if (!initialized) {

-					init();

-				}

-				queuedLoggingEvents.push(loggingEvent);

-				var actualBatchSize = this.getLayout().allowBatching() ? batchSize : 1;

-

-				if (queuedLoggingEvents.length >= actualBatchSize) {

-					var currentLoggingEvent;

-					var batchedLoggingEvents = [];

-					while ((currentLoggingEvent = queuedLoggingEvents.shift())) {

-						batchedLoggingEvents.push(currentLoggingEvent);

-					}

-					// Queue this batch of log entries

-					queuedRequests.push(batchedLoggingEvents);

-

-					// If using a timer, the queue of requests will be processed by the

-					// timer function, so nothing needs to be done here.

-					if (!timed && (!waitForResponse || (waitForResponse && !sending))) {

-						sendAll();

-					}

-				}

-			}

-		};

-

-		function init() {

-			initialized = true;

-			// Add unload event to send outstanding messages

-			if (sendAllOnUnload) {

-				var oldBeforeUnload = window.onbeforeunload;

-				window.onbeforeunload = function() {

-					if (oldBeforeUnload) {

-						oldBeforeUnload();

-					}

-					if (sendAllRemaining()) {

-						return "Sending log messages";

-					}

-				};

-			}

-			// Start timer

-			if (timed) {

-				scheduleSending();

-			}

-		}

-	}

-

-	AjaxAppender.prototype = new Appender();

-

-	AjaxAppender.prototype.defaults = {

-		waitForResponse: false,

-		timed: false,

-		timerInterval: 1000,

-		batchSize: 1,

-		sendAllOnUnload: false,

-		requestSuccessCallback: null,

-		failCallback: null,

-		postVarName: "data",

-		contentType: "application/x-www-form-urlencoded"

-	};

-

-	AjaxAppender.prototype.layout = new HttpPostDataLayout();

-

-	AjaxAppender.prototype.toString = function() {

-		return "AjaxAppender";

-	};

-

-	log4javascript.AjaxAppender = AjaxAppender;

-

-	/* ---------------------------------------------------------------------- */

-	// Main load

-

-   log4javascript.setDocumentReady = function() {

-       pageLoaded = true;

-       log4javascript.dispatchEvent("load", {});

-   };

-

-    if (window.addEventListener) {

-        window.addEventListener("load", log4javascript.setDocumentReady, false);

-    } else if (window.attachEvent) {

-        window.attachEvent("onload", log4javascript.setDocumentReady);

-    } else {

-        var oldOnload = window.onload;

-        if (typeof window.onload != "function") {

-            window.onload = log4javascript.setDocumentReady;

-        } else {

-            window.onload = function(evt) {

-                if (oldOnload) {

-                    oldOnload(evt);

-                }

-                log4javascript.setDocumentReady();

-            };

-        }

-    }

-

-    // Ensure that the log4javascript object is available in the window. This

-    // is necessary for log4javascript to be available in IE if loaded using

-    // Dojo's module system

-    window.log4javascript = log4javascript;

-

-    return log4javascript;

-})();
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/js/log4javascript_uncompressed.js b/xos/core/static/log4javascript-1.4.6/js/log4javascript_uncompressed.js
deleted file mode 100644
index 146c266..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/log4javascript_uncompressed.js
+++ /dev/null
@@ -1,5897 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-/**

- * log4javascript

- *

- * log4javascript is a logging framework for JavaScript based on log4j

- * for Java. This file contains all core log4javascript code and is the only

- * file required to use log4javascript, unless you require support for

- * document.domain, in which case you will also need console.html, which must be

- * stored in the same directory as the main log4javascript.js file.

- *

- * Author: Tim Down <tim@log4javascript.org>

- * Version: 1.4.6

- * Edition: log4javascript

- * Build date: 19 March 2013

- * Website: http://log4javascript.org

- */

-

-/* -------------------------------------------------------------------------- */

-// Array-related stuff

-

-// Next three methods are solely for IE5, which is missing them

-if (!Array.prototype.push) {

-	Array.prototype.push = function() {

-		for (var i = 0, len = arguments.length; i < len; i++){

-			this[this.length] = arguments[i];

-		}

-		return this.length;

-	};

-}

-

-if (!Array.prototype.shift) {

-	Array.prototype.shift = function() {

-		if (this.length > 0) {

-			var firstItem = this[0];

-			for (var i = 0, len = this.length - 1; i < len; i++) {

-				this[i] = this[i + 1];

-			}

-			this.length = this.length - 1;

-			return firstItem;

-		}

-	};

-}

-

-if (!Array.prototype.splice) {

-	Array.prototype.splice = function(startIndex, deleteCount) {

-		var itemsAfterDeleted = this.slice(startIndex + deleteCount);

-		var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);

-		this.length = startIndex;

-		// Copy the arguments into a proper Array object

-		var argumentsArray = [];

-		for (var i = 0, len = arguments.length; i < len; i++) {

-			argumentsArray[i] = arguments[i];

-		}

-		var itemsToAppend = (argumentsArray.length > 2) ?

-			itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;

-		for (i = 0, len = itemsToAppend.length; i < len; i++) {

-			this.push(itemsToAppend[i]);

-		}

-		return itemsDeleted;

-	};

-}

-

-/* -------------------------------------------------------------------------- */

-

-var log4javascript = (function() {

-

-	function isUndefined(obj) {

-		return typeof obj == "undefined";

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// Custom event support

-

-	function EventSupport() {}

-

-	EventSupport.prototype = {

-		eventTypes: [],

-		eventListeners: {},

-		setEventTypes: function(eventTypesParam) {

-			if (eventTypesParam instanceof Array) {

-				this.eventTypes = eventTypesParam;

-				this.eventListeners = {};

-				for (var i = 0, len = this.eventTypes.length; i < len; i++) {

-					this.eventListeners[this.eventTypes[i]] = [];

-				}

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: setEventTypes: eventTypes parameter must be an Array");

-			}

-		},

-

-		addEventListener: function(eventType, listener) {

-			if (typeof listener == "function") {

-				if (!array_contains(this.eventTypes, eventType)) {

-					handleError("log4javascript.EventSupport [" + this + "]: addEventListener: no event called '" + eventType + "'");

-				}

-				this.eventListeners[eventType].push(listener);

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: addEventListener: listener must be a function");

-			}

-		},

-

-		removeEventListener: function(eventType, listener) {

-			if (typeof listener == "function") {

-				if (!array_contains(this.eventTypes, eventType)) {

-					handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: no event called '" + eventType + "'");

-				}

-				array_remove(this.eventListeners[eventType], listener);

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: listener must be a function");

-			}

-		},

-

-		dispatchEvent: function(eventType, eventArgs) {

-			if (array_contains(this.eventTypes, eventType)) {

-				var listeners = this.eventListeners[eventType];

-				for (var i = 0, len = listeners.length; i < len; i++) {

-					listeners[i](this, eventType, eventArgs);

-				}

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: dispatchEvent: no event called '" + eventType + "'");

-			}

-		}

-	};

-

-	/* -------------------------------------------------------------------------- */

-

-	var applicationStartDate = new Date();

-	var uniqueId = "log4javascript_" + applicationStartDate.getTime() + "_" +

-		Math.floor(Math.random() * 100000000);

-	var emptyFunction = function() {};

-	var newLine = "\r\n";

-	var pageLoaded = false;

-

-	// Create main log4javascript object; this will be assigned public properties

-	function Log4JavaScript() {}

-	Log4JavaScript.prototype = new EventSupport();

-

-	log4javascript = new Log4JavaScript();

-	log4javascript.version = "1.4.6";

-	log4javascript.edition = "log4javascript";

-

-	/* -------------------------------------------------------------------------- */

-	// Utility functions

-

-	function toStr(obj) {

-		if (obj && obj.toString) {

-			return obj.toString();

-		} else {

-			return String(obj);

-		}

-	}

-

-	function getExceptionMessage(ex) {

-		if (ex.message) {

-			return ex.message;

-		} else if (ex.description) {

-			return ex.description;

-		} else {

-			return toStr(ex);

-		}

-	}

-

-	// Gets the portion of the URL after the last slash

-	function getUrlFileName(url) {

-		var lastSlashIndex = Math.max(url.lastIndexOf("/"), url.lastIndexOf("\\"));

-		return url.substr(lastSlashIndex + 1);

-	}

-

-	// Returns a nicely formatted representation of an error

-	function getExceptionStringRep(ex) {

-		if (ex) {

-			var exStr = "Exception: " + getExceptionMessage(ex);

-			try {

-				if (ex.lineNumber) {

-					exStr += " on line number " + ex.lineNumber;

-				}

-				if (ex.fileName) {

-					exStr += " in file " + getUrlFileName(ex.fileName);

-				}

-			} catch (localEx) {

-				logLog.warn("Unable to obtain file and line information for error");

-			}

-			if (showStackTraces && ex.stack) {

-				exStr += newLine + "Stack trace:" + newLine + ex.stack;

-			}

-			return exStr;

-		}

-		return null;

-	}

-

-	function bool(obj) {

-		return Boolean(obj);

-	}

-

-	function trim(str) {

-		return str.replace(/^\s+/, "").replace(/\s+$/, "");

-	}

-

-	function splitIntoLines(text) {

-		// Ensure all line breaks are \n only

-		var text2 = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");

-		return text2.split("\n");

-	}

-

-	var urlEncode = (typeof window.encodeURIComponent != "undefined") ?

-		function(str) {

-			return encodeURIComponent(str);

-		}: 

-		function(str) {

-			return escape(str).replace(/\+/g, "%2B").replace(/"/g, "%22").replace(/'/g, "%27").replace(/\//g, "%2F").replace(/=/g, "%3D");

-		};

-

-	var urlDecode = (typeof window.decodeURIComponent != "undefined") ?

-		function(str) {

-			return decodeURIComponent(str);

-		}: 

-		function(str) {

-			return unescape(str).replace(/%2B/g, "+").replace(/%22/g, "\"").replace(/%27/g, "'").replace(/%2F/g, "/").replace(/%3D/g, "=");

-		};

-

-	function array_remove(arr, val) {

-		var index = -1;

-		for (var i = 0, len = arr.length; i < len; i++) {

-			if (arr[i] === val) {

-				index = i;

-				break;

-			}

-		}

-		if (index >= 0) {

-			arr.splice(index, 1);

-			return true;

-		} else {

-			return false;

-		}

-	}

-

-	function array_contains(arr, val) {

-		for(var i = 0, len = arr.length; i < len; i++) {

-			if (arr[i] == val) {

-				return true;

-			}

-		}

-		return false;

-	}

-

-	function extractBooleanFromParam(param, defaultValue) {

-		if (isUndefined(param)) {

-			return defaultValue;

-		} else {

-			return bool(param);

-		}

-	}

-

-	function extractStringFromParam(param, defaultValue) {

-		if (isUndefined(param)) {

-			return defaultValue;

-		} else {

-			return String(param);

-		}

-	}

-

-	function extractIntFromParam(param, defaultValue) {

-		if (isUndefined(param)) {

-			return defaultValue;

-		} else {

-			try {

-				var value = parseInt(param, 10);

-				return isNaN(value) ? defaultValue : value;

-			} catch (ex) {

-				logLog.warn("Invalid int param " + param, ex);

-				return defaultValue;

-			}

-		}

-	}

-

-	function extractFunctionFromParam(param, defaultValue) {

-		if (typeof param == "function") {

-			return param;

-		} else {

-			return defaultValue;

-		}

-	}

-

-	function isError(err) {

-		return (err instanceof Error);

-	}

-

-	if (!Function.prototype.apply){

-		Function.prototype.apply = function(obj, args) {

-			var methodName = "__apply__";

-			if (typeof obj[methodName] != "undefined") {

-				methodName += String(Math.random()).substr(2);

-			}

-			obj[methodName] = this;

-

-			var argsStrings = [];

-			for (var i = 0, len = args.length; i < len; i++) {

-				argsStrings[i] = "args[" + i + "]";

-			}

-			var script = "obj." + methodName + "(" + argsStrings.join(",") + ")";

-			var returnValue = eval(script);

-			delete obj[methodName];

-			return returnValue;

-		};

-	}

-

-	if (!Function.prototype.call){

-		Function.prototype.call = function(obj) {

-			var args = [];

-			for (var i = 1, len = arguments.length; i < len; i++) {

-				args[i - 1] = arguments[i];

-			}

-			return this.apply(obj, args);

-		};

-	}

-

-	function getListenersPropertyName(eventName) {

-		return "__log4javascript_listeners__" + eventName;

-	}

-

-	function addEvent(node, eventName, listener, useCapture, win) {

-		win = win ? win : window;

-		if (node.addEventListener) {

-			node.addEventListener(eventName, listener, useCapture);

-		} else if (node.attachEvent) {

-			node.attachEvent("on" + eventName, listener);

-		} else {

-			var propertyName = getListenersPropertyName(eventName);

-			if (!node[propertyName]) {

-				node[propertyName] = [];

-				// Set event handler

-				node["on" + eventName] = function(evt) {

-					evt = getEvent(evt, win);

-					var listenersPropertyName = getListenersPropertyName(eventName);

-

-					// Clone the array of listeners to leave the original untouched

-					var listeners = this[listenersPropertyName].concat([]);

-					var currentListener;

-

-					// Call each listener in turn

-					while ((currentListener = listeners.shift())) {

-						currentListener.call(this, evt);

-					}

-				};

-			}

-			node[propertyName].push(listener);

-		}

-	}

-

-	function removeEvent(node, eventName, listener, useCapture) {

-		if (node.removeEventListener) {

-			node.removeEventListener(eventName, listener, useCapture);

-		} else if (node.detachEvent) {

-			node.detachEvent("on" + eventName, listener);

-		} else {

-			var propertyName = getListenersPropertyName(eventName);

-			if (node[propertyName]) {

-				array_remove(node[propertyName], listener);

-			}

-		}

-	}

-

-	function getEvent(evt, win) {

-		win = win ? win : window;

-		return evt ? evt : win.event;

-	}

-

-	function stopEventPropagation(evt) {

-		if (evt.stopPropagation) {

-			evt.stopPropagation();

-		} else if (typeof evt.cancelBubble != "undefined") {

-			evt.cancelBubble = true;

-		}

-		evt.returnValue = false;

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// Simple logging for log4javascript itself

-

-	var logLog = {

-		quietMode: false,

-

-		debugMessages: [],

-

-		setQuietMode: function(quietMode) {

-			this.quietMode = bool(quietMode);

-		},

-

-		numberOfErrors: 0,

-

-		alertAllErrors: false,

-

-		setAlertAllErrors: function(alertAllErrors) {

-			this.alertAllErrors = alertAllErrors;

-		},

-

-		debug: function(message) {

-			this.debugMessages.push(message);

-		},

-

-		displayDebug: function() {

-			alert(this.debugMessages.join(newLine));

-		},

-

-		warn: function(message, exception) {

-		},

-

-		error: function(message, exception) {

-			if (++this.numberOfErrors == 1 || this.alertAllErrors) {

-				if (!this.quietMode) {

-					var alertMessage = "log4javascript error: " + message;

-					if (exception) {

-						alertMessage += newLine + newLine + "Original error: " + getExceptionStringRep(exception);

-					}

-					alert(alertMessage);

-				}

-			}

-		}

-	};

-	log4javascript.logLog = logLog;

-

-	log4javascript.setEventTypes(["load", "error"]);

-

-	function handleError(message, exception) {

-		logLog.error(message, exception);

-		log4javascript.dispatchEvent("error", { "message": message, "exception": exception });

-	}

-

-	log4javascript.handleError = handleError;

-

-	/* ---------------------------------------------------------------------- */

-

-	var enabled = !((typeof log4javascript_disabled != "undefined") &&

-					log4javascript_disabled);

-

-	log4javascript.setEnabled = function(enable) {

-		enabled = bool(enable);

-	};

-

-	log4javascript.isEnabled = function() {

-		return enabled;

-	};

-

-	var useTimeStampsInMilliseconds = true;

-

-	log4javascript.setTimeStampsInMilliseconds = function(timeStampsInMilliseconds) {

-		useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);

-	};

-

-	log4javascript.isTimeStampsInMilliseconds = function() {

-		return useTimeStampsInMilliseconds;

-	};

-	

-

-	// This evaluates the given expression in the current scope, thus allowing

-	// scripts to access private variables. Particularly useful for testing

-	log4javascript.evalInScope = function(expr) {

-		return eval(expr);

-	};

-

-	var showStackTraces = false;

-

-	log4javascript.setShowStackTraces = function(show) {

-		showStackTraces = bool(show);

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Levels

-

-	var Level = function(level, name) {

-		this.level = level;

-		this.name = name;

-	};

-

-	Level.prototype = {

-		toString: function() {

-			return this.name;

-		},

-		equals: function(level) {

-			return this.level == level.level;

-		},

-		isGreaterOrEqual: function(level) {

-			return this.level >= level.level;

-		}

-	};

-

-	Level.ALL = new Level(Number.MIN_VALUE, "ALL");

-	Level.TRACE = new Level(10000, "TRACE");

-	Level.DEBUG = new Level(20000, "DEBUG");

-	Level.INFO = new Level(30000, "INFO");

-	Level.WARN = new Level(40000, "WARN");

-	Level.ERROR = new Level(50000, "ERROR");

-	Level.FATAL = new Level(60000, "FATAL");

-	Level.OFF = new Level(Number.MAX_VALUE, "OFF");

-

-	log4javascript.Level = Level;

-

-	/* ---------------------------------------------------------------------- */

-	// Timers

-

-	function Timer(name, level) {

-		this.name = name;

-		this.level = isUndefined(level) ? Level.INFO : level;

-		this.start = new Date();

-	}

-

-	Timer.prototype.getElapsedTime = function() {

-		return new Date().getTime() - this.start.getTime();

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Loggers

-

-	var anonymousLoggerName = "[anonymous]";

-	var defaultLoggerName = "[default]";

-	var nullLoggerName = "[null]";

-	var rootLoggerName = "root";

-

-	function Logger(name) {

-		this.name = name;

-		this.parent = null;

-		this.children = [];

-

-		var appenders = [];

-		var loggerLevel = null;

-		var isRoot = (this.name === rootLoggerName);

-		var isNull = (this.name === nullLoggerName);

-

-		var appenderCache = null;

-		var appenderCacheInvalidated = false;

-		

-		this.addChild = function(childLogger) {

-			this.children.push(childLogger);

-			childLogger.parent = this;

-			childLogger.invalidateAppenderCache();

-		};

-

-		// Additivity

-		var additive = true;

-		this.getAdditivity = function() {

-			return additive;

-		};

-

-		this.setAdditivity = function(additivity) {

-			var valueChanged = (additive != additivity);

-			additive = additivity;

-			if (valueChanged) {

-				this.invalidateAppenderCache();

-			}

-		};

-

-		// Create methods that use the appenders variable in this scope

-		this.addAppender = function(appender) {

-			if (isNull) {

-				handleError("Logger.addAppender: you may not add an appender to the null logger");

-			} else {

-				if (appender instanceof log4javascript.Appender) {

-					if (!array_contains(appenders, appender)) {

-						appenders.push(appender);

-						appender.setAddedToLogger(this);

-						this.invalidateAppenderCache();

-					}

-				} else {

-					handleError("Logger.addAppender: appender supplied ('" +

-						toStr(appender) + "') is not a subclass of Appender");

-				}

-			}

-		};

-

-		this.removeAppender = function(appender) {

-			array_remove(appenders, appender);

-			appender.setRemovedFromLogger(this);

-			this.invalidateAppenderCache();

-		};

-

-		this.removeAllAppenders = function() {

-			var appenderCount = appenders.length;

-			if (appenderCount > 0) {

-				for (var i = 0; i < appenderCount; i++) {

-					appenders[i].setRemovedFromLogger(this);

-				}

-				appenders.length = 0;

-				this.invalidateAppenderCache();

-			}

-		};

-

-		this.getEffectiveAppenders = function() {

-			if (appenderCache === null || appenderCacheInvalidated) {

-				// Build appender cache

-				var parentEffectiveAppenders = (isRoot || !this.getAdditivity()) ?

-					[] : this.parent.getEffectiveAppenders();

-				appenderCache = parentEffectiveAppenders.concat(appenders);

-				appenderCacheInvalidated = false;

-			}

-			return appenderCache;

-		};

-		

-		this.invalidateAppenderCache = function() {

-			appenderCacheInvalidated = true;

-			for (var i = 0, len = this.children.length; i < len; i++) {

-				this.children[i].invalidateAppenderCache();

-			}

-		};

-

-		this.log = function(level, params) {

-			if (enabled && level.isGreaterOrEqual(this.getEffectiveLevel())) {

-				// Check whether last param is an exception

-				var exception;

-				var finalParamIndex = params.length - 1;

-				var lastParam = params[finalParamIndex];

-				if (params.length > 1 && isError(lastParam)) {

-					exception = lastParam;

-					finalParamIndex--;

-				}

-

-				// Construct genuine array for the params

-				var messages = [];

-				for (var i = 0; i <= finalParamIndex; i++) {

-					messages[i] = params[i];

-				}

-

-				var loggingEvent = new LoggingEvent(

-					this, new Date(), level, messages, exception);

-

-				this.callAppenders(loggingEvent);

-			}

-		};

-

-		this.callAppenders = function(loggingEvent) {

-			var effectiveAppenders = this.getEffectiveAppenders();

-			for (var i = 0, len = effectiveAppenders.length; i < len; i++) {

-				effectiveAppenders[i].doAppend(loggingEvent);

-			}

-		};

-

-		this.setLevel = function(level) {

-			// Having a level of null on the root logger would be very bad.

-			if (isRoot && level === null) {

-				handleError("Logger.setLevel: you cannot set the level of the root logger to null");

-			} else if (level instanceof Level) {

-				loggerLevel = level;

-			} else {

-				handleError("Logger.setLevel: level supplied to logger " +

-					this.name + " is not an instance of log4javascript.Level");

-			}

-		};

-

-		this.getLevel = function() {

-			return loggerLevel;

-		};

-

-		this.getEffectiveLevel = function() {

-			for (var logger = this; logger !== null; logger = logger.parent) {

-				var level = logger.getLevel();

-				if (level !== null) {

-					return level;

-				}

-			}

-		};

-

-		this.group = function(name, initiallyExpanded) {

-			if (enabled) {

-				var effectiveAppenders = this.getEffectiveAppenders();

-				for (var i = 0, len = effectiveAppenders.length; i < len; i++) {

-					effectiveAppenders[i].group(name, initiallyExpanded);

-				}

-			}

-		};

-

-		this.groupEnd = function() {

-			if (enabled) {

-				var effectiveAppenders = this.getEffectiveAppenders();

-				for (var i = 0, len = effectiveAppenders.length; i < len; i++) {

-					effectiveAppenders[i].groupEnd();

-				}

-			}

-		};

-

-		var timers = {};

-

-		this.time = function(name, level) {

-			if (enabled) {

-				if (isUndefined(name)) {

-					handleError("Logger.time: a name for the timer must be supplied");

-				} else if (level && !(level instanceof Level)) {

-					handleError("Logger.time: level supplied to timer " +

-						name + " is not an instance of log4javascript.Level");

-				} else {

-					timers[name] = new Timer(name, level);

-				}

-			}

-		};

-

-		this.timeEnd = function(name) {

-			if (enabled) {

-				if (isUndefined(name)) {

-					handleError("Logger.timeEnd: a name for the timer must be supplied");

-				} else if (timers[name]) {

-					var timer = timers[name];

-					var milliseconds = timer.getElapsedTime();

-					this.log(timer.level, ["Timer " + toStr(name) + " completed in " + milliseconds + "ms"]);

-					delete timers[name];

-				} else {

-					logLog.warn("Logger.timeEnd: no timer found with name " + name);

-				}

-			}

-		};

-

-		this.assert = function(expr) {

-			if (enabled && !expr) {

-				var args = [];

-				for (var i = 1, len = arguments.length; i < len; i++) {

-					args.push(arguments[i]);

-				}

-				args = (args.length > 0) ? args : ["Assertion Failure"];

-				args.push(newLine);

-				args.push(expr);

-				this.log(Level.ERROR, args);

-			}

-		};

-

-		this.toString = function() {

-			return "Logger[" + this.name + "]";

-		};

-	}

-

-	Logger.prototype = {

-		trace: function() {

-			this.log(Level.TRACE, arguments);

-		},

-

-		debug: function() {

-			this.log(Level.DEBUG, arguments);

-		},

-

-		info: function() {

-			this.log(Level.INFO, arguments);

-		},

-

-		warn: function() {

-			this.log(Level.WARN, arguments);

-		},

-

-		error: function() {

-			this.log(Level.ERROR, arguments);

-		},

-

-		fatal: function() {

-			this.log(Level.FATAL, arguments);

-		},

-

-		isEnabledFor: function(level) {

-			return level.isGreaterOrEqual(this.getEffectiveLevel());

-		},

-

-		isTraceEnabled: function() {

-			return this.isEnabledFor(Level.TRACE);

-		},

-

-		isDebugEnabled: function() {

-			return this.isEnabledFor(Level.DEBUG);

-		},

-

-		isInfoEnabled: function() {

-			return this.isEnabledFor(Level.INFO);

-		},

-

-		isWarnEnabled: function() {

-			return this.isEnabledFor(Level.WARN);

-		},

-

-		isErrorEnabled: function() {

-			return this.isEnabledFor(Level.ERROR);

-		},

-

-		isFatalEnabled: function() {

-			return this.isEnabledFor(Level.FATAL);

-		}

-	};

-

-	Logger.prototype.trace.isEntryPoint = true;

-	Logger.prototype.debug.isEntryPoint = true;

-	Logger.prototype.info.isEntryPoint = true;

-	Logger.prototype.warn.isEntryPoint = true;

-	Logger.prototype.error.isEntryPoint = true;

-	Logger.prototype.fatal.isEntryPoint = true;

-

-	/* ---------------------------------------------------------------------- */

-	// Logger access methods

-

-	// Hashtable of loggers keyed by logger name

-	var loggers = {};

-	var loggerNames = [];

-

-	var ROOT_LOGGER_DEFAULT_LEVEL = Level.DEBUG;

-	var rootLogger = new Logger(rootLoggerName);

-	rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);

-

-	log4javascript.getRootLogger = function() {

-		return rootLogger;

-	};

-

-	log4javascript.getLogger = function(loggerName) {

-		// Use default logger if loggerName is not specified or invalid

-		if (!(typeof loggerName == "string")) {

-			loggerName = anonymousLoggerName;

-			logLog.warn("log4javascript.getLogger: non-string logger name "	+

-				toStr(loggerName) + " supplied, returning anonymous logger");

-		}

-

-		// Do not allow retrieval of the root logger by name

-		if (loggerName == rootLoggerName) {

-			handleError("log4javascript.getLogger: root logger may not be obtained by name");

-		}

-

-		// Create the logger for this name if it doesn't already exist

-		if (!loggers[loggerName]) {

-			var logger = new Logger(loggerName);

-			loggers[loggerName] = logger;

-			loggerNames.push(loggerName);

-

-			// Set up parent logger, if it doesn't exist

-			var lastDotIndex = loggerName.lastIndexOf(".");

-			var parentLogger;

-			if (lastDotIndex > -1) {

-				var parentLoggerName = loggerName.substring(0, lastDotIndex);

-				parentLogger = log4javascript.getLogger(parentLoggerName); // Recursively sets up grandparents etc.

-			} else {

-				parentLogger = rootLogger;

-			}

-			parentLogger.addChild(logger);

-		}

-		return loggers[loggerName];

-	};

-

-	var defaultLogger = null;

-	log4javascript.getDefaultLogger = function() {

-		if (!defaultLogger) {

-			defaultLogger = log4javascript.getLogger(defaultLoggerName);

-			var a = new log4javascript.PopUpAppender();

-			defaultLogger.addAppender(a);

-		}

-		return defaultLogger;

-	};

-

-	var nullLogger = null;

-	log4javascript.getNullLogger = function() {

-		if (!nullLogger) {

-			nullLogger = new Logger(nullLoggerName);

-			nullLogger.setLevel(Level.OFF);

-		}

-		return nullLogger;

-	};

-

-	// Destroys all loggers

-	log4javascript.resetConfiguration = function() {

-		rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);

-		loggers = {};

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Logging events

-

-	var LoggingEvent = function(logger, timeStamp, level, messages,

-			exception) {

-		this.logger = logger;

-		this.timeStamp = timeStamp;

-		this.timeStampInMilliseconds = timeStamp.getTime();

-		this.timeStampInSeconds = Math.floor(this.timeStampInMilliseconds / 1000);

-		this.milliseconds = this.timeStamp.getMilliseconds();

-		this.level = level;

-		this.messages = messages;

-		this.exception = exception;

-	};

-

-	LoggingEvent.prototype = {

-		getThrowableStrRep: function() {

-			return this.exception ?

-				getExceptionStringRep(this.exception) : "";

-		},

-		getCombinedMessages: function() {

-			return (this.messages.length == 1) ? this.messages[0] :

-				   this.messages.join(newLine);

-		},

-		toString: function() {

-			return "LoggingEvent[" + this.level + "]";

-		}

-	};

-

-	log4javascript.LoggingEvent = LoggingEvent;

-

-	/* ---------------------------------------------------------------------- */

-	// Layout prototype

-

-	var Layout = function() {

-	};

-

-	Layout.prototype = {

-		defaults: {

-			loggerKey: "logger",

-			timeStampKey: "timestamp",

-			millisecondsKey: "milliseconds",

-			levelKey: "level",

-			messageKey: "message",

-			exceptionKey: "exception",

-			urlKey: "url"

-		},

-		loggerKey: "logger",

-		timeStampKey: "timestamp",

-		millisecondsKey: "milliseconds",

-		levelKey: "level",

-		messageKey: "message",

-		exceptionKey: "exception",

-		urlKey: "url",

-		batchHeader: "",

-		batchFooter: "",

-		batchSeparator: "",

-		returnsPostData: false,

-		overrideTimeStampsSetting: false,

-		useTimeStampsInMilliseconds: null,

-

-		format: function() {

-			handleError("Layout.format: layout supplied has no format() method");

-		},

-

-		ignoresThrowable: function() {

-			handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");

-		},

-

-		getContentType: function() {

-			return "text/plain";

-		},

-

-		allowBatching: function() {

-			return true;

-		},

-

-		setTimeStampsInMilliseconds: function(timeStampsInMilliseconds) {

-			this.overrideTimeStampsSetting = true;

-			this.useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);

-		},

-

-		isTimeStampsInMilliseconds: function() {

-			return this.overrideTimeStampsSetting ?

-				this.useTimeStampsInMilliseconds : useTimeStampsInMilliseconds;

-		},

-

-		getTimeStampValue: function(loggingEvent) {

-			return this.isTimeStampsInMilliseconds() ?

-				loggingEvent.timeStampInMilliseconds : loggingEvent.timeStampInSeconds;

-		},

-

-		getDataValues: function(loggingEvent, combineMessages) {

-			var dataValues = [

-				[this.loggerKey, loggingEvent.logger.name],

-				[this.timeStampKey, this.getTimeStampValue(loggingEvent)],

-				[this.levelKey, loggingEvent.level.name],

-				[this.urlKey, window.location.href],

-				[this.messageKey, combineMessages ? loggingEvent.getCombinedMessages() : loggingEvent.messages]

-			];

-			if (!this.isTimeStampsInMilliseconds()) {

-				dataValues.push([this.millisecondsKey, loggingEvent.milliseconds]);

-			}

-			if (loggingEvent.exception) {

-				dataValues.push([this.exceptionKey, getExceptionStringRep(loggingEvent.exception)]);

-			}

-			if (this.hasCustomFields()) {

-				for (var i = 0, len = this.customFields.length; i < len; i++) {

-					var val = this.customFields[i].value;

-

-					// Check if the value is a function. If so, execute it, passing it the

-					// current layout and the logging event

-					if (typeof val === "function") {

-						val = val(this, loggingEvent);

-					}

-					dataValues.push([this.customFields[i].name, val]);

-				}

-			}

-			return dataValues;

-		},

-

-		setKeys: function(loggerKey, timeStampKey, levelKey, messageKey,

-				exceptionKey, urlKey, millisecondsKey) {

-			this.loggerKey = extractStringFromParam(loggerKey, this.defaults.loggerKey);

-			this.timeStampKey = extractStringFromParam(timeStampKey, this.defaults.timeStampKey);

-			this.levelKey = extractStringFromParam(levelKey, this.defaults.levelKey);

-			this.messageKey = extractStringFromParam(messageKey, this.defaults.messageKey);

-			this.exceptionKey = extractStringFromParam(exceptionKey, this.defaults.exceptionKey);

-			this.urlKey = extractStringFromParam(urlKey, this.defaults.urlKey);

-			this.millisecondsKey = extractStringFromParam(millisecondsKey, this.defaults.millisecondsKey);

-		},

-

-		setCustomField: function(name, value) {

-			var fieldUpdated = false;

-			for (var i = 0, len = this.customFields.length; i < len; i++) {

-				if (this.customFields[i].name === name) {

-					this.customFields[i].value = value;

-					fieldUpdated = true;

-				}

-			}

-			if (!fieldUpdated) {

-				this.customFields.push({"name": name, "value": value});

-			}

-		},

-

-		hasCustomFields: function() {

-			return (this.customFields.length > 0);

-		},

-

-		toString: function() {

-			handleError("Layout.toString: all layouts must override this method");

-		}

-	};

-

-	log4javascript.Layout = Layout;

-

-	/* ---------------------------------------------------------------------- */

-	// Appender prototype

-

-	var Appender = function() {};

-

-	Appender.prototype = new EventSupport();

-

-	Appender.prototype.layout = new PatternLayout();

-	Appender.prototype.threshold = Level.ALL;

-	Appender.prototype.loggers = [];

-

-	// Performs threshold checks before delegating actual logging to the

-	// subclass's specific append method.

-	Appender.prototype.doAppend = function(loggingEvent) {

-		if (enabled && loggingEvent.level.level >= this.threshold.level) {

-			this.append(loggingEvent);

-		}

-	};

-

-	Appender.prototype.append = function(loggingEvent) {};

-

-	Appender.prototype.setLayout = function(layout) {

-		if (layout instanceof Layout) {

-			this.layout = layout;

-		} else {

-			handleError("Appender.setLayout: layout supplied to " +

-				this.toString() + " is not a subclass of Layout");

-		}

-	};

-

-	Appender.prototype.getLayout = function() {

-		return this.layout;

-	};

-

-	Appender.prototype.setThreshold = function(threshold) {

-		if (threshold instanceof Level) {

-			this.threshold = threshold;

-		} else {

-			handleError("Appender.setThreshold: threshold supplied to " +

-				this.toString() + " is not a subclass of Level");

-		}

-	};

-

-	Appender.prototype.getThreshold = function() {

-		return this.threshold;

-	};

-

-	Appender.prototype.setAddedToLogger = function(logger) {

-		this.loggers.push(logger);

-	};

-

-	Appender.prototype.setRemovedFromLogger = function(logger) {

-		array_remove(this.loggers, logger);

-	};

-

-	Appender.prototype.group = emptyFunction;

-	Appender.prototype.groupEnd = emptyFunction;

-

-	Appender.prototype.toString = function() {

-		handleError("Appender.toString: all appenders must override this method");

-	};

-

-	log4javascript.Appender = Appender;

-

-	/* ---------------------------------------------------------------------- */

-	// SimpleLayout 

-

-	function SimpleLayout() {

-		this.customFields = [];

-	}

-

-	SimpleLayout.prototype = new Layout();

-

-	SimpleLayout.prototype.format = function(loggingEvent) {

-		return loggingEvent.level.name + " - " + loggingEvent.getCombinedMessages();

-	};

-

-	SimpleLayout.prototype.ignoresThrowable = function() {

-	    return true;

-	};

-

-	SimpleLayout.prototype.toString = function() {

-	    return "SimpleLayout";

-	};

-

-	log4javascript.SimpleLayout = SimpleLayout;

-	/* ----------------------------------------------------------------------- */

-	// NullLayout 

-

-	function NullLayout() {

-		this.customFields = [];

-	}

-

-	NullLayout.prototype = new Layout();

-

-	NullLayout.prototype.format = function(loggingEvent) {

-		return loggingEvent.messages;

-	};

-

-	NullLayout.prototype.ignoresThrowable = function() {

-	    return true;

-	};

-

-	NullLayout.prototype.toString = function() {

-	    return "NullLayout";

-	};

-

-	log4javascript.NullLayout = NullLayout;

-/* ---------------------------------------------------------------------- */

-	// XmlLayout

-

-	function XmlLayout(combineMessages) {

-		this.combineMessages = extractBooleanFromParam(combineMessages, true);

-		this.customFields = [];

-	}

-

-	XmlLayout.prototype = new Layout();

-

-	XmlLayout.prototype.isCombinedMessages = function() {

-		return this.combineMessages;

-	};

-

-	XmlLayout.prototype.getContentType = function() {

-		return "text/xml";

-	};

-

-	XmlLayout.prototype.escapeCdata = function(str) {

-		return str.replace(/\]\]>/, "]]>]]&gt;<![CDATA[");

-	};

-

-	XmlLayout.prototype.format = function(loggingEvent) {

-		var layout = this;

-		var i, len;

-		function formatMessage(message) {

-			message = (typeof message === "string") ? message : toStr(message);

-			return "<log4javascript:message><![CDATA[" +

-				layout.escapeCdata(message) + "]]></log4javascript:message>";

-		}

-

-		var str = "<log4javascript:event logger=\"" + loggingEvent.logger.name +

-			"\" timestamp=\"" + this.getTimeStampValue(loggingEvent) + "\"";

-		if (!this.isTimeStampsInMilliseconds()) {

-			str += " milliseconds=\"" + loggingEvent.milliseconds + "\"";

-		}

-		str += " level=\"" + loggingEvent.level.name + "\">" + newLine;

-		if (this.combineMessages) {

-			str += formatMessage(loggingEvent.getCombinedMessages());

-		} else {

-			str += "<log4javascript:messages>" + newLine;

-			for (i = 0, len = loggingEvent.messages.length; i < len; i++) {

-				str += formatMessage(loggingEvent.messages[i]) + newLine;

-			}

-			str += "</log4javascript:messages>" + newLine;

-		}

-		if (this.hasCustomFields()) {

-			for (i = 0, len = this.customFields.length; i < len; i++) {

-				str += "<log4javascript:customfield name=\"" +

-					this.customFields[i].name + "\"><![CDATA[" +

-					this.customFields[i].value.toString() +

-					"]]></log4javascript:customfield>" + newLine;

-			}

-		}

-		if (loggingEvent.exception) {

-			str += "<log4javascript:exception><![CDATA[" +

-				getExceptionStringRep(loggingEvent.exception) +

-				"]]></log4javascript:exception>" + newLine;

-		}

-		str += "</log4javascript:event>" + newLine + newLine;

-		return str;

-	};

-

-	XmlLayout.prototype.ignoresThrowable = function() {

-	    return false;

-	};

-

-	XmlLayout.prototype.toString = function() {

-	    return "XmlLayout";

-	};

-

-	log4javascript.XmlLayout = XmlLayout;

-	/* ---------------------------------------------------------------------- */

-	// JsonLayout related

-

-	function escapeNewLines(str) {

-		return str.replace(/\r\n|\r|\n/g, "\\r\\n");

-	}

-

-	function JsonLayout(readable, combineMessages) {

-		this.readable = extractBooleanFromParam(readable, false);

-		this.combineMessages = extractBooleanFromParam(combineMessages, true);

-		this.batchHeader = this.readable ? "[" + newLine : "[";

-		this.batchFooter = this.readable ? "]" + newLine : "]";

-		this.batchSeparator = this.readable ? "," + newLine : ",";

-		this.setKeys();

-		this.colon = this.readable ? ": " : ":";

-		this.tab = this.readable ? "\t" : "";

-		this.lineBreak = this.readable ? newLine : "";

-		this.customFields = [];

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// JsonLayout

-

-	JsonLayout.prototype = new Layout();

-

-	JsonLayout.prototype.isReadable = function() {

-		return this.readable;

-	};

-

-	JsonLayout.prototype.isCombinedMessages = function() {

-		return this.combineMessages;

-	};

-

-    JsonLayout.prototype.format = function(loggingEvent) {

-        var layout = this;

-        var dataValues = this.getDataValues(loggingEvent, this.combineMessages);

-        var str = "{" + this.lineBreak;

-        var i, len;

-

-        function formatValue(val, prefix, expand) {

-            // Check the type of the data value to decide whether quotation marks

-            // or expansion are required

-            var formattedValue;

-            var valType = typeof val;

-            if (val instanceof Date) {

-                formattedValue = String(val.getTime());

-            } else if (expand && (val instanceof Array)) {

-                formattedValue = "[" + layout.lineBreak;

-                for (var i = 0, len = val.length; i < len; i++) {

-                    var childPrefix = prefix + layout.tab;

-                    formattedValue += childPrefix + formatValue(val[i], childPrefix, false);

-                    if (i < val.length - 1) {

-                        formattedValue += ",";

-                    }

-                    formattedValue += layout.lineBreak;

-                }

-                formattedValue += prefix + "]";

-            } else if (valType !== "number" && valType !== "boolean") {

-                formattedValue = "\"" + escapeNewLines(toStr(val).replace(/\"/g, "\\\"")) + "\"";

-            } else {

-                formattedValue = val;

-            }

-            return formattedValue;

-        }

-

-        for (i = 0, len = dataValues.length - 1; i <= len; i++) {

-            str += this.tab + "\"" + dataValues[i][0] + "\"" + this.colon + formatValue(dataValues[i][1], this.tab, true);

-            if (i < len) {

-                str += ",";

-            }

-            str += this.lineBreak;

-        }

-

-        str += "}" + this.lineBreak;

-        return str;

-    };

-

-	JsonLayout.prototype.ignoresThrowable = function() {

-	    return false;

-	};

-

-	JsonLayout.prototype.toString = function() {

-	    return "JsonLayout";

-	};

-

-	JsonLayout.prototype.getContentType = function() {

-		return "application/json";

-	};

-

-	log4javascript.JsonLayout = JsonLayout;

-	/* ---------------------------------------------------------------------- */

-	// HttpPostDataLayout

-

-	function HttpPostDataLayout() {

-		this.setKeys();

-		this.customFields = [];

-		this.returnsPostData = true;

-	}

-

-	HttpPostDataLayout.prototype = new Layout();

-

-	// Disable batching

-	HttpPostDataLayout.prototype.allowBatching = function() {

-		return false;

-	};

-

-	HttpPostDataLayout.prototype.format = function(loggingEvent) {

-		var dataValues = this.getDataValues(loggingEvent);

-		var queryBits = [];

-		for (var i = 0, len = dataValues.length; i < len; i++) {

-			var val = (dataValues[i][1] instanceof Date) ?

-				String(dataValues[i][1].getTime()) : dataValues[i][1];

-			queryBits.push(urlEncode(dataValues[i][0]) + "=" + urlEncode(val));

-		}

-		return queryBits.join("&");

-	};

-

-	HttpPostDataLayout.prototype.ignoresThrowable = function(loggingEvent) {

-	    return false;

-	};

-

-	HttpPostDataLayout.prototype.toString = function() {

-	    return "HttpPostDataLayout";

-	};

-

-	log4javascript.HttpPostDataLayout = HttpPostDataLayout;

-	/* ---------------------------------------------------------------------- */

-	// formatObjectExpansion

-

-	function formatObjectExpansion(obj, depth, indentation) {

-		var objectsExpanded = [];

-

-		function doFormat(obj, depth, indentation) {

-			var i, j, len, childDepth, childIndentation, childLines, expansion,

-				childExpansion;

-

-			if (!indentation) {

-				indentation = "";

-			}

-

-			function formatString(text) {

-				var lines = splitIntoLines(text);

-				for (var j = 1, jLen = lines.length; j < jLen; j++) {

-					lines[j] = indentation + lines[j];

-				}

-				return lines.join(newLine);

-			}

-

-			if (obj === null) {

-				return "null";

-			} else if (typeof obj == "undefined") {

-				return "undefined";

-			} else if (typeof obj == "string") {

-				return formatString(obj);

-			} else if (typeof obj == "object" && array_contains(objectsExpanded, obj)) {

-				try {

-					expansion = toStr(obj);

-				} catch (ex) {

-					expansion = "Error formatting property. Details: " + getExceptionStringRep(ex);

-				}

-				return expansion + " [already expanded]";

-			} else if ((obj instanceof Array) && depth > 0) {

-				objectsExpanded.push(obj);

-				expansion = "[" + newLine;

-				childDepth = depth - 1;

-				childIndentation = indentation + "  ";

-				childLines = [];

-				for (i = 0, len = obj.length; i < len; i++) {

-					try {

-						childExpansion = doFormat(obj[i], childDepth, childIndentation);

-						childLines.push(childIndentation + childExpansion);

-					} catch (ex) {

-						childLines.push(childIndentation + "Error formatting array member. Details: " +

-							getExceptionStringRep(ex) + "");

-					}

-				}

-				expansion += childLines.join("," + newLine) + newLine + indentation + "]";

-				return expansion;

-            } else if (Object.prototype.toString.call(obj) == "[object Date]") {

-                return obj.toString();

-			} else if (typeof obj == "object" && depth > 0) {

-				objectsExpanded.push(obj);

-				expansion = "{" + newLine;

-				childDepth = depth - 1;

-				childIndentation = indentation + "  ";

-				childLines = [];

-				for (i in obj) {

-					try {

-						childExpansion = doFormat(obj[i], childDepth, childIndentation);

-						childLines.push(childIndentation + i + ": " + childExpansion);

-					} catch (ex) {

-						childLines.push(childIndentation + i + ": Error formatting property. Details: " +

-							getExceptionStringRep(ex));

-					}

-				}

-				expansion += childLines.join("," + newLine) + newLine + indentation + "}";

-				return expansion;

-			} else {

-				return formatString(toStr(obj));

-			}

-		}

-		return doFormat(obj, depth, indentation);

-	}

-	/* ---------------------------------------------------------------------- */

-	// Date-related stuff

-

-	var SimpleDateFormat;

-

-	(function() {

-		var regex = /('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;

-		var monthNames = ["January", "February", "March", "April", "May", "June",

-			"July", "August", "September", "October", "November", "December"];

-		var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

-		var TEXT2 = 0, TEXT3 = 1, NUMBER = 2, YEAR = 3, MONTH = 4, TIMEZONE = 5;

-		var types = {

-			G : TEXT2,

-			y : YEAR,

-			M : MONTH,

-			w : NUMBER,

-			W : NUMBER,

-			D : NUMBER,

-			d : NUMBER,

-			F : NUMBER,

-			E : TEXT3,

-			a : TEXT2,

-			H : NUMBER,

-			k : NUMBER,

-			K : NUMBER,

-			h : NUMBER,

-			m : NUMBER,

-			s : NUMBER,

-			S : NUMBER,

-			Z : TIMEZONE

-		};

-		var ONE_DAY = 24 * 60 * 60 * 1000;

-		var ONE_WEEK = 7 * ONE_DAY;

-		var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK = 1;

-

-		var newDateAtMidnight = function(year, month, day) {

-			var d = new Date(year, month, day, 0, 0, 0);

-			d.setMilliseconds(0);

-			return d;

-		};

-

-		Date.prototype.getDifference = function(date) {

-			return this.getTime() - date.getTime();

-		};

-

-		Date.prototype.isBefore = function(d) {

-			return this.getTime() < d.getTime();

-		};

-

-		Date.prototype.getUTCTime = function() {

-			return Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(),

-					this.getSeconds(), this.getMilliseconds());

-		};

-

-		Date.prototype.getTimeSince = function(d) {

-			return this.getUTCTime() - d.getUTCTime();

-		};

-

-		Date.prototype.getPreviousSunday = function() {

-			// Using midday avoids any possibility of DST messing things up

-			var midday = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 12, 0, 0);

-			var previousSunday = new Date(midday.getTime() - this.getDay() * ONE_DAY);

-			return newDateAtMidnight(previousSunday.getFullYear(), previousSunday.getMonth(),

-					previousSunday.getDate());

-		};

-

-		Date.prototype.getWeekInYear = function(minimalDaysInFirstWeek) {

-			if (isUndefined(this.minimalDaysInFirstWeek)) {

-				minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;

-			}

-			var previousSunday = this.getPreviousSunday();

-			var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);

-			var numberOfSundays = previousSunday.isBefore(startOfYear) ?

-				0 : 1 + Math.floor(previousSunday.getTimeSince(startOfYear) / ONE_WEEK);

-			var numberOfDaysInFirstWeek =  7 - startOfYear.getDay();

-			var weekInYear = numberOfSundays;

-			if (numberOfDaysInFirstWeek < minimalDaysInFirstWeek) {

-				weekInYear--;

-			}

-			return weekInYear;

-		};

-

-		Date.prototype.getWeekInMonth = function(minimalDaysInFirstWeek) {

-			if (isUndefined(this.minimalDaysInFirstWeek)) {

-				minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;

-			}

-			var previousSunday = this.getPreviousSunday();

-			var startOfMonth = newDateAtMidnight(this.getFullYear(), this.getMonth(), 1);

-			var numberOfSundays = previousSunday.isBefore(startOfMonth) ?

-				0 : 1 + Math.floor(previousSunday.getTimeSince(startOfMonth) / ONE_WEEK);

-			var numberOfDaysInFirstWeek =  7 - startOfMonth.getDay();

-			var weekInMonth = numberOfSundays;

-			if (numberOfDaysInFirstWeek >= minimalDaysInFirstWeek) {

-				weekInMonth++;

-			}

-			return weekInMonth;

-		};

-

-		Date.prototype.getDayInYear = function() {

-			var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);

-			return 1 + Math.floor(this.getTimeSince(startOfYear) / ONE_DAY);

-		};

-

-		/* ------------------------------------------------------------------ */

-

-		SimpleDateFormat = function(formatString) {

-			this.formatString = formatString;

-		};

-

-		/**

-		 * Sets the minimum number of days in a week in order for that week to

-		 * be considered as belonging to a particular month or year

-		 */

-		SimpleDateFormat.prototype.setMinimalDaysInFirstWeek = function(days) {

-			this.minimalDaysInFirstWeek = days;

-		};

-

-		SimpleDateFormat.prototype.getMinimalDaysInFirstWeek = function() {

-			return isUndefined(this.minimalDaysInFirstWeek)	?

-				DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK : this.minimalDaysInFirstWeek;

-		};

-

-		var padWithZeroes = function(str, len) {

-			while (str.length < len) {

-				str = "0" + str;

-			}

-			return str;

-		};

-

-		var formatText = function(data, numberOfLetters, minLength) {

-			return (numberOfLetters >= 4) ? data : data.substr(0, Math.max(minLength, numberOfLetters));

-		};

-

-		var formatNumber = function(data, numberOfLetters) {

-			var dataString = "" + data;

-			// Pad with 0s as necessary

-			return padWithZeroes(dataString, numberOfLetters);

-		};

-

-		SimpleDateFormat.prototype.format = function(date) {

-			var formattedString = "";

-			var result;

-			var searchString = this.formatString;

-			while ((result = regex.exec(searchString))) {

-				var quotedString = result[1];

-				var patternLetters = result[2];

-				var otherLetters = result[3];

-				var otherCharacters = result[4];

-

-				// If the pattern matched is quoted string, output the text between the quotes

-				if (quotedString) {

-					if (quotedString == "''") {

-						formattedString += "'";

-					} else {

-						formattedString += quotedString.substring(1, quotedString.length - 1);

-					}

-				} else if (otherLetters) {

-					// Swallow non-pattern letters by doing nothing here

-				} else if (otherCharacters) {

-					// Simply output other characters

-					formattedString += otherCharacters;

-				} else if (patternLetters) {

-					// Replace pattern letters

-					var patternLetter = patternLetters.charAt(0);

-					var numberOfLetters = patternLetters.length;

-					var rawData = "";

-					switch(patternLetter) {

-						case "G":

-							rawData = "AD";

-							break;

-						case "y":

-							rawData = date.getFullYear();

-							break;

-						case "M":

-							rawData = date.getMonth();

-							break;

-						case "w":

-							rawData = date.getWeekInYear(this.getMinimalDaysInFirstWeek());

-							break;

-						case "W":

-							rawData = date.getWeekInMonth(this.getMinimalDaysInFirstWeek());

-							break;

-						case "D":

-							rawData = date.getDayInYear();

-							break;

-						case "d":

-							rawData = date.getDate();

-							break;

-						case "F":

-							rawData = 1 + Math.floor((date.getDate() - 1) / 7);

-							break;

-						case "E":

-							rawData = dayNames[date.getDay()];

-							break;

-						case "a":

-							rawData = (date.getHours() >= 12) ? "PM" : "AM";

-							break;

-						case "H":

-							rawData = date.getHours();

-							break;

-						case "k":

-							rawData = date.getHours() || 24;

-							break;

-						case "K":

-							rawData = date.getHours() % 12;

-							break;

-						case "h":

-							rawData = (date.getHours() % 12) || 12;

-							break;

-						case "m":

-							rawData = date.getMinutes();

-							break;

-						case "s":

-							rawData = date.getSeconds();

-							break;

-						case "S":

-							rawData = date.getMilliseconds();

-							break;

-						case "Z":

-							rawData = date.getTimezoneOffset(); // This returns the number of minutes since GMT was this time.

-							break;

-					}

-					// Format the raw data depending on the type

-					switch(types[patternLetter]) {

-						case TEXT2:

-							formattedString += formatText(rawData, numberOfLetters, 2);

-							break;

-						case TEXT3:

-							formattedString += formatText(rawData, numberOfLetters, 3);

-							break;

-						case NUMBER:

-							formattedString += formatNumber(rawData, numberOfLetters);

-							break;

-						case YEAR:

-							if (numberOfLetters <= 3) {

-								// Output a 2-digit year

-								var dataString = "" + rawData;

-								formattedString += dataString.substr(2, 2);

-							} else {

-								formattedString += formatNumber(rawData, numberOfLetters);

-							}

-							break;

-						case MONTH:

-							if (numberOfLetters >= 3) {

-								formattedString += formatText(monthNames[rawData], numberOfLetters, numberOfLetters);

-							} else {

-								// NB. Months returned by getMonth are zero-based

-								formattedString += formatNumber(rawData + 1, numberOfLetters);

-							}

-							break;

-						case TIMEZONE:

-							var isPositive = (rawData > 0);

-							// The following line looks like a mistake but isn't

-							// because of the way getTimezoneOffset measures.

-							var prefix = isPositive ? "-" : "+";

-							var absData = Math.abs(rawData);

-

-							// Hours

-							var hours = "" + Math.floor(absData / 60);

-							hours = padWithZeroes(hours, 2);

-							// Minutes

-							var minutes = "" + (absData % 60);

-							minutes = padWithZeroes(minutes, 2);

-

-							formattedString += prefix + hours + minutes;

-							break;

-					}

-				}

-				searchString = searchString.substr(result.index + result[0].length);

-			}

-			return formattedString;

-		};

-	})();

-

-	log4javascript.SimpleDateFormat = SimpleDateFormat;

-

-	/* ---------------------------------------------------------------------- */

-	// PatternLayout

-

-	function PatternLayout(pattern) {

-		if (pattern) {

-			this.pattern = pattern;

-		} else {

-			this.pattern = PatternLayout.DEFAULT_CONVERSION_PATTERN;

-		}

-		this.customFields = [];

-	}

-

-	PatternLayout.TTCC_CONVERSION_PATTERN = "%r %p %c - %m%n";

-	PatternLayout.DEFAULT_CONVERSION_PATTERN = "%m%n";

-	PatternLayout.ISO8601_DATEFORMAT = "yyyy-MM-dd HH:mm:ss,SSS";

-	PatternLayout.DATETIME_DATEFORMAT = "dd MMM yyyy HH:mm:ss,SSS";

-	PatternLayout.ABSOLUTETIME_DATEFORMAT = "HH:mm:ss,SSS";

-

-	PatternLayout.prototype = new Layout();

-

-	PatternLayout.prototype.format = function(loggingEvent) {

-		var regex = /%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;

-		var formattedString = "";

-		var result;

-		var searchString = this.pattern;

-

-		// Cannot use regex global flag since it doesn't work with exec in IE5

-		while ((result = regex.exec(searchString))) {

-			var matchedString = result[0];

-			var padding = result[1];

-			var truncation = result[2];

-			var conversionCharacter = result[3];

-			var specifier = result[5];

-			var text = result[6];

-

-			// Check if the pattern matched was just normal text

-			if (text) {

-				formattedString += "" + text;

-			} else {

-				// Create a raw replacement string based on the conversion

-				// character and specifier

-				var replacement = "";

-				switch(conversionCharacter) {

-					case "a": // Array of messages

-					case "m": // Message

-						var depth = 0;

-						if (specifier) {

-							depth = parseInt(specifier, 10);

-							if (isNaN(depth)) {

-								handleError("PatternLayout.format: invalid specifier '" +

-									specifier + "' for conversion character '" + conversionCharacter +

-									"' - should be a number");

-								depth = 0;

-							}

-						}

-						var messages = (conversionCharacter === "a") ? loggingEvent.messages[0] : loggingEvent.messages;

-						for (var i = 0, len = messages.length; i < len; i++) {

-							if (i > 0 && (replacement.charAt(replacement.length - 1) !== " ")) {

-								replacement += " ";

-							}

-							if (depth === 0) {

-								replacement += messages[i];

-							} else {

-								replacement += formatObjectExpansion(messages[i], depth);

-							}

-						}

-						break;

-					case "c": // Logger name

-						var loggerName = loggingEvent.logger.name;

-						if (specifier) {

-							var precision = parseInt(specifier, 10);

-							var loggerNameBits = loggingEvent.logger.name.split(".");

-							if (precision >= loggerNameBits.length) {

-								replacement = loggerName;

-							} else {

-								replacement = loggerNameBits.slice(loggerNameBits.length - precision).join(".");

-							}

-						} else {

-							replacement = loggerName;

-						}

-						break;

-					case "d": // Date

-						var dateFormat = PatternLayout.ISO8601_DATEFORMAT;

-						if (specifier) {

-							dateFormat = specifier;

-							// Pick up special cases

-							if (dateFormat == "ISO8601") {

-								dateFormat = PatternLayout.ISO8601_DATEFORMAT;

-							} else if (dateFormat == "ABSOLUTE") {

-								dateFormat = PatternLayout.ABSOLUTETIME_DATEFORMAT;

-							} else if (dateFormat == "DATE") {

-								dateFormat = PatternLayout.DATETIME_DATEFORMAT;

-							}

-						}

-						// Format the date

-						replacement = (new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);

-						break;

-					case "f": // Custom field

-						if (this.hasCustomFields()) {

-							var fieldIndex = 0;

-							if (specifier) {

-								fieldIndex = parseInt(specifier, 10);

-								if (isNaN(fieldIndex)) {

-									handleError("PatternLayout.format: invalid specifier '" +

-										specifier + "' for conversion character 'f' - should be a number");

-								} else if (fieldIndex === 0) {

-									handleError("PatternLayout.format: invalid specifier '" +

-										specifier + "' for conversion character 'f' - must be greater than zero");

-								} else if (fieldIndex > this.customFields.length) {

-									handleError("PatternLayout.format: invalid specifier '" +

-										specifier + "' for conversion character 'f' - there aren't that many custom fields");

-								} else {

-									fieldIndex = fieldIndex - 1;

-								}

-							}

-                            var val = this.customFields[fieldIndex].value;

-                            if (typeof val == "function") {

-                                val = val(this, loggingEvent);

-                            }

-                            replacement = val;

-						}

-						break;

-					case "n": // New line

-						replacement = newLine;

-						break;

-					case "p": // Level

-						replacement = loggingEvent.level.name;

-						break;

-					case "r": // Milliseconds since log4javascript startup

-						replacement = "" + loggingEvent.timeStamp.getDifference(applicationStartDate);

-						break;

-					case "%": // Literal % sign

-						replacement = "%";

-						break;

-					default:

-						replacement = matchedString;

-						break;

-				}

-				// Format the replacement according to any padding or

-				// truncation specified

-				var l;

-

-				// First, truncation

-				if (truncation) {

-					l = parseInt(truncation.substr(1), 10);

-					var strLen = replacement.length;

-					if (l < strLen) {

-						replacement = replacement.substring(strLen - l, strLen);

-					}

-				}

-				// Next, padding

-				if (padding) {

-					if (padding.charAt(0) == "-") {

-						l = parseInt(padding.substr(1), 10);

-						// Right pad with spaces

-						while (replacement.length < l) {

-							replacement += " ";

-						}

-					} else {

-						l = parseInt(padding, 10);

-						// Left pad with spaces

-						while (replacement.length < l) {

-							replacement = " " + replacement;

-						}

-					}

-				}

-				formattedString += replacement;

-			}

-			searchString = searchString.substr(result.index + result[0].length);

-		}

-		return formattedString;

-	};

-

-	PatternLayout.prototype.ignoresThrowable = function() {

-	    return true;

-	};

-

-	PatternLayout.prototype.toString = function() {

-	    return "PatternLayout";

-	};

-

-	log4javascript.PatternLayout = PatternLayout;

-	/* ---------------------------------------------------------------------- */

-	// AlertAppender

-

-	function AlertAppender() {}

-

-	AlertAppender.prototype = new Appender();

-

-	AlertAppender.prototype.layout = new SimpleLayout();

-

-	AlertAppender.prototype.append = function(loggingEvent) {

-		var formattedMessage = this.getLayout().format(loggingEvent);

-		if (this.getLayout().ignoresThrowable()) {

-			formattedMessage += loggingEvent.getThrowableStrRep();

-		}

-		alert(formattedMessage);

-	};

-

-	AlertAppender.prototype.toString = function() {

-		return "AlertAppender";

-	};

-

-	log4javascript.AlertAppender = AlertAppender;

-	/* ---------------------------------------------------------------------- */

-	// BrowserConsoleAppender (only works in Opera and Safari and Firefox with

-	// Firebug extension)

-

-	function BrowserConsoleAppender() {}

-

-	BrowserConsoleAppender.prototype = new log4javascript.Appender();

-	BrowserConsoleAppender.prototype.layout = new NullLayout();

-	BrowserConsoleAppender.prototype.threshold = Level.DEBUG;

-

-	BrowserConsoleAppender.prototype.append = function(loggingEvent) {

-		var appender = this;

-

-		var getFormattedMessage = function() {

-			var layout = appender.getLayout();

-			var formattedMessage = layout.format(loggingEvent);

-			if (layout.ignoresThrowable() && loggingEvent.exception) {

-				formattedMessage += loggingEvent.getThrowableStrRep();

-			}

-			return formattedMessage;

-		};

-

-		if ((typeof opera != "undefined") && opera.postError) { // Opera

-			opera.postError(getFormattedMessage());

-		} else if (window.console && window.console.log) { // Safari and Firebug

-			var formattedMesage = getFormattedMessage();

-			// Log to Firebug using its logging methods or revert to the console.log

-			// method in Safari

-			if (window.console.debug && Level.DEBUG.isGreaterOrEqual(loggingEvent.level)) {

-				window.console.debug(formattedMesage);

-			} else if (window.console.info && Level.INFO.equals(loggingEvent.level)) {

-				window.console.info(formattedMesage);

-			} else if (window.console.warn && Level.WARN.equals(loggingEvent.level)) {

-				window.console.warn(formattedMesage);

-			} else if (window.console.error && loggingEvent.level.isGreaterOrEqual(Level.ERROR)) {

-				window.console.error(formattedMesage);

-			} else {

-				window.console.log(formattedMesage);

-			}

-		}

-	};

-

-	BrowserConsoleAppender.prototype.group = function(name) {

-		if (window.console && window.console.group) {

-			window.console.group(name);

-		}

-	};

-

-	BrowserConsoleAppender.prototype.groupEnd = function() {

-		if (window.console && window.console.groupEnd) {

-			window.console.groupEnd();

-		}

-	};

-

-	BrowserConsoleAppender.prototype.toString = function() {

-		return "BrowserConsoleAppender";

-	};

-

-	log4javascript.BrowserConsoleAppender = BrowserConsoleAppender;

-	/* ---------------------------------------------------------------------- */

-	// AjaxAppender related

-

-	var xmlHttpFactories = [

-		function() { return new XMLHttpRequest(); },

-		function() { return new ActiveXObject("Msxml2.XMLHTTP"); },

-		function() { return new ActiveXObject("Microsoft.XMLHTTP"); }

-	];

-

-	var getXmlHttp = function(errorHandler) {

-		// This is only run the first time; the value of getXmlHttp gets

-		// replaced with the factory that succeeds on the first run

-		var xmlHttp = null, factory;

-		for (var i = 0, len = xmlHttpFactories.length; i < len; i++) {

-			factory = xmlHttpFactories[i];

-			try {

-				xmlHttp = factory();

-				getXmlHttp = factory;

-				return xmlHttp;

-			} catch (e) {

-			}

-		}

-		// If we're here, all factories have failed, so throw an error

-		if (errorHandler) {

-			errorHandler();

-		} else {

-			handleError("getXmlHttp: unable to obtain XMLHttpRequest object");

-		}

-	};

-

-	function isHttpRequestSuccessful(xmlHttp) {

-		return isUndefined(xmlHttp.status) || xmlHttp.status === 0 ||

-			(xmlHttp.status >= 200 && xmlHttp.status < 300) ||

-			xmlHttp.status == 1223 /* Fix for IE */;

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// AjaxAppender

-

-	function AjaxAppender(url) {

-		var appender = this;

-		var isSupported = true;

-		if (!url) {

-			handleError("AjaxAppender: URL must be specified in constructor");

-			isSupported = false;

-		}

-

-		var timed = this.defaults.timed;

-		var waitForResponse = this.defaults.waitForResponse;

-		var batchSize = this.defaults.batchSize;

-		var timerInterval = this.defaults.timerInterval;

-		var requestSuccessCallback = this.defaults.requestSuccessCallback;

-		var failCallback = this.defaults.failCallback;

-		var postVarName = this.defaults.postVarName;

-		var sendAllOnUnload = this.defaults.sendAllOnUnload;

-		var contentType = this.defaults.contentType;

-		var sessionId = null;

-

-		var queuedLoggingEvents = [];

-		var queuedRequests = [];

-		var headers = [];

-		var sending = false;

-		var initialized = false;

-

-		// Configuration methods. The function scope is used to prevent

-		// direct alteration to the appender configuration properties.

-		function checkCanConfigure(configOptionName) {

-			if (initialized) {

-				handleError("AjaxAppender: configuration option '" +

-					configOptionName +

-					"' may not be set after the appender has been initialized");

-				return false;

-			}

-			return true;

-		}

-

-		this.getSessionId = function() { return sessionId; };

-		this.setSessionId = function(sessionIdParam) {

-			sessionId = extractStringFromParam(sessionIdParam, null);

-			this.layout.setCustomField("sessionid", sessionId);

-		};

-

-		this.setLayout = function(layoutParam) {

-			if (checkCanConfigure("layout")) {

-				this.layout = layoutParam;

-				// Set the session id as a custom field on the layout, if not already present

-				if (sessionId !== null) {

-					this.setSessionId(sessionId);

-				}

-			}

-		};

-

-		this.isTimed = function() { return timed; };

-		this.setTimed = function(timedParam) {

-			if (checkCanConfigure("timed")) {

-				timed = bool(timedParam);

-			}

-		};

-

-		this.getTimerInterval = function() { return timerInterval; };

-		this.setTimerInterval = function(timerIntervalParam) {

-			if (checkCanConfigure("timerInterval")) {

-				timerInterval = extractIntFromParam(timerIntervalParam, timerInterval);

-			}

-		};

-

-		this.isWaitForResponse = function() { return waitForResponse; };

-		this.setWaitForResponse = function(waitForResponseParam) {

-			if (checkCanConfigure("waitForResponse")) {

-				waitForResponse = bool(waitForResponseParam);

-			}

-		};

-

-		this.getBatchSize = function() { return batchSize; };

-		this.setBatchSize = function(batchSizeParam) {

-			if (checkCanConfigure("batchSize")) {

-				batchSize = extractIntFromParam(batchSizeParam, batchSize);

-			}

-		};

-

-		this.isSendAllOnUnload = function() { return sendAllOnUnload; };

-		this.setSendAllOnUnload = function(sendAllOnUnloadParam) {

-			if (checkCanConfigure("sendAllOnUnload")) {

-				sendAllOnUnload = extractBooleanFromParam(sendAllOnUnloadParam, sendAllOnUnload);

-			}

-		};

-

-		this.setRequestSuccessCallback = function(requestSuccessCallbackParam) {

-			requestSuccessCallback = extractFunctionFromParam(requestSuccessCallbackParam, requestSuccessCallback);

-		};

-

-		this.setFailCallback = function(failCallbackParam) {

-			failCallback = extractFunctionFromParam(failCallbackParam, failCallback);

-		};

-

-		this.getPostVarName = function() { return postVarName; };

-		this.setPostVarName = function(postVarNameParam) {

-			if (checkCanConfigure("postVarName")) {

-				postVarName = extractStringFromParam(postVarNameParam, postVarName);

-			}

-		};

-

-		this.getHeaders = function() { return headers; };

-		this.addHeader = function(name, value) {

-			if (name.toLowerCase() == "content-type") {

-				contentType = value;

-			} else {

-				headers.push( { name: name, value: value } );

-			}

-		};

-

-		// Internal functions

-		function sendAll() {

-			if (isSupported && enabled) {

-				sending = true;

-				var currentRequestBatch;

-				if (waitForResponse) {

-					// Send the first request then use this function as the callback once

-					// the response comes back

-					if (queuedRequests.length > 0) {

-						currentRequestBatch = queuedRequests.shift();

-						sendRequest(preparePostData(currentRequestBatch), sendAll);

-					} else {

-						sending = false;

-						if (timed) {

-							scheduleSending();

-						}

-					}

-				} else {

-					// Rattle off all the requests without waiting to see the response

-					while ((currentRequestBatch = queuedRequests.shift())) {

-						sendRequest(preparePostData(currentRequestBatch));

-					}

-					sending = false;

-					if (timed) {

-						scheduleSending();

-					}

-				}

-			}

-		}

-

-		this.sendAll = sendAll;

-

-		// Called when the window unloads. At this point we're past caring about

-		// waiting for responses or timers or incomplete batches - everything

-		// must go, now

-		function sendAllRemaining() {

-			var sendingAnything = false;

-			if (isSupported && enabled) {

-				// Create requests for everything left over, batched as normal

-				var actualBatchSize = appender.getLayout().allowBatching() ? batchSize : 1;

-				var currentLoggingEvent;

-				var batchedLoggingEvents = [];

-				while ((currentLoggingEvent = queuedLoggingEvents.shift())) {

-					batchedLoggingEvents.push(currentLoggingEvent);

-					if (queuedLoggingEvents.length >= actualBatchSize) {

-						// Queue this batch of log entries

-						queuedRequests.push(batchedLoggingEvents);

-						batchedLoggingEvents = [];

-					}

-				}

-				// If there's a partially completed batch, add it

-				if (batchedLoggingEvents.length > 0) {

-					queuedRequests.push(batchedLoggingEvents);

-				}

-				sendingAnything = (queuedRequests.length > 0);

-				waitForResponse = false;

-				timed = false;

-				sendAll();

-			}

-			return sendingAnything;

-		}

-

-		this.sendAllRemaining = sendAllRemaining;

-

-		function preparePostData(batchedLoggingEvents) {

-			// Format the logging events

-			var formattedMessages = [];

-			var currentLoggingEvent;

-			var postData = "";

-			while ((currentLoggingEvent = batchedLoggingEvents.shift())) {

-				var currentFormattedMessage = appender.getLayout().format(currentLoggingEvent);

-				if (appender.getLayout().ignoresThrowable()) {

-					currentFormattedMessage += currentLoggingEvent.getThrowableStrRep();

-				}

-				formattedMessages.push(currentFormattedMessage);

-			}

-			// Create the post data string

-			if (batchedLoggingEvents.length == 1) {

-				postData = formattedMessages.join("");

-			} else {

-				postData = appender.getLayout().batchHeader +

-					formattedMessages.join(appender.getLayout().batchSeparator) +

-					appender.getLayout().batchFooter;

-			}

-			if (contentType == appender.defaults.contentType) {

-				postData = appender.getLayout().returnsPostData ? postData :

-					urlEncode(postVarName) + "=" + urlEncode(postData);

-				// Add the layout name to the post data

-				if (postData.length > 0) {

-					postData += "&";

-				}

-				postData += "layout=" + urlEncode(appender.getLayout().toString());

-			}

-			return postData;

-		}

-

-		function scheduleSending() {

-			window.setTimeout(sendAll, timerInterval);

-		}

-

-		function xmlHttpErrorHandler() {

-			var msg = "AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";

-			handleError(msg);

-			isSupported = false;

-			if (failCallback) {

-				failCallback(msg);

-			}

-		}

-

-		function sendRequest(postData, successCallback) {

-			try {

-				var xmlHttp = getXmlHttp(xmlHttpErrorHandler);

-				if (isSupported) {

-					if (xmlHttp.overrideMimeType) {

-						xmlHttp.overrideMimeType(appender.getLayout().getContentType());

-					}

-					xmlHttp.onreadystatechange = function() {

-						if (xmlHttp.readyState == 4) {

-							if (isHttpRequestSuccessful(xmlHttp)) {

-								if (requestSuccessCallback) {

-									requestSuccessCallback(xmlHttp);

-								}

-								if (successCallback) {

-									successCallback(xmlHttp);

-								}

-							} else {

-								var msg = "AjaxAppender.append: XMLHttpRequest request to URL " +

-									url + " returned status code " + xmlHttp.status;

-								handleError(msg);

-								if (failCallback) {

-									failCallback(msg);

-								}

-							}

-							xmlHttp.onreadystatechange = emptyFunction;

-							xmlHttp = null;

-						}

-					};

-					xmlHttp.open("POST", url, true);

-					try {

-						for (var i = 0, header; header = headers[i++]; ) {

-							xmlHttp.setRequestHeader(header.name, header.value);

-						}

-						xmlHttp.setRequestHeader("Content-Type", contentType);

-					} catch (headerEx) {

-						var msg = "AjaxAppender.append: your browser's XMLHttpRequest implementation" +

-							" does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";

-						handleError(msg);

-						isSupported = false;

-						if (failCallback) {

-							failCallback(msg);

-						}

-						return;

-					}

-					xmlHttp.send(postData);

-				}

-			} catch (ex) {

-				var errMsg = "AjaxAppender.append: error sending log message to " + url;

-				handleError(errMsg, ex);

-				isSupported = false;

-				if (failCallback) {

-					failCallback(errMsg + ". Details: " + getExceptionStringRep(ex));

-				}

-			}

-		}

-

-		this.append = function(loggingEvent) {

-			if (isSupported) {

-				if (!initialized) {

-					init();

-				}

-				queuedLoggingEvents.push(loggingEvent);

-				var actualBatchSize = this.getLayout().allowBatching() ? batchSize : 1;

-

-				if (queuedLoggingEvents.length >= actualBatchSize) {

-					var currentLoggingEvent;

-					var batchedLoggingEvents = [];

-					while ((currentLoggingEvent = queuedLoggingEvents.shift())) {

-						batchedLoggingEvents.push(currentLoggingEvent);

-					}

-					// Queue this batch of log entries

-					queuedRequests.push(batchedLoggingEvents);

-

-					// If using a timer, the queue of requests will be processed by the

-					// timer function, so nothing needs to be done here.

-					if (!timed && (!waitForResponse || (waitForResponse && !sending))) {

-						sendAll();

-					}

-				}

-			}

-		};

-

-		function init() {

-			initialized = true;

-			// Add unload event to send outstanding messages

-			if (sendAllOnUnload) {

-				var oldBeforeUnload = window.onbeforeunload;

-				window.onbeforeunload = function() {

-					if (oldBeforeUnload) {

-						oldBeforeUnload();

-					}

-					if (sendAllRemaining()) {

-						return "Sending log messages";

-					}

-				};

-			}

-			// Start timer

-			if (timed) {

-				scheduleSending();

-			}

-		}

-	}

-

-	AjaxAppender.prototype = new Appender();

-

-	AjaxAppender.prototype.defaults = {

-		waitForResponse: false,

-		timed: false,

-		timerInterval: 1000,

-		batchSize: 1,

-		sendAllOnUnload: false,

-		requestSuccessCallback: null,

-		failCallback: null,

-		postVarName: "data",

-		contentType: "application/x-www-form-urlencoded"

-	};

-

-	AjaxAppender.prototype.layout = new HttpPostDataLayout();

-

-	AjaxAppender.prototype.toString = function() {

-		return "AjaxAppender";

-	};

-

-	log4javascript.AjaxAppender = AjaxAppender;

-	/* ---------------------------------------------------------------------- */

-	// PopUpAppender and InPageAppender related

-

-	function setCookie(name, value, days, path) {

-	    var expires;

-	    path = path ? "; path=" + path : "";

-		if (days) {

-			var date = new Date();

-			date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));

-			expires = "; expires=" + date.toGMTString();

-		} else {

-		    expires = "";

-	    }

-		document.cookie = escape(name) + "=" + escape(value) + expires + path;

-	}

-

-	function getCookie(name) {

-		var nameEquals = escape(name) + "=";

-		var ca = document.cookie.split(";");

-		for (var i = 0, len = ca.length; i < len; i++) {

-			var c = ca[i];

-			while (c.charAt(0) === " ") {

-			    c = c.substring(1, c.length);

-			}

-			if (c.indexOf(nameEquals) === 0) {

-			    return unescape(c.substring(nameEquals.length, c.length));

-	        }

-		}

-		return null;

-	}

-

-	// Gets the base URL of the location of the log4javascript script.

-	// This is far from infallible.

-	function getBaseUrl() {

-		var scripts = document.getElementsByTagName("script");

-		for (var i = 0, len = scripts.length; i < len; ++i) {

-			if (scripts[i].src.indexOf("log4javascript") != -1) {

-				var lastSlash = scripts[i].src.lastIndexOf("/");

-				return (lastSlash == -1) ? "" : scripts[i].src.substr(0, lastSlash + 1);

-			}

-		}

-        return null;

-    }

-

-	function isLoaded(win) {

-		try {

-			return bool(win.loaded);

-		} catch (ex) {

-			return false;

-		}

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// ConsoleAppender (prototype for PopUpAppender and InPageAppender)

-

-	var ConsoleAppender;

-

-	// Create an anonymous function to protect base console methods

-	(function() {

-		var getConsoleHtmlLines = function() {

-			return [

-'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',

-'<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">',

-'	<head>',

-'		<title>log4javascript</title>',

-'		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />',

-'		<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->',

-'		<meta http-equiv="X-UA-Compatible" content="IE=7" />',

-'		<script type="text/javascript">var isIe = false, isIePre7 = false;</script>',

-'		<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->',

-'		<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->',

-'		<script type="text/javascript">',

-'			//<![CDATA[',

-'			var loggingEnabled = true;',

-'			var logQueuedEventsTimer = null;',

-'			var logEntries = [];',

-'			var logEntriesAndSeparators = [];',

-'			var logItems = [];',

-'			var renderDelay = 100;',

-'			var unrenderedLogItemsExist = false;',

-'			var rootGroup, currentGroup = null;',

-'			var loaded = false;',

-'			var currentLogItem = null;',

-'			var logMainContainer;',

-'',

-'			function copyProperties(obj, props) {',

-'				for (var i in props) {',

-'					obj[i] = props[i];',

-'				}',

-'			}',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogItem() {',

-'			}',

-'',

-'			LogItem.prototype = {',

-'				mainContainer: null,',

-'				wrappedContainer: null,',

-'				unwrappedContainer: null,',

-'				group: null,',

-'',

-'				appendToLog: function() {',

-'					for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'						this.elementContainers[i].appendToLog();',

-'					}',

-'					this.group.update();',

-'				},',

-'',

-'				doRemove: function(doUpdate, removeFromGroup) {',

-'					if (this.rendered) {',

-'						for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'							this.elementContainers[i].remove();',

-'						}',

-'						this.unwrappedElementContainer = null;',

-'						this.wrappedElementContainer = null;',

-'						this.mainElementContainer = null;',

-'					}',

-'					if (this.group && removeFromGroup) {',

-'						this.group.removeChild(this, doUpdate);',

-'					}',

-'					if (this === currentLogItem) {',

-'						currentLogItem = null;',

-'					}',

-'				},',

-'',

-'				remove: function(doUpdate, removeFromGroup) {',

-'					this.doRemove(doUpdate, removeFromGroup);',

-'				},',

-'',

-'				render: function() {},',

-'',

-'				accept: function(visitor) {',

-'					visitor.visit(this);',

-'				},',

-'',

-'				getUnwrappedDomContainer: function() {',

-'					return this.group.unwrappedElementContainer.contentDiv;',

-'				},',

-'',

-'				getWrappedDomContainer: function() {',

-'					return this.group.wrappedElementContainer.contentDiv;',

-'				},',

-'',

-'				getMainDomContainer: function() {',

-'					return this.group.mainElementContainer.contentDiv;',

-'				}',

-'			};',

-'',

-'			LogItem.serializedItemKeys = {LOG_ENTRY: 0, GROUP_START: 1, GROUP_END: 2};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogItemContainerElement() {',

-'			}',

-'',

-'			LogItemContainerElement.prototype = {',

-'				appendToLog: function() {',

-'					var insertBeforeFirst = (newestAtTop && this.containerDomNode.hasChildNodes());',

-'					if (insertBeforeFirst) {',

-'						this.containerDomNode.insertBefore(this.mainDiv, this.containerDomNode.firstChild);',

-'					} else {',

-'						this.containerDomNode.appendChild(this.mainDiv);',

-'					}',

-'				}',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function SeparatorElementContainer(containerDomNode) {',

-'				this.containerDomNode = containerDomNode;',

-'				this.mainDiv = document.createElement("div");',

-'				this.mainDiv.className = "separator";',

-'				this.mainDiv.innerHTML = "&nbsp;";',

-'			}',

-'',

-'			SeparatorElementContainer.prototype = new LogItemContainerElement();',

-'',

-'			SeparatorElementContainer.prototype.remove = function() {',

-'				this.mainDiv.parentNode.removeChild(this.mainDiv);',

-'				this.mainDiv = null;',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function Separator() {',

-'				this.rendered = false;',

-'			}',

-'',

-'			Separator.prototype = new LogItem();',

-'',

-'			copyProperties(Separator.prototype, {',

-'				render: function() {',

-'					var containerDomNode = this.group.contentDiv;',

-'					if (isIe) {',

-'						this.unwrappedElementContainer = new SeparatorElementContainer(this.getUnwrappedDomContainer());',

-'						this.wrappedElementContainer = new SeparatorElementContainer(this.getWrappedDomContainer());',

-'						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',

-'					} else {',

-'						this.mainElementContainer = new SeparatorElementContainer(this.getMainDomContainer());',

-'						this.elementContainers = [this.mainElementContainer];',

-'					}',

-'					this.content = this.formattedMessage;',

-'					this.rendered = true;',

-'				}',

-'			});',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function GroupElementContainer(group, containerDomNode, isRoot, isWrapped) {',

-'				this.group = group;',

-'				this.containerDomNode = containerDomNode;',

-'				this.isRoot = isRoot;',

-'				this.isWrapped = isWrapped;',

-'				this.expandable = false;',

-'',

-'				if (this.isRoot) {',

-'					if (isIe) {',

-'						this.contentDiv = logMainContainer.appendChild(document.createElement("div"));',

-'						this.contentDiv.id = this.isWrapped ? "log_wrapped" : "log_unwrapped";',

-'					} else {',

-'						this.contentDiv = logMainContainer;',

-'					}',

-'				} else {',

-'					var groupElementContainer = this;',

-'					',

-'					this.mainDiv = document.createElement("div");',

-'					this.mainDiv.className = "group";',

-'',

-'					this.headingDiv = this.mainDiv.appendChild(document.createElement("div"));',

-'					this.headingDiv.className = "groupheading";',

-'',

-'					this.expander = this.headingDiv.appendChild(document.createElement("span"));',

-'					this.expander.className = "expander unselectable greyedout";',

-'					this.expander.unselectable = true;',

-'					var expanderText = this.group.expanded ? "-" : "+";',

-'					this.expanderTextNode = this.expander.appendChild(document.createTextNode(expanderText));',

-'					',

-'					this.headingDiv.appendChild(document.createTextNode(" " + this.group.name));',

-'',

-'					this.contentDiv = this.mainDiv.appendChild(document.createElement("div"));',

-'					var contentCssClass = this.group.expanded ? "expanded" : "collapsed";',

-'					this.contentDiv.className = "groupcontent " + contentCssClass;',

-'',

-'					this.expander.onclick = function() {',

-'						if (groupElementContainer.group.expandable) {',

-'							groupElementContainer.group.toggleExpanded();',

-'						}',

-'					};',

-'				}',

-'			}',

-'',

-'			GroupElementContainer.prototype = new LogItemContainerElement();',

-'',

-'			copyProperties(GroupElementContainer.prototype, {',

-'				toggleExpanded: function() {',

-'					if (!this.isRoot) {',

-'						var oldCssClass, newCssClass, expanderText;',

-'						if (this.group.expanded) {',

-'							newCssClass = "expanded";',

-'							oldCssClass = "collapsed";',

-'							expanderText = "-";',

-'						} else {',

-'							newCssClass = "collapsed";',

-'							oldCssClass = "expanded";',

-'							expanderText = "+";',

-'						}',

-'						replaceClass(this.contentDiv, newCssClass, oldCssClass);',

-'						this.expanderTextNode.nodeValue = expanderText;',

-'					}',

-'				},',

-'',

-'				remove: function() {',

-'					if (!this.isRoot) {',

-'						this.headingDiv = null;',

-'						this.expander.onclick = null;',

-'						this.expander = null;',

-'						this.expanderTextNode = null;',

-'						this.contentDiv = null;',

-'						this.containerDomNode = null;',

-'						this.mainDiv.parentNode.removeChild(this.mainDiv);',

-'						this.mainDiv = null;',

-'					}',

-'				},',

-'',

-'				reverseChildren: function() {',

-'					// Invert the order of the log entries',

-'					var node = null;',

-'',

-'					// Remove all the log container nodes',

-'					var childDomNodes = [];',

-'					while ((node = this.contentDiv.firstChild)) {',

-'						this.contentDiv.removeChild(node);',

-'						childDomNodes.push(node);',

-'					}',

-'',

-'					// Put them all back in reverse order',

-'					while ((node = childDomNodes.pop())) {',

-'						this.contentDiv.appendChild(node);',

-'					}',

-'				},',

-'',

-'				update: function() {',

-'					if (!this.isRoot) {',

-'						if (this.group.expandable) {',

-'							removeClass(this.expander, "greyedout");',

-'						} else {',

-'							addClass(this.expander, "greyedout");',

-'						}',

-'					}',

-'				},',

-'',

-'				clear: function() {',

-'					if (this.isRoot) {',

-'						this.contentDiv.innerHTML = "";',

-'					}',

-'				}',

-'			});',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function Group(name, isRoot, initiallyExpanded) {',

-'				this.name = name;',

-'				this.group = null;',

-'				this.isRoot = isRoot;',

-'				this.initiallyExpanded = initiallyExpanded;',

-'				this.elementContainers = [];',

-'				this.children = [];',

-'				this.expanded = initiallyExpanded;',

-'				this.rendered = false;',

-'				this.expandable = false;',

-'			}',

-'',

-'			Group.prototype = new LogItem();',

-'',

-'			copyProperties(Group.prototype, {',

-'				addChild: function(logItem) {',

-'					this.children.push(logItem);',

-'					logItem.group = this;',

-'				},',

-'',

-'				render: function() {',

-'					if (isIe) {',

-'						var unwrappedDomContainer, wrappedDomContainer;',

-'						if (this.isRoot) {',

-'							unwrappedDomContainer = logMainContainer;',

-'							wrappedDomContainer = logMainContainer;',

-'						} else {',

-'							unwrappedDomContainer = this.getUnwrappedDomContainer();',

-'							wrappedDomContainer = this.getWrappedDomContainer();',

-'						}',

-'						this.unwrappedElementContainer = new GroupElementContainer(this, unwrappedDomContainer, this.isRoot, false);',

-'						this.wrappedElementContainer = new GroupElementContainer(this, wrappedDomContainer, this.isRoot, true);',

-'						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',

-'					} else {',

-'						var mainDomContainer = this.isRoot ? logMainContainer : this.getMainDomContainer();',

-'						this.mainElementContainer = new GroupElementContainer(this, mainDomContainer, this.isRoot, false);',

-'						this.elementContainers = [this.mainElementContainer];',

-'					}',

-'					this.rendered = true;',

-'				},',

-'',

-'				toggleExpanded: function() {',

-'					this.expanded = !this.expanded;',

-'					for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'						this.elementContainers[i].toggleExpanded();',

-'					}',

-'				},',

-'',

-'				expand: function() {',

-'					if (!this.expanded) {',

-'						this.toggleExpanded();',

-'					}',

-'				},',

-'',

-'				accept: function(visitor) {',

-'					visitor.visitGroup(this);',

-'				},',

-'',

-'				reverseChildren: function() {',

-'					if (this.rendered) {',

-'						for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'							this.elementContainers[i].reverseChildren();',

-'						}',

-'					}',

-'				},',

-'',

-'				update: function() {',

-'					var previouslyExpandable = this.expandable;',

-'					this.expandable = (this.children.length !== 0);',

-'					if (this.expandable !== previouslyExpandable) {',

-'						for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'							this.elementContainers[i].update();',

-'						}',

-'					}',

-'				},',

-'',

-'				flatten: function() {',

-'					var visitor = new GroupFlattener();',

-'					this.accept(visitor);',

-'					return visitor.logEntriesAndSeparators;',

-'				},',

-'',

-'				removeChild: function(child, doUpdate) {',

-'					array_remove(this.children, child);',

-'					child.group = null;',

-'					if (doUpdate) {',

-'						this.update();',

-'					}',

-'				},',

-'',

-'				remove: function(doUpdate, removeFromGroup) {',

-'					for (var i = 0, len = this.children.length; i < len; i++) {',

-'						this.children[i].remove(false, false);',

-'					}',

-'					this.children = [];',

-'					this.update();',

-'					if (this === currentGroup) {',

-'						currentGroup = this.group;',

-'					}',

-'					this.doRemove(doUpdate, removeFromGroup);',

-'				},',

-'',

-'				serialize: function(items) {',

-'					items.push([LogItem.serializedItemKeys.GROUP_START, this.name]);',

-'					for (var i = 0, len = this.children.length; i < len; i++) {',

-'						this.children[i].serialize(items);',

-'					}',

-'					if (this !== currentGroup) {',

-'						items.push([LogItem.serializedItemKeys.GROUP_END]);',

-'					}',

-'				},',

-'',

-'				clear: function() {',

-'					for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'						this.elementContainers[i].clear();',

-'					}',

-'				}',

-'			});',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogEntryElementContainer() {',

-'			}',

-'',

-'			LogEntryElementContainer.prototype = new LogItemContainerElement();',

-'',

-'			copyProperties(LogEntryElementContainer.prototype, {',

-'				remove: function() {',

-'					this.doRemove();',

-'				},',

-'',

-'				doRemove: function() {',

-'					this.mainDiv.parentNode.removeChild(this.mainDiv);',

-'					this.mainDiv = null;',

-'					this.contentElement = null;',

-'					this.containerDomNode = null;',

-'				},',

-'',

-'				setContent: function(content, wrappedContent) {',

-'					if (content === this.formattedMessage) {',

-'						this.contentElement.innerHTML = "";',

-'						this.contentElement.appendChild(document.createTextNode(this.formattedMessage));',

-'					} else {',

-'						this.contentElement.innerHTML = content;',

-'					}',

-'				},',

-'',

-'				setSearchMatch: function(isMatch) {',

-'					var oldCssClass = isMatch ? "searchnonmatch" : "searchmatch";',

-'					var newCssClass = isMatch ? "searchmatch" : "searchnonmatch";',

-'					replaceClass(this.mainDiv, newCssClass, oldCssClass);',

-'				},',

-'',

-'				clearSearch: function() {',

-'					removeClass(this.mainDiv, "searchmatch");',

-'					removeClass(this.mainDiv, "searchnonmatch");',

-'				}',

-'			});',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogEntryWrappedElementContainer(logEntry, containerDomNode) {',

-'				this.logEntry = logEntry;',

-'				this.containerDomNode = containerDomNode;',

-'				this.mainDiv = document.createElement("div");',

-'				this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));',

-'				this.mainDiv.className = "logentry wrapped " + this.logEntry.level;',

-'				this.contentElement = this.mainDiv;',

-'			}',

-'',

-'			LogEntryWrappedElementContainer.prototype = new LogEntryElementContainer();',

-'',

-'			LogEntryWrappedElementContainer.prototype.setContent = function(content, wrappedContent) {',

-'				if (content === this.formattedMessage) {',

-'					this.contentElement.innerHTML = "";',

-'					this.contentElement.appendChild(document.createTextNode(this.formattedMessage));',

-'				} else {',

-'					this.contentElement.innerHTML = wrappedContent;',

-'				}',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogEntryUnwrappedElementContainer(logEntry, containerDomNode) {',

-'				this.logEntry = logEntry;',

-'				this.containerDomNode = containerDomNode;',

-'				this.mainDiv = document.createElement("div");',

-'				this.mainDiv.className = "logentry unwrapped " + this.logEntry.level;',

-'				this.pre = this.mainDiv.appendChild(document.createElement("pre"));',

-'				this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));',

-'				this.pre.className = "unwrapped";',

-'				this.contentElement = this.pre;',

-'			}',

-'',

-'			LogEntryUnwrappedElementContainer.prototype = new LogEntryElementContainer();',

-'',

-'			LogEntryUnwrappedElementContainer.prototype.remove = function() {',

-'				this.doRemove();',

-'				this.pre = null;',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogEntryMainElementContainer(logEntry, containerDomNode) {',

-'				this.logEntry = logEntry;',

-'				this.containerDomNode = containerDomNode;',

-'				this.mainDiv = document.createElement("div");',

-'				this.mainDiv.className = "logentry nonielogentry " + this.logEntry.level;',

-'				this.contentElement = this.mainDiv.appendChild(document.createElement("span"));',

-'				this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));',

-'			}',

-'',

-'			LogEntryMainElementContainer.prototype = new LogEntryElementContainer();',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogEntry(level, formattedMessage) {',

-'				this.level = level;',

-'				this.formattedMessage = formattedMessage;',

-'				this.rendered = false;',

-'			}',

-'',

-'			LogEntry.prototype = new LogItem();',

-'',

-'			copyProperties(LogEntry.prototype, {',

-'				render: function() {',

-'					var logEntry = this;',

-'					var containerDomNode = this.group.contentDiv;',

-'',

-'					// Support for the CSS attribute white-space in IE for Windows is',

-'					// non-existent pre version 6 and slightly odd in 6, so instead',

-'					// use two different HTML elements',

-'					if (isIe) {',

-'						this.formattedMessage = this.formattedMessage.replace(/\\r\\n/g, "\\r"); // Workaround for IE\'s treatment of white space',

-'						this.unwrappedElementContainer = new LogEntryUnwrappedElementContainer(this, this.getUnwrappedDomContainer());',

-'						this.wrappedElementContainer = new LogEntryWrappedElementContainer(this, this.getWrappedDomContainer());',

-'						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',

-'					} else {',

-'						this.mainElementContainer = new LogEntryMainElementContainer(this, this.getMainDomContainer());',

-'						this.elementContainers = [this.mainElementContainer];',

-'					}',

-'					this.content = this.formattedMessage;',

-'					this.rendered = true;',

-'				},',

-'',

-'				setContent: function(content, wrappedContent) {',

-'					if (content != this.content) {',

-'						if (isIe && (content !== this.formattedMessage)) {',

-'							content = content.replace(/\\r\\n/g, "\\r"); // Workaround for IE\'s treatment of white space',

-'						}',

-'						for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'							this.elementContainers[i].setContent(content, wrappedContent);',

-'						}',

-'						this.content = content;',

-'					}',

-'				},',

-'',

-'				getSearchMatches: function() {',

-'					var matches = [];',

-'					var i, len;',

-'					if (isIe) {',

-'						var unwrappedEls = getElementsByClass(this.unwrappedElementContainer.mainDiv, "searchterm", "span");',

-'						var wrappedEls = getElementsByClass(this.wrappedElementContainer.mainDiv, "searchterm", "span");',

-'						for (i = 0, len = unwrappedEls.length; i < len; i++) {',

-'							matches[i] = new Match(this.level, null, unwrappedEls[i], wrappedEls[i]);',

-'						}',

-'					} else {',

-'						var els = getElementsByClass(this.mainElementContainer.mainDiv, "searchterm", "span");',

-'						for (i = 0, len = els.length; i < len; i++) {',

-'							matches[i] = new Match(this.level, els[i]);',

-'						}',

-'					}',

-'					return matches;',

-'				},',

-'',

-'				setSearchMatch: function(isMatch) {',

-'					for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'						this.elementContainers[i].setSearchMatch(isMatch);',

-'					}',

-'				},',

-'',

-'				clearSearch: function() {',

-'					for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'						this.elementContainers[i].clearSearch();',

-'					}',

-'				},',

-'',

-'				accept: function(visitor) {',

-'					visitor.visitLogEntry(this);',

-'				},',

-'',

-'				serialize: function(items) {',

-'					items.push([LogItem.serializedItemKeys.LOG_ENTRY, this.level, this.formattedMessage]);',

-'				}',

-'			});',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogItemVisitor() {',

-'			}',

-'',

-'			LogItemVisitor.prototype = {',

-'				visit: function(logItem) {',

-'				},',

-'',

-'				visitParent: function(logItem) {',

-'					if (logItem.group) {',

-'						logItem.group.accept(this);',

-'					}',

-'				},',

-'',

-'				visitChildren: function(logItem) {',

-'					for (var i = 0, len = logItem.children.length; i < len; i++) {',

-'						logItem.children[i].accept(this);',

-'					}',

-'				},',

-'',

-'				visitLogEntry: function(logEntry) {',

-'					this.visit(logEntry);',

-'				},',

-'',

-'				visitSeparator: function(separator) {',

-'					this.visit(separator);',

-'				},',

-'',

-'				visitGroup: function(group) {',

-'					this.visit(group);',

-'				}',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function GroupFlattener() {',

-'				this.logEntriesAndSeparators = [];',

-'			}',

-'',

-'			GroupFlattener.prototype = new LogItemVisitor();',

-'',

-'			GroupFlattener.prototype.visitGroup = function(group) {',

-'				this.visitChildren(group);',

-'			};',

-'',

-'			GroupFlattener.prototype.visitLogEntry = function(logEntry) {',

-'				this.logEntriesAndSeparators.push(logEntry);',

-'			};',

-'',

-'			GroupFlattener.prototype.visitSeparator = function(separator) {',

-'				this.logEntriesAndSeparators.push(separator);',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			window.onload = function() {',

-'				// Sort out document.domain',

-'				if (location.search) {',

-'					var queryBits = unescape(location.search).substr(1).split("&"), nameValueBits;',

-'					for (var i = 0, len = queryBits.length; i < len; i++) {',

-'						nameValueBits = queryBits[i].split("=");',

-'						if (nameValueBits[0] == "log4javascript_domain") {',

-'							document.domain = nameValueBits[1];',

-'							break;',

-'						}',

-'					}',

-'				}',

-'',

-'				// Create DOM objects',

-'				logMainContainer = $("log");',

-'				if (isIePre7) {',

-'					addClass(logMainContainer, "oldIe");',

-'				}',

-'',

-'				rootGroup = new Group("root", true);',

-'				rootGroup.render();',

-'				currentGroup = rootGroup;',

-'				',

-'				setCommandInputWidth();',

-'				setLogContainerHeight();',

-'				toggleLoggingEnabled();',

-'				toggleSearchEnabled();',

-'				toggleSearchFilter();',

-'				toggleSearchHighlight();',

-'				applyFilters();',

-'				checkAllLevels();',

-'				toggleWrap();',

-'				toggleNewestAtTop();',

-'				toggleScrollToLatest();',

-'				renderQueuedLogItems();',

-'				loaded = true;',

-'				$("command").value = "";',

-'				$("command").autocomplete = "off";',

-'				$("command").onkeydown = function(evt) {',

-'					evt = getEvent(evt);',

-'					if (evt.keyCode == 10 || evt.keyCode == 13) { // Return/Enter',

-'						evalCommandLine();',

-'						stopPropagation(evt);',

-'					} else if (evt.keyCode == 27) { // Escape',

-'						this.value = "";',

-'						this.focus();',

-'					} else if (evt.keyCode == 38 && commandHistory.length > 0) { // Up',

-'						currentCommandIndex = Math.max(0, currentCommandIndex - 1);',

-'						this.value = commandHistory[currentCommandIndex];',

-'						moveCaretToEnd(this);',

-'					} else if (evt.keyCode == 40 && commandHistory.length > 0) { // Down',

-'						currentCommandIndex = Math.min(commandHistory.length - 1, currentCommandIndex + 1);',

-'						this.value = commandHistory[currentCommandIndex];',

-'						moveCaretToEnd(this);',

-'					}',

-'				};',

-'',

-'				// Prevent the keypress moving the caret in Firefox',

-'				$("command").onkeypress = function(evt) {',

-'					evt = getEvent(evt);',

-'					if (evt.keyCode == 38 && commandHistory.length > 0 && evt.preventDefault) { // Up',

-'						evt.preventDefault();',

-'					}',

-'				};',

-'',

-'				// Prevent the keyup event blurring the input in Opera',

-'				$("command").onkeyup = function(evt) {',

-'					evt = getEvent(evt);',

-'					if (evt.keyCode == 27 && evt.preventDefault) { // Up',

-'						evt.preventDefault();',

-'						this.focus();',

-'					}',

-'				};',

-'',

-'				// Add document keyboard shortcuts',

-'				document.onkeydown = function keyEventHandler(evt) {',

-'					evt = getEvent(evt);',

-'					switch (evt.keyCode) {',

-'						case 69: // Ctrl + shift + E: re-execute last command',

-'							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',

-'								evalLastCommand();',

-'								cancelKeyEvent(evt);',

-'								return false;',

-'							}',

-'							break;',

-'						case 75: // Ctrl + shift + K: focus search',

-'							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',

-'								focusSearch();',

-'								cancelKeyEvent(evt);',

-'								return false;',

-'							}',

-'							break;',

-'						case 40: // Ctrl + shift + down arrow: focus command line',

-'						case 76: // Ctrl + shift + L: focus command line',

-'							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',

-'								focusCommandLine();',

-'								cancelKeyEvent(evt);',

-'								return false;',

-'							}',

-'							break;',

-'					}',

-'				};',

-'',

-'				// Workaround to make sure log div starts at the correct size',

-'				setTimeout(setLogContainerHeight, 20);',

-'',

-'				setShowCommandLine(showCommandLine);',

-'				doSearch();',

-'			};',

-'',

-'			window.onunload = function() {',

-'				if (mainWindowExists()) {',

-'					appender.unload();',

-'				}',

-'				appender = null;',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function toggleLoggingEnabled() {',

-'				setLoggingEnabled($("enableLogging").checked);',

-'			}',

-'',

-'			function setLoggingEnabled(enable) {',

-'				loggingEnabled = enable;',

-'			}',

-'',

-'			var appender = null;',

-'',

-'			function setAppender(appenderParam) {',

-'				appender = appenderParam;',

-'			}',

-'',

-'			function setShowCloseButton(showCloseButton) {',

-'				$("closeButton").style.display = showCloseButton ? "inline" : "none";',

-'			}',

-'',

-'			function setShowHideButton(showHideButton) {',

-'				$("hideButton").style.display = showHideButton ? "inline" : "none";',

-'			}',

-'',

-'			var newestAtTop = false;',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogItemContentReverser() {',

-'			}',

-'			',

-'			LogItemContentReverser.prototype = new LogItemVisitor();',

-'			',

-'			LogItemContentReverser.prototype.visitGroup = function(group) {',

-'				group.reverseChildren();',

-'				this.visitChildren(group);',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function setNewestAtTop(isNewestAtTop) {',

-'				var oldNewestAtTop = newestAtTop;',

-'				var i, iLen, j, jLen;',

-'				newestAtTop = Boolean(isNewestAtTop);',

-'				if (oldNewestAtTop != newestAtTop) {',

-'					var visitor = new LogItemContentReverser();',

-'					rootGroup.accept(visitor);',

-'',

-'					// Reassemble the matches array',

-'					if (currentSearch) {',

-'						var currentMatch = currentSearch.matches[currentMatchIndex];',

-'						var matchIndex = 0;',

-'						var matches = [];',

-'						var actOnLogEntry = function(logEntry) {',

-'							var logEntryMatches = logEntry.getSearchMatches();',

-'							for (j = 0, jLen = logEntryMatches.length; j < jLen; j++) {',

-'								matches[matchIndex] = logEntryMatches[j];',

-'								if (currentMatch && logEntryMatches[j].equals(currentMatch)) {',

-'									currentMatchIndex = matchIndex;',

-'								}',

-'								matchIndex++;',

-'							}',

-'						};',

-'						if (newestAtTop) {',

-'							for (i = logEntries.length - 1; i >= 0; i--) {',

-'								actOnLogEntry(logEntries[i]);',

-'							}',

-'						} else {',

-'							for (i = 0, iLen = logEntries.length; i < iLen; i++) {',

-'								actOnLogEntry(logEntries[i]);',

-'							}',

-'						}',

-'						currentSearch.matches = matches;',

-'						if (currentMatch) {',

-'							currentMatch.setCurrent();',

-'						}',

-'					} else if (scrollToLatest) {',

-'						doScrollToLatest();',

-'					}',

-'				}',

-'				$("newestAtTop").checked = isNewestAtTop;',

-'			}',

-'',

-'			function toggleNewestAtTop() {',

-'				var isNewestAtTop = $("newestAtTop").checked;',

-'				setNewestAtTop(isNewestAtTop);',

-'			}',

-'',

-'			var scrollToLatest = true;',

-'',

-'			function setScrollToLatest(isScrollToLatest) {',

-'				scrollToLatest = isScrollToLatest;',

-'				if (scrollToLatest) {',

-'					doScrollToLatest();',

-'				}',

-'				$("scrollToLatest").checked = isScrollToLatest;',

-'			}',

-'',

-'			function toggleScrollToLatest() {',

-'				var isScrollToLatest = $("scrollToLatest").checked;',

-'				setScrollToLatest(isScrollToLatest);',

-'			}',

-'',

-'			function doScrollToLatest() {',

-'				var l = logMainContainer;',

-'				if (typeof l.scrollTop != "undefined") {',

-'					if (newestAtTop) {',

-'						l.scrollTop = 0;',

-'					} else {',

-'						var latestLogEntry = l.lastChild;',

-'						if (latestLogEntry) {',

-'							l.scrollTop = l.scrollHeight;',

-'						}',

-'					}',

-'				}',

-'			}',

-'',

-'			var closeIfOpenerCloses = true;',

-'',

-'			function setCloseIfOpenerCloses(isCloseIfOpenerCloses) {',

-'				closeIfOpenerCloses = isCloseIfOpenerCloses;',

-'			}',

-'',

-'			var maxMessages = null;',

-'',

-'			function setMaxMessages(max) {',

-'				maxMessages = max;',

-'				pruneLogEntries();',

-'			}',

-'',

-'			var showCommandLine = false;',

-'',

-'			function setShowCommandLine(isShowCommandLine) {',

-'				showCommandLine = isShowCommandLine;',

-'				if (loaded) {',

-'					$("commandLine").style.display = showCommandLine ? "block" : "none";',

-'					setCommandInputWidth();',

-'					setLogContainerHeight();',

-'				}',

-'			}',

-'',

-'			function focusCommandLine() {',

-'				if (loaded) {',

-'					$("command").focus();',

-'				}',

-'			}',

-'',

-'			function focusSearch() {',

-'				if (loaded) {',

-'					$("searchBox").focus();',

-'				}',

-'			}',

-'',

-'			function getLogItems() {',

-'				var items = [];',

-'				for (var i = 0, len = logItems.length; i < len; i++) {',

-'					logItems[i].serialize(items);',

-'				}',

-'				return items;',

-'			}',

-'',

-'			function setLogItems(items) {',

-'				var loggingReallyEnabled = loggingEnabled;',

-'				// Temporarily turn logging on',

-'				loggingEnabled = true;',

-'				for (var i = 0, len = items.length; i < len; i++) {',

-'					switch (items[i][0]) {',

-'						case LogItem.serializedItemKeys.LOG_ENTRY:',

-'							log(items[i][1], items[i][2]);',

-'							break;',

-'						case LogItem.serializedItemKeys.GROUP_START:',

-'							group(items[i][1]);',

-'							break;',

-'						case LogItem.serializedItemKeys.GROUP_END:',

-'							groupEnd();',

-'							break;',

-'					}',

-'				}',

-'				loggingEnabled = loggingReallyEnabled;',

-'			}',

-'',

-'			function log(logLevel, formattedMessage) {',

-'				if (loggingEnabled) {',

-'					var logEntry = new LogEntry(logLevel, formattedMessage);',

-'					logEntries.push(logEntry);',

-'					logEntriesAndSeparators.push(logEntry);',

-'					logItems.push(logEntry);',

-'					currentGroup.addChild(logEntry);',

-'					if (loaded) {',

-'						if (logQueuedEventsTimer !== null) {',

-'							clearTimeout(logQueuedEventsTimer);',

-'						}',

-'						logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);',

-'						unrenderedLogItemsExist = true;',

-'					}',

-'				}',

-'			}',

-'',

-'			function renderQueuedLogItems() {',

-'				logQueuedEventsTimer = null;',

-'				var pruned = pruneLogEntries();',

-'',

-'				// Render any unrendered log entries and apply the current search to them',

-'				var initiallyHasMatches = currentSearch ? currentSearch.hasMatches() : false;',

-'				for (var i = 0, len = logItems.length; i < len; i++) {',

-'					if (!logItems[i].rendered) {',

-'						logItems[i].render();',

-'						logItems[i].appendToLog();',

-'						if (currentSearch && (logItems[i] instanceof LogEntry)) {',

-'							currentSearch.applyTo(logItems[i]);',

-'						}',

-'					}',

-'				}',

-'				if (currentSearch) {',

-'					if (pruned) {',

-'						if (currentSearch.hasVisibleMatches()) {',

-'							if (currentMatchIndex === null) {',

-'								setCurrentMatchIndex(0);',

-'							}',

-'							displayMatches();',

-'						} else {',

-'							displayNoMatches();',

-'						}',

-'					} else if (!initiallyHasMatches && currentSearch.hasVisibleMatches()) {',

-'						setCurrentMatchIndex(0);',

-'						displayMatches();',

-'					}',

-'				}',

-'				if (scrollToLatest) {',

-'					doScrollToLatest();',

-'				}',

-'				unrenderedLogItemsExist = false;',

-'			}',

-'',

-'			function pruneLogEntries() {',

-'				if ((maxMessages !== null) && (logEntriesAndSeparators.length > maxMessages)) {',

-'					var numberToDelete = logEntriesAndSeparators.length - maxMessages;',

-'					var prunedLogEntries = logEntriesAndSeparators.slice(0, numberToDelete);',

-'					if (currentSearch) {',

-'						currentSearch.removeMatches(prunedLogEntries);',

-'					}',

-'					var group;',

-'					for (var i = 0; i < numberToDelete; i++) {',

-'						group = logEntriesAndSeparators[i].group;',

-'						array_remove(logItems, logEntriesAndSeparators[i]);',

-'						array_remove(logEntries, logEntriesAndSeparators[i]);',

-'						logEntriesAndSeparators[i].remove(true, true);',

-'						if (group.children.length === 0 && group !== currentGroup && group !== rootGroup) {',

-'							array_remove(logItems, group);',

-'							group.remove(true, true);',

-'						}',

-'					}',

-'					logEntriesAndSeparators = array_removeFromStart(logEntriesAndSeparators, numberToDelete);',

-'					return true;',

-'				}',

-'				return false;',

-'			}',

-'',

-'			function group(name, startExpanded) {',

-'				if (loggingEnabled) {',

-'					initiallyExpanded = (typeof startExpanded === "undefined") ? true : Boolean(startExpanded);',

-'					var newGroup = new Group(name, false, initiallyExpanded);',

-'					currentGroup.addChild(newGroup);',

-'					currentGroup = newGroup;',

-'					logItems.push(newGroup);',

-'					if (loaded) {',

-'						if (logQueuedEventsTimer !== null) {',

-'							clearTimeout(logQueuedEventsTimer);',

-'						}',

-'						logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);',

-'						unrenderedLogItemsExist = true;',

-'					}',

-'				}',

-'			}',

-'',

-'			function groupEnd() {',

-'				currentGroup = (currentGroup === rootGroup) ? rootGroup : currentGroup.group;',

-'			}',

-'',

-'			function mainPageReloaded() {',

-'				currentGroup = rootGroup;',

-'				var separator = new Separator();',

-'				logEntriesAndSeparators.push(separator);',

-'				logItems.push(separator);',

-'				currentGroup.addChild(separator);',

-'			}',

-'',

-'			function closeWindow() {',

-'				if (appender && mainWindowExists()) {',

-'					appender.close(true);',

-'				} else {',

-'					window.close();',

-'				}',

-'			}',

-'',

-'			function hide() {',

-'				if (appender && mainWindowExists()) {',

-'					appender.hide();',

-'				}',

-'			}',

-'',

-'			var mainWindow = window;',

-'			var windowId = "log4javascriptConsoleWindow_" + new Date().getTime() + "_" + ("" + Math.random()).substr(2);',

-'',

-'			function setMainWindow(win) {',

-'				mainWindow = win;',

-'				mainWindow[windowId] = window;',

-'				// If this is a pop-up, poll the opener to see if it\'s closed',

-'				if (opener && closeIfOpenerCloses) {',

-'					pollOpener();',

-'				}',

-'			}',

-'',

-'			function pollOpener() {',

-'				if (closeIfOpenerCloses) {',

-'					if (mainWindowExists()) {',

-'						setTimeout(pollOpener, 500);',

-'					} else {',

-'						closeWindow();',

-'					}',

-'				}',

-'			}',

-'',

-'			function mainWindowExists() {',

-'				try {',

-'					return (mainWindow && !mainWindow.closed &&',

-'						mainWindow[windowId] == window);',

-'				} catch (ex) {}',

-'				return false;',

-'			}',

-'',

-'			var logLevels = ["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"];',

-'',

-'			function getCheckBox(logLevel) {',

-'				return $("switch_" + logLevel);',

-'			}',

-'',

-'			function getIeWrappedLogContainer() {',

-'				return $("log_wrapped");',

-'			}',

-'',

-'			function getIeUnwrappedLogContainer() {',

-'				return $("log_unwrapped");',

-'			}',

-'',

-'			function applyFilters() {',

-'				for (var i = 0; i < logLevels.length; i++) {',

-'					if (getCheckBox(logLevels[i]).checked) {',

-'						addClass(logMainContainer, logLevels[i]);',

-'					} else {',

-'						removeClass(logMainContainer, logLevels[i]);',

-'					}',

-'				}',

-'				updateSearchFromFilters();',

-'			}',

-'',

-'			function toggleAllLevels() {',

-'				var turnOn = $("switch_ALL").checked;',

-'				for (var i = 0; i < logLevels.length; i++) {',

-'					getCheckBox(logLevels[i]).checked = turnOn;',

-'					if (turnOn) {',

-'						addClass(logMainContainer, logLevels[i]);',

-'					} else {',

-'						removeClass(logMainContainer, logLevels[i]);',

-'					}',

-'				}',

-'			}',

-'',

-'			function checkAllLevels() {',

-'				for (var i = 0; i < logLevels.length; i++) {',

-'					if (!getCheckBox(logLevels[i]).checked) {',

-'						getCheckBox("ALL").checked = false;',

-'						return;',

-'					}',

-'				}',

-'				getCheckBox("ALL").checked = true;',

-'			}',

-'',

-'			function clearLog() {',

-'				rootGroup.clear();',

-'				currentGroup = rootGroup;',

-'				logEntries = [];',

-'				logItems = [];',

-'				logEntriesAndSeparators = [];',

-' 				doSearch();',

-'			}',

-'',

-'			function toggleWrap() {',

-'				var enable = $("wrap").checked;',

-'				if (enable) {',

-'					addClass(logMainContainer, "wrap");',

-'				} else {',

-'					removeClass(logMainContainer, "wrap");',

-'				}',

-'				refreshCurrentMatch();',

-'			}',

-'',

-'			/* ------------------------------------------------------------------- */',

-'',

-'			// Search',

-'',

-'			var searchTimer = null;',

-'',

-'			function scheduleSearch() {',

-'				try {',

-'					clearTimeout(searchTimer);',

-'				} catch (ex) {',

-'					// Do nothing',

-'				}',

-'				searchTimer = setTimeout(doSearch, 500);',

-'			}',

-'',

-'			function Search(searchTerm, isRegex, searchRegex, isCaseSensitive) {',

-'				this.searchTerm = searchTerm;',

-'				this.isRegex = isRegex;',

-'				this.searchRegex = searchRegex;',

-'				this.isCaseSensitive = isCaseSensitive;',

-'				this.matches = [];',

-'			}',

-'',

-'			Search.prototype = {',

-'				hasMatches: function() {',

-'					return this.matches.length > 0;',

-'				},',

-'',

-'				hasVisibleMatches: function() {',

-'					if (this.hasMatches()) {',

-'						for (var i = 0; i < this.matches.length; i++) {',

-'							if (this.matches[i].isVisible()) {',

-'								return true;',

-'							}',

-'						}',

-'					}',

-'					return false;',

-'				},',

-'',

-'				match: function(logEntry) {',

-'					var entryText = String(logEntry.formattedMessage);',

-'					var matchesSearch = false;',

-'					if (this.isRegex) {',

-'						matchesSearch = this.searchRegex.test(entryText);',

-'					} else if (this.isCaseSensitive) {',

-'						matchesSearch = (entryText.indexOf(this.searchTerm) > -1);',

-'					} else {',

-'						matchesSearch = (entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1);',

-'					}',

-'					return matchesSearch;',

-'				},',

-'',

-'				getNextVisibleMatchIndex: function() {',

-'					for (var i = currentMatchIndex + 1; i < this.matches.length; i++) {',

-'						if (this.matches[i].isVisible()) {',

-'							return i;',

-'						}',

-'					}',

-'					// Start again from the first match',

-'					for (i = 0; i <= currentMatchIndex; i++) {',

-'						if (this.matches[i].isVisible()) {',

-'							return i;',

-'						}',

-'					}',

-'					return -1;',

-'				},',

-'',

-'				getPreviousVisibleMatchIndex: function() {',

-'					for (var i = currentMatchIndex - 1; i >= 0; i--) {',

-'						if (this.matches[i].isVisible()) {',

-'							return i;',

-'						}',

-'					}',

-'					// Start again from the last match',

-'					for (var i = this.matches.length - 1; i >= currentMatchIndex; i--) {',

-'						if (this.matches[i].isVisible()) {',

-'							return i;',

-'						}',

-'					}',

-'					return -1;',

-'				},',

-'',

-'				applyTo: function(logEntry) {',

-'					var doesMatch = this.match(logEntry);',

-'					if (doesMatch) {',

-'						logEntry.group.expand();',

-'						logEntry.setSearchMatch(true);',

-'						var logEntryContent;',

-'						var wrappedLogEntryContent;',

-'						var searchTermReplacementStartTag = "<span class=\\\"searchterm\\\">";',

-'						var searchTermReplacementEndTag = "<" + "/span>";',

-'						var preTagName = isIe ? "pre" : "span";',

-'						var preStartTag = "<" + preTagName + " class=\\\"pre\\\">";',

-'						var preEndTag = "<" + "/" + preTagName + ">";',

-'						var startIndex = 0;',

-'						var searchIndex, matchedText, textBeforeMatch;',

-'						if (this.isRegex) {',

-'							var flags = this.isCaseSensitive ? "g" : "gi";',

-'							var capturingRegex = new RegExp("(" + this.searchRegex.source + ")", flags);',

-'',

-'							// Replace the search term with temporary tokens for the start and end tags',

-'							var rnd = ("" + Math.random()).substr(2);',

-'							var startToken = "%%s" + rnd + "%%";',

-'							var endToken = "%%e" + rnd + "%%";',

-'							logEntryContent = logEntry.formattedMessage.replace(capturingRegex, startToken + "$1" + endToken);',

-'',

-'							// Escape the HTML to get rid of angle brackets',

-'							logEntryContent = escapeHtml(logEntryContent);',

-'',

-'							// Substitute the proper HTML back in for the search match',

-'							var result;',

-'							var searchString = logEntryContent;',

-'							logEntryContent = "";',

-'							wrappedLogEntryContent = "";',

-'							while ((searchIndex = searchString.indexOf(startToken, startIndex)) > -1) {',

-'								var endTokenIndex = searchString.indexOf(endToken, searchIndex);',

-'								matchedText = searchString.substring(searchIndex + startToken.length, endTokenIndex);',

-'								textBeforeMatch = searchString.substring(startIndex, searchIndex);',

-'								logEntryContent += preStartTag + textBeforeMatch + preEndTag;',

-'								logEntryContent += searchTermReplacementStartTag + preStartTag + matchedText +',

-'									preEndTag + searchTermReplacementEndTag;',

-'								if (isIe) {',

-'									wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +',

-'										matchedText + searchTermReplacementEndTag;',

-'								}',

-'								startIndex = endTokenIndex + endToken.length;',

-'							}',

-'							logEntryContent += preStartTag + searchString.substr(startIndex) + preEndTag;',

-'							if (isIe) {',

-'								wrappedLogEntryContent += searchString.substr(startIndex);',

-'							}',

-'						} else {',

-'							logEntryContent = "";',

-'							wrappedLogEntryContent = "";',

-'							var searchTermReplacementLength = searchTermReplacementStartTag.length +',

-'								this.searchTerm.length + searchTermReplacementEndTag.length;',

-'							var searchTermLength = this.searchTerm.length;',

-'							var searchTermLowerCase = this.searchTerm.toLowerCase();',

-'							var logTextLowerCase = logEntry.formattedMessage.toLowerCase();',

-'							while ((searchIndex = logTextLowerCase.indexOf(searchTermLowerCase, startIndex)) > -1) {',

-'								matchedText = escapeHtml(logEntry.formattedMessage.substr(searchIndex, this.searchTerm.length));',

-'								textBeforeMatch = escapeHtml(logEntry.formattedMessage.substring(startIndex, searchIndex));',

-'								var searchTermReplacement = searchTermReplacementStartTag +',

-'									preStartTag + matchedText + preEndTag + searchTermReplacementEndTag;',

-'								logEntryContent += preStartTag + textBeforeMatch + preEndTag + searchTermReplacement;',

-'								if (isIe) {',

-'									wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +',

-'										matchedText + searchTermReplacementEndTag;',

-'								}',

-'								startIndex = searchIndex + searchTermLength;',

-'							}',

-'							var textAfterLastMatch = escapeHtml(logEntry.formattedMessage.substr(startIndex));',

-'							logEntryContent += preStartTag + textAfterLastMatch + preEndTag;',

-'							if (isIe) {',

-'								wrappedLogEntryContent += textAfterLastMatch;',

-'							}',

-'						}',

-'						logEntry.setContent(logEntryContent, wrappedLogEntryContent);',

-'						var logEntryMatches = logEntry.getSearchMatches();',

-'						this.matches = this.matches.concat(logEntryMatches);',

-'					} else {',

-'						logEntry.setSearchMatch(false);',

-'						logEntry.setContent(logEntry.formattedMessage, logEntry.formattedMessage);',

-'					}',

-'					return doesMatch;',

-'				},',

-'',

-'				removeMatches: function(logEntries) {',

-'					var matchesToRemoveCount = 0;',

-'					var currentMatchRemoved = false;',

-'					var matchesToRemove = [];',

-'					var i, iLen, j, jLen;',

-'',

-'					// Establish the list of matches to be removed',

-'					for (i = 0, iLen = this.matches.length; i < iLen; i++) {',

-'						for (j = 0, jLen = logEntries.length; j < jLen; j++) {',

-'							if (this.matches[i].belongsTo(logEntries[j])) {',

-'								matchesToRemove.push(this.matches[i]);',

-'								if (i === currentMatchIndex) {',

-'									currentMatchRemoved = true;',

-'								}',

-'							}',

-'						}',

-'					}',

-'',

-'					// Set the new current match index if the current match has been deleted',

-'					// This will be the first match that appears after the first log entry being',

-'					// deleted, if one exists; otherwise, it\'s the first match overall',

-'					var newMatch = currentMatchRemoved ? null : this.matches[currentMatchIndex];',

-'					if (currentMatchRemoved) {',

-'						for (i = currentMatchIndex, iLen = this.matches.length; i < iLen; i++) {',

-'							if (this.matches[i].isVisible() && !array_contains(matchesToRemove, this.matches[i])) {',

-'								newMatch = this.matches[i];',

-'								break;',

-'							}',

-'						}',

-'					}',

-'',

-'					// Remove the matches',

-'					for (i = 0, iLen = matchesToRemove.length; i < iLen; i++) {',

-'						array_remove(this.matches, matchesToRemove[i]);',

-'						matchesToRemove[i].remove();',

-'					}',

-'',

-'					// Set the new match, if one exists',

-'					if (this.hasVisibleMatches()) {',

-'						if (newMatch === null) {',

-'							setCurrentMatchIndex(0);',

-'						} else {',

-'							// Get the index of the new match',

-'							var newMatchIndex = 0;',

-'							for (i = 0, iLen = this.matches.length; i < iLen; i++) {',

-'								if (newMatch === this.matches[i]) {',

-'									newMatchIndex = i;',

-'									break;',

-'								}',

-'							}',

-'							setCurrentMatchIndex(newMatchIndex);',

-'						}',

-'					} else {',

-'						currentMatchIndex = null;',

-'						displayNoMatches();',

-'					}',

-'				}',

-'			};',

-'',

-'			function getPageOffsetTop(el, container) {',

-'				var currentEl = el;',

-'				var y = 0;',

-'				while (currentEl && currentEl != container) {',

-'					y += currentEl.offsetTop;',

-'					currentEl = currentEl.offsetParent;',

-'				}',

-'				return y;',

-'			}',

-'',

-'			function scrollIntoView(el) {',

-'				var logContainer = logMainContainer;',

-'				// Check if the whole width of the element is visible and centre if not',

-'				if (!$("wrap").checked) {',

-'					var logContainerLeft = logContainer.scrollLeft;',

-'					var logContainerRight = logContainerLeft  + logContainer.offsetWidth;',

-'					var elLeft = el.offsetLeft;',

-'					var elRight = elLeft + el.offsetWidth;',

-'					if (elLeft < logContainerLeft || elRight > logContainerRight) {',

-'						logContainer.scrollLeft = elLeft - (logContainer.offsetWidth - el.offsetWidth) / 2;',

-'					}',

-'				}',

-'				// Check if the whole height of the element is visible and centre if not',

-'				var logContainerTop = logContainer.scrollTop;',

-'				var logContainerBottom = logContainerTop  + logContainer.offsetHeight;',

-'				var elTop = getPageOffsetTop(el) - getToolBarsHeight();',

-'				var elBottom = elTop + el.offsetHeight;',

-'				if (elTop < logContainerTop || elBottom > logContainerBottom) {',

-'					logContainer.scrollTop = elTop - (logContainer.offsetHeight - el.offsetHeight) / 2;',

-'				}',

-'			}',

-'',

-'			function Match(logEntryLevel, spanInMainDiv, spanInUnwrappedPre, spanInWrappedDiv) {',

-'				this.logEntryLevel = logEntryLevel;',

-'				this.spanInMainDiv = spanInMainDiv;',

-'				if (isIe) {',

-'					this.spanInUnwrappedPre = spanInUnwrappedPre;',

-'					this.spanInWrappedDiv = spanInWrappedDiv;',

-'				}',

-'				this.mainSpan = isIe ? spanInUnwrappedPre : spanInMainDiv;',

-'			}',

-'',

-'			Match.prototype = {',

-'				equals: function(match) {',

-'					return this.mainSpan === match.mainSpan;',

-'				},',

-'',

-'				setCurrent: function() {',

-'					if (isIe) {',

-'						addClass(this.spanInUnwrappedPre, "currentmatch");',

-'						addClass(this.spanInWrappedDiv, "currentmatch");',

-'						// Scroll the visible one into view',

-'						var elementToScroll = $("wrap").checked ? this.spanInWrappedDiv : this.spanInUnwrappedPre;',

-'						scrollIntoView(elementToScroll);',

-'					} else {',

-'						addClass(this.spanInMainDiv, "currentmatch");',

-'						scrollIntoView(this.spanInMainDiv);',

-'					}',

-'				},',

-'',

-'				belongsTo: function(logEntry) {',

-'					if (isIe) {',

-'						return isDescendant(this.spanInUnwrappedPre, logEntry.unwrappedPre);',

-'					} else {',

-'						return isDescendant(this.spanInMainDiv, logEntry.mainDiv);',

-'					}',

-'				},',

-'',

-'				setNotCurrent: function() {',

-'					if (isIe) {',

-'						removeClass(this.spanInUnwrappedPre, "currentmatch");',

-'						removeClass(this.spanInWrappedDiv, "currentmatch");',

-'					} else {',

-'						removeClass(this.spanInMainDiv, "currentmatch");',

-'					}',

-'				},',

-'',

-'				isOrphan: function() {',

-'					return isOrphan(this.mainSpan);',

-'				},',

-'',

-'				isVisible: function() {',

-'					return getCheckBox(this.logEntryLevel).checked;',

-'				},',

-'',

-'				remove: function() {',

-'					if (isIe) {',

-'						this.spanInUnwrappedPre = null;',

-'						this.spanInWrappedDiv = null;',

-'					} else {',

-'						this.spanInMainDiv = null;',

-'					}',

-'				}',

-'			};',

-'',

-'			var currentSearch = null;',

-'			var currentMatchIndex = null;',

-'',

-'			function doSearch() {',

-'				var searchBox = $("searchBox");',

-'				var searchTerm = searchBox.value;',

-'				var isRegex = $("searchRegex").checked;',

-'				var isCaseSensitive = $("searchCaseSensitive").checked;',

-'				var i;',

-'',

-'				if (searchTerm === "") {',

-'					$("searchReset").disabled = true;',

-'					$("searchNav").style.display = "none";',

-'					removeClass(document.body, "searching");',

-'					removeClass(searchBox, "hasmatches");',

-'					removeClass(searchBox, "nomatches");',

-'					for (i = 0; i < logEntries.length; i++) {',

-'						logEntries[i].clearSearch();',

-'						logEntries[i].setContent(logEntries[i].formattedMessage, logEntries[i].formattedMessage);',

-'					}',

-'					currentSearch = null;',

-'					setLogContainerHeight();',

-'				} else {',

-'					$("searchReset").disabled = false;',

-'					$("searchNav").style.display = "block";',

-'					var searchRegex;',

-'					var regexValid;',

-'					if (isRegex) {',

-'						try {',

-'							searchRegex = isCaseSensitive ? new RegExp(searchTerm, "g") : new RegExp(searchTerm, "gi");',

-'							regexValid = true;',

-'							replaceClass(searchBox, "validregex", "invalidregex");',

-'							searchBox.title = "Valid regex";',

-'						} catch (ex) {',

-'							regexValid = false;',

-'							replaceClass(searchBox, "invalidregex", "validregex");',

-'							searchBox.title = "Invalid regex: " + (ex.message ? ex.message : (ex.description ? ex.description : "unknown error"));',

-'							return;',

-'						}',

-'					} else {',

-'						searchBox.title = "";',

-'						removeClass(searchBox, "validregex");',

-'						removeClass(searchBox, "invalidregex");',

-'					}',

-'					addClass(document.body, "searching");',

-'					currentSearch = new Search(searchTerm, isRegex, searchRegex, isCaseSensitive);',

-'					for (i = 0; i < logEntries.length; i++) {',

-'						currentSearch.applyTo(logEntries[i]);',

-'					}',

-'					setLogContainerHeight();',

-'',

-'					// Highlight the first search match',

-'					if (currentSearch.hasVisibleMatches()) {',

-'						setCurrentMatchIndex(0);',

-'						displayMatches();',

-'					} else {',

-'						displayNoMatches();',

-'					}',

-'				}',

-'			}',

-'',

-'			function updateSearchFromFilters() {',

-'				if (currentSearch) {',

-'					if (currentSearch.hasMatches()) {',

-'						if (currentMatchIndex === null) {',

-'							currentMatchIndex = 0;',

-'						}',

-'						var currentMatch = currentSearch.matches[currentMatchIndex];',

-'						if (currentMatch.isVisible()) {',

-'							displayMatches();',

-'							setCurrentMatchIndex(currentMatchIndex);',

-'						} else {',

-'							currentMatch.setNotCurrent();',

-'							// Find the next visible match, if one exists',

-'							var nextVisibleMatchIndex = currentSearch.getNextVisibleMatchIndex();',

-'							if (nextVisibleMatchIndex > -1) {',

-'								setCurrentMatchIndex(nextVisibleMatchIndex);',

-'								displayMatches();',

-'							} else {',

-'								displayNoMatches();',

-'							}',

-'						}',

-'					} else {',

-'						displayNoMatches();',

-'					}',

-'				}',

-'			}',

-'',

-'			function refreshCurrentMatch() {',

-'				if (currentSearch && currentSearch.hasVisibleMatches()) {',

-'					setCurrentMatchIndex(currentMatchIndex);',

-'				}',

-'			}',

-'',

-'			function displayMatches() {',

-'				replaceClass($("searchBox"), "hasmatches", "nomatches");',

-'				$("searchBox").title = "" + currentSearch.matches.length + " matches found";',

-'				$("searchNav").style.display = "block";',

-'				setLogContainerHeight();',

-'			}',

-'',

-'			function displayNoMatches() {',

-'				replaceClass($("searchBox"), "nomatches", "hasmatches");',

-'				$("searchBox").title = "No matches found";',

-'				$("searchNav").style.display = "none";',

-'				setLogContainerHeight();',

-'			}',

-'',

-'			function toggleSearchEnabled(enable) {',

-'				enable = (typeof enable == "undefined") ? !$("searchDisable").checked : enable;',

-'				$("searchBox").disabled = !enable;',

-'				$("searchReset").disabled = !enable;',

-'				$("searchRegex").disabled = !enable;',

-'				$("searchNext").disabled = !enable;',

-'				$("searchPrevious").disabled = !enable;',

-'				$("searchCaseSensitive").disabled = !enable;',

-'				$("searchNav").style.display = (enable && ($("searchBox").value !== "") &&',

-'						currentSearch && currentSearch.hasVisibleMatches()) ?',

-'					"block" : "none";',

-'				if (enable) {',

-'					removeClass($("search"), "greyedout");',

-'					addClass(document.body, "searching");',

-'					if ($("searchHighlight").checked) {',

-'						addClass(logMainContainer, "searchhighlight");',

-'					} else {',

-'						removeClass(logMainContainer, "searchhighlight");',

-'					}',

-'					if ($("searchFilter").checked) {',

-'						addClass(logMainContainer, "searchfilter");',

-'					} else {',

-'						removeClass(logMainContainer, "searchfilter");',

-'					}',

-'					$("searchDisable").checked = !enable;',

-'				} else {',

-'					addClass($("search"), "greyedout");',

-'					removeClass(document.body, "searching");',

-'					removeClass(logMainContainer, "searchhighlight");',

-'					removeClass(logMainContainer, "searchfilter");',

-'				}',

-'				setLogContainerHeight();',

-'			}',

-'',

-'			function toggleSearchFilter() {',

-'				var enable = $("searchFilter").checked;',

-'				if (enable) {',

-'					addClass(logMainContainer, "searchfilter");',

-'				} else {',

-'					removeClass(logMainContainer, "searchfilter");',

-'				}',

-'				refreshCurrentMatch();',

-'			}',

-'',

-'			function toggleSearchHighlight() {',

-'				var enable = $("searchHighlight").checked;',

-'				if (enable) {',

-'					addClass(logMainContainer, "searchhighlight");',

-'				} else {',

-'					removeClass(logMainContainer, "searchhighlight");',

-'				}',

-'			}',

-'',

-'			function clearSearch() {',

-'				$("searchBox").value = "";',

-'				doSearch();',

-'			}',

-'',

-'			function searchNext() {',

-'				if (currentSearch !== null && currentMatchIndex !== null) {',

-'					currentSearch.matches[currentMatchIndex].setNotCurrent();',

-'					var nextMatchIndex = currentSearch.getNextVisibleMatchIndex();',

-'					if (nextMatchIndex > currentMatchIndex || confirm("Reached the end of the page. Start from the top?")) {',

-'						setCurrentMatchIndex(nextMatchIndex);',

-'					}',

-'				}',

-'			}',

-'',

-'			function searchPrevious() {',

-'				if (currentSearch !== null && currentMatchIndex !== null) {',

-'					currentSearch.matches[currentMatchIndex].setNotCurrent();',

-'					var previousMatchIndex = currentSearch.getPreviousVisibleMatchIndex();',

-'					if (previousMatchIndex < currentMatchIndex || confirm("Reached the start of the page. Continue from the bottom?")) {',

-'						setCurrentMatchIndex(previousMatchIndex);',

-'					}',

-'				}',

-'			}',

-'',

-'			function setCurrentMatchIndex(index) {',

-'				currentMatchIndex = index;',

-'				currentSearch.matches[currentMatchIndex].setCurrent();',

-'			}',

-'',

-'			/* ------------------------------------------------------------------------- */',

-'',

-'			// CSS Utilities',

-'',

-'			function addClass(el, cssClass) {',

-'				if (!hasClass(el, cssClass)) {',

-'					if (el.className) {',

-'						el.className += " " + cssClass;',

-'					} else {',

-'						el.className = cssClass;',

-'					}',

-'				}',

-'			}',

-'',

-'			function hasClass(el, cssClass) {',

-'				if (el.className) {',

-'					var classNames = el.className.split(" ");',

-'					return array_contains(classNames, cssClass);',

-'				}',

-'				return false;',

-'			}',

-'',

-'			function removeClass(el, cssClass) {',

-'				if (hasClass(el, cssClass)) {',

-'					// Rebuild the className property',

-'					var existingClasses = el.className.split(" ");',

-'					var newClasses = [];',

-'					for (var i = 0, len = existingClasses.length; i < len; i++) {',

-'						if (existingClasses[i] != cssClass) {',

-'							newClasses[newClasses.length] = existingClasses[i];',

-'						}',

-'					}',

-'					el.className = newClasses.join(" ");',

-'				}',

-'			}',

-'',

-'			function replaceClass(el, newCssClass, oldCssClass) {',

-'				removeClass(el, oldCssClass);',

-'				addClass(el, newCssClass);',

-'			}',

-'',

-'			/* ------------------------------------------------------------------------- */',

-'',

-'			// Other utility functions',

-'',

-'			function getElementsByClass(el, cssClass, tagName) {',

-'				var elements = el.getElementsByTagName(tagName);',

-'				var matches = [];',

-'				for (var i = 0, len = elements.length; i < len; i++) {',

-'					if (hasClass(elements[i], cssClass)) {',

-'						matches.push(elements[i]);',

-'					}',

-'				}',

-'				return matches;',

-'			}',

-'',

-'			// Syntax borrowed from Prototype library',

-'			function $(id) {',

-'				return document.getElementById(id);',

-'			}',

-'',

-'			function isDescendant(node, ancestorNode) {',

-'				while (node != null) {',

-'					if (node === ancestorNode) {',

-'						return true;',

-'					}',

-'					node = node.parentNode;',

-'				}',

-'				return false;',

-'			}',

-'',

-'			function isOrphan(node) {',

-'				var currentNode = node;',

-'				while (currentNode) {',

-'					if (currentNode == document.body) {',

-'						return false;',

-'					}',

-'					currentNode = currentNode.parentNode;',

-'				}',

-'				return true;',

-'			}',

-'',

-'			function escapeHtml(str) {',

-'				return str.replace(/&/g, "&amp;").replace(/[<]/g, "&lt;").replace(/>/g, "&gt;");',

-'			}',

-'',

-'			function getWindowWidth() {',

-'				if (window.innerWidth) {',

-'					return window.innerWidth;',

-'				} else if (document.documentElement && document.documentElement.clientWidth) {',

-'					return document.documentElement.clientWidth;',

-'				} else if (document.body) {',

-'					return document.body.clientWidth;',

-'				}',

-'				return 0;',

-'			}',

-'',

-'			function getWindowHeight() {',

-'				if (window.innerHeight) {',

-'					return window.innerHeight;',

-'				} else if (document.documentElement && document.documentElement.clientHeight) {',

-'					return document.documentElement.clientHeight;',

-'				} else if (document.body) {',

-'					return document.body.clientHeight;',

-'				}',

-'				return 0;',

-'			}',

-'',

-'			function getToolBarsHeight() {',

-'				return $("switches").offsetHeight;',

-'			}',

-'',

-'			function getChromeHeight() {',

-'				var height = getToolBarsHeight();',

-'				if (showCommandLine) {',

-'					height += $("commandLine").offsetHeight;',

-'				}',

-'				return height;',

-'			}',

-'',

-'			function setLogContainerHeight() {',

-'				if (logMainContainer) {',

-'					var windowHeight = getWindowHeight();',

-'					$("body").style.height = getWindowHeight() + "px";',

-'					logMainContainer.style.height = "" +',

-'						Math.max(0, windowHeight - getChromeHeight()) + "px";',

-'				}',

-'			}',

-'',

-'			function setCommandInputWidth() {',

-'				if (showCommandLine) {',

-'					$("command").style.width = "" + Math.max(0, $("commandLineContainer").offsetWidth -',

-'						($("evaluateButton").offsetWidth + 13)) + "px";',

-'				}',

-'			}',

-'',

-'			window.onresize = function() {',

-'				setCommandInputWidth();',

-'				setLogContainerHeight();',

-'			};',

-'',

-'			if (!Array.prototype.push) {',

-'				Array.prototype.push = function() {',

-'			        for (var i = 0, len = arguments.length; i < len; i++){',

-'			            this[this.length] = arguments[i];',

-'			        }',

-'			        return this.length;',

-'				};',

-'			}',

-'',

-'			if (!Array.prototype.pop) {',

-'				Array.prototype.pop = function() {',

-'					if (this.length > 0) {',

-'						var val = this[this.length - 1];',

-'						this.length = this.length - 1;',

-'						return val;',

-'					}',

-'				};',

-'			}',

-'',

-'			if (!Array.prototype.shift) {',

-'				Array.prototype.shift = function() {',

-'					if (this.length > 0) {',

-'						var firstItem = this[0];',

-'						for (var i = 0, len = this.length - 1; i < len; i++) {',

-'							this[i] = this[i + 1];',

-'						}',

-'						this.length = this.length - 1;',

-'						return firstItem;',

-'					}',

-'				};',

-'			}',

-'',

-'			if (!Array.prototype.splice) {',

-'				Array.prototype.splice = function(startIndex, deleteCount) {',

-'					var itemsAfterDeleted = this.slice(startIndex + deleteCount);',

-'					var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);',

-'					this.length = startIndex;',

-'					// Copy the arguments into a proper Array object',

-'					var argumentsArray = [];',

-'					for (var i = 0, len = arguments.length; i < len; i++) {',

-'						argumentsArray[i] = arguments[i];',

-'					}',

-'					var itemsToAppend = (argumentsArray.length > 2) ?',

-'						itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;',

-'					for (i = 0, len = itemsToAppend.length; i < len; i++) {',

-'						this.push(itemsToAppend[i]);',

-'					}',

-'					return itemsDeleted;',

-'				};',

-'			}',

-'',

-'			function array_remove(arr, val) {',

-'				var index = -1;',

-'				for (var i = 0, len = arr.length; i < len; i++) {',

-'					if (arr[i] === val) {',

-'						index = i;',

-'						break;',

-'					}',

-'				}',

-'				if (index >= 0) {',

-'					arr.splice(index, 1);',

-'					return index;',

-'				} else {',

-'					return false;',

-'				}',

-'			}',

-'',

-'			function array_removeFromStart(array, numberToRemove) {',

-'				if (Array.prototype.splice) {',

-'					array.splice(0, numberToRemove);',

-'				} else {',

-'					for (var i = numberToRemove, len = array.length; i < len; i++) {',

-'						array[i - numberToRemove] = array[i];',

-'					}',

-'					array.length = array.length - numberToRemove;',

-'				}',

-'				return array;',

-'			}',

-'',

-'			function array_contains(arr, val) {',

-'				for (var i = 0, len = arr.length; i < len; i++) {',

-'					if (arr[i] == val) {',

-'						return true;',

-'					}',

-'				}',

-'				return false;',

-'			}',

-'',

-'			function getErrorMessage(ex) {',

-'				if (ex.message) {',

-'					return ex.message;',

-'				} else if (ex.description) {',

-'					return ex.description;',

-'				}',

-'				return "" + ex;',

-'			}',

-'',

-'			function moveCaretToEnd(input) {',

-'				if (input.setSelectionRange) {',

-'					input.focus();',

-'					var length = input.value.length;',

-'					input.setSelectionRange(length, length);',

-'				} else if (input.createTextRange) {',

-'					var range = input.createTextRange();',

-'					range.collapse(false);',

-'					range.select();',

-'				}',

-'				input.focus();',

-'			}',

-'',

-'			function stopPropagation(evt) {',

-'				if (evt.stopPropagation) {',

-'					evt.stopPropagation();',

-'				} else if (typeof evt.cancelBubble != "undefined") {',

-'					evt.cancelBubble = true;',

-'				}',

-'			}',

-'',

-'			function getEvent(evt) {',

-'				return evt ? evt : event;',

-'			}',

-'',

-'			function getTarget(evt) {',

-'				return evt.target ? evt.target : evt.srcElement;',

-'			}',

-'',

-'			function getRelatedTarget(evt) {',

-'				if (evt.relatedTarget) {',

-'					return evt.relatedTarget;',

-'				} else if (evt.srcElement) {',

-'					switch(evt.type) {',

-'						case "mouseover":',

-'							return evt.fromElement;',

-'						case "mouseout":',

-'							return evt.toElement;',

-'						default:',

-'							return evt.srcElement;',

-'					}',

-'				}',

-'			}',

-'',

-'			function cancelKeyEvent(evt) {',

-'				evt.returnValue = false;',

-'				stopPropagation(evt);',

-'			}',

-'',

-'			function evalCommandLine() {',

-'				var expr = $("command").value;',

-'				evalCommand(expr);',

-'				$("command").value = "";',

-'			}',

-'',

-'			function evalLastCommand() {',

-'				if (lastCommand != null) {',

-'					evalCommand(lastCommand);',

-'				}',

-'			}',

-'',

-'			var lastCommand = null;',

-'			var commandHistory = [];',

-'			var currentCommandIndex = 0;',

-'',

-'			function evalCommand(expr) {',

-'				if (appender) {',

-'					appender.evalCommandAndAppend(expr);',

-'				} else {',

-'					var prefix = ">>> " + expr + "\\r\\n";',

-'					try {',

-'						log("INFO", prefix + eval(expr));',

-'					} catch (ex) {',

-'						log("ERROR", prefix + "Error: " + getErrorMessage(ex));',

-'					}',

-'				}',

-'				// Update command history',

-'				if (expr != commandHistory[commandHistory.length - 1]) {',

-'					commandHistory.push(expr);',

-'					// Update the appender',

-'					if (appender) {',

-'						appender.storeCommandHistory(commandHistory);',

-'					}',

-'				}',

-'				currentCommandIndex = (expr == commandHistory[currentCommandIndex]) ? currentCommandIndex + 1 : commandHistory.length;',

-'				lastCommand = expr;',

-'			}',

-'			//]]>',

-'		</script>',

-'		<style type="text/css">',

-'			body {',

-'				background-color: white;',

-'				color: black;',

-'				padding: 0;',

-'				margin: 0;',

-'				font-family: tahoma, verdana, arial, helvetica, sans-serif;',

-'				overflow: hidden;',

-'			}',

-'',

-'			div#switchesContainer input {',

-'				margin-bottom: 0;',

-'			}',

-'',

-'			div.toolbar {',

-'				border-top: solid #ffffff 1px;',

-'				border-bottom: solid #aca899 1px;',

-'				background-color: #f1efe7;',

-'				padding: 3px 5px;',

-'				font-size: 68.75%;',

-'			}',

-'',

-'			div.toolbar, div#search input {',

-'				font-family: tahoma, verdana, arial, helvetica, sans-serif;',

-'			}',

-'',

-'			div.toolbar input.button {',

-'				padding: 0 5px;',

-'				font-size: 100%;',

-'			}',

-'',

-'			div.toolbar input.hidden {',

-'				display: none;',

-'			}',

-'',

-'			div#switches input#clearButton {',

-'				margin-left: 20px;',

-'			}',

-'',

-'			div#levels label {',

-'				font-weight: bold;',

-'			}',

-'',

-'			div#levels label, div#options label {',

-'				margin-right: 5px;',

-'			}',

-'',

-'			div#levels label#wrapLabel {',

-'				font-weight: normal;',

-'			}',

-'',

-'			div#search label {',

-'				margin-right: 10px;',

-'			}',

-'',

-'			div#search label.searchboxlabel {',

-'				margin-right: 0;',

-'			}',

-'',

-'			div#search input {',

-'				font-size: 100%;',

-'			}',

-'',

-'			div#search input.validregex {',

-'				color: green;',

-'			}',

-'',

-'			div#search input.invalidregex {',

-'				color: red;',

-'			}',

-'',

-'			div#search input.nomatches {',

-'				color: white;',

-'				background-color: #ff6666;',

-'			}',

-'',

-'			div#search input.nomatches {',

-'				color: white;',

-'				background-color: #ff6666;',

-'			}',

-'',

-'			div#searchNav {',

-'				display: none;',

-'			}',

-'',

-'			div#commandLine {',

-'				display: none;',

-'			}',

-'',

-'			div#commandLine input#command {',

-'				font-size: 100%;',

-'				font-family: Courier New, Courier;',

-'			}',

-'',

-'			div#commandLine input#evaluateButton {',

-'			}',

-'',

-'			*.greyedout {',

-'				color: gray !important;',

-'				border-color: gray !important;',

-'			}',

-'',

-'			*.greyedout *.alwaysenabled { color: black; }',

-'',

-'			*.unselectable {',

-'				-khtml-user-select: none;',

-'				-moz-user-select: none;',

-'				user-select: none;',

-'			}',

-'',

-'			div#log {',

-'				font-family: Courier New, Courier;',

-'				font-size: 75%;',

-'				width: 100%;',

-'				overflow: auto;',

-'				clear: both;',

-'				position: relative;',

-'			}',

-'',

-'			div.group {',

-'				border-color: #cccccc;',

-'				border-style: solid;',

-'				border-width: 1px 0 1px 1px;',

-'				overflow: visible;',

-'			}',

-'',

-'			div.oldIe div.group, div.oldIe div.group *, div.oldIe *.logentry {',

-'				height: 1%;',

-'			}',

-'',

-'			div.group div.groupheading span.expander {',

-'				border: solid black 1px;',

-'				font-family: Courier New, Courier;',

-'				font-size: 0.833em;',

-'				background-color: #eeeeee;',

-'				position: relative;',

-'				top: -1px;',

-'				color: black;',

-'				padding: 0 2px;',

-'				cursor: pointer;',

-'				cursor: hand;',

-'				height: 1%;',

-'			}',

-'',

-'			div.group div.groupcontent {',

-'				margin-left: 10px;',

-'				padding-bottom: 2px;',

-'				overflow: visible;',

-'			}',

-'',

-'			div.group div.expanded {',

-'				display: block;',

-'			}',

-'',

-'			div.group div.collapsed {',

-'				display: none;',

-'			}',

-'',

-'			*.logentry {',

-'				overflow: visible;',

-'				display: none;',

-'				white-space: pre;',

-'			}',

-'',

-'			span.pre {',

-'				white-space: pre;',

-'			}',

-'			',

-'			pre.unwrapped {',

-'				display: inline !important;',

-'			}',

-'',

-'			pre.unwrapped pre.pre, div.wrapped pre.pre {',

-'				display: inline;',

-'			}',

-'',

-'			div.wrapped pre.pre {',

-'				white-space: normal;',

-'			}',

-'',

-'			div.wrapped {',

-'				display: none;',

-'			}',

-'',

-'			body.searching *.logentry span.currentmatch {',

-'				color: white !important;',

-'				background-color: green !important;',

-'			}',

-'',

-'			body.searching div.searchhighlight *.logentry span.searchterm {',

-'				color: black;',

-'				background-color: yellow;',

-'			}',

-'',

-'			div.wrap *.logentry {',

-'				white-space: normal !important;',

-'				border-width: 0 0 1px 0;',

-'				border-color: #dddddd;',

-'				border-style: dotted;',

-'			}',

-'',

-'			div.wrap #log_wrapped, #log_unwrapped {',

-'				display: block;',

-'			}',

-'',

-'			div.wrap #log_unwrapped, #log_wrapped {',

-'				display: none;',

-'			}',

-'',

-'			div.wrap *.logentry span.pre {',

-'				overflow: visible;',

-'				white-space: normal;',

-'			}',

-'',

-'			div.wrap *.logentry pre.unwrapped {',

-'				display: none;',

-'			}',

-'',

-'			div.wrap *.logentry span.wrapped {',

-'				display: inline;',

-'			}',

-'',

-'			div.searchfilter *.searchnonmatch {',

-'				display: none !important;',

-'			}',

-'',

-'			div#log *.TRACE, label#label_TRACE {',

-'				color: #666666;',

-'			}',

-'',

-'			div#log *.DEBUG, label#label_DEBUG {',

-'				color: green;',

-'			}',

-'',

-'			div#log *.INFO, label#label_INFO {',

-'				color: #000099;',

-'			}',

-'',

-'			div#log *.WARN, label#label_WARN {',

-'				color: #999900;',

-'			}',

-'',

-'			div#log *.ERROR, label#label_ERROR {',

-'				color: red;',

-'			}',

-'',

-'			div#log *.FATAL, label#label_FATAL {',

-'				color: #660066;',

-'			}',

-'',

-'			div.TRACE#log *.TRACE,',

-'			div.DEBUG#log *.DEBUG,',

-'			div.INFO#log *.INFO,',

-'			div.WARN#log *.WARN,',

-'			div.ERROR#log *.ERROR,',

-'			div.FATAL#log *.FATAL {',

-'				display: block;',

-'			}',

-'',

-'			div#log div.separator {',

-'				background-color: #cccccc;',

-'				margin: 5px 0;',

-'				line-height: 1px;',

-'			}',

-'		</style>',

-'	</head>',

-'',

-'	<body id="body">',

-'		<div id="switchesContainer">',

-'			<div id="switches">',

-'				<div id="levels" class="toolbar">',

-'					Filters:',

-'					<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>',

-'					<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>',

-'					<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>',

-'					<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>',

-'					<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>',

-'					<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>',

-'					<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>',

-'				</div>',

-'				<div id="search" class="toolbar">',

-'					<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />',

-'					<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />',

-'					<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>',

-'					<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>',

-'					<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>',

-'					<div id="searchNav">',

-'						<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />',

-'						<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />',

-'						<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>',

-'						<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>',

-'					</div>',

-'				</div>',

-'				<div id="options" class="toolbar">',

-'					Options:',

-'					<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>',

-'					<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>',

-'					<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>',

-'					<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>',

-'					<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages"  />',

-'					<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />',

-'					<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />',

-'				</div>',

-'			</div>',

-'		</div>',

-'		<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>',

-'		<div id="commandLine" class="toolbar">',

-'			<div id="commandLineContainer">',

-'				<input type="text" id="command" title="Enter a JavaScript command here and hit return or press \'Evaluate\'" />',

-'				<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />',

-'			</div>',

-'		</div>',

-'	</body>',

-'</html>',

-''

-];

-		};

-

-		var defaultCommandLineFunctions = [];

-

-		ConsoleAppender = function() {};

-

-		var consoleAppenderIdCounter = 1;

-		ConsoleAppender.prototype = new Appender();

-

-		ConsoleAppender.prototype.create = function(inPage, container,

-				lazyInit, initiallyMinimized, useDocumentWrite, width, height, focusConsoleWindow) {

-			var appender = this;

-

-			// Common properties

-			var initialized = false;

-			var consoleWindowCreated = false;

-			var consoleWindowLoaded = false;

-			var consoleClosed = false;

-

-			var queuedLoggingEvents = [];

-			var isSupported = true;

-			var consoleAppenderId = consoleAppenderIdCounter++;

-

-			// Local variables

-			initiallyMinimized = extractBooleanFromParam(initiallyMinimized, this.defaults.initiallyMinimized);

-			lazyInit = extractBooleanFromParam(lazyInit, this.defaults.lazyInit);

-			useDocumentWrite = extractBooleanFromParam(useDocumentWrite, this.defaults.useDocumentWrite);

-			var newestMessageAtTop = this.defaults.newestMessageAtTop;

-			var scrollToLatestMessage = this.defaults.scrollToLatestMessage;

-			width = width ? width : this.defaults.width;

-			height = height ? height : this.defaults.height;

-			var maxMessages = this.defaults.maxMessages;

-			var showCommandLine = this.defaults.showCommandLine;

-			var commandLineObjectExpansionDepth = this.defaults.commandLineObjectExpansionDepth;

-			var showHideButton = this.defaults.showHideButton;

-            var showCloseButton = this.defaults.showCloseButton;

-            var showLogEntryDeleteButtons = this.defaults.showLogEntryDeleteButtons;

-

-			this.setLayout(this.defaults.layout);

-

-			// Functions whose implementations vary between subclasses

-			var init, createWindow, safeToAppend, getConsoleWindow, open;

-

-			// Configuration methods. The function scope is used to prevent

-			// direct alteration to the appender configuration properties.

-			var appenderName = inPage ? "InPageAppender" : "PopUpAppender";

-			var checkCanConfigure = function(configOptionName) {

-				if (consoleWindowCreated) {

-					handleError(appenderName + ": configuration option '" + configOptionName + "' may not be set after the appender has been initialized");

-					return false;

-				}

-				return true;

-			};

-

-			var consoleWindowExists = function() {

-				return (consoleWindowLoaded && isSupported && !consoleClosed);

-			};

-

-			this.isNewestMessageAtTop = function() { return newestMessageAtTop; };

-			this.setNewestMessageAtTop = function(newestMessageAtTopParam) {

-				newestMessageAtTop = bool(newestMessageAtTopParam);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setNewestAtTop(newestMessageAtTop);

-				}

-			};

-

-			this.isScrollToLatestMessage = function() { return scrollToLatestMessage; };

-			this.setScrollToLatestMessage = function(scrollToLatestMessageParam) {

-				scrollToLatestMessage = bool(scrollToLatestMessageParam);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setScrollToLatest(scrollToLatestMessage);

-				}

-			};

-

-			this.getWidth = function() { return width; };

-			this.setWidth = function(widthParam) {

-				if (checkCanConfigure("width")) {

-					width = extractStringFromParam(widthParam, width);

-				}

-			};

-

-			this.getHeight = function() { return height; };

-			this.setHeight = function(heightParam) {

-				if (checkCanConfigure("height")) {

-					height = extractStringFromParam(heightParam, height);

-				}

-			};

-

-			this.getMaxMessages = function() { return maxMessages; };

-			this.setMaxMessages = function(maxMessagesParam) {

-				maxMessages = extractIntFromParam(maxMessagesParam, maxMessages);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setMaxMessages(maxMessages);

-				}

-			};

-

-			this.isShowCommandLine = function() { return showCommandLine; };

-			this.setShowCommandLine = function(showCommandLineParam) {

-				showCommandLine = bool(showCommandLineParam);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setShowCommandLine(showCommandLine);

-				}

-			};

-

-			this.isShowHideButton = function() { return showHideButton; };

-			this.setShowHideButton = function(showHideButtonParam) {

-				showHideButton = bool(showHideButtonParam);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setShowHideButton(showHideButton);

-				}

-			};

-

-			this.isShowCloseButton = function() { return showCloseButton; };

-			this.setShowCloseButton = function(showCloseButtonParam) {

-				showCloseButton = bool(showCloseButtonParam);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setShowCloseButton(showCloseButton);

-				}

-			};

-

-			this.getCommandLineObjectExpansionDepth = function() { return commandLineObjectExpansionDepth; };

-			this.setCommandLineObjectExpansionDepth = function(commandLineObjectExpansionDepthParam) {

-				commandLineObjectExpansionDepth = extractIntFromParam(commandLineObjectExpansionDepthParam, commandLineObjectExpansionDepth);

-			};

-

-			var minimized = initiallyMinimized;

-			this.isInitiallyMinimized = function() { return initiallyMinimized; };

-			this.setInitiallyMinimized = function(initiallyMinimizedParam) {

-				if (checkCanConfigure("initiallyMinimized")) {

-					initiallyMinimized = bool(initiallyMinimizedParam);

-					minimized = initiallyMinimized;

-				}

-			};

-

-			this.isUseDocumentWrite = function() { return useDocumentWrite; };

-			this.setUseDocumentWrite = function(useDocumentWriteParam) {

-				if (checkCanConfigure("useDocumentWrite")) {

-					useDocumentWrite = bool(useDocumentWriteParam);

-				}

-			};

-

-			// Common methods

-			function QueuedLoggingEvent(loggingEvent, formattedMessage) {

-				this.loggingEvent = loggingEvent;

-				this.levelName = loggingEvent.level.name;

-				this.formattedMessage = formattedMessage;

-			}

-

-			QueuedLoggingEvent.prototype.append = function() {

-				getConsoleWindow().log(this.levelName, this.formattedMessage);

-			};

-

-			function QueuedGroup(name, initiallyExpanded) {

-				this.name = name;

-				this.initiallyExpanded = initiallyExpanded;

-			}

-

-			QueuedGroup.prototype.append = function() {

-				getConsoleWindow().group(this.name, this.initiallyExpanded);

-			};

-

-			function QueuedGroupEnd() {}

-

-			QueuedGroupEnd.prototype.append = function() {

-				getConsoleWindow().groupEnd();

-			};

-

-			var checkAndAppend = function() {

-				// Next line forces a check of whether the window has been closed

-				safeToAppend();

-				if (!initialized) {

-					init();

-				} else if (consoleClosed && reopenWhenClosed) {

-					createWindow();

-				}

-				if (safeToAppend()) {

-					appendQueuedLoggingEvents();

-				}

-			};

-

-			this.append = function(loggingEvent) {

-				if (isSupported) {

-					// Format the message

-					var formattedMessage = appender.getLayout().format(loggingEvent);

-					if (this.getLayout().ignoresThrowable()) {

-						formattedMessage += loggingEvent.getThrowableStrRep();

-					}

-					queuedLoggingEvents.push(new QueuedLoggingEvent(loggingEvent, formattedMessage));

-					checkAndAppend();

-				}

-			};

-

-            this.group = function(name, initiallyExpanded) {

-				if (isSupported) {

-					queuedLoggingEvents.push(new QueuedGroup(name, initiallyExpanded));

-					checkAndAppend();

-				}

-			};

-

-            this.groupEnd = function() {

-				if (isSupported) {

-					queuedLoggingEvents.push(new QueuedGroupEnd());

-					checkAndAppend();

-				}

-			};

-

-			var appendQueuedLoggingEvents = function() {

-				var currentLoggingEvent;

-				while (queuedLoggingEvents.length > 0) {

-					queuedLoggingEvents.shift().append();

-				}

-				if (focusConsoleWindow) {

-					getConsoleWindow().focus();

-				}

-			};

-

-			this.setAddedToLogger = function(logger) {

-				this.loggers.push(logger);

-				if (enabled && !lazyInit) {

-					init();

-				}

-			};

-

-			this.clear = function() {

-				if (consoleWindowExists()) {

-					getConsoleWindow().clearLog();

-				}

-				queuedLoggingEvents.length = 0;

-			};

-

-			this.focus = function() {

-				if (consoleWindowExists()) {

-					getConsoleWindow().focus();

-				}

-			};

-

-			this.focusCommandLine = function() {

-				if (consoleWindowExists()) {

-					getConsoleWindow().focusCommandLine();

-				}

-			};

-

-			this.focusSearch = function() {

-				if (consoleWindowExists()) {

-					getConsoleWindow().focusSearch();

-				}

-			};

-

-			var commandWindow = window;

-

-			this.getCommandWindow = function() { return commandWindow; };

-			this.setCommandWindow = function(commandWindowParam) {

-				commandWindow = commandWindowParam;

-			};

-

-			this.executeLastCommand = function() {

-				if (consoleWindowExists()) {

-					getConsoleWindow().evalLastCommand();

-				}

-			};

-

-			var commandLayout = new PatternLayout("%m");

-			this.getCommandLayout = function() { return commandLayout; };

-			this.setCommandLayout = function(commandLayoutParam) {

-				commandLayout = commandLayoutParam;

-			};

-

-			this.evalCommandAndAppend = function(expr) {

-				var commandReturnValue = { appendResult: true, isError: false };

-				var commandOutput = "";

-				// Evaluate the command

-				try {

-					var result, i;

-					// The next three lines constitute a workaround for IE. Bizarrely, iframes seem to have no

-					// eval method on the window object initially, but once execScript has been called on

-					// it once then the eval method magically appears. See http://www.thismuchiknow.co.uk/?p=25

-					if (!commandWindow.eval && commandWindow.execScript) {

-						commandWindow.execScript("null");

-					}

-

-					var commandLineFunctionsHash = {};

-					for (i = 0, len = commandLineFunctions.length; i < len; i++) {

-						commandLineFunctionsHash[commandLineFunctions[i][0]] = commandLineFunctions[i][1];

-					}

-

-					// Keep an array of variables that are being changed in the command window so that they

-					// can be restored to their original values afterwards

-					var objectsToRestore = [];

-					var addObjectToRestore = function(name) {

-						objectsToRestore.push([name, commandWindow[name]]);

-					};

-

-					addObjectToRestore("appender");

-					commandWindow.appender = appender;

-

-					addObjectToRestore("commandReturnValue");

-					commandWindow.commandReturnValue = commandReturnValue;

-

-					addObjectToRestore("commandLineFunctionsHash");

-					commandWindow.commandLineFunctionsHash = commandLineFunctionsHash;

-

-					var addFunctionToWindow = function(name) {

-						addObjectToRestore(name);

-						commandWindow[name] = function() {

-							return this.commandLineFunctionsHash[name](appender, arguments, commandReturnValue);

-						};

-					};

-

-					for (i = 0, len = commandLineFunctions.length; i < len; i++) {

-						addFunctionToWindow(commandLineFunctions[i][0]);

-					}

-

-					// Another bizarre workaround to get IE to eval in the global scope

-					if (commandWindow === window && commandWindow.execScript) {

-						addObjectToRestore("evalExpr");

-						addObjectToRestore("result");

-						window.evalExpr = expr;

-						commandWindow.execScript("window.result=eval(window.evalExpr);");

-						result = window.result;

- 					} else {

- 						result = commandWindow.eval(expr);

- 					}

-					commandOutput = isUndefined(result) ? result : formatObjectExpansion(result, commandLineObjectExpansionDepth);

-

-					// Restore variables in the command window to their original state

-					for (i = 0, len = objectsToRestore.length; i < len; i++) {

-						commandWindow[objectsToRestore[i][0]] = objectsToRestore[i][1];

-					}

-				} catch (ex) {

-					commandOutput = "Error evaluating command: " + getExceptionStringRep(ex);

-					commandReturnValue.isError = true;

-				}

-				// Append command output

-				if (commandReturnValue.appendResult) {

-					var message = ">>> " + expr;

-					if (!isUndefined(commandOutput)) {

-						message += newLine + commandOutput;

-					}

-					var level = commandReturnValue.isError ? Level.ERROR : Level.INFO;

-					var loggingEvent = new LoggingEvent(null, new Date(), level, [message], null);

-					var mainLayout = this.getLayout();

-					this.setLayout(commandLayout);

-					this.append(loggingEvent);

-					this.setLayout(mainLayout);

-				}

-			};

-

-			var commandLineFunctions = defaultCommandLineFunctions.concat([]);

-

-			this.addCommandLineFunction = function(functionName, commandLineFunction) {

-				commandLineFunctions.push([functionName, commandLineFunction]);

-			};

-

-			var commandHistoryCookieName = "log4javascriptCommandHistory";

-			this.storeCommandHistory = function(commandHistory) {

-				setCookie(commandHistoryCookieName, commandHistory.join(","));

-			};

-

-			var writeHtml = function(doc) {

-				var lines = getConsoleHtmlLines();

-				doc.open();

-				for (var i = 0, len = lines.length; i < len; i++) {

-					doc.writeln(lines[i]);

-				}

-				doc.close();

-			};

-

-			// Set up event listeners

-			this.setEventTypes(["load", "unload"]);

-

-			var consoleWindowLoadHandler = function() {

-				var win = getConsoleWindow();

-				win.setAppender(appender);

-				win.setNewestAtTop(newestMessageAtTop);

-				win.setScrollToLatest(scrollToLatestMessage);

-				win.setMaxMessages(maxMessages);

-				win.setShowCommandLine(showCommandLine);

-				win.setShowHideButton(showHideButton);

-				win.setShowCloseButton(showCloseButton);

-				win.setMainWindow(window);

-

-				// Restore command history stored in cookie

-				var storedValue = getCookie(commandHistoryCookieName);

-				if (storedValue) {

-					win.commandHistory = storedValue.split(",");

-					win.currentCommandIndex = win.commandHistory.length;

-				}

-

-				appender.dispatchEvent("load", { "win" : win });

-			};

-

-			this.unload = function() {

-				logLog.debug("unload " + this + ", caller: " + this.unload.caller);

-				if (!consoleClosed) {

-					logLog.debug("really doing unload " + this);

-					consoleClosed = true;

-					consoleWindowLoaded = false;

-					consoleWindowCreated = false;

-					appender.dispatchEvent("unload", {});

-				}

-			};

-

-			var pollConsoleWindow = function(windowTest, interval, successCallback, errorMessage) {

-				function doPoll() {

-					try {

-						// Test if the console has been closed while polling

-						if (consoleClosed) {

-							clearInterval(poll);

-						}

-						if (windowTest(getConsoleWindow())) {

-							clearInterval(poll);

-							successCallback();

-						}

-					} catch (ex) {

-						clearInterval(poll);

-						isSupported = false;

-						handleError(errorMessage, ex);

-					}

-				}

-

-				// Poll the pop-up since the onload event is not reliable

-				var poll = setInterval(doPoll, interval);

-			};

-

-			var getConsoleUrl = function() {

-				var documentDomainSet = (document.domain != location.hostname);

-				return useDocumentWrite ? "" : getBaseUrl() + "console_uncompressed.html" +

-											   (documentDomainSet ? "?log4javascript_domain=" + escape(document.domain) : "");

-			};

-

-			// Define methods and properties that vary between subclasses

-			if (inPage) {

-				// InPageAppender

-

-				var containerElement = null;

-

-				// Configuration methods. The function scope is used to prevent

-				// direct alteration to the appender configuration properties.

-				var cssProperties = [];

-				this.addCssProperty = function(name, value) {

-					if (checkCanConfigure("cssProperties")) {

-						cssProperties.push([name, value]);

-					}

-				};

-

-				// Define useful variables

-				var windowCreationStarted = false;

-				var iframeContainerDiv;

-				var iframeId = uniqueId + "_InPageAppender_" + consoleAppenderId;

-

-				this.hide = function() {

-					if (initialized && consoleWindowCreated) {

-						if (consoleWindowExists()) {

-							getConsoleWindow().$("command").blur();

-						}

-						iframeContainerDiv.style.display = "none";

-						minimized = true;

-					}

-				};

-

-				this.show = function() {

-					if (initialized) {

-						if (consoleWindowCreated) {

-							iframeContainerDiv.style.display = "block";

-							this.setShowCommandLine(showCommandLine); // Force IE to update

-							minimized = false;

-						} else if (!windowCreationStarted) {

-							createWindow(true);

-						}

-					}

-				};

-

-				this.isVisible = function() {

-					return !minimized && !consoleClosed;

-				};

-

-				this.close = function(fromButton) {

-					if (!consoleClosed && (!fromButton || confirm("This will permanently remove the console from the page. No more messages will be logged. Do you wish to continue?"))) {

-						iframeContainerDiv.parentNode.removeChild(iframeContainerDiv);

-						this.unload();

-					}

-				};

-

-				// Create open, init, getConsoleWindow and safeToAppend functions

-				open = function() {

-					var initErrorMessage = "InPageAppender.open: unable to create console iframe";

-

-					function finalInit() {

-						try {

-							if (!initiallyMinimized) {

-								appender.show();

-							}

-							consoleWindowLoadHandler();

-							consoleWindowLoaded = true;

-							appendQueuedLoggingEvents();

-						} catch (ex) {

-							isSupported = false;

-							handleError(initErrorMessage, ex);

-						}

-					}

-

-					function writeToDocument() {

-						try {

-							var windowTest = function(win) { return isLoaded(win); };

-							if (useDocumentWrite) {

-								writeHtml(getConsoleWindow().document);

-							}

-							if (windowTest(getConsoleWindow())) {

-								finalInit();

-							} else {

-								pollConsoleWindow(windowTest, 100, finalInit, initErrorMessage);

-							}

-						} catch (ex) {

-							isSupported = false;

-							handleError(initErrorMessage, ex);

-						}

-					}

-

-					minimized = false;

-					iframeContainerDiv = containerElement.appendChild(document.createElement("div"));

-

-					iframeContainerDiv.style.width = width;

-					iframeContainerDiv.style.height = height;

-					iframeContainerDiv.style.border = "solid gray 1px";

-

-					for (var i = 0, len = cssProperties.length; i < len; i++) {

-						iframeContainerDiv.style[cssProperties[i][0]] = cssProperties[i][1];

-					}

-

-					var iframeSrc = useDocumentWrite ? "" : " src='" + getConsoleUrl() + "'";

-

-					// Adding an iframe using the DOM would be preferable, but it doesn't work

-					// in IE5 on Windows, or in Konqueror prior to version 3.5 - in Konqueror

-					// it creates the iframe fine but I haven't been able to find a way to obtain

-					// the iframe's window object

-					iframeContainerDiv.innerHTML = "<iframe id='" + iframeId + "' name='" + iframeId +

-						"' width='100%' height='100%' frameborder='0'" + iframeSrc +

-						" scrolling='no'></iframe>";

-					consoleClosed = false;

-

-					// Write the console HTML to the iframe

-					var iframeDocumentExistsTest = function(win) {

-						try {

-							return bool(win) && bool(win.document);

-						} catch (ex) {

-							return false;

-						}

-					};

-					if (iframeDocumentExistsTest(getConsoleWindow())) {

-						writeToDocument();

-					} else {

-						pollConsoleWindow(iframeDocumentExistsTest, 100, writeToDocument, initErrorMessage);

-					}

-					consoleWindowCreated = true;

-				};

-

-				createWindow = function(show) {

-					if (show || !initiallyMinimized) {

-						var pageLoadHandler = function() {

-							if (!container) {

-								// Set up default container element

-								containerElement = document.createElement("div");

-								containerElement.style.position = "fixed";

-								containerElement.style.left = "0";

-								containerElement.style.right = "0";

-								containerElement.style.bottom = "0";

-								document.body.appendChild(containerElement);

-								appender.addCssProperty("borderWidth", "1px 0 0 0");

-								appender.addCssProperty("zIndex", 1000000); // Can't find anything authoritative that says how big z-index can be

-								open();

-							} else {

-								try {

-									var el = document.getElementById(container);

-									if (el.nodeType == 1) {

-										containerElement = el;

-									}

-									open();

-								} catch (ex) {

-									handleError("InPageAppender.init: invalid container element '" + container + "' supplied", ex);

-								}

-							}

-						};

-

-						// Test the type of the container supplied. First, check if it's an element

-						if (pageLoaded && container && container.appendChild) {

-							containerElement = container;

-							open();

-						} else if (pageLoaded) {

-							pageLoadHandler();

-						} else {

-							log4javascript.addEventListener("load", pageLoadHandler);

-						}

-						windowCreationStarted = true;

-					}

-				};

-

-				init = function() {

-					createWindow();

-					initialized = true;

-				};

-

-				getConsoleWindow = function() {

-					var iframe = window.frames[iframeId];

-					if (iframe) {

-						return iframe;

-					}

-				};

-

-				safeToAppend = function() {

-					if (isSupported && !consoleClosed) {

-						if (consoleWindowCreated && !consoleWindowLoaded && getConsoleWindow() && isLoaded(getConsoleWindow())) {

-							consoleWindowLoaded = true;

-						}

-						return consoleWindowLoaded;

-					}

-					return false;

-				};

-			} else {

-				// PopUpAppender

-

-				// Extract params

-				var useOldPopUp = appender.defaults.useOldPopUp;

-				var complainAboutPopUpBlocking = appender.defaults.complainAboutPopUpBlocking;

-				var reopenWhenClosed = this.defaults.reopenWhenClosed;

-

-				// Configuration methods. The function scope is used to prevent

-				// direct alteration to the appender configuration properties.

-				this.isUseOldPopUp = function() { return useOldPopUp; };

-				this.setUseOldPopUp = function(useOldPopUpParam) {

-					if (checkCanConfigure("useOldPopUp")) {

-						useOldPopUp = bool(useOldPopUpParam);

-					}

-				};

-

-				this.isComplainAboutPopUpBlocking = function() { return complainAboutPopUpBlocking; };

-				this.setComplainAboutPopUpBlocking = function(complainAboutPopUpBlockingParam) {

-					if (checkCanConfigure("complainAboutPopUpBlocking")) {

-						complainAboutPopUpBlocking = bool(complainAboutPopUpBlockingParam);

-					}

-				};

-

-				this.isFocusPopUp = function() { return focusConsoleWindow; };

-				this.setFocusPopUp = function(focusPopUpParam) {

-					// This property can be safely altered after logging has started

-					focusConsoleWindow = bool(focusPopUpParam);

-				};

-

-				this.isReopenWhenClosed = function() { return reopenWhenClosed; };

-				this.setReopenWhenClosed = function(reopenWhenClosedParam) {

-					// This property can be safely altered after logging has started

-					reopenWhenClosed = bool(reopenWhenClosedParam);

-				};

-

-				this.close = function() {

-					logLog.debug("close " + this);

-					try {

-						popUp.close();

-						this.unload();

-					} catch (ex) {

-						// Do nothing

-					}

-				};

-

-				this.hide = function() {

-					logLog.debug("hide " + this);

-					if (consoleWindowExists()) {

-						this.close();

-					}

-				};

-

-				this.show = function() {

-					logLog.debug("show " + this);

-					if (!consoleWindowCreated) {

-						open();

-					}

-				};

-

-				this.isVisible = function() {

-					return safeToAppend();

-				};

-

-				// Define useful variables

-				var popUp;

-

-				// Create open, init, getConsoleWindow and safeToAppend functions

-				open = function() {

-					var windowProperties = "width=" + width + ",height=" + height + ",status,resizable";

-					var frameInfo = "";

-					try {

-						var frameEl = window.frameElement;

-						if (frameEl) {

-							frameInfo = "_" + frameEl.tagName + "_" + (frameEl.name || frameEl.id || "");

-						}

-					} catch (e) {

-						frameInfo = "_inaccessibleParentFrame";

-					}

-					var windowName = "PopUp_" + location.host.replace(/[^a-z0-9]/gi, "_") + "_" + consoleAppenderId + frameInfo;

-					if (!useOldPopUp || !useDocumentWrite) {

-						// Ensure a previous window isn't used by using a unique name

-						windowName = windowName + "_" + uniqueId;

-					}

-

-					var checkPopUpClosed = function(win) {

-						if (consoleClosed) {

-							return true;

-						} else {

-							try {

-								return bool(win) && win.closed;

-							} catch(ex) {}

-						}

-						return false;

-					};

-

-					var popUpClosedCallback = function() {

-						if (!consoleClosed) {

-							appender.unload();

-						}

-					};

-

-					function finalInit() {

-						getConsoleWindow().setCloseIfOpenerCloses(!useOldPopUp || !useDocumentWrite);

-						consoleWindowLoadHandler();

-						consoleWindowLoaded = true;

-						appendQueuedLoggingEvents();

-						pollConsoleWindow(checkPopUpClosed, 500, popUpClosedCallback,

-								"PopUpAppender.checkPopUpClosed: error checking pop-up window");

-					}

-

-					try {

-						popUp = window.open(getConsoleUrl(), windowName, windowProperties);

-						consoleClosed = false;

-						consoleWindowCreated = true;

-						if (popUp && popUp.document) {

-							if (useDocumentWrite && useOldPopUp && isLoaded(popUp)) {

-								popUp.mainPageReloaded();

-								finalInit();

-							} else {

-								if (useDocumentWrite) {

-									writeHtml(popUp.document);

-								}

-								// Check if the pop-up window object is available

-								var popUpLoadedTest = function(win) { return bool(win) && isLoaded(win); };

-								if (isLoaded(popUp)) {

-									finalInit();

-								} else {

-									pollConsoleWindow(popUpLoadedTest, 100, finalInit,

-											"PopUpAppender.init: unable to create console window");

-								}

-							}

-						} else {

-							isSupported = false;

-							logLog.warn("PopUpAppender.init: pop-ups blocked, please unblock to use PopUpAppender");

-							if (complainAboutPopUpBlocking) {

-								handleError("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");

-							}

-						}

-					} catch (ex) {

-						handleError("PopUpAppender.init: error creating pop-up", ex);

-					}

-				};

-

-				createWindow = function() {

-					if (!initiallyMinimized) {

-						open();

-					}

-				};

-

-				init = function() {

-					createWindow();

-					initialized = true;

-				};

-

-				getConsoleWindow = function() {

-					return popUp;

-				};

-

-				safeToAppend = function() {

-					if (isSupported && !isUndefined(popUp) && !consoleClosed) {

-						if (popUp.closed ||

-								(consoleWindowLoaded && isUndefined(popUp.closed))) { // Extra check for Opera

-							appender.unload();

-							logLog.debug("PopUpAppender: pop-up closed");

-							return false;

-						}

-						if (!consoleWindowLoaded && isLoaded(popUp)) {

-							consoleWindowLoaded = true;

-						}

-					}

-					return isSupported && consoleWindowLoaded && !consoleClosed;

-				};

-			}

-

-			// Expose getConsoleWindow so that automated tests can check the DOM

-			this.getConsoleWindow = getConsoleWindow;

-		};

-

-		ConsoleAppender.addGlobalCommandLineFunction = function(functionName, commandLineFunction) {

-			defaultCommandLineFunctions.push([functionName, commandLineFunction]);

-		};

-

-		/* ------------------------------------------------------------------ */

-

-		function PopUpAppender(lazyInit, initiallyMinimized, useDocumentWrite,

-							   width, height) {

-			this.create(false, null, lazyInit, initiallyMinimized,

-					useDocumentWrite, width, height, this.defaults.focusPopUp);

-		}

-

-		PopUpAppender.prototype = new ConsoleAppender();

-

-		PopUpAppender.prototype.defaults = {

-			layout: new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),

-			initiallyMinimized: false,

-			focusPopUp: false,

-			lazyInit: true,

-			useOldPopUp: true,

-			complainAboutPopUpBlocking: true,

-			newestMessageAtTop: false,

-			scrollToLatestMessage: true,

-			width: "600",

-			height: "400",

-			reopenWhenClosed: false,

-			maxMessages: null,

-			showCommandLine: true,

-			commandLineObjectExpansionDepth: 1,

-			showHideButton: false,

-			showCloseButton: true,

-            showLogEntryDeleteButtons: true,

-            useDocumentWrite: true

-		};

-

-		PopUpAppender.prototype.toString = function() {

-			return "PopUpAppender";

-		};

-

-		log4javascript.PopUpAppender = PopUpAppender;

-

-		/* ------------------------------------------------------------------ */

-

-		function InPageAppender(container, lazyInit, initiallyMinimized,

-								useDocumentWrite, width, height) {

-			this.create(true, container, lazyInit, initiallyMinimized,

-					useDocumentWrite, width, height, false);

-		}

-

-		InPageAppender.prototype = new ConsoleAppender();

-

-		InPageAppender.prototype.defaults = {

-			layout: new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),

-			initiallyMinimized: false,

-			lazyInit: true,

-			newestMessageAtTop: false,

-			scrollToLatestMessage: true,

-			width: "100%",

-			height: "220px",

-			maxMessages: null,

-			showCommandLine: true,

-			commandLineObjectExpansionDepth: 1,

-			showHideButton: false,

-			showCloseButton: false,

-            showLogEntryDeleteButtons: true,

-            useDocumentWrite: true

-		};

-

-		InPageAppender.prototype.toString = function() {

-			return "InPageAppender";

-		};

-

-		log4javascript.InPageAppender = InPageAppender;

-

-		// Next line for backwards compatibility

-		log4javascript.InlineAppender = InPageAppender;

-	})();

-	/* ---------------------------------------------------------------------- */

-	// Console extension functions

-

-	function padWithSpaces(str, len) {

-		if (str.length < len) {

-			var spaces = [];

-			var numberOfSpaces = Math.max(0, len - str.length);

-			for (var i = 0; i < numberOfSpaces; i++) {

-				spaces[i] = " ";

-			}

-			str += spaces.join("");

-		}

-		return str;

-	}

-

-	(function() {

-		function dir(obj) {

-			var maxLen = 0;

-			// Obtain the length of the longest property name

-			for (var p in obj) {

-				maxLen = Math.max(toStr(p).length, maxLen);

-			}

-			// Create the nicely formatted property list

-			var propList = [];

-			for (p in obj) {

-				var propNameStr = "  " + padWithSpaces(toStr(p), maxLen + 2);

-				var propVal;

-				try {

-					propVal = splitIntoLines(toStr(obj[p])).join(padWithSpaces(newLine, maxLen + 6));

-				} catch (ex) {

-					propVal = "[Error obtaining property. Details: " + getExceptionMessage(ex) + "]";

-				}

-				propList.push(propNameStr + propVal);

-			}

-			return propList.join(newLine);

-		}

-

-		var nodeTypes = {

-			ELEMENT_NODE: 1,

-			ATTRIBUTE_NODE: 2,

-			TEXT_NODE: 3,

-			CDATA_SECTION_NODE: 4,

-			ENTITY_REFERENCE_NODE: 5,

-			ENTITY_NODE: 6,

-			PROCESSING_INSTRUCTION_NODE: 7,

-			COMMENT_NODE: 8,

-			DOCUMENT_NODE: 9,

-			DOCUMENT_TYPE_NODE: 10,

-			DOCUMENT_FRAGMENT_NODE: 11,

-			NOTATION_NODE: 12

-		};

-

-		var preFormattedElements = ["script", "pre"];

-

-		// This should be the definitive list, as specified by the XHTML 1.0 Transitional DTD

-		var emptyElements = ["br", "img", "hr", "param", "link", "area", "input", "col", "base", "meta"];

-		var indentationUnit = "  ";

-

-		// Create and return an XHTML string from the node specified

-		function getXhtml(rootNode, includeRootNode, indentation, startNewLine, preformatted) {

-			includeRootNode = (typeof includeRootNode == "undefined") ? true : !!includeRootNode;

-			if (typeof indentation != "string") {

-				indentation = "";

-			}

-			startNewLine = !!startNewLine;

-			preformatted = !!preformatted;

-			var xhtml;

-

-			function isWhitespace(node) {

-				return ((node.nodeType == nodeTypes.TEXT_NODE) && /^[ \t\r\n]*$/.test(node.nodeValue));

-			}

-

-			function fixAttributeValue(attrValue) {

-				return attrValue.toString().replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/"/g, "&quot;");

-			}

-

-			function getStyleAttributeValue(el) {

-				var stylePairs = el.style.cssText.split(";");

-				var styleValue = "";

-				var isFirst = true;

-				for (var j = 0, len = stylePairs.length; j < len; j++) {

-					var nameValueBits = stylePairs[j].split(":");

-					var props = [];

-					if (!/^\s*$/.test(nameValueBits[0])) {

-						props.push(trim(nameValueBits[0]).toLowerCase() + ":" + trim(nameValueBits[1]));

-					}

-					styleValue = props.join(";");

-				}

-				return styleValue;

-			}

-

-			function getNamespace(el) {

-				if (el.prefix) {

-					return el.prefix;

-				} else if (el.outerHTML) {

-					var regex = new RegExp("<([^:]+):" + el.tagName + "[^>]*>", "i");

-					if (regex.test(el.outerHTML)) {

-						return RegExp.$1.toLowerCase();

-					}

-				}

-                return "";

-			}

-

-			var lt = "<";

-			var gt = ">";

-

-			if (includeRootNode && rootNode.nodeType != nodeTypes.DOCUMENT_FRAGMENT_NODE) {

-				switch (rootNode.nodeType) {

-					case nodeTypes.ELEMENT_NODE:

-						var tagName = rootNode.tagName.toLowerCase();

-						xhtml = startNewLine ? newLine + indentation : "";

-						xhtml += lt;

-						// Allow for namespaces, where present

-						var prefix = getNamespace(rootNode);

-						var hasPrefix = !!prefix;

-						if (hasPrefix) {

-							xhtml += prefix + ":";

-						}

-						xhtml += tagName;

-						for (i = 0, len = rootNode.attributes.length; i < len; i++) {

-							var currentAttr = rootNode.attributes[i];

-							// Check the attribute is valid.

-							if (!	currentAttr.specified ||

-									currentAttr.nodeValue === null ||

-									currentAttr.nodeName.toLowerCase() === "style" ||

-									typeof currentAttr.nodeValue !== "string" ||

-									currentAttr.nodeName.indexOf("_moz") === 0) {

-								continue;

-							}

-							xhtml += " " + currentAttr.nodeName.toLowerCase() + "=\"";

-							xhtml += fixAttributeValue(currentAttr.nodeValue);

-							xhtml += "\"";

-						}

-						// Style needs to be done separately as it is not reported as an

-						// attribute in IE

-						if (rootNode.style.cssText) {

-							var styleValue = getStyleAttributeValue(rootNode);

-							if (styleValue !== "") {

-								xhtml += " style=\"" + getStyleAttributeValue(rootNode) + "\"";

-							}

-						}

-						if (array_contains(emptyElements, tagName) ||

-								(hasPrefix && !rootNode.hasChildNodes())) {

-							xhtml += "/" + gt;

-						} else {

-							xhtml += gt;

-							// Add output for childNodes collection (which doesn't include attribute nodes)

-							var childStartNewLine = !(rootNode.childNodes.length === 1 &&

-								rootNode.childNodes[0].nodeType === nodeTypes.TEXT_NODE);

-							var childPreformatted = array_contains(preFormattedElements, tagName);

-							for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {

-								xhtml += getXhtml(rootNode.childNodes[i], true, indentation + indentationUnit,

-									childStartNewLine, childPreformatted);

-							}

-							// Add the end tag

-							var endTag = lt + "/" + tagName + gt;

-							xhtml += childStartNewLine ? newLine + indentation + endTag : endTag;

-						}

-						return xhtml;

-					case nodeTypes.TEXT_NODE:

-						if (isWhitespace(rootNode)) {

-							xhtml = "";

-						} else {

-							if (preformatted) {

-								xhtml = rootNode.nodeValue;

-							} else {

-								// Trim whitespace from each line of the text node

-								var lines = splitIntoLines(trim(rootNode.nodeValue));

-								var trimmedLines = [];

-								for (var i = 0, len = lines.length; i < len; i++) {

-									trimmedLines[i] = trim(lines[i]);

-								}

-								xhtml = trimmedLines.join(newLine + indentation);

-							}

-							if (startNewLine) {

-								xhtml = newLine + indentation + xhtml;

-							}

-						}

-						return xhtml;

-					case nodeTypes.CDATA_SECTION_NODE:

-						return "<![CDA" + "TA[" + rootNode.nodeValue + "]" + "]>" + newLine;

-					case nodeTypes.DOCUMENT_NODE:

-						xhtml = "";

-						// Add output for childNodes collection (which doesn't include attribute nodes)

-						for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {

-							xhtml += getXhtml(rootNode.childNodes[i], true, indentation);

-						}

-						return xhtml;

-					default:

-						return "";

-				}

-			} else {

-				xhtml = "";

-				// Add output for childNodes collection (which doesn't include attribute nodes)

-				for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {

-					xhtml += getXhtml(rootNode.childNodes[i], true, indentation + indentationUnit);

-				}

-				return xhtml;

-			}

-		}

-

-		function createCommandLineFunctions() {

-			ConsoleAppender.addGlobalCommandLineFunction("$", function(appender, args, returnValue) {

-				return document.getElementById(args[0]);

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("dir", function(appender, args, returnValue) {

-				var lines = [];

-				for (var i = 0, len = args.length; i < len; i++) {

-					lines[i] = dir(args[i]);

-				}

-				return lines.join(newLine + newLine);

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("dirxml", function(appender, args, returnValue) {

-				var lines = [];

-				for (var i = 0, len = args.length; i < len; i++) {

-					var win = appender.getCommandWindow();

-					lines[i] = getXhtml(args[i]);

-				}

-				return lines.join(newLine + newLine);

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("cd", function(appender, args, returnValue) {

-				var win, message;

-				if (args.length === 0 || args[0] === "") {

-					win = window;

-					message = "Command line set to run in main window";

-				} else {

-					if (args[0].window == args[0]) {

-						win = args[0];

-						message = "Command line set to run in frame '" + args[0].name + "'";

-					} else {

-						win = window.frames[args[0]];

-						if (win) {

-							message = "Command line set to run in frame '" + args[0] + "'";

-						} else {

-							returnValue.isError = true;

-							message = "Frame '" + args[0] + "' does not exist";

-							win = appender.getCommandWindow();

-						}

-					}

-				}

-				appender.setCommandWindow(win);

-				return message;

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("clear", function(appender, args, returnValue) {

-				returnValue.appendResult = false;

-				appender.clear();

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("keys", function(appender, args, returnValue) {

-				var keys = [];

-				for (var k in args[0]) {

-					keys.push(k);

-				}

-				return keys;

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("values", function(appender, args, returnValue) {

-				var values = [];

-				for (var k in args[0]) {

-					try {

-						values.push(args[0][k]);

-					} catch (ex) {

-						logLog.warn("values(): Unable to obtain value for key " + k + ". Details: " + getExceptionMessage(ex));

-					}

-				}

-				return values;

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("expansionDepth", function(appender, args, returnValue) {

-				var expansionDepth = parseInt(args[0], 10);

-				if (isNaN(expansionDepth) || expansionDepth < 0) {

-					returnValue.isError = true;

-					return "" + args[0] + " is not a valid expansion depth";

-				} else {

-					appender.setCommandLineObjectExpansionDepth(expansionDepth);

-					return "Object expansion depth set to " + expansionDepth;

-				}

-			});

-		}

-

-		function init() {

-			// Add command line functions

-			createCommandLineFunctions();

-		}

-

-		/* ------------------------------------------------------------------ */

-

-		init();

-	})();

-

-	/* ---------------------------------------------------------------------- */

-	// Main load

-

-   log4javascript.setDocumentReady = function() {

-       pageLoaded = true;

-       log4javascript.dispatchEvent("load", {});

-   };

-

-    if (window.addEventListener) {

-        window.addEventListener("load", log4javascript.setDocumentReady, false);

-    } else if (window.attachEvent) {

-        window.attachEvent("onload", log4javascript.setDocumentReady);

-    } else {

-        var oldOnload = window.onload;

-        if (typeof window.onload != "function") {

-            window.onload = log4javascript.setDocumentReady;

-        } else {

-            window.onload = function(evt) {

-                if (oldOnload) {

-                    oldOnload(evt);

-                }

-                log4javascript.setDocumentReady();

-            };

-        }

-    }

-

-    // Ensure that the log4javascript object is available in the window. This

-    // is necessary for log4javascript to be available in IE if loaded using

-    // Dojo's module system

-    window.log4javascript = log4javascript;

-

-    return log4javascript;

-})();
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript.js b/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript.js
deleted file mode 100644
index 2b89a6a..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript.js
+++ /dev/null
@@ -1,41 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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 log4javascript_stub=(function(){var log4javascript;function ff(){return function(){};}

-function copy(obj,props){for(var i in props){obj[i]=props[i];}}

-var f=ff();var Logger=ff();copy(Logger.prototype,{addChild:f,getEffectiveAppenders:f,invalidateAppenderCache:f,getAdditivity:f,setAdditivity:f,addAppender:f,removeAppender:f,removeAllAppenders:f,log:f,setLevel:f,getLevel:f,getEffectiveLevel:f,trace:f,debug:f,info:f,warn:f,error:f,fatal:f,isEnabledFor:f,isTraceEnabled:f,isDebugEnabled:f,isInfoEnabled:f,isWarnEnabled:f,isErrorEnabled:f,isFatalEnabled:f,callAppenders:f,group:f,groupEnd:f,time:f,timeEnd:f,assert:f,parent:new Logger()});var getLogger=function(){return new Logger();};function EventSupport(){}

-copy(EventSupport.prototype,{setEventTypes:f,addEventListener:f,removeEventListener:f,dispatchEvent:f,eventTypes:[],eventListeners:{}});function Log4JavaScript(){}

-Log4JavaScript.prototype=new EventSupport();log4javascript=new Log4JavaScript();log4javascript={isStub:true,version:"1.4.6",edition:"log4javascript",setDocumentReady:f,setEventTypes:f,addEventListener:f,removeEventListener:f,dispatchEvent:f,eventTypes:[],eventListeners:{},logLog:{setQuietMode:f,setAlertAllErrors:f,debug:f,displayDebug:f,warn:f,error:f},handleError:f,setEnabled:f,isEnabled:f,setTimeStampsInMilliseconds:f,isTimeStampsInMilliseconds:f,evalInScope:f,setShowStackTraces:f,getLogger:getLogger,getDefaultLogger:getLogger,getNullLogger:getLogger,getRootLogger:getLogger,resetConfiguration:f,Level:ff(),LoggingEvent:ff(),Layout:ff(),Appender:ff()};log4javascript.LoggingEvent.prototype={getThrowableStrRep:f,getCombinedMessages:f};log4javascript.Level.prototype={toString:f,equals:f,isGreaterOrEqual:f};var level=new log4javascript.Level();copy(log4javascript.Level,{ALL:level,TRACE:level,DEBUG:level,INFO:level,WARN:level,ERROR:level,FATAL:level,OFF:level});log4javascript.Layout.prototype={defaults:{},format:f,ignoresThrowable:f,getContentType:f,allowBatching:f,getDataValues:f,setKeys:f,setCustomField:f,hasCustomFields:f,setTimeStampsInMilliseconds:f,isTimeStampsInMilliseconds:f,getTimeStampValue:f,toString:f};log4javascript.SimpleDateFormat=ff();log4javascript.SimpleDateFormat.prototype={setMinimalDaysInFirstWeek:f,getMinimalDaysInFirstWeek:f,format:f};log4javascript.PatternLayout=ff();log4javascript.PatternLayout.prototype=new log4javascript.Layout();log4javascript.Appender=ff();log4javascript.Appender.prototype=new EventSupport();copy(log4javascript.Appender.prototype,{layout:new log4javascript.PatternLayout(),threshold:log4javascript.Level.ALL,loggers:[],doAppend:f,append:f,setLayout:f,getLayout:f,setThreshold:f,getThreshold:f,setAddedToLogger:f,setRemovedFromLogger:f,group:f,groupEnd:f,toString:f});log4javascript.SimpleLayout=ff();log4javascript.SimpleLayout.prototype=new log4javascript.Layout();log4javascript.NullLayout=ff();log4javascript.NullLayout.prototype=new log4javascript.Layout();log4javascript.XmlLayout=ff();log4javascript.XmlLayout.prototype=new log4javascript.Layout();copy(log4javascript.XmlLayout.prototype,{escapeCdata:f,isCombinedMessages:f});log4javascript.JsonLayout=ff();log4javascript.JsonLayout.prototype=new log4javascript.Layout();copy(log4javascript.JsonLayout.prototype,{isReadable:f,isCombinedMessages:f});log4javascript.HttpPostDataLayout=ff();log4javascript.HttpPostDataLayout.prototype=new log4javascript.Layout();log4javascript.PatternLayout=ff();log4javascript.PatternLayout.prototype=new log4javascript.Layout();log4javascript.AlertAppender=ff();log4javascript.AlertAppender.prototype=new log4javascript.Appender();log4javascript.BrowserConsoleAppender=ff();log4javascript.BrowserConsoleAppender.prototype=new log4javascript.Appender();log4javascript.AjaxAppender=ff();log4javascript.AjaxAppender.prototype=new log4javascript.Appender();copy(log4javascript.AjaxAppender.prototype,{getSessionId:f,setSessionId:f,isTimed:f,setTimed:f,getTimerInterval:f,setTimerInterval:f,isWaitForResponse:f,setWaitForResponse:f,getBatchSize:f,setBatchSize:f,isSendAllOnUnload:f,setSendAllOnUnload:f,setRequestSuccessCallback:f,setFailCallback:f,getPostVarName:f,setPostVarName:f,sendAll:f,sendAllRemaining:f,defaults:{requestSuccessCallback:null,failCallback:null}});function ConsoleAppender(){}

-ConsoleAppender.prototype=new log4javascript.Appender();copy(ConsoleAppender.prototype,{create:f,isNewestMessageAtTop:f,setNewestMessageAtTop:f,isScrollToLatestMessage:f,setScrollToLatestMessage:f,getWidth:f,setWidth:f,getHeight:f,setHeight:f,getMaxMessages:f,setMaxMessages:f,isShowCommandLine:f,setShowCommandLine:f,isShowHideButton:f,setShowHideButton:f,isShowCloseButton:f,setShowCloseButton:f,getCommandLineObjectExpansionDepth:f,setCommandLineObjectExpansionDepth:f,isInitiallyMinimized:f,setInitiallyMinimized:f,isUseDocumentWrite:f,setUseDocumentWrite:f,group:f,groupEnd:f,clear:f,focus:f,focusCommandLine:f,focusSearch:f,getCommandWindow:f,setCommandWindow:f,executeLastCommand:f,getCommandLayout:f,setCommandLayout:f,evalCommandAndAppend:f,addCommandLineFunction:f,storeCommandHistory:f,unload:f});ConsoleAppender.addGlobalCommandLineFunction=f;log4javascript.InPageAppender=ff();log4javascript.InPageAppender.prototype=new ConsoleAppender();copy(log4javascript.InPageAppender.prototype,{addCssProperty:f,hide:f,show:f,isVisible:f,close:f,defaults:{layout:new log4javascript.PatternLayout(),maxMessages:null}});log4javascript.InlineAppender=log4javascript.InPageAppender;log4javascript.PopUpAppender=ff();log4javascript.PopUpAppender.prototype=new ConsoleAppender();copy(log4javascript.PopUpAppender.prototype,{isUseOldPopUp:f,setUseOldPopUp:f,isComplainAboutPopUpBlocking:f,setComplainAboutPopUpBlocking:f,isFocusPopUp:f,setFocusPopUp:f,isReopenWhenClosed:f,setReopenWhenClosed:f,close:f,hide:f,show:f,defaults:{layout:new log4javascript.PatternLayout(),maxMessages:null}});return log4javascript;})();if(typeof window.log4javascript=="undefined"){var log4javascript=log4javascript_stub;}

diff --git a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite.js b/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite.js
deleted file mode 100644
index 2418285..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite.js
+++ /dev/null
@@ -1,39 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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 log4javascript_stub=(function(){var log4javascript;function ff(){return function(){};}

-function copy(obj,props){for(var i in props){obj[i]=props[i];}}

-var f=ff();var Logger=ff();copy(Logger.prototype,{setLevel:f,getLevel:f,trace:f,debug:f,info:f,warn:f,error:f,fatal:f,isEnabledFor:f,isTraceEnabled:f,isDebugEnabled:f,isInfoEnabled:f,isWarnEnabled:f,isErrorEnabled:f,isFatalEnabled:f});var getLogger=function(){return new Logger();};function Log4JavaScript(){}

-log4javascript=new Log4JavaScript();log4javascript={isStub:true,version:"1.4.6",edition:"log4javascript_lite",setEnabled:f,isEnabled:f,setShowStackTraces:f,getDefaultLogger:getLogger,getLogger:getLogger,getNullLogger:getLogger,Level:ff(),LoggingEvent:ff(),Appender:ff()};log4javascript.LoggingEvent.prototype={getThrowableStrRep:f,getCombinedMessages:f};log4javascript.Level.prototype={toString:f,equals:f,isGreaterOrEqual:f};var level=new log4javascript.Level();copy(log4javascript.Level,{ALL:level,TRACE:level,DEBUG:level,INFO:level,WARN:level,ERROR:level,FATAL:level,OFF:level});log4javascript.Appender.prototype.append=f;return log4javascript;})();if(typeof window.log4javascript=="undefined"){var log4javascript=log4javascript_stub;}

diff --git a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite_uncompressed.js b/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite_uncompressed.js
deleted file mode 100644
index 1fe7a92..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite_uncompressed.js
+++ /dev/null
@@ -1,120 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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 log4javascript_stub = (function() {

-	var log4javascript;

-

-	function ff() {

-		return function() {};

-	}

-	function copy(obj, props) {

-		for (var i in props) {

-			obj[i] = props[i];

-		}

-	}

-	var f = ff();

-

-	// Loggers

-	var Logger = ff();

-	copy(Logger.prototype, {

-		setLevel: f,

-		getLevel: f,

-		trace: f,

-		debug: f,

-		info: f,

-		warn: f,

-		error: f,

-		fatal: f,

-		isEnabledFor: f,

-		isTraceEnabled: f,

-		isDebugEnabled: f,

-		isInfoEnabled: f,

-		isWarnEnabled: f,

-		isErrorEnabled: f,

-		isFatalEnabled: f

-	});

-

-	var getLogger = function() {

-		return new Logger();

-	};

-

-	function Log4JavaScript() {}

-	log4javascript = new Log4JavaScript();

-

-	log4javascript = {

-		isStub: true,

-		version: "1.4.6",

-		edition: "log4javascript_lite",

-		setEnabled: f,

-		isEnabled: f,

-		setShowStackTraces: f,

-		getDefaultLogger: getLogger,

-		getLogger: getLogger,

-		getNullLogger: getLogger,

-		Level: ff(),

-		LoggingEvent: ff(),

-		Appender: ff()

-	};

-

-	// LoggingEvents

-	log4javascript.LoggingEvent.prototype = {

-		getThrowableStrRep: f,

-		getCombinedMessages: f

-	};

-

-	// Levels

-	log4javascript.Level.prototype = {

-		toString: f,

-		equals: f,

-		isGreaterOrEqual: f

-	};

-	var level = new log4javascript.Level();

-	copy(log4javascript.Level, {

-		ALL: level,

-		TRACE: level,

-		DEBUG: level,

-		INFO: level,

-		WARN: level,

-		ERROR: level,

-		FATAL: level,

-		OFF: level

-	});

-	

-	log4javascript.Appender.prototype.append = f;

-

-	return log4javascript;

-})();

-if (typeof window.log4javascript == "undefined") {

-	var log4javascript = log4javascript_stub;

-}

diff --git a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production.js b/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production.js
deleted file mode 100644
index 500f627..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production.js
+++ /dev/null
@@ -1,40 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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 log4javascript_stub=(function(){var log4javascript;function ff(){return function(){};}

-function copy(obj,props){for(var i in props){obj[i]=props[i];}}

-var f=ff();var Logger=ff();copy(Logger.prototype,{addChild:f,getEffectiveAppenders:f,invalidateAppenderCache:f,getAdditivity:f,setAdditivity:f,addAppender:f,removeAppender:f,removeAllAppenders:f,log:f,setLevel:f,getLevel:f,getEffectiveLevel:f,trace:f,debug:f,info:f,warn:f,error:f,fatal:f,isEnabledFor:f,isTraceEnabled:f,isDebugEnabled:f,isInfoEnabled:f,isWarnEnabled:f,isErrorEnabled:f,isFatalEnabled:f,callAppenders:f,group:f,groupEnd:f,time:f,timeEnd:f,assert:f,parent:new Logger()});var getLogger=function(){return new Logger();};function EventSupport(){}

-copy(EventSupport.prototype,{setEventTypes:f,addEventListener:f,removeEventListener:f,dispatchEvent:f,eventTypes:[],eventListeners:{}});function Log4JavaScript(){}

-Log4JavaScript.prototype=new EventSupport();log4javascript=new Log4JavaScript();log4javascript={isStub:true,version:"1.4.6",edition:"log4javascript_production",setDocumentReady:f,setEventTypes:f,addEventListener:f,removeEventListener:f,dispatchEvent:f,eventTypes:[],eventListeners:{},logLog:{setQuietMode:f,setAlertAllErrors:f,debug:f,displayDebug:f,warn:f,error:f},handleError:f,setEnabled:f,isEnabled:f,setTimeStampsInMilliseconds:f,isTimeStampsInMilliseconds:f,evalInScope:f,setShowStackTraces:f,getLogger:getLogger,getDefaultLogger:getLogger,getNullLogger:getLogger,getRootLogger:getLogger,resetConfiguration:f,Level:ff(),LoggingEvent:ff(),Layout:ff(),Appender:ff()};log4javascript.LoggingEvent.prototype={getThrowableStrRep:f,getCombinedMessages:f};log4javascript.Level.prototype={toString:f,equals:f,isGreaterOrEqual:f};var level=new log4javascript.Level();copy(log4javascript.Level,{ALL:level,TRACE:level,DEBUG:level,INFO:level,WARN:level,ERROR:level,FATAL:level,OFF:level});log4javascript.Layout.prototype={defaults:{},format:f,ignoresThrowable:f,getContentType:f,allowBatching:f,getDataValues:f,setKeys:f,setCustomField:f,hasCustomFields:f,setTimeStampsInMilliseconds:f,isTimeStampsInMilliseconds:f,getTimeStampValue:f,toString:f};log4javascript.SimpleDateFormat=ff();log4javascript.SimpleDateFormat.prototype={setMinimalDaysInFirstWeek:f,getMinimalDaysInFirstWeek:f,format:f};log4javascript.PatternLayout=ff();log4javascript.PatternLayout.prototype=new log4javascript.Layout();log4javascript.Appender=ff();log4javascript.Appender.prototype=new EventSupport();copy(log4javascript.Appender.prototype,{layout:new log4javascript.PatternLayout(),threshold:log4javascript.Level.ALL,loggers:[],doAppend:f,append:f,setLayout:f,getLayout:f,setThreshold:f,getThreshold:f,setAddedToLogger:f,setRemovedFromLogger:f,group:f,groupEnd:f,toString:f});log4javascript.SimpleLayout=ff();log4javascript.SimpleLayout.prototype=new log4javascript.Layout();log4javascript.NullLayout=ff();log4javascript.NullLayout.prototype=new log4javascript.Layout();log4javascript.XmlLayout=ff();log4javascript.XmlLayout.prototype=new log4javascript.Layout();copy(log4javascript.XmlLayout.prototype,{escapeCdata:f,isCombinedMessages:f});log4javascript.JsonLayout=ff();log4javascript.JsonLayout.prototype=new log4javascript.Layout();copy(log4javascript.JsonLayout.prototype,{isReadable:f,isCombinedMessages:f});log4javascript.HttpPostDataLayout=ff();log4javascript.HttpPostDataLayout.prototype=new log4javascript.Layout();log4javascript.PatternLayout=ff();log4javascript.PatternLayout.prototype=new log4javascript.Layout();log4javascript.AjaxAppender=ff();log4javascript.AjaxAppender.prototype=new log4javascript.Appender();copy(log4javascript.AjaxAppender.prototype,{getSessionId:f,setSessionId:f,isTimed:f,setTimed:f,getTimerInterval:f,setTimerInterval:f,isWaitForResponse:f,setWaitForResponse:f,getBatchSize:f,setBatchSize:f,isSendAllOnUnload:f,setSendAllOnUnload:f,setRequestSuccessCallback:f,setFailCallback:f,getPostVarName:f,setPostVarName:f,sendAll:f,sendAllRemaining:f,defaults:{requestSuccessCallback:null,failCallback:null}});return log4javascript;})();if(typeof window.log4javascript=="undefined"){var log4javascript=log4javascript_stub;}

diff --git a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production_uncompressed.js b/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production_uncompressed.js
deleted file mode 100644
index 79fab5f..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production_uncompressed.js
+++ /dev/null
@@ -1,271 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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 log4javascript_stub = (function() {

-	var log4javascript;

-

-	function ff() {

-		return function() {};

-	}

-	function copy(obj, props) {

-		for (var i in props) {

-			obj[i] = props[i];

-		}

-	}

-	var f = ff();

-

-	// Loggers

-	var Logger = ff();

-	copy(Logger.prototype, {

-		addChild: f,

-		getEffectiveAppenders: f,

-		invalidateAppenderCache: f,

-		getAdditivity: f,

-		setAdditivity: f,

-		addAppender: f,

-		removeAppender: f,

-		removeAllAppenders: f,

-		log: f,

-		setLevel: f,

-		getLevel: f,

-		getEffectiveLevel: f,

-		trace: f,

-		debug: f,

-		info: f,

-		warn: f,

-		error: f,

-		fatal: f,

-		isEnabledFor: f,

-		isTraceEnabled: f,

-		isDebugEnabled: f,

-		isInfoEnabled: f,

-		isWarnEnabled: f,

-		isErrorEnabled: f,

-		isFatalEnabled: f,

-		callAppenders: f,

-		group: f,

-		groupEnd: f,

-		time: f,

-		timeEnd: f,

-		assert: f,

-		parent: new Logger()

-	});

-

-	var getLogger = function() {

-		return new Logger();

-	};

-

-	function EventSupport() {}

-

-	copy(EventSupport.prototype, {

-		setEventTypes: f,

-		addEventListener: f,

-		removeEventListener: f,

-		dispatchEvent: f,

-		eventTypes: [],

-		eventListeners: {}

-	});

-

-	function Log4JavaScript() {}

-	Log4JavaScript.prototype = new EventSupport();

-	log4javascript = new Log4JavaScript();

-

-	log4javascript = {

-		isStub: true,

-		version: "1.4.6",

-		edition: "log4javascript_production",

-        setDocumentReady: f,

-		setEventTypes: f,

-		addEventListener: f,

-		removeEventListener: f,

-		dispatchEvent: f,

-		eventTypes: [],

-		eventListeners: {},

-		logLog: {

-			setQuietMode: f,

-			setAlertAllErrors: f,

-			debug: f,

-			displayDebug: f,

-			warn: f,

-			error: f

-		},

-		handleError: f,

-		setEnabled: f,

-		isEnabled: f,

-		setTimeStampsInMilliseconds: f,

-		isTimeStampsInMilliseconds: f,

-		evalInScope: f,

-		setShowStackTraces: f,

-		getLogger: getLogger,

-		getDefaultLogger: getLogger,

-		getNullLogger: getLogger,

-		getRootLogger: getLogger,

-		resetConfiguration: f,

-		Level: ff(),

-		LoggingEvent: ff(),

-		Layout: ff(),

-		Appender: ff()

-	};

-

-	// LoggingEvents

-	log4javascript.LoggingEvent.prototype = {

-		getThrowableStrRep: f,

-		getCombinedMessages: f

-	};

-

-	// Levels

-	log4javascript.Level.prototype = {

-		toString: f,

-		equals: f,

-		isGreaterOrEqual: f

-	};

-	var level = new log4javascript.Level();

-	copy(log4javascript.Level, {

-		ALL: level,

-		TRACE: level,

-		DEBUG: level,

-		INFO: level,

-		WARN: level,

-		ERROR: level,

-		FATAL: level,

-		OFF: level

-	});

-

-	// Layouts

-	log4javascript.Layout.prototype = {

-		defaults: {},

-		format: f,

-		ignoresThrowable: f,

-		getContentType: f,

-		allowBatching: f,

-		getDataValues: f,

-		setKeys: f,

-		setCustomField: f,

-		hasCustomFields: f,

-		setTimeStampsInMilliseconds: f,

-		isTimeStampsInMilliseconds: f,

-		getTimeStampValue: f,

-		toString: f

-	};

-

-	// PatternLayout related

-	log4javascript.SimpleDateFormat = ff();

-	log4javascript.SimpleDateFormat.prototype = {

-		setMinimalDaysInFirstWeek: f,

-		getMinimalDaysInFirstWeek: f,

-		format: f

-	};

-

-	// PatternLayout

-	log4javascript.PatternLayout = ff();

-	log4javascript.PatternLayout.prototype = new log4javascript.Layout();

-

-	// Appenders

-	log4javascript.Appender = ff();

-	log4javascript.Appender.prototype = new EventSupport();

-

-	copy(log4javascript.Appender.prototype, {

-		layout: new log4javascript.PatternLayout(),

-		threshold: log4javascript.Level.ALL,

-		loggers: [],

-		doAppend: f,

-		append: f,

-		setLayout: f,

-		getLayout: f,

-		setThreshold: f,

-		getThreshold: f,

-		setAddedToLogger: f,

-		setRemovedFromLogger: f,

-		group: f,

-		groupEnd: f,

-		toString: f

-	});

-	// SimpleLayout

-	log4javascript.SimpleLayout = ff();

-	log4javascript.SimpleLayout.prototype = new log4javascript.Layout();

-	// NullLayout

-	log4javascript.NullLayout = ff();

-	log4javascript.NullLayout.prototype = new log4javascript.Layout();

-	// ZmlLayout

-	log4javascript.XmlLayout = ff();

-	log4javascript.XmlLayout.prototype = new log4javascript.Layout();

-	copy(log4javascript.XmlLayout.prototype, {

-		escapeCdata: f,

-		isCombinedMessages: f

-	});

-	// JsonLayout

-	log4javascript.JsonLayout = ff();

-	log4javascript.JsonLayout.prototype = new log4javascript.Layout();

-	copy(log4javascript.JsonLayout.prototype, {

-		isReadable: f,

-		isCombinedMessages: f

-	});

-	// HttpPostDataLayout 

-	log4javascript.HttpPostDataLayout = ff();

-	log4javascript.HttpPostDataLayout.prototype = new log4javascript.Layout();

-	// PatternLayout

-	log4javascript.PatternLayout = ff();

-	log4javascript.PatternLayout.prototype = new log4javascript.Layout();

-	// AjaxAppender

-	log4javascript.AjaxAppender = ff();

-	log4javascript.AjaxAppender.prototype = new log4javascript.Appender();

-	copy(log4javascript.AjaxAppender.prototype, {

-		getSessionId: f,

-		setSessionId: f,

-		isTimed: f,

-		setTimed: f,

-		getTimerInterval: f,

-		setTimerInterval: f,

-		isWaitForResponse: f,

-		setWaitForResponse: f,

-		getBatchSize: f,

-		setBatchSize: f,

-		isSendAllOnUnload: f,

-		setSendAllOnUnload: f,

-		setRequestSuccessCallback: f,

-		setFailCallback: f,

-		getPostVarName: f,

-		setPostVarName: f,

-		sendAll: f,

-		sendAllRemaining: f,

-		defaults: {

-			requestSuccessCallback: null,

-			failCallback: null

-		}

-	});

-	return log4javascript;

-})();

-if (typeof window.log4javascript == "undefined") {

-	var log4javascript = log4javascript_stub;

-}

diff --git a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_uncompressed.js b/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_uncompressed.js
deleted file mode 100644
index 77a9a9c..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/stubs/log4javascript_uncompressed.js
+++ /dev/null
@@ -1,359 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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 log4javascript_stub = (function() {

-	var log4javascript;

-

-	function ff() {

-		return function() {};

-	}

-	function copy(obj, props) {

-		for (var i in props) {

-			obj[i] = props[i];

-		}

-	}

-	var f = ff();

-

-	// Loggers

-	var Logger = ff();

-	copy(Logger.prototype, {

-		addChild: f,

-		getEffectiveAppenders: f,

-		invalidateAppenderCache: f,

-		getAdditivity: f,

-		setAdditivity: f,

-		addAppender: f,

-		removeAppender: f,

-		removeAllAppenders: f,

-		log: f,

-		setLevel: f,

-		getLevel: f,

-		getEffectiveLevel: f,

-		trace: f,

-		debug: f,

-		info: f,

-		warn: f,

-		error: f,

-		fatal: f,

-		isEnabledFor: f,

-		isTraceEnabled: f,

-		isDebugEnabled: f,

-		isInfoEnabled: f,

-		isWarnEnabled: f,

-		isErrorEnabled: f,

-		isFatalEnabled: f,

-		callAppenders: f,

-		group: f,

-		groupEnd: f,

-		time: f,

-		timeEnd: f,

-		assert: f,

-		parent: new Logger()

-	});

-

-	var getLogger = function() {

-		return new Logger();

-	};

-

-	function EventSupport() {}

-

-	copy(EventSupport.prototype, {

-		setEventTypes: f,

-		addEventListener: f,

-		removeEventListener: f,

-		dispatchEvent: f,

-		eventTypes: [],

-		eventListeners: {}

-	});

-

-	function Log4JavaScript() {}

-	Log4JavaScript.prototype = new EventSupport();

-	log4javascript = new Log4JavaScript();

-

-	log4javascript = {

-		isStub: true,

-		version: "1.4.6",

-		edition: "log4javascript",

-        setDocumentReady: f,

-		setEventTypes: f,

-		addEventListener: f,

-		removeEventListener: f,

-		dispatchEvent: f,

-		eventTypes: [],

-		eventListeners: {},

-		logLog: {

-			setQuietMode: f,

-			setAlertAllErrors: f,

-			debug: f,

-			displayDebug: f,

-			warn: f,

-			error: f

-		},

-		handleError: f,

-		setEnabled: f,

-		isEnabled: f,

-		setTimeStampsInMilliseconds: f,

-		isTimeStampsInMilliseconds: f,

-		evalInScope: f,

-		setShowStackTraces: f,

-		getLogger: getLogger,

-		getDefaultLogger: getLogger,

-		getNullLogger: getLogger,

-		getRootLogger: getLogger,

-		resetConfiguration: f,

-		Level: ff(),

-		LoggingEvent: ff(),

-		Layout: ff(),

-		Appender: ff()

-	};

-

-	// LoggingEvents

-	log4javascript.LoggingEvent.prototype = {

-		getThrowableStrRep: f,

-		getCombinedMessages: f

-	};

-

-	// Levels

-	log4javascript.Level.prototype = {

-		toString: f,

-		equals: f,

-		isGreaterOrEqual: f

-	};

-	var level = new log4javascript.Level();

-	copy(log4javascript.Level, {

-		ALL: level,

-		TRACE: level,

-		DEBUG: level,

-		INFO: level,

-		WARN: level,

-		ERROR: level,

-		FATAL: level,

-		OFF: level

-	});

-

-	// Layouts

-	log4javascript.Layout.prototype = {

-		defaults: {},

-		format: f,

-		ignoresThrowable: f,

-		getContentType: f,

-		allowBatching: f,

-		getDataValues: f,

-		setKeys: f,

-		setCustomField: f,

-		hasCustomFields: f,

-		setTimeStampsInMilliseconds: f,

-		isTimeStampsInMilliseconds: f,

-		getTimeStampValue: f,

-		toString: f

-	};

-

-	// PatternLayout related

-	log4javascript.SimpleDateFormat = ff();

-	log4javascript.SimpleDateFormat.prototype = {

-		setMinimalDaysInFirstWeek: f,

-		getMinimalDaysInFirstWeek: f,

-		format: f

-	};

-

-	// PatternLayout

-	log4javascript.PatternLayout = ff();

-	log4javascript.PatternLayout.prototype = new log4javascript.Layout();

-

-	// Appenders

-	log4javascript.Appender = ff();

-	log4javascript.Appender.prototype = new EventSupport();

-

-	copy(log4javascript.Appender.prototype, {

-		layout: new log4javascript.PatternLayout(),

-		threshold: log4javascript.Level.ALL,

-		loggers: [],

-		doAppend: f,

-		append: f,

-		setLayout: f,

-		getLayout: f,

-		setThreshold: f,

-		getThreshold: f,

-		setAddedToLogger: f,

-		setRemovedFromLogger: f,

-		group: f,

-		groupEnd: f,

-		toString: f

-	});

-	// SimpleLayout

-	log4javascript.SimpleLayout = ff();

-	log4javascript.SimpleLayout.prototype = new log4javascript.Layout();

-	// NullLayout

-	log4javascript.NullLayout = ff();

-	log4javascript.NullLayout.prototype = new log4javascript.Layout();

-	// ZmlLayout

-	log4javascript.XmlLayout = ff();

-	log4javascript.XmlLayout.prototype = new log4javascript.Layout();

-	copy(log4javascript.XmlLayout.prototype, {

-		escapeCdata: f,

-		isCombinedMessages: f

-	});

-	// JsonLayout

-	log4javascript.JsonLayout = ff();

-	log4javascript.JsonLayout.prototype = new log4javascript.Layout();

-	copy(log4javascript.JsonLayout.prototype, {

-		isReadable: f,

-		isCombinedMessages: f

-	});

-	// HttpPostDataLayout 

-	log4javascript.HttpPostDataLayout = ff();

-	log4javascript.HttpPostDataLayout.prototype = new log4javascript.Layout();

-	// PatternLayout

-	log4javascript.PatternLayout = ff();

-	log4javascript.PatternLayout.prototype = new log4javascript.Layout();

-	// AlertAppender

-	log4javascript.AlertAppender = ff();

-	log4javascript.AlertAppender.prototype = new log4javascript.Appender();

-	// BrowserConsoleAppender

-	log4javascript.BrowserConsoleAppender = ff();

-	log4javascript.BrowserConsoleAppender.prototype = new log4javascript.Appender();

-	// AjaxAppender

-	log4javascript.AjaxAppender = ff();

-	log4javascript.AjaxAppender.prototype = new log4javascript.Appender();

-	copy(log4javascript.AjaxAppender.prototype, {

-		getSessionId: f,

-		setSessionId: f,

-		isTimed: f,

-		setTimed: f,

-		getTimerInterval: f,

-		setTimerInterval: f,

-		isWaitForResponse: f,

-		setWaitForResponse: f,

-		getBatchSize: f,

-		setBatchSize: f,

-		isSendAllOnUnload: f,

-		setSendAllOnUnload: f,

-		setRequestSuccessCallback: f,

-		setFailCallback: f,

-		getPostVarName: f,

-		setPostVarName: f,

-		sendAll: f,

-		sendAllRemaining: f,

-		defaults: {

-			requestSuccessCallback: null,

-			failCallback: null

-		}

-	});

-	// ConsoleAppender

-	function ConsoleAppender() {}

-	ConsoleAppender.prototype = new log4javascript.Appender();

-	copy(ConsoleAppender.prototype, {

-		create: f,

-		isNewestMessageAtTop: f,

-		setNewestMessageAtTop: f,

-		isScrollToLatestMessage: f,

-		setScrollToLatestMessage: f,

-		getWidth: f,

-		setWidth: f,

-		getHeight: f,

-		setHeight: f,

-		getMaxMessages: f,

-		setMaxMessages: f,

-		isShowCommandLine: f,

-		setShowCommandLine: f,

-		isShowHideButton: f,

-		setShowHideButton: f,

-		isShowCloseButton: f,

-		setShowCloseButton: f,

-		getCommandLineObjectExpansionDepth: f,

-		setCommandLineObjectExpansionDepth: f,

-		isInitiallyMinimized: f,

-		setInitiallyMinimized: f,

-		isUseDocumentWrite: f,

-		setUseDocumentWrite: f,

-		group: f,

-		groupEnd: f,

-		clear: f,

-		focus: f,

-		focusCommandLine: f,

-		focusSearch: f,

-		getCommandWindow: f,

-		setCommandWindow: f,

-		executeLastCommand: f,

-		getCommandLayout: f,

-		setCommandLayout: f,

-		evalCommandAndAppend: f,

-		addCommandLineFunction: f,

-		storeCommandHistory: f,

-		unload: f

-	});

-

-	ConsoleAppender.addGlobalCommandLineFunction = f;

-

-	// InPageAppender

-	log4javascript.InPageAppender = ff();

-	log4javascript.InPageAppender.prototype = new ConsoleAppender();

-	copy(log4javascript.InPageAppender.prototype, {

-		addCssProperty: f,

-		hide: f,

-		show: f,

-		isVisible: f,

-		close: f,

-		defaults: {

-			layout: new log4javascript.PatternLayout(),

-			maxMessages: null

-		}

-	});

-	log4javascript.InlineAppender = log4javascript.InPageAppender;

-

-	// PopUpAppender

-	log4javascript.PopUpAppender = ff();

-	log4javascript.PopUpAppender.prototype = new ConsoleAppender();

-	copy(log4javascript.PopUpAppender.prototype, {

-		isUseOldPopUp: f,

-		setUseOldPopUp: f,

-		isComplainAboutPopUpBlocking: f,

-		setComplainAboutPopUpBlocking: f,

-		isFocusPopUp: f,

-		setFocusPopUp: f,

-		isReopenWhenClosed: f,

-		setReopenWhenClosed: f,

-		close: f,

-		hide: f,

-		show: f,

-		defaults: {

-			layout: new log4javascript.PatternLayout(),

-			maxMessages: null

-		}

-	});

-	return log4javascript;

-})();

-if (typeof window.log4javascript == "undefined") {

-	var log4javascript = log4javascript_stub;

-}

diff --git a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript.js b/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript.js
deleted file mode 100644
index c7b255d..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript.js
+++ /dev/null
@@ -1,50 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-

-function array_contains(arr,val){for(var i=0;i<arr.length;i++){if(arr[i]==val){return true;}}

-return false;}

-function compareObjectInterface(obj1,obj1_name,obj2,obj2_name,namePrefix){if(!namePrefix){namePrefix="";}

-var obj1PropertyNames=new Array();for(var i in obj1){if(i!="prototype"&&i!="arguments"){obj1PropertyNames.push(i);}}

-if(obj1&&obj1.prototype&&!array_contains(obj1PropertyNames,"prototype")){}

-for(var j=0;j<obj1PropertyNames.length;j++){var propertyName=obj1PropertyNames[j];if((typeof obj1[propertyName]=="function"||typeof obj1[propertyName]=="object")&&!(obj1[propertyName]instanceof Array)){var propertyFullyQualifiedName=(namePrefix=="")?propertyName:namePrefix+"."+propertyName;try{if(typeof obj2[propertyName]=="undefined"){throw new Error(obj2_name+" does not contain "+propertyFullyQualifiedName+" in "+obj1_name);}else if(typeof obj2[propertyName]!=typeof obj1[propertyName]){throw new Error(obj2_name+"'s "+propertyFullyQualifiedName+" is of the wrong type: "+typeof obj2[propertyName]+" when it is type "+typeof obj1[propertyName]+" in "+obj1_name);}else if(obj1[propertyName]!=Function.prototype.apply){if(!compareObjectInterface(obj1[propertyName],obj1_name,obj2[propertyName],obj2_name,propertyFullyQualifiedName)){throw new Error("Interfaces don't match");}}}catch(ex){throw new Error("Exception while checking property name "+propertyFullyQualifiedName+" in "+obj2_name+": "+ex.message);}}}

-return true;};var testLayoutWithVariables=function(layout,t){var emptyObject={};var emptyArray=[];var emptyString="";var localUndefined=emptyArray[0];var oneLevelObject={"name":"One-level object"};var twoLevelObject={"name":"Two-level object","data":oneLevelObject};var threeLevelObject={"name":"Three-level object","data":twoLevelObject};var anArray=[3,"stuff",true,false,0,null,localUndefined,3.14,function(p){return"I'm a function";},[1,"things"]];var arrayOfTestItems=[emptyObject,emptyString,emptyString,localUndefined,oneLevelObject,twoLevelObject,threeLevelObject,anArray];t.log("Testing layout "+layout)

-for(var i=0;i<arrayOfTestItems.length;i++){var ex=new Error("Test error");var loggingEvent=new log4javascript.LoggingEvent(t.logger,new Date(),log4javascript.Level.INFO,[arrayOfTestItems[i]],null);t.log("Formatting",arrayOfTestItems[i],result);var result=layout.format(loggingEvent);loggingEvent.exception=ex;t.log("Formatting with exception",arrayOfTestItems[i],result);result=layout.format(loggingEvent);}};xn.test.enableTestDebug=true;xn.test.enable_log4javascript=false;xn.test.suite("log4javascript tests",function(s){log4javascript.logLog.setQuietMode(true);var ArrayAppender=function(layout){if(layout){this.setLayout(layout);}

-this.logMessages=[];};ArrayAppender.prototype=new log4javascript.Appender();ArrayAppender.prototype.layout=new log4javascript.NullLayout();ArrayAppender.prototype.append=function(loggingEvent){var formattedMessage=this.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}

-this.logMessages.push(formattedMessage);};ArrayAppender.prototype.toString=function(){return"[ArrayAppender]";};s.setUp=function(t){t.logger=log4javascript.getLogger("test");t.logger.removeAllAppenders();t.appender=new ArrayAppender();t.logger.addAppender(t.appender);};s.tearDown=function(t){t.logger.removeAppender(t.appender);log4javascript.resetConfiguration();};s.test("Stub script interface test",function(t){try{compareObjectInterface(log4javascript,"log4javascript",log4javascript_stub,"log4javascript_stub");}catch(ex){t.fail(ex);}});s.test("Disable log4javascript test",function(t){log4javascript.setEnabled(false);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,0);log4javascript.setEnabled(true);});s.test("Array.splice test 1",function(t){var a=["Marlon","Ashley","Darius","Lloyd"];var deletedItems=a.splice(1,2);t.assertEquals(a.join(","),"Marlon,Lloyd");t.assertEquals(deletedItems.join(","),"Ashley,Darius");});s.test("Array.splice test 2",function(t){var a=["Marlon","Ashley","Darius","Lloyd"];var deletedItems=a.splice(1,1,"Malky","Jay");t.assertEquals(a.join(","),"Marlon,Malky,Jay,Darius,Lloyd");t.assertEquals(deletedItems.join(","),"Ashley");});s.test("array_remove test",function(t){var array_remove=log4javascript.evalInScope("array_remove");var a=["Marlon","Ashley","Darius"];array_remove(a,"Darius");t.assertEquals(a.join(","),"Marlon,Ashley");});s.test("array_remove with empty array test",function(t){var array_remove=log4javascript.evalInScope("array_remove");var a=[];array_remove(a,"Darius");t.assertEquals(a.join(","),"");});s.test("Logger logging test",function(t){t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,1);});s.test("Logger levels test",function(t){var originalLevel=t.logger.getEffectiveLevel();t.logger.setLevel(log4javascript.Level.INFO);t.logger.debug("TEST");t.logger.setLevel(originalLevel);t.assertEquals(t.appender.logMessages.length,0);});s.test("Logger getEffectiveLevel inheritance test 1",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");parentLogger.setLevel(log4javascript.Level.ERROR);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.ERROR);});s.test("Logger getEffectiveLevel inheritance test 2",function(t){var grandParentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2.test3");grandParentLogger.setLevel(log4javascript.Level.ERROR);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.ERROR);});s.test("Logger getEffectiveLevel inheritance test 3",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");parentLogger.setLevel(log4javascript.Level.ERROR);childLogger.setLevel(log4javascript.Level.INFO);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.INFO);});s.test("Logger getEffectiveLevel root inheritance test",function(t){var rootLogger=log4javascript.getRootLogger();var childLogger=log4javascript.getLogger("test1.test2.test3");rootLogger.setLevel(log4javascript.Level.WARN);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.WARN);});s.test("Logger null level test",function(t){t.logger.setLevel(null);t.assertEquals(t.logger.getEffectiveLevel(),log4javascript.Level.DEBUG);});s.test("Logger appender additivity test 1",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");t.assertEquals(parentLoggerAppender.logMessages.length,2);t.assertEquals(childLoggerAppender.logMessages.length,1);});s.test("Logger appender additivity test 2",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);childLogger.setAdditivity(false);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");t.assertEquals(parentLoggerAppender.logMessages.length,1);t.assertEquals(childLoggerAppender.logMessages.length,1);});s.test("Logger appender additivity test 3",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);childLogger.setAdditivity(false);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");childLogger.setAdditivity(true);childLogger.info("Child logger test message 2");t.assertEquals(parentLoggerAppender.logMessages.length,2);t.assertEquals(childLoggerAppender.logMessages.length,2);});s.test("Appender threshold test",function(t){t.appender.setThreshold(log4javascript.Level.INFO);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,0);});s.test("Basic appender / layout test",function(t){t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST");});s.test("Appender uniqueness within logger test",function(t){t.logger.addAppender(t.appender);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,1);});s.test("Logger remove appender test",function(t){t.logger.debug("TEST");t.logger.removeAppender(t.appender);t.logger.debug("TEST AGAIN");t.assertEquals(t.appender.logMessages.length,1);});s.test("",function(t){t.logger.debug("TEST");t.logger.removeAppender(t.appender);t.logger.debug("TEST AGAIN");t.assertEquals(t.appender.logMessages.length,1);});s.test("SimpleLayout format test",function(t){var layout=new log4javascript.SimpleLayout();testLayoutWithVariables(layout,t);});s.test("SimpleLayout test",function(t){t.appender.setLayout(new log4javascript.SimpleLayout());t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"DEBUG - TEST");});s.test("NullLayout format test",function(t){var layout=new log4javascript.NullLayout();testLayoutWithVariables(layout,t);});s.test("NullLayout test",function(t){t.appender.setLayout(new log4javascript.NullLayout());t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST");});s.test("XmlLayout format test",function(t){var layout=new log4javascript.XmlLayout();testLayoutWithVariables(layout,t);});s.test("XmlLayout test",function(t){t.appender.setLayout(new log4javascript.XmlLayout());t.logger.debug("TEST");t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<\/log4javascript:event>\s*$/,t.appender.logMessages[0]);});s.test("XmlLayout with exception test",function(t){t.appender.setLayout(new log4javascript.XmlLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<log4javascript:exception>\s*<!\[CDATA\[.*\]\]><\/log4javascript:exception>\s*<\/log4javascript:event>\s*$/,t.appender.logMessages[0]);});var setUpXmlLayoutMillisecondsTest=function(t){t.date=new Date();t.timeInMilliseconds=t.date.getTime();t.timeInSeconds=Math.floor(t.timeInMilliseconds/1000);t.milliseconds=t.date.getMilliseconds();t.loggingEvent=new log4javascript.LoggingEvent(t.logger,t.date,log4javascript.Level.DEBUG,["TEST"],null);t.layout=new log4javascript.XmlLayout();}

-s.test("XmlLayout seconds/milliseconds test 1",function(t){setUpXmlLayoutMillisecondsTest(t);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInMilliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,t.layout.format(t.loggingEvent));});s.test("XmlLayout seconds/milliseconds test 2",function(t){setUpXmlLayoutMillisecondsTest(t);log4javascript.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);log4javascript.setTimeStampsInMilliseconds(true);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInSeconds+'" milliseconds="'+t.milliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,formatted);});s.test("XmlLayout seconds/milliseconds test 3",function(t){setUpXmlLayoutMillisecondsTest(t);t.layout.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInSeconds+'" milliseconds="'+t.milliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,formatted);});s.test("escapeNewLines test",function(t){var escapeNewLines=log4javascript.evalInScope("escapeNewLines");var str="1\r2\n3\n4\r\n5\r6\r\n7";t.assertEquals(escapeNewLines(str),"1\\r\\n2\\r\\n3\\r\\n4\\r\\n5\\r\\n6\\r\\n7");});s.test("JsonLayout format test",function(t){var layout=new log4javascript.JsonLayout();testLayoutWithVariables(layout,t);});s.test("JsonLayout test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST");t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST"}$/,t.appender.logMessages[0]);});s.test("JsonLayout JSON validity test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST");eval("var o = "+t.appender.logMessages[0]);t.assertEquals(o.message,"TEST");});s.test("JsonLayout with number type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug(15);t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":15}$/,t.appender.logMessages[0]);});s.test("JsonLayout with object type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug({});t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"\[object Object\]"}$/,t.appender.logMessages[0]);});s.test("JsonLayout with boolean type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug(false);t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":false}$/,t.appender.logMessages[0]);});s.test("JsonLayout with quote test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TE\"S\"T");t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TE\\"S\\"T"}$/,t.appender.logMessages[0]);});s.test("JsonLayout with exception test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST","exception":.*}$/,t.appender.logMessages[0]);});var setUpJsonLayoutMillisecondsTest=function(t){t.date=new Date();t.timeInMilliseconds=t.date.getTime();t.timeInSeconds=Math.floor(t.timeInMilliseconds/1000);t.milliseconds=t.date.getMilliseconds();t.loggingEvent=new log4javascript.LoggingEvent(t.logger,t.date,log4javascript.Level.DEBUG,["TEST"],null);t.layout=new log4javascript.JsonLayout();};s.test("JsonLayout seconds/milliseconds test 1",function(t){setUpJsonLayoutMillisecondsTest(t);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInMilliseconds+',"level":"DEBUG","url":".*","message":"TEST"}$');t.assertRegexMatches(regex,t.layout.format(t.loggingEvent));});s.test("JsonLayout seconds/milliseconds test 2",function(t){setUpJsonLayoutMillisecondsTest(t);log4javascript.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);log4javascript.setTimeStampsInMilliseconds(true);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInSeconds+',"level":"DEBUG","url":".*","message":"TEST","milliseconds":'+t.milliseconds+'}$');t.assertRegexMatches(regex,formatted);});s.test("JsonLayout seconds/milliseconds test 3",function(t){setUpJsonLayoutMillisecondsTest(t);t.layout.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInSeconds+',"level":"DEBUG","url":".*","message":"TEST","milliseconds":'+t.milliseconds+'}$');t.assertRegexMatches(regex,formatted);});s.test("HttpPostDataLayout format test",function(t){var layout=new log4javascript.HttpPostDataLayout();testLayoutWithVariables(layout,t);});s.test("HttpPostDataLayout test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST");t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST$/,t.appender.logMessages[0]);});s.test("HttpPostDataLayout URL encoding test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST +\"1\"");t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST%20%2B%221%22$/,t.appender.logMessages[0]);});s.test("HttpPostDataLayout with exception test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST&exception=.*$/,t.appender.logMessages[0]);});(function(){var formatObjectExpansion=log4javascript.evalInScope("formatObjectExpansion");var newLine=log4javascript.evalInScope("newLine");var arr=[null,undefined,1.2,"A string",[1,"test"],{a:{b:1}}];s.test("Basic formatObjectExpansion array test (depth: 1)",function(t){t.assertEquals(formatObjectExpansion(arr,1),"["+newLine+"  null,"+newLine+"  undefined,"+newLine+"  1.2,"+newLine+"  A string,"+newLine+"  1,test,"+newLine+"  [object Object]"+newLine+"]");});s.test("Basic formatObjectExpansion array test (depth: 2)",function(t){t.assertEquals(formatObjectExpansion(arr,2),"["+newLine+"  null,"+newLine+"  undefined,"+newLine+"  1.2,"+newLine+"  A string,"+newLine+"  ["+newLine+"    1,"+newLine+"    test"+newLine+"  ],"+newLine+"  {"+newLine+"    a: [object Object]"+newLine+"  }"+newLine+"]");});s.test("formatObjectExpansion simple object test",function(t){var obj={STRING:"A string"};t.assertEquals(formatObjectExpansion(obj,1),"{"+newLine+"  STRING: A string"+newLine+"}");});s.test("formatObjectExpansion simple circular object test",function(t){var obj={};obj.a=obj;t.assertEquals(formatObjectExpansion(obj,2),"{"+newLine+"  a: [object Object] [already expanded]"+newLine+"}");});})();var getSampleDate=function(){var date=new Date();date.setFullYear(2006);date.setMonth(7);date.setDate(30);date.setHours(15);date.setMinutes(38);date.setSeconds(45);return date;};s.test("String.replace test",function(t){t.assertEquals("Hello world".replace(/o/g,"Z"),"HellZ wZrld");});s.test("PatternLayout format test",function(t){var layout=new log4javascript.PatternLayout();testLayoutWithVariables(layout,t);});s.test("PatternLayout dates test",function(t){var layout=new log4javascript.PatternLayout("%d %d{DATE} %d{HH:ss}");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertRegexMatches(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} \d{2} [A-Z][a-z]{2} \d{4} \d{2}:\d{2}:\d{2},\d{3} \d{2}:\d{2}$/,t.appender.logMessages[0]);});s.test("PatternLayout modifiers test",function(t){var layout=new log4javascript.PatternLayout("%m|%3m|%-3m|%6m|%-6m|%.2m|%1.2m|%6.8m|%-1.2m|%-6.8m|");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST|TEST|TEST|  TEST|TEST  |ST|ST|  TEST|ST|TEST  |");});s.test("PatternLayout conversion characters test",function(t){var layout=new log4javascript.PatternLayout("%c %n %p %r literal %%");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertRegexMatches(/^test \s+ DEBUG \d+ literal %$/,t.appender.logMessages[0]);});s.test("PatternLayout message test",function(t){var layout=new log4javascript.PatternLayout("%m{1} %m{2}");t.appender.setLayout(layout);var testObj={strikers:{quick:"Marlon"}};t.logger.debug(testObj);t.assertEquals("{\r\n  strikers: [object Object]\r\n} {\r\n\  strikers: {\r\n    quick: Marlon\r\n  }\r\n}",t.appender.logMessages[0]);});s.test("Logging/grouping test",function(t){var browserConsoleAppender=new log4javascript.BrowserConsoleAppender();t.logger.addAppender(browserConsoleAppender);t.logger.trace("TEST TRACE");t.logger.debug("TEST DEBUG");t.logger.info("TEST INFO");t.logger.warn("TEST WARN");t.logger.error("TEST ERROR");t.logger.fatal("TEST FATAL");t.logger.fatal("TEST FATAL",new Error("Fake error"));t.logger.info("TEST INFO","Second message",["a","b","c"]);t.logger.group("TEST GROUP");t.logger.info("TEST INFO");t.logger.groupEnd("TEST GROUP");t.logger.info("TEST INFO");t.logger.removeAppender(browserConsoleAppender);});var testConsoleAppender=function(t,appender){var timeoutCallback=function(){return(windowLoaded?"Timed out while waiting for messages to appear":"Timed out while waiting for window to load")+". Debug messages: "+

-log4javascript.logLog.debugMessages.join("\r\n");}

-t.async(60000,timeoutCallback);var windowLoaded=false;var domChecked=false;var onLoadHandler=function(){log4javascript.logLog.debug("onLoadHandler");windowLoaded=true;var win=appender.getConsoleWindow();if(win&&win.loaded){var checkDom=function(){log4javascript.logLog.debug("checkDom");domChecked=true;var logContainer=win.logMainContainer;if(logContainer.hasChildNodes()){if(logContainer.innerHTML.indexOf("TEST MESSAGE")==-1){appender.close();t.fail("Log message not correctly logged (log container innerHTML: "+logContainer.innerHTML+")");}else{t.assert(appender.isVisible());appender.close();t.assert(!appender.isVisible());t.succeed();}}else{appender.close();t.fail("Console has no log messages");}}

-window.setTimeout(checkDom,300);}else{appender.close();t.fail("Console mistakenly raised load event");}}

-appender.addEventListener("load",onLoadHandler);t.logger.addAppender(appender);t.logger.debug("TEST MESSAGE");};s.test("InlineAppender test",function(t){var inlineAppender=new log4javascript.InlineAppender();inlineAppender.setInitiallyMinimized(false);inlineAppender.setNewestMessageAtTop(false);inlineAppender.setScrollToLatestMessage(true);inlineAppender.setWidth(600);inlineAppender.setHeight(200);testConsoleAppender(t,inlineAppender);});s.test("InPageAppender with separate console HTML file test",function(t){var inPageAppender=new log4javascript.InPageAppender();inPageAppender.setInitiallyMinimized(false);inPageAppender.setNewestMessageAtTop(false);inPageAppender.setScrollToLatestMessage(true);inPageAppender.setUseDocumentWrite(false);inPageAppender.setWidth(600);inPageAppender.setHeight(200);testConsoleAppender(t,inPageAppender);});s.test("PopUpAppender test",function(t){var popUpAppender=new log4javascript.PopUpAppender();popUpAppender.setFocusPopUp(true);popUpAppender.setUseOldPopUp(false);popUpAppender.setNewestMessageAtTop(false);popUpAppender.setScrollToLatestMessage(true);popUpAppender.setComplainAboutPopUpBlocking(false);popUpAppender.setWidth(600);popUpAppender.setHeight(200);testConsoleAppender(t,popUpAppender);});s.test("PopUpAppender with separate console HTML file test",function(t){var popUpAppender=new log4javascript.PopUpAppender();popUpAppender.setFocusPopUp(true);popUpAppender.setUseOldPopUp(false);popUpAppender.setNewestMessageAtTop(false);popUpAppender.setScrollToLatestMessage(true);popUpAppender.setComplainAboutPopUpBlocking(false);popUpAppender.setUseDocumentWrite(false);popUpAppender.setWidth(600);popUpAppender.setHeight(200);testConsoleAppender(t,popUpAppender);});});

diff --git a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite.js b/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite.js
deleted file mode 100644
index 769d78a..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite.js
+++ /dev/null
@@ -1,34 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

diff --git a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite_uncompressed.js b/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite_uncompressed.js
deleted file mode 100644
index 769d78a..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite_uncompressed.js
+++ /dev/null
@@ -1,34 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

diff --git a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_production.js b/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_production.js
deleted file mode 100644
index 11aac18..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_production.js
+++ /dev/null
@@ -1,46 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-

-function array_contains(arr,val){for(var i=0;i<arr.length;i++){if(arr[i]==val){return true;}}

-return false;}

-function compareObjectInterface(obj1,obj1_name,obj2,obj2_name,namePrefix){if(!namePrefix){namePrefix="";}

-var obj1PropertyNames=new Array();for(var i in obj1){if(i!="prototype"&&i!="arguments"){obj1PropertyNames.push(i);}}

-if(obj1&&obj1.prototype&&!array_contains(obj1PropertyNames,"prototype")){}

-for(var j=0;j<obj1PropertyNames.length;j++){var propertyName=obj1PropertyNames[j];if((typeof obj1[propertyName]=="function"||typeof obj1[propertyName]=="object")&&!(obj1[propertyName]instanceof Array)){var propertyFullyQualifiedName=(namePrefix=="")?propertyName:namePrefix+"."+propertyName;try{if(typeof obj2[propertyName]=="undefined"){throw new Error(obj2_name+" does not contain "+propertyFullyQualifiedName+" in "+obj1_name);}else if(typeof obj2[propertyName]!=typeof obj1[propertyName]){throw new Error(obj2_name+"'s "+propertyFullyQualifiedName+" is of the wrong type: "+typeof obj2[propertyName]+" when it is type "+typeof obj1[propertyName]+" in "+obj1_name);}else if(obj1[propertyName]!=Function.prototype.apply){if(!compareObjectInterface(obj1[propertyName],obj1_name,obj2[propertyName],obj2_name,propertyFullyQualifiedName)){throw new Error("Interfaces don't match");}}}catch(ex){throw new Error("Exception while checking property name "+propertyFullyQualifiedName+" in "+obj2_name+": "+ex.message);}}}

-return true;};var testLayoutWithVariables=function(layout,t){var emptyObject={};var emptyArray=[];var emptyString="";var localUndefined=emptyArray[0];var oneLevelObject={"name":"One-level object"};var twoLevelObject={"name":"Two-level object","data":oneLevelObject};var threeLevelObject={"name":"Three-level object","data":twoLevelObject};var anArray=[3,"stuff",true,false,0,null,localUndefined,3.14,function(p){return"I'm a function";},[1,"things"]];var arrayOfTestItems=[emptyObject,emptyString,emptyString,localUndefined,oneLevelObject,twoLevelObject,threeLevelObject,anArray];t.log("Testing layout "+layout)

-for(var i=0;i<arrayOfTestItems.length;i++){var ex=new Error("Test error");var loggingEvent=new log4javascript.LoggingEvent(t.logger,new Date(),log4javascript.Level.INFO,[arrayOfTestItems[i]],null);t.log("Formatting",arrayOfTestItems[i],result);var result=layout.format(loggingEvent);loggingEvent.exception=ex;t.log("Formatting with exception",arrayOfTestItems[i],result);result=layout.format(loggingEvent);}};xn.test.enableTestDebug=true;xn.test.enable_log4javascript=false;xn.test.suite("log4javascript tests",function(s){log4javascript.logLog.setQuietMode(true);var ArrayAppender=function(layout){if(layout){this.setLayout(layout);}

-this.logMessages=[];};ArrayAppender.prototype=new log4javascript.Appender();ArrayAppender.prototype.layout=new log4javascript.NullLayout();ArrayAppender.prototype.append=function(loggingEvent){var formattedMessage=this.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}

-this.logMessages.push(formattedMessage);};ArrayAppender.prototype.toString=function(){return"[ArrayAppender]";};s.setUp=function(t){t.logger=log4javascript.getLogger("test");t.logger.removeAllAppenders();t.appender=new ArrayAppender();t.logger.addAppender(t.appender);};s.tearDown=function(t){t.logger.removeAppender(t.appender);log4javascript.resetConfiguration();};s.test("Stub script interface test",function(t){try{compareObjectInterface(log4javascript,"log4javascript",log4javascript_stub,"log4javascript_stub");}catch(ex){t.fail(ex);}});s.test("Disable log4javascript test",function(t){log4javascript.setEnabled(false);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,0);log4javascript.setEnabled(true);});s.test("Array.splice test 1",function(t){var a=["Marlon","Ashley","Darius","Lloyd"];var deletedItems=a.splice(1,2);t.assertEquals(a.join(","),"Marlon,Lloyd");t.assertEquals(deletedItems.join(","),"Ashley,Darius");});s.test("Array.splice test 2",function(t){var a=["Marlon","Ashley","Darius","Lloyd"];var deletedItems=a.splice(1,1,"Malky","Jay");t.assertEquals(a.join(","),"Marlon,Malky,Jay,Darius,Lloyd");t.assertEquals(deletedItems.join(","),"Ashley");});s.test("array_remove test",function(t){var array_remove=log4javascript.evalInScope("array_remove");var a=["Marlon","Ashley","Darius"];array_remove(a,"Darius");t.assertEquals(a.join(","),"Marlon,Ashley");});s.test("array_remove with empty array test",function(t){var array_remove=log4javascript.evalInScope("array_remove");var a=[];array_remove(a,"Darius");t.assertEquals(a.join(","),"");});s.test("Logger logging test",function(t){t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,1);});s.test("Logger levels test",function(t){var originalLevel=t.logger.getEffectiveLevel();t.logger.setLevel(log4javascript.Level.INFO);t.logger.debug("TEST");t.logger.setLevel(originalLevel);t.assertEquals(t.appender.logMessages.length,0);});s.test("Logger getEffectiveLevel inheritance test 1",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");parentLogger.setLevel(log4javascript.Level.ERROR);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.ERROR);});s.test("Logger getEffectiveLevel inheritance test 2",function(t){var grandParentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2.test3");grandParentLogger.setLevel(log4javascript.Level.ERROR);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.ERROR);});s.test("Logger getEffectiveLevel inheritance test 3",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");parentLogger.setLevel(log4javascript.Level.ERROR);childLogger.setLevel(log4javascript.Level.INFO);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.INFO);});s.test("Logger getEffectiveLevel root inheritance test",function(t){var rootLogger=log4javascript.getRootLogger();var childLogger=log4javascript.getLogger("test1.test2.test3");rootLogger.setLevel(log4javascript.Level.WARN);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.WARN);});s.test("Logger null level test",function(t){t.logger.setLevel(null);t.assertEquals(t.logger.getEffectiveLevel(),log4javascript.Level.DEBUG);});s.test("Logger appender additivity test 1",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");t.assertEquals(parentLoggerAppender.logMessages.length,2);t.assertEquals(childLoggerAppender.logMessages.length,1);});s.test("Logger appender additivity test 2",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);childLogger.setAdditivity(false);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");t.assertEquals(parentLoggerAppender.logMessages.length,1);t.assertEquals(childLoggerAppender.logMessages.length,1);});s.test("Logger appender additivity test 3",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);childLogger.setAdditivity(false);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");childLogger.setAdditivity(true);childLogger.info("Child logger test message 2");t.assertEquals(parentLoggerAppender.logMessages.length,2);t.assertEquals(childLoggerAppender.logMessages.length,2);});s.test("Appender threshold test",function(t){t.appender.setThreshold(log4javascript.Level.INFO);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,0);});s.test("Basic appender / layout test",function(t){t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST");});s.test("Appender uniqueness within logger test",function(t){t.logger.addAppender(t.appender);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,1);});s.test("Logger remove appender test",function(t){t.logger.debug("TEST");t.logger.removeAppender(t.appender);t.logger.debug("TEST AGAIN");t.assertEquals(t.appender.logMessages.length,1);});s.test("",function(t){t.logger.debug("TEST");t.logger.removeAppender(t.appender);t.logger.debug("TEST AGAIN");t.assertEquals(t.appender.logMessages.length,1);});s.test("SimpleLayout format test",function(t){var layout=new log4javascript.SimpleLayout();testLayoutWithVariables(layout,t);});s.test("SimpleLayout test",function(t){t.appender.setLayout(new log4javascript.SimpleLayout());t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"DEBUG - TEST");});s.test("NullLayout format test",function(t){var layout=new log4javascript.NullLayout();testLayoutWithVariables(layout,t);});s.test("NullLayout test",function(t){t.appender.setLayout(new log4javascript.NullLayout());t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST");});s.test("XmlLayout format test",function(t){var layout=new log4javascript.XmlLayout();testLayoutWithVariables(layout,t);});s.test("XmlLayout test",function(t){t.appender.setLayout(new log4javascript.XmlLayout());t.logger.debug("TEST");t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<\/log4javascript:event>\s*$/,t.appender.logMessages[0]);});s.test("XmlLayout with exception test",function(t){t.appender.setLayout(new log4javascript.XmlLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<log4javascript:exception>\s*<!\[CDATA\[.*\]\]><\/log4javascript:exception>\s*<\/log4javascript:event>\s*$/,t.appender.logMessages[0]);});var setUpXmlLayoutMillisecondsTest=function(t){t.date=new Date();t.timeInMilliseconds=t.date.getTime();t.timeInSeconds=Math.floor(t.timeInMilliseconds/1000);t.milliseconds=t.date.getMilliseconds();t.loggingEvent=new log4javascript.LoggingEvent(t.logger,t.date,log4javascript.Level.DEBUG,["TEST"],null);t.layout=new log4javascript.XmlLayout();}

-s.test("XmlLayout seconds/milliseconds test 1",function(t){setUpXmlLayoutMillisecondsTest(t);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInMilliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,t.layout.format(t.loggingEvent));});s.test("XmlLayout seconds/milliseconds test 2",function(t){setUpXmlLayoutMillisecondsTest(t);log4javascript.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);log4javascript.setTimeStampsInMilliseconds(true);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInSeconds+'" milliseconds="'+t.milliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,formatted);});s.test("XmlLayout seconds/milliseconds test 3",function(t){setUpXmlLayoutMillisecondsTest(t);t.layout.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInSeconds+'" milliseconds="'+t.milliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,formatted);});s.test("escapeNewLines test",function(t){var escapeNewLines=log4javascript.evalInScope("escapeNewLines");var str="1\r2\n3\n4\r\n5\r6\r\n7";t.assertEquals(escapeNewLines(str),"1\\r\\n2\\r\\n3\\r\\n4\\r\\n5\\r\\n6\\r\\n7");});s.test("JsonLayout format test",function(t){var layout=new log4javascript.JsonLayout();testLayoutWithVariables(layout,t);});s.test("JsonLayout test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST");t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST"}$/,t.appender.logMessages[0]);});s.test("JsonLayout JSON validity test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST");eval("var o = "+t.appender.logMessages[0]);t.assertEquals(o.message,"TEST");});s.test("JsonLayout with number type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug(15);t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":15}$/,t.appender.logMessages[0]);});s.test("JsonLayout with object type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug({});t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"\[object Object\]"}$/,t.appender.logMessages[0]);});s.test("JsonLayout with boolean type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug(false);t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":false}$/,t.appender.logMessages[0]);});s.test("JsonLayout with quote test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TE\"S\"T");t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TE\\"S\\"T"}$/,t.appender.logMessages[0]);});s.test("JsonLayout with exception test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST","exception":.*}$/,t.appender.logMessages[0]);});var setUpJsonLayoutMillisecondsTest=function(t){t.date=new Date();t.timeInMilliseconds=t.date.getTime();t.timeInSeconds=Math.floor(t.timeInMilliseconds/1000);t.milliseconds=t.date.getMilliseconds();t.loggingEvent=new log4javascript.LoggingEvent(t.logger,t.date,log4javascript.Level.DEBUG,["TEST"],null);t.layout=new log4javascript.JsonLayout();};s.test("JsonLayout seconds/milliseconds test 1",function(t){setUpJsonLayoutMillisecondsTest(t);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInMilliseconds+',"level":"DEBUG","url":".*","message":"TEST"}$');t.assertRegexMatches(regex,t.layout.format(t.loggingEvent));});s.test("JsonLayout seconds/milliseconds test 2",function(t){setUpJsonLayoutMillisecondsTest(t);log4javascript.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);log4javascript.setTimeStampsInMilliseconds(true);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInSeconds+',"level":"DEBUG","url":".*","message":"TEST","milliseconds":'+t.milliseconds+'}$');t.assertRegexMatches(regex,formatted);});s.test("JsonLayout seconds/milliseconds test 3",function(t){setUpJsonLayoutMillisecondsTest(t);t.layout.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInSeconds+',"level":"DEBUG","url":".*","message":"TEST","milliseconds":'+t.milliseconds+'}$');t.assertRegexMatches(regex,formatted);});s.test("HttpPostDataLayout format test",function(t){var layout=new log4javascript.HttpPostDataLayout();testLayoutWithVariables(layout,t);});s.test("HttpPostDataLayout test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST");t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST$/,t.appender.logMessages[0]);});s.test("HttpPostDataLayout URL encoding test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST +\"1\"");t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST%20%2B%221%22$/,t.appender.logMessages[0]);});s.test("HttpPostDataLayout with exception test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST&exception=.*$/,t.appender.logMessages[0]);});(function(){var formatObjectExpansion=log4javascript.evalInScope("formatObjectExpansion");var newLine=log4javascript.evalInScope("newLine");var arr=[null,undefined,1.2,"A string",[1,"test"],{a:{b:1}}];s.test("Basic formatObjectExpansion array test (depth: 1)",function(t){t.assertEquals(formatObjectExpansion(arr,1),"["+newLine+"  null,"+newLine+"  undefined,"+newLine+"  1.2,"+newLine+"  A string,"+newLine+"  1,test,"+newLine+"  [object Object]"+newLine+"]");});s.test("Basic formatObjectExpansion array test (depth: 2)",function(t){t.assertEquals(formatObjectExpansion(arr,2),"["+newLine+"  null,"+newLine+"  undefined,"+newLine+"  1.2,"+newLine+"  A string,"+newLine+"  ["+newLine+"    1,"+newLine+"    test"+newLine+"  ],"+newLine+"  {"+newLine+"    a: [object Object]"+newLine+"  }"+newLine+"]");});s.test("formatObjectExpansion simple object test",function(t){var obj={STRING:"A string"};t.assertEquals(formatObjectExpansion(obj,1),"{"+newLine+"  STRING: A string"+newLine+"}");});s.test("formatObjectExpansion simple circular object test",function(t){var obj={};obj.a=obj;t.assertEquals(formatObjectExpansion(obj,2),"{"+newLine+"  a: [object Object] [already expanded]"+newLine+"}");});})();var getSampleDate=function(){var date=new Date();date.setFullYear(2006);date.setMonth(7);date.setDate(30);date.setHours(15);date.setMinutes(38);date.setSeconds(45);return date;};s.test("String.replace test",function(t){t.assertEquals("Hello world".replace(/o/g,"Z"),"HellZ wZrld");});s.test("PatternLayout format test",function(t){var layout=new log4javascript.PatternLayout();testLayoutWithVariables(layout,t);});s.test("PatternLayout dates test",function(t){var layout=new log4javascript.PatternLayout("%d %d{DATE} %d{HH:ss}");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertRegexMatches(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} \d{2} [A-Z][a-z]{2} \d{4} \d{2}:\d{2}:\d{2},\d{3} \d{2}:\d{2}$/,t.appender.logMessages[0]);});s.test("PatternLayout modifiers test",function(t){var layout=new log4javascript.PatternLayout("%m|%3m|%-3m|%6m|%-6m|%.2m|%1.2m|%6.8m|%-1.2m|%-6.8m|");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST|TEST|TEST|  TEST|TEST  |ST|ST|  TEST|ST|TEST  |");});s.test("PatternLayout conversion characters test",function(t){var layout=new log4javascript.PatternLayout("%c %n %p %r literal %%");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertRegexMatches(/^test \s+ DEBUG \d+ literal %$/,t.appender.logMessages[0]);});s.test("PatternLayout message test",function(t){var layout=new log4javascript.PatternLayout("%m{1} %m{2}");t.appender.setLayout(layout);var testObj={strikers:{quick:"Marlon"}};t.logger.debug(testObj);t.assertEquals("{\r\n  strikers: [object Object]\r\n} {\r\n\  strikers: {\r\n    quick: Marlon\r\n  }\r\n}",t.appender.logMessages[0]);});});

diff --git a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_production_uncompressed.js b/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_production_uncompressed.js
deleted file mode 100644
index 9f54f1d..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_production_uncompressed.js
+++ /dev/null
@@ -1,746 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-function array_contains(arr, val) {

-	for (var i = 0; i < arr.length; i++) {

-		if (arr[i] == val) {

-			return true;

-		}

-	}

-	return false;

-}

-

-// Recursively checks that obj2's interface contains all of obj1's

-// interface (functions and objects only)

-function compareObjectInterface(obj1, obj1_name, obj2, obj2_name, namePrefix) {

-	if (!namePrefix) {

-		namePrefix = "";

-	}

-	var obj1PropertyNames = new Array();

-	for (var i in obj1) {

-		if (i != "prototype" && i != "arguments") {

-			obj1PropertyNames.push(i);

-		}

-	}

-	if (obj1 && obj1.prototype && !array_contains(obj1PropertyNames, "prototype")) {

-		//obj1PropertyNames.push("prototype");

-	}

-	for (var j = 0; j < obj1PropertyNames.length; j++) {

-		var propertyName = obj1PropertyNames[j];

-		if ((typeof obj1[propertyName] == "function" || typeof obj1[propertyName] == "object") && !(obj1[propertyName] instanceof Array)) {

-			var propertyFullyQualifiedName = (namePrefix == "") ? propertyName : namePrefix + "." + propertyName;

-			try {

-				if (typeof obj2[propertyName] == "undefined") {

-					throw new Error(obj2_name + " does not contain " + propertyFullyQualifiedName + " in " + obj1_name);

-				} else if (typeof obj2[propertyName] != typeof obj1[propertyName]){

-					throw new Error(obj2_name + "'s " + propertyFullyQualifiedName + " is of the wrong type: " + typeof obj2[propertyName] + " when it is type " + typeof obj1[propertyName] + " in " + obj1_name);

-				} else if (obj1[propertyName] != Function.prototype.apply) {

-					if (!compareObjectInterface(obj1[propertyName], obj1_name, obj2[propertyName], obj2_name, propertyFullyQualifiedName)) {

-						throw new Error("Interfaces don't match");

-					}

-				}

-			} catch(ex) {

-				throw new Error("Exception while checking property name " + propertyFullyQualifiedName + " in " + obj2_name + ": " + ex.message);

-			}

-		}

-	}

-	return true;

-};

-

-// Simply tests a layout for exceptions when formatting

-var testLayoutWithVariables = function(layout, t) {

-	var emptyObject = {};

-	var emptyArray = [];

-	var emptyString = "";

-	var localUndefined = emptyArray[0];

-	var oneLevelObject = {

-		"name": "One-level object"

-	};

-	var twoLevelObject = {

-		"name": "Two-level object",

-		"data": oneLevelObject

-	};

-	var threeLevelObject = {

-		"name": "Three-level object",

-		"data": twoLevelObject

-	};

-	var anArray = [

-		3,

-		"stuff",

-		true,

-		false,

-		0,

-		null,

-		localUndefined,

-		3.14,

-		function(p) { return "I'm a function"; },

-		[1, "things"]

-	];

-	var arrayOfTestItems = [emptyObject, emptyString, emptyString, localUndefined, oneLevelObject,

-			twoLevelObject, threeLevelObject, anArray];

-

-	t.log("Testing layout " + layout)

-	for (var i = 0; i < arrayOfTestItems.length; i++) {

-		var ex = new Error("Test error");

-		var loggingEvent = new log4javascript.LoggingEvent(t.logger, new Date(), log4javascript.Level.INFO,

-				[arrayOfTestItems[i]], null);

-		t.log("Formatting", arrayOfTestItems[i], result);

-		var result = layout.format(loggingEvent);

-		// Now try with an exception

-		loggingEvent.exception = ex;

-		t.log("Formatting with exception", arrayOfTestItems[i], result);

-		result = layout.format(loggingEvent);

-	}

-};

-

-xn.test.enableTestDebug = true;

-xn.test.enable_log4javascript = false;

-

-xn.test.suite("log4javascript tests", function(s) {

-	log4javascript.logLog.setQuietMode(true);

-	var ArrayAppender = function(layout) {

-		if (layout) {

-			this.setLayout(layout);

-		}

-		this.logMessages = [];

-	};

-

-	ArrayAppender.prototype = new log4javascript.Appender();

-

-	ArrayAppender.prototype.layout = new log4javascript.NullLayout();

-

-	ArrayAppender.prototype.append = function(loggingEvent) {

-		var formattedMessage = this.getLayout().format(loggingEvent);

-		if (this.getLayout().ignoresThrowable()) {

-			formattedMessage += loggingEvent.getThrowableStrRep();

-		}

-		this.logMessages.push(formattedMessage);

-	};

-

-	ArrayAppender.prototype.toString = function() {

-		return "[ArrayAppender]";

-	};

-

-    s.setUp = function(t) {

-        t.logger = log4javascript.getLogger("test");

-		t.logger.removeAllAppenders();

-		t.appender = new ArrayAppender();

-        t.logger.addAppender(t.appender);

-    };

-

-    s.tearDown = function(t) {

-        t.logger.removeAppender(t.appender);

-		log4javascript.resetConfiguration();

-	};

-

-    s.test("Stub script interface test", function(t) {

-        try {

-            compareObjectInterface(log4javascript, "log4javascript", log4javascript_stub, "log4javascript_stub");

-        } catch (ex) {

-            t.fail(ex);

-        }

-    });

-

-	s.test("Disable log4javascript test", function(t) {

-		log4javascript.setEnabled(false);

-		t.logger.debug("TEST");

-		t.assertEquals(t.appender.logMessages.length, 0);

-		log4javascript.setEnabled(true);

-	});

-

-    s.test("Array.splice test 1", function(t) {

-        var a = ["Marlon", "Ashley", "Darius", "Lloyd"];

-        var deletedItems = a.splice(1, 2);

-        t.assertEquals(a.join(","), "Marlon,Lloyd");

-        t.assertEquals(deletedItems.join(","), "Ashley,Darius");

-    });

-

-    s.test("Array.splice test 2", function(t) {

-        var a = ["Marlon", "Ashley", "Darius", "Lloyd"];

-        var deletedItems = a.splice(1, 1, "Malky", "Jay");

-        t.assertEquals(a.join(","), "Marlon,Malky,Jay,Darius,Lloyd");

-        t.assertEquals(deletedItems.join(","), "Ashley");

-    });

-

-    s.test("array_remove test", function(t) {

-        var array_remove = log4javascript.evalInScope("array_remove");

-        var a = ["Marlon", "Ashley", "Darius"];

-        array_remove(a, "Darius");

-        t.assertEquals(a.join(","), "Marlon,Ashley");

-    });

-

-	s.test("array_remove with empty array test", function(t) {

-		var array_remove = log4javascript.evalInScope("array_remove");

-		var a = [];

-		array_remove(a, "Darius");

-		t.assertEquals(a.join(","), "");

-	});

-

-    s.test("Logger logging test", function(t) {

-        // Should log since the default level for loggers is DEBUG and

-        // the default threshold for appenders is ALL

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages.length, 1);

-    });

-

-    s.test("Logger levels test", function(t) {

-        var originalLevel = t.logger.getEffectiveLevel();

-        t.logger.setLevel(log4javascript.Level.INFO);

-        t.logger.debug("TEST");

-		t.logger.setLevel(originalLevel);

-        t.assertEquals(t.appender.logMessages.length, 0);

-    });

-

-	s.test("Logger getEffectiveLevel inheritance test 1", function(t) {

-		var parentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2");

-		parentLogger.setLevel(log4javascript.Level.ERROR);

-		t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.ERROR);

-	});

-

-	s.test("Logger getEffectiveLevel inheritance test 2", function(t) {

-		var grandParentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2.test3");

-		grandParentLogger.setLevel(log4javascript.Level.ERROR);

-		t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.ERROR);

-	});

-

-	s.test("Logger getEffectiveLevel inheritance test 3", function(t) {

-		var parentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2");

-		parentLogger.setLevel(log4javascript.Level.ERROR);

-		childLogger.setLevel(log4javascript.Level.INFO);

-		t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.INFO);

-	});

-

-	s.test("Logger getEffectiveLevel root inheritance test", function(t) {

-		var rootLogger = log4javascript.getRootLogger();

-		var childLogger = log4javascript.getLogger("test1.test2.test3");

-		rootLogger.setLevel(log4javascript.Level.WARN);

-		t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.WARN);

-	});

-

-	s.test("Logger null level test", function(t) {

-		t.logger.setLevel(null);

-		// Should default to root logger level, which is DEBUG

-		t.assertEquals(t.logger.getEffectiveLevel(), log4javascript.Level.DEBUG);

-	});

-

-	s.test("Logger appender additivity test 1", function(t) {

-		var parentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2");

-		var parentLoggerAppender = new ArrayAppender();

-		var childLoggerAppender = new ArrayAppender();

-

-		parentLogger.addAppender(parentLoggerAppender);

-		childLogger.addAppender(childLoggerAppender);

-

-		parentLogger.info("Parent logger test message");

-		childLogger.info("Child logger test message");

-

-		t.assertEquals(parentLoggerAppender.logMessages.length, 2);

-		t.assertEquals(childLoggerAppender.logMessages.length, 1);

-	});

-

-	s.test("Logger appender additivity test 2", function(t) {

-		var parentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2");

-		var parentLoggerAppender = new ArrayAppender();

-		var childLoggerAppender = new ArrayAppender();

-

-		parentLogger.addAppender(parentLoggerAppender);

-		childLogger.addAppender(childLoggerAppender);

-

-		childLogger.setAdditivity(false);

-

-		parentLogger.info("Parent logger test message");

-		childLogger.info("Child logger test message");

-

-		t.assertEquals(parentLoggerAppender.logMessages.length, 1);

-		t.assertEquals(childLoggerAppender.logMessages.length, 1);

-	});

-

-	s.test("Logger appender additivity test 3", function(t) {

-		var parentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2");

-		var parentLoggerAppender = new ArrayAppender();

-		var childLoggerAppender = new ArrayAppender();

-

-		parentLogger.addAppender(parentLoggerAppender);

-		childLogger.addAppender(childLoggerAppender);

-

-		childLogger.setAdditivity(false);

-

-		parentLogger.info("Parent logger test message");

-		childLogger.info("Child logger test message");

-

-		childLogger.setAdditivity(true);

-

-		childLogger.info("Child logger test message 2");

-

-		t.assertEquals(parentLoggerAppender.logMessages.length, 2);

-		t.assertEquals(childLoggerAppender.logMessages.length, 2);

-	});

-

-	s.test("Appender threshold test", function(t) {

-        t.appender.setThreshold(log4javascript.Level.INFO);

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages.length, 0);

-    });

-

-    s.test("Basic appender / layout test", function(t) {

-        t.logger.debug("TEST");

-		t.assertEquals(t.appender.logMessages[0], "TEST");

-    });

-

-	s.test("Appender uniqueness within logger test", function(t) {

-		// Add the same appender to the logger for a second time

-		t.logger.addAppender(t.appender);

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages.length, 1);

-    });

-

-	s.test("Logger remove appender test", function(t) {

-		t.logger.debug("TEST");

-		t.logger.removeAppender(t.appender);

-		t.logger.debug("TEST AGAIN");

-		t.assertEquals(t.appender.logMessages.length, 1);

-	});

-

-	s.test("", function(t) {

-		t.logger.debug("TEST");

-		t.logger.removeAppender(t.appender);

-		t.logger.debug("TEST AGAIN");

-		t.assertEquals(t.appender.logMessages.length, 1);

-	});

-	s.test("SimpleLayout format test", function(t) {

-		var layout = new log4javascript.SimpleLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("SimpleLayout test", function(t) {

-        t.appender.setLayout(new log4javascript.SimpleLayout());

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages[0], "DEBUG - TEST");

-    });

-	s.test("NullLayout format test", function(t) {

-		var layout = new log4javascript.NullLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("NullLayout test", function(t) {

-        t.appender.setLayout(new log4javascript.NullLayout());

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages[0], "TEST");

-    });

-	s.test("XmlLayout format test", function(t) {

-		var layout = new log4javascript.XmlLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("XmlLayout test", function(t) {

-        t.appender.setLayout(new log4javascript.XmlLayout());

-        t.logger.debug("TEST");

-        t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<\/log4javascript:event>\s*$/, t.appender.logMessages[0]);

-    });

-

-    s.test("XmlLayout with exception test", function(t) {

-        t.appender.setLayout(new log4javascript.XmlLayout());

-        t.logger.debug("TEST", new Error("Test error"));

-        t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<log4javascript:exception>\s*<!\[CDATA\[.*\]\]><\/log4javascript:exception>\s*<\/log4javascript:event>\s*$/, t.appender.logMessages[0]);

-    });

-

-	var setUpXmlLayoutMillisecondsTest = function(t) {

-		t.date = new Date();

-		t.timeInMilliseconds = t.date.getTime();

-		t.timeInSeconds = Math.floor(t.timeInMilliseconds / 1000);

-		t.milliseconds = t.date.getMilliseconds();

-		

-		t.loggingEvent = new log4javascript.LoggingEvent(t.logger, t.date, log4javascript.Level.DEBUG, ["TEST"], null);

-		t.layout = new log4javascript.XmlLayout();

-	}

-

-	s.test("XmlLayout seconds/milliseconds test 1", function(t) {

-		setUpXmlLayoutMillisecondsTest(t);

-

-		// Test default (i.e. timestamps in milliseconds) first

-        var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInMilliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');

-        t.assertRegexMatches(regex, t.layout.format(t.loggingEvent));

-	});

-	

-	s.test("XmlLayout seconds/milliseconds test 2", function(t) {

-		setUpXmlLayoutMillisecondsTest(t);

-

-        // Change the global setting

-        log4javascript.setTimeStampsInMilliseconds(false);

-        var formatted = t.layout.format(t.loggingEvent);

-        log4javascript.setTimeStampsInMilliseconds(true);

-        var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInSeconds + '" milliseconds="' + t.milliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');

-        t.assertRegexMatches(regex, formatted);

-	});

-

-	s.test("XmlLayout seconds/milliseconds test 3", function(t) {

-		setUpXmlLayoutMillisecondsTest(t);

-

-        // Change the layout setting

-        t.layout.setTimeStampsInMilliseconds(false);

-        var formatted = t.layout.format(t.loggingEvent);

-        var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInSeconds + '" milliseconds="' + t.milliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');

-        t.assertRegexMatches(regex, formatted);

-	});

-	s.test("escapeNewLines test", function(t) {

-		var escapeNewLines = log4javascript.evalInScope("escapeNewLines");

-		var str = "1\r2\n3\n4\r\n5\r6\r\n7";

-		t.assertEquals(escapeNewLines(str), "1\\r\\n2\\r\\n3\\r\\n4\\r\\n5\\r\\n6\\r\\n7");

-	});

-

-	s.test("JsonLayout format test", function(t) {

-		var layout = new log4javascript.JsonLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("JsonLayout test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug("TEST");

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST"}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("JsonLayout JSON validity test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug("TEST");

-        eval("var o = " + t.appender.logMessages[0]);

-        t.assertEquals(o.message, "TEST");

-    });

-

-    s.test("JsonLayout with number type message test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug(15);

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":15}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("JsonLayout with object type message test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug({});

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"\[object Object\]"}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("JsonLayout with boolean type message test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug(false);

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":false}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("JsonLayout with quote test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug("TE\"S\"T");

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TE\\"S\\"T"}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("JsonLayout with exception test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug("TEST", new Error("Test error"));

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST","exception":.*}$/, t.appender.logMessages[0]);

-    });

-

-	var setUpJsonLayoutMillisecondsTest = function(t) {

-		t.date = new Date();

-		t.timeInMilliseconds = t.date.getTime();

-		t.timeInSeconds = Math.floor(t.timeInMilliseconds / 1000);

-		t.milliseconds = t.date.getMilliseconds();

-		

-		t.loggingEvent = new log4javascript.LoggingEvent(t.logger, t.date, log4javascript.Level.DEBUG, ["TEST"], null);

-		t.layout = new log4javascript.JsonLayout();

-	};

-

-	s.test("JsonLayout seconds/milliseconds test 1", function(t) {

-		setUpJsonLayoutMillisecondsTest(t);

-

-		// Test default (i.e. timestamps in milliseconds) first

-        var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInMilliseconds + ',"level":"DEBUG","url":".*","message":"TEST"}$');

-        t.assertRegexMatches(regex, t.layout.format(t.loggingEvent));

-	});

-	

-	s.test("JsonLayout seconds/milliseconds test 2", function(t) {

-		setUpJsonLayoutMillisecondsTest(t);

-

-        // Change the global setting

-        log4javascript.setTimeStampsInMilliseconds(false);

-        var formatted = t.layout.format(t.loggingEvent);

-        log4javascript.setTimeStampsInMilliseconds(true);

-        var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInSeconds + ',"level":"DEBUG","url":".*","message":"TEST","milliseconds":' + t.milliseconds + '}$');

-        t.assertRegexMatches(regex, formatted);

-	});

-

-	s.test("JsonLayout seconds/milliseconds test 3", function(t) {

-		setUpJsonLayoutMillisecondsTest(t);

-

-        // Change the layout setting

-        t.layout.setTimeStampsInMilliseconds(false);

-        var formatted = t.layout.format(t.loggingEvent);

-        var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInSeconds + ',"level":"DEBUG","url":".*","message":"TEST","milliseconds":' + t.milliseconds + '}$');

-        t.assertRegexMatches(regex, formatted);

-	});

-	s.test("HttpPostDataLayout format test", function(t) {

-		var layout = new log4javascript.HttpPostDataLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("HttpPostDataLayout test", function(t) {

-        t.appender.setLayout(new log4javascript.HttpPostDataLayout());

-        t.logger.debug("TEST");

-        t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST$/, t.appender.logMessages[0]);

-    });

-

-    s.test("HttpPostDataLayout URL encoding test", function(t) {

-        t.appender.setLayout(new log4javascript.HttpPostDataLayout());

-        t.logger.debug("TEST +\"1\"");

-        t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST%20%2B%221%22$/, t.appender.logMessages[0]);

-    });

-

-    s.test("HttpPostDataLayout with exception test", function(t) {

-        t.appender.setLayout(new log4javascript.HttpPostDataLayout());

-        t.logger.debug("TEST", new Error("Test error"));

-        t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST&exception=.*$/, t.appender.logMessages[0]);

-    });

-

-	(function() {

-		var formatObjectExpansion = log4javascript.evalInScope("formatObjectExpansion");

-		var newLine = log4javascript.evalInScope("newLine");

-		var arr = [

-			null,

-			undefined,

-			1.2,

-			"A string",

-			[1, "test"],

-			{

-				a: {

-					b: 1

-				}

-			}

-		];

-

-		s.test("Basic formatObjectExpansion array test (depth: 1)", function(t) {

-			t.assertEquals(formatObjectExpansion(arr, 1),

-				"[" + newLine +

-				"  null," + newLine +

-				"  undefined," + newLine +

-				"  1.2," + newLine +

-				"  A string," + newLine +

-				"  1,test," + newLine +

-				"  [object Object]" + newLine +

-				"]"

-			);

-		});

-

-		s.test("Basic formatObjectExpansion array test (depth: 2)", function(t) {

-			t.assertEquals(formatObjectExpansion(arr, 2),

-				"[" + newLine +

-				"  null," + newLine +

-				"  undefined," + newLine +

-				"  1.2," + newLine +

-				"  A string," + newLine +

-				"  [" + newLine +

-				"    1," + newLine +

-				"    test" + newLine +

-				"  ]," + newLine +

-				"  {" + newLine +

-				"    a: [object Object]" + newLine +

-				"  }" + newLine +

-				"]"

-			);

-		});

-

-		s.test("formatObjectExpansion simple object test", function(t) {

-			var obj = {

-				STRING: "A string"

-			};

-			t.assertEquals(formatObjectExpansion(obj, 1), 

-				"{" + newLine +

-				"  STRING: A string" + newLine +

-				"}"

-			);

-		});

-

-		s.test("formatObjectExpansion simple circular object test", function(t) {

-			var obj = {};

-			obj.a = obj;

-			

-			t.assertEquals(formatObjectExpansion(obj, 2), 

-				"{" + newLine +

-				"  a: [object Object] [already expanded]" + newLine +

-				"}"

-			);

-		});

-	})();    /* ---------------------------------------------------------- */

-

-    var getSampleDate = function() {

-        var date = new Date();

-        date.setFullYear(2006);

-        date.setMonth(7);

-        date.setDate(30);

-        date.setHours(15);

-        date.setMinutes(38);

-        date.setSeconds(45);

-        return date;

-    };

-

-    /* ---------------------------------------------------------- */

-

-    s.test("String.replace test", function(t) {

-        t.assertEquals("Hello world".replace(/o/g, "Z"), "HellZ wZrld");

-    });

-

-	s.test("PatternLayout format test", function(t) {

-		var layout = new log4javascript.PatternLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("PatternLayout dates test", function(t) {

-        var layout = new log4javascript.PatternLayout("%d %d{DATE} %d{HH:ss}");

-        t.appender.setLayout(layout);

-        t.logger.debug("TEST");

-        t.assertRegexMatches(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} \d{2} [A-Z][a-z]{2} \d{4} \d{2}:\d{2}:\d{2},\d{3} \d{2}:\d{2}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("PatternLayout modifiers test", function(t) {

-        var layout = new log4javascript.PatternLayout("%m|%3m|%-3m|%6m|%-6m|%.2m|%1.2m|%6.8m|%-1.2m|%-6.8m|");

-        t.appender.setLayout(layout);

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages[0], "TEST|TEST|TEST|  TEST|TEST  |ST|ST|  TEST|ST|TEST  |");

-    });

-

-    s.test("PatternLayout conversion characters test", function(t) {

-        var layout = new log4javascript.PatternLayout("%c %n %p %r literal %%");

-        t.appender.setLayout(layout);

-        t.logger.debug("TEST");

-        t.assertRegexMatches(/^test \s+ DEBUG \d+ literal %$/, t.appender.logMessages[0]);

-    });

-

-    s.test("PatternLayout message test", function(t) {

-        var layout = new log4javascript.PatternLayout("%m{1} %m{2}");

-        t.appender.setLayout(layout);

-        var testObj = {

-            strikers: {

-                quick: "Marlon"

-            }

-        };

-        t.logger.debug(testObj);

-        t.assertEquals("{\r\n  strikers: [object Object]\r\n} {\r\n\  strikers: {\r\n    quick: Marlon\r\n  }\r\n}", t.appender.logMessages[0]);

-    });

-/*

-	s.test("AjaxAppender JsonLayout single message test", function(t) {

-		t.async(10000);

-		// Create and add an Ajax appender

-		var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");

-		ajaxAppender.setLayout(new log4javascript.JsonLayout());

-		ajaxAppender.setRequestSuccessCallback(

-			function(xmlHttp) {

-				// Response comes back as JSON array of messages logged

-				var jsonResponse = xmlHttp.responseText;

-				var arr = eval(jsonResponse);

-				t.assertEquals(arr.length, 1);

-				t.assertEquals(arr[0], "TEST");

-				t.succeed();

-			}

-		);

-		ajaxAppender.setFailCallback(

-			function(msg) {

-				t.fail(msg);

-				ajaxErrorMessage = msg;

-			}

-		);

-		t.logger.addAppender(ajaxAppender);

-		t.logger.debug("TEST");

-	});

-

-	s.test("AjaxAppender JsonLayout batched messages test", function(t) {

-		t.async(10000);

-		var message1 = "TEST 1";

-		var message2 = "String with \"lots of 'quotes'\" + plusses in";

-		var message3 = "A non-threatening string";

-		// Create and add an Ajax appender

-		var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");

-		ajaxAppender.setLayout(new log4javascript.JsonLayout());

-		ajaxAppender.setBatchSize(3);

-		ajaxAppender.setRequestSuccessCallback(

-			function(xmlHttp) {

-				// Response comes back as JSON array of messages logged

-				var jsonResponse = xmlHttp.responseText;

-				var arr = eval(jsonResponse);

-				t.assertEquals(arr.length, 3);

-				t.assertEquals(arr[0], message1);

-				t.assertEquals(arr[1], message2);

-				t.assertEquals(arr[2], message3);

-				t.succeed();

-			}

-		);

-		ajaxAppender.setFailCallback(

-			function(msg) {

-				t.fail(msg);

-				ajaxErrorMessage = msg;

-			}

-		);

-		t.logger.addAppender(ajaxAppender);

-		t.logger.debug(message1);

-		t.logger.info(message2);

-		t.logger.warn(message3);

-	});

-

-	s.test("AjaxAppender HttpPostDataLayout single message test", function(t) {

-		t.async(10000);

-		// Create and add an Ajax appender

-		var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");

-		var testMessage = "TEST +\"1\"";

-		ajaxAppender.setLayout(new log4javascript.HttpPostDataLayout());

-		ajaxAppender.setRequestSuccessCallback(

-			function(xmlHttp) {

-				// Response comes back as JSON array of messages logged

-				var jsonResponse = xmlHttp.responseText;

-				var arr = eval(jsonResponse);

-				t.assertEquals(arr.length, 1);

-				t.assertEquals(arr[0], testMessage);

-				t.succeed();

-			}

-		);

-		ajaxAppender.setFailCallback(

-			function(msg) {

-				t.fail(msg);

-				ajaxErrorMessage = msg;

-			}

-		);

-		t.logger.addAppender(ajaxAppender);

-		t.logger.debug(testMessage);

-	});

-*/

-});
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_uncompressed.js b/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_uncompressed.js
deleted file mode 100644
index d82e7d6..0000000
--- a/xos/core/static/log4javascript-1.4.6/js/tests/log4javascript_uncompressed.js
+++ /dev/null
@@ -1,880 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-function array_contains(arr, val) {

-	for (var i = 0; i < arr.length; i++) {

-		if (arr[i] == val) {

-			return true;

-		}

-	}

-	return false;

-}

-

-// Recursively checks that obj2's interface contains all of obj1's

-// interface (functions and objects only)

-function compareObjectInterface(obj1, obj1_name, obj2, obj2_name, namePrefix) {

-	if (!namePrefix) {

-		namePrefix = "";

-	}

-	var obj1PropertyNames = new Array();

-	for (var i in obj1) {

-		if (i != "prototype" && i != "arguments") {

-			obj1PropertyNames.push(i);

-		}

-	}

-	if (obj1 && obj1.prototype && !array_contains(obj1PropertyNames, "prototype")) {

-		//obj1PropertyNames.push("prototype");

-	}

-	for (var j = 0; j < obj1PropertyNames.length; j++) {

-		var propertyName = obj1PropertyNames[j];

-		if ((typeof obj1[propertyName] == "function" || typeof obj1[propertyName] == "object") && !(obj1[propertyName] instanceof Array)) {

-			var propertyFullyQualifiedName = (namePrefix == "") ? propertyName : namePrefix + "." + propertyName;

-			try {

-				if (typeof obj2[propertyName] == "undefined") {

-					throw new Error(obj2_name + " does not contain " + propertyFullyQualifiedName + " in " + obj1_name);

-				} else if (typeof obj2[propertyName] != typeof obj1[propertyName]){

-					throw new Error(obj2_name + "'s " + propertyFullyQualifiedName + " is of the wrong type: " + typeof obj2[propertyName] + " when it is type " + typeof obj1[propertyName] + " in " + obj1_name);

-				} else if (obj1[propertyName] != Function.prototype.apply) {

-					if (!compareObjectInterface(obj1[propertyName], obj1_name, obj2[propertyName], obj2_name, propertyFullyQualifiedName)) {

-						throw new Error("Interfaces don't match");

-					}

-				}

-			} catch(ex) {

-				throw new Error("Exception while checking property name " + propertyFullyQualifiedName + " in " + obj2_name + ": " + ex.message);

-			}

-		}

-	}

-	return true;

-};

-

-// Simply tests a layout for exceptions when formatting

-var testLayoutWithVariables = function(layout, t) {

-	var emptyObject = {};

-	var emptyArray = [];

-	var emptyString = "";

-	var localUndefined = emptyArray[0];

-	var oneLevelObject = {

-		"name": "One-level object"

-	};

-	var twoLevelObject = {

-		"name": "Two-level object",

-		"data": oneLevelObject

-	};

-	var threeLevelObject = {

-		"name": "Three-level object",

-		"data": twoLevelObject

-	};

-	var anArray = [

-		3,

-		"stuff",

-		true,

-		false,

-		0,

-		null,

-		localUndefined,

-		3.14,

-		function(p) { return "I'm a function"; },

-		[1, "things"]

-	];

-	var arrayOfTestItems = [emptyObject, emptyString, emptyString, localUndefined, oneLevelObject,

-			twoLevelObject, threeLevelObject, anArray];

-

-	t.log("Testing layout " + layout)

-	for (var i = 0; i < arrayOfTestItems.length; i++) {

-		var ex = new Error("Test error");

-		var loggingEvent = new log4javascript.LoggingEvent(t.logger, new Date(), log4javascript.Level.INFO,

-				[arrayOfTestItems[i]], null);

-		t.log("Formatting", arrayOfTestItems[i], result);

-		var result = layout.format(loggingEvent);

-		// Now try with an exception

-		loggingEvent.exception = ex;

-		t.log("Formatting with exception", arrayOfTestItems[i], result);

-		result = layout.format(loggingEvent);

-	}

-};

-

-xn.test.enableTestDebug = true;

-xn.test.enable_log4javascript = false;

-

-xn.test.suite("log4javascript tests", function(s) {

-	log4javascript.logLog.setQuietMode(true);

-	var ArrayAppender = function(layout) {

-		if (layout) {

-			this.setLayout(layout);

-		}

-		this.logMessages = [];

-	};

-

-	ArrayAppender.prototype = new log4javascript.Appender();

-

-	ArrayAppender.prototype.layout = new log4javascript.NullLayout();

-

-	ArrayAppender.prototype.append = function(loggingEvent) {

-		var formattedMessage = this.getLayout().format(loggingEvent);

-		if (this.getLayout().ignoresThrowable()) {

-			formattedMessage += loggingEvent.getThrowableStrRep();

-		}

-		this.logMessages.push(formattedMessage);

-	};

-

-	ArrayAppender.prototype.toString = function() {

-		return "[ArrayAppender]";

-	};

-

-    s.setUp = function(t) {

-        t.logger = log4javascript.getLogger("test");

-		t.logger.removeAllAppenders();

-		t.appender = new ArrayAppender();

-        t.logger.addAppender(t.appender);

-    };

-

-    s.tearDown = function(t) {

-        t.logger.removeAppender(t.appender);

-		log4javascript.resetConfiguration();

-	};

-

-    s.test("Stub script interface test", function(t) {

-        try {

-            compareObjectInterface(log4javascript, "log4javascript", log4javascript_stub, "log4javascript_stub");

-        } catch (ex) {

-            t.fail(ex);

-        }

-    });

-

-	s.test("Disable log4javascript test", function(t) {

-		log4javascript.setEnabled(false);

-		t.logger.debug("TEST");

-		t.assertEquals(t.appender.logMessages.length, 0);

-		log4javascript.setEnabled(true);

-	});

-

-    s.test("Array.splice test 1", function(t) {

-        var a = ["Marlon", "Ashley", "Darius", "Lloyd"];

-        var deletedItems = a.splice(1, 2);

-        t.assertEquals(a.join(","), "Marlon,Lloyd");

-        t.assertEquals(deletedItems.join(","), "Ashley,Darius");

-    });

-

-    s.test("Array.splice test 2", function(t) {

-        var a = ["Marlon", "Ashley", "Darius", "Lloyd"];

-        var deletedItems = a.splice(1, 1, "Malky", "Jay");

-        t.assertEquals(a.join(","), "Marlon,Malky,Jay,Darius,Lloyd");

-        t.assertEquals(deletedItems.join(","), "Ashley");

-    });

-

-    s.test("array_remove test", function(t) {

-        var array_remove = log4javascript.evalInScope("array_remove");

-        var a = ["Marlon", "Ashley", "Darius"];

-        array_remove(a, "Darius");

-        t.assertEquals(a.join(","), "Marlon,Ashley");

-    });

-

-	s.test("array_remove with empty array test", function(t) {

-		var array_remove = log4javascript.evalInScope("array_remove");

-		var a = [];

-		array_remove(a, "Darius");

-		t.assertEquals(a.join(","), "");

-	});

-

-    s.test("Logger logging test", function(t) {

-        // Should log since the default level for loggers is DEBUG and

-        // the default threshold for appenders is ALL

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages.length, 1);

-    });

-

-    s.test("Logger levels test", function(t) {

-        var originalLevel = t.logger.getEffectiveLevel();

-        t.logger.setLevel(log4javascript.Level.INFO);

-        t.logger.debug("TEST");

-		t.logger.setLevel(originalLevel);

-        t.assertEquals(t.appender.logMessages.length, 0);

-    });

-

-	s.test("Logger getEffectiveLevel inheritance test 1", function(t) {

-		var parentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2");

-		parentLogger.setLevel(log4javascript.Level.ERROR);

-		t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.ERROR);

-	});

-

-	s.test("Logger getEffectiveLevel inheritance test 2", function(t) {

-		var grandParentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2.test3");

-		grandParentLogger.setLevel(log4javascript.Level.ERROR);

-		t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.ERROR);

-	});

-

-	s.test("Logger getEffectiveLevel inheritance test 3", function(t) {

-		var parentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2");

-		parentLogger.setLevel(log4javascript.Level.ERROR);

-		childLogger.setLevel(log4javascript.Level.INFO);

-		t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.INFO);

-	});

-

-	s.test("Logger getEffectiveLevel root inheritance test", function(t) {

-		var rootLogger = log4javascript.getRootLogger();

-		var childLogger = log4javascript.getLogger("test1.test2.test3");

-		rootLogger.setLevel(log4javascript.Level.WARN);

-		t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.WARN);

-	});

-

-	s.test("Logger null level test", function(t) {

-		t.logger.setLevel(null);

-		// Should default to root logger level, which is DEBUG

-		t.assertEquals(t.logger.getEffectiveLevel(), log4javascript.Level.DEBUG);

-	});

-

-	s.test("Logger appender additivity test 1", function(t) {

-		var parentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2");

-		var parentLoggerAppender = new ArrayAppender();

-		var childLoggerAppender = new ArrayAppender();

-

-		parentLogger.addAppender(parentLoggerAppender);

-		childLogger.addAppender(childLoggerAppender);

-

-		parentLogger.info("Parent logger test message");

-		childLogger.info("Child logger test message");

-

-		t.assertEquals(parentLoggerAppender.logMessages.length, 2);

-		t.assertEquals(childLoggerAppender.logMessages.length, 1);

-	});

-

-	s.test("Logger appender additivity test 2", function(t) {

-		var parentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2");

-		var parentLoggerAppender = new ArrayAppender();

-		var childLoggerAppender = new ArrayAppender();

-

-		parentLogger.addAppender(parentLoggerAppender);

-		childLogger.addAppender(childLoggerAppender);

-

-		childLogger.setAdditivity(false);

-

-		parentLogger.info("Parent logger test message");

-		childLogger.info("Child logger test message");

-

-		t.assertEquals(parentLoggerAppender.logMessages.length, 1);

-		t.assertEquals(childLoggerAppender.logMessages.length, 1);

-	});

-

-	s.test("Logger appender additivity test 3", function(t) {

-		var parentLogger = log4javascript.getLogger("test1");

-		var childLogger = log4javascript.getLogger("test1.test2");

-		var parentLoggerAppender = new ArrayAppender();

-		var childLoggerAppender = new ArrayAppender();

-

-		parentLogger.addAppender(parentLoggerAppender);

-		childLogger.addAppender(childLoggerAppender);

-

-		childLogger.setAdditivity(false);

-

-		parentLogger.info("Parent logger test message");

-		childLogger.info("Child logger test message");

-

-		childLogger.setAdditivity(true);

-

-		childLogger.info("Child logger test message 2");

-

-		t.assertEquals(parentLoggerAppender.logMessages.length, 2);

-		t.assertEquals(childLoggerAppender.logMessages.length, 2);

-	});

-

-	s.test("Appender threshold test", function(t) {

-        t.appender.setThreshold(log4javascript.Level.INFO);

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages.length, 0);

-    });

-

-    s.test("Basic appender / layout test", function(t) {

-        t.logger.debug("TEST");

-		t.assertEquals(t.appender.logMessages[0], "TEST");

-    });

-

-	s.test("Appender uniqueness within logger test", function(t) {

-		// Add the same appender to the logger for a second time

-		t.logger.addAppender(t.appender);

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages.length, 1);

-    });

-

-	s.test("Logger remove appender test", function(t) {

-		t.logger.debug("TEST");

-		t.logger.removeAppender(t.appender);

-		t.logger.debug("TEST AGAIN");

-		t.assertEquals(t.appender.logMessages.length, 1);

-	});

-

-	s.test("", function(t) {

-		t.logger.debug("TEST");

-		t.logger.removeAppender(t.appender);

-		t.logger.debug("TEST AGAIN");

-		t.assertEquals(t.appender.logMessages.length, 1);

-	});

-	s.test("SimpleLayout format test", function(t) {

-		var layout = new log4javascript.SimpleLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("SimpleLayout test", function(t) {

-        t.appender.setLayout(new log4javascript.SimpleLayout());

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages[0], "DEBUG - TEST");

-    });

-	s.test("NullLayout format test", function(t) {

-		var layout = new log4javascript.NullLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("NullLayout test", function(t) {

-        t.appender.setLayout(new log4javascript.NullLayout());

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages[0], "TEST");

-    });

-	s.test("XmlLayout format test", function(t) {

-		var layout = new log4javascript.XmlLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("XmlLayout test", function(t) {

-        t.appender.setLayout(new log4javascript.XmlLayout());

-        t.logger.debug("TEST");

-        t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<\/log4javascript:event>\s*$/, t.appender.logMessages[0]);

-    });

-

-    s.test("XmlLayout with exception test", function(t) {

-        t.appender.setLayout(new log4javascript.XmlLayout());

-        t.logger.debug("TEST", new Error("Test error"));

-        t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<log4javascript:exception>\s*<!\[CDATA\[.*\]\]><\/log4javascript:exception>\s*<\/log4javascript:event>\s*$/, t.appender.logMessages[0]);

-    });

-

-	var setUpXmlLayoutMillisecondsTest = function(t) {

-		t.date = new Date();

-		t.timeInMilliseconds = t.date.getTime();

-		t.timeInSeconds = Math.floor(t.timeInMilliseconds / 1000);

-		t.milliseconds = t.date.getMilliseconds();

-		

-		t.loggingEvent = new log4javascript.LoggingEvent(t.logger, t.date, log4javascript.Level.DEBUG, ["TEST"], null);

-		t.layout = new log4javascript.XmlLayout();

-	}

-

-	s.test("XmlLayout seconds/milliseconds test 1", function(t) {

-		setUpXmlLayoutMillisecondsTest(t);

-

-		// Test default (i.e. timestamps in milliseconds) first

-        var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInMilliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');

-        t.assertRegexMatches(regex, t.layout.format(t.loggingEvent));

-	});

-	

-	s.test("XmlLayout seconds/milliseconds test 2", function(t) {

-		setUpXmlLayoutMillisecondsTest(t);

-

-        // Change the global setting

-        log4javascript.setTimeStampsInMilliseconds(false);

-        var formatted = t.layout.format(t.loggingEvent);

-        log4javascript.setTimeStampsInMilliseconds(true);

-        var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInSeconds + '" milliseconds="' + t.milliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');

-        t.assertRegexMatches(regex, formatted);

-	});

-

-	s.test("XmlLayout seconds/milliseconds test 3", function(t) {

-		setUpXmlLayoutMillisecondsTest(t);

-

-        // Change the layout setting

-        t.layout.setTimeStampsInMilliseconds(false);

-        var formatted = t.layout.format(t.loggingEvent);

-        var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInSeconds + '" milliseconds="' + t.milliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');

-        t.assertRegexMatches(regex, formatted);

-	});

-	s.test("escapeNewLines test", function(t) {

-		var escapeNewLines = log4javascript.evalInScope("escapeNewLines");

-		var str = "1\r2\n3\n4\r\n5\r6\r\n7";

-		t.assertEquals(escapeNewLines(str), "1\\r\\n2\\r\\n3\\r\\n4\\r\\n5\\r\\n6\\r\\n7");

-	});

-

-	s.test("JsonLayout format test", function(t) {

-		var layout = new log4javascript.JsonLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("JsonLayout test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug("TEST");

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST"}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("JsonLayout JSON validity test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug("TEST");

-        eval("var o = " + t.appender.logMessages[0]);

-        t.assertEquals(o.message, "TEST");

-    });

-

-    s.test("JsonLayout with number type message test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug(15);

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":15}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("JsonLayout with object type message test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug({});

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"\[object Object\]"}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("JsonLayout with boolean type message test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug(false);

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":false}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("JsonLayout with quote test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug("TE\"S\"T");

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TE\\"S\\"T"}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("JsonLayout with exception test", function(t) {

-        t.appender.setLayout(new log4javascript.JsonLayout());

-        t.logger.debug("TEST", new Error("Test error"));

-        t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST","exception":.*}$/, t.appender.logMessages[0]);

-    });

-

-	var setUpJsonLayoutMillisecondsTest = function(t) {

-		t.date = new Date();

-		t.timeInMilliseconds = t.date.getTime();

-		t.timeInSeconds = Math.floor(t.timeInMilliseconds / 1000);

-		t.milliseconds = t.date.getMilliseconds();

-		

-		t.loggingEvent = new log4javascript.LoggingEvent(t.logger, t.date, log4javascript.Level.DEBUG, ["TEST"], null);

-		t.layout = new log4javascript.JsonLayout();

-	};

-

-	s.test("JsonLayout seconds/milliseconds test 1", function(t) {

-		setUpJsonLayoutMillisecondsTest(t);

-

-		// Test default (i.e. timestamps in milliseconds) first

-        var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInMilliseconds + ',"level":"DEBUG","url":".*","message":"TEST"}$');

-        t.assertRegexMatches(regex, t.layout.format(t.loggingEvent));

-	});

-	

-	s.test("JsonLayout seconds/milliseconds test 2", function(t) {

-		setUpJsonLayoutMillisecondsTest(t);

-

-        // Change the global setting

-        log4javascript.setTimeStampsInMilliseconds(false);

-        var formatted = t.layout.format(t.loggingEvent);

-        log4javascript.setTimeStampsInMilliseconds(true);

-        var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInSeconds + ',"level":"DEBUG","url":".*","message":"TEST","milliseconds":' + t.milliseconds + '}$');

-        t.assertRegexMatches(regex, formatted);

-	});

-

-	s.test("JsonLayout seconds/milliseconds test 3", function(t) {

-		setUpJsonLayoutMillisecondsTest(t);

-

-        // Change the layout setting

-        t.layout.setTimeStampsInMilliseconds(false);

-        var formatted = t.layout.format(t.loggingEvent);

-        var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInSeconds + ',"level":"DEBUG","url":".*","message":"TEST","milliseconds":' + t.milliseconds + '}$');

-        t.assertRegexMatches(regex, formatted);

-	});

-	s.test("HttpPostDataLayout format test", function(t) {

-		var layout = new log4javascript.HttpPostDataLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("HttpPostDataLayout test", function(t) {

-        t.appender.setLayout(new log4javascript.HttpPostDataLayout());

-        t.logger.debug("TEST");

-        t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST$/, t.appender.logMessages[0]);

-    });

-

-    s.test("HttpPostDataLayout URL encoding test", function(t) {

-        t.appender.setLayout(new log4javascript.HttpPostDataLayout());

-        t.logger.debug("TEST +\"1\"");

-        t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST%20%2B%221%22$/, t.appender.logMessages[0]);

-    });

-

-    s.test("HttpPostDataLayout with exception test", function(t) {

-        t.appender.setLayout(new log4javascript.HttpPostDataLayout());

-        t.logger.debug("TEST", new Error("Test error"));

-        t.assertRegexMatches(/^logger=test&timestamp=\d+&level=DEBUG&url=.*&message=TEST&exception=.*$/, t.appender.logMessages[0]);

-    });

-

-	(function() {

-		var formatObjectExpansion = log4javascript.evalInScope("formatObjectExpansion");

-		var newLine = log4javascript.evalInScope("newLine");

-		var arr = [

-			null,

-			undefined,

-			1.2,

-			"A string",

-			[1, "test"],

-			{

-				a: {

-					b: 1

-				}

-			}

-		];

-

-		s.test("Basic formatObjectExpansion array test (depth: 1)", function(t) {

-			t.assertEquals(formatObjectExpansion(arr, 1),

-				"[" + newLine +

-				"  null," + newLine +

-				"  undefined," + newLine +

-				"  1.2," + newLine +

-				"  A string," + newLine +

-				"  1,test," + newLine +

-				"  [object Object]" + newLine +

-				"]"

-			);

-		});

-

-		s.test("Basic formatObjectExpansion array test (depth: 2)", function(t) {

-			t.assertEquals(formatObjectExpansion(arr, 2),

-				"[" + newLine +

-				"  null," + newLine +

-				"  undefined," + newLine +

-				"  1.2," + newLine +

-				"  A string," + newLine +

-				"  [" + newLine +

-				"    1," + newLine +

-				"    test" + newLine +

-				"  ]," + newLine +

-				"  {" + newLine +

-				"    a: [object Object]" + newLine +

-				"  }" + newLine +

-				"]"

-			);

-		});

-

-		s.test("formatObjectExpansion simple object test", function(t) {

-			var obj = {

-				STRING: "A string"

-			};

-			t.assertEquals(formatObjectExpansion(obj, 1), 

-				"{" + newLine +

-				"  STRING: A string" + newLine +

-				"}"

-			);

-		});

-

-		s.test("formatObjectExpansion simple circular object test", function(t) {

-			var obj = {};

-			obj.a = obj;

-			

-			t.assertEquals(formatObjectExpansion(obj, 2), 

-				"{" + newLine +

-				"  a: [object Object] [already expanded]" + newLine +

-				"}"

-			);

-		});

-	})();    /* ---------------------------------------------------------- */

-

-    var getSampleDate = function() {

-        var date = new Date();

-        date.setFullYear(2006);

-        date.setMonth(7);

-        date.setDate(30);

-        date.setHours(15);

-        date.setMinutes(38);

-        date.setSeconds(45);

-        return date;

-    };

-

-    /* ---------------------------------------------------------- */

-

-    s.test("String.replace test", function(t) {

-        t.assertEquals("Hello world".replace(/o/g, "Z"), "HellZ wZrld");

-    });

-

-	s.test("PatternLayout format test", function(t) {

-		var layout = new log4javascript.PatternLayout();

-		testLayoutWithVariables(layout, t);

-	});

-

-    s.test("PatternLayout dates test", function(t) {

-        var layout = new log4javascript.PatternLayout("%d %d{DATE} %d{HH:ss}");

-        t.appender.setLayout(layout);

-        t.logger.debug("TEST");

-        t.assertRegexMatches(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} \d{2} [A-Z][a-z]{2} \d{4} \d{2}:\d{2}:\d{2},\d{3} \d{2}:\d{2}$/, t.appender.logMessages[0]);

-    });

-

-    s.test("PatternLayout modifiers test", function(t) {

-        var layout = new log4javascript.PatternLayout("%m|%3m|%-3m|%6m|%-6m|%.2m|%1.2m|%6.8m|%-1.2m|%-6.8m|");

-        t.appender.setLayout(layout);

-        t.logger.debug("TEST");

-        t.assertEquals(t.appender.logMessages[0], "TEST|TEST|TEST|  TEST|TEST  |ST|ST|  TEST|ST|TEST  |");

-    });

-

-    s.test("PatternLayout conversion characters test", function(t) {

-        var layout = new log4javascript.PatternLayout("%c %n %p %r literal %%");

-        t.appender.setLayout(layout);

-        t.logger.debug("TEST");

-        t.assertRegexMatches(/^test \s+ DEBUG \d+ literal %$/, t.appender.logMessages[0]);

-    });

-

-    s.test("PatternLayout message test", function(t) {

-        var layout = new log4javascript.PatternLayout("%m{1} %m{2}");

-        t.appender.setLayout(layout);

-        var testObj = {

-            strikers: {

-                quick: "Marlon"

-            }

-        };

-        t.logger.debug(testObj);

-        t.assertEquals("{\r\n  strikers: [object Object]\r\n} {\r\n\  strikers: {\r\n    quick: Marlon\r\n  }\r\n}", t.appender.logMessages[0]);

-    });

-	// Tests for exceptions when logging

-	s.test("Logging/grouping test", function(t) {

-		var browserConsoleAppender = new log4javascript.BrowserConsoleAppender();

-		t.logger.addAppender(browserConsoleAppender);

-

-		// Test each level

-		t.logger.trace("TEST TRACE");

-		t.logger.debug("TEST DEBUG");

-		t.logger.info("TEST INFO");

-		t.logger.warn("TEST WARN");

-		t.logger.error("TEST ERROR");

-		t.logger.fatal("TEST FATAL");

-		

-		// Test with exception

-		t.logger.fatal("TEST FATAL", new Error("Fake error"));

-		

-		// Test multiple messages

-		t.logger.info("TEST INFO", "Second message", ["a", "b", "c"]);

-		

-		// Test groups

-		t.logger.group("TEST GROUP");

-		t.logger.info("TEST INFO");

-		t.logger.groupEnd("TEST GROUP");

-		t.logger.info("TEST INFO");

-		

-		t.logger.removeAppender(browserConsoleAppender);

-	});

-

-/*

-	s.test("AjaxAppender JsonLayout single message test", function(t) {

-		t.async(10000);

-		// Create and add an Ajax appender

-		var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");

-		ajaxAppender.setLayout(new log4javascript.JsonLayout());

-		ajaxAppender.setRequestSuccessCallback(

-			function(xmlHttp) {

-				// Response comes back as JSON array of messages logged

-				var jsonResponse = xmlHttp.responseText;

-				var arr = eval(jsonResponse);

-				t.assertEquals(arr.length, 1);

-				t.assertEquals(arr[0], "TEST");

-				t.succeed();

-			}

-		);

-		ajaxAppender.setFailCallback(

-			function(msg) {

-				t.fail(msg);

-				ajaxErrorMessage = msg;

-			}

-		);

-		t.logger.addAppender(ajaxAppender);

-		t.logger.debug("TEST");

-	});

-

-	s.test("AjaxAppender JsonLayout batched messages test", function(t) {

-		t.async(10000);

-		var message1 = "TEST 1";

-		var message2 = "String with \"lots of 'quotes'\" + plusses in";

-		var message3 = "A non-threatening string";

-		// Create and add an Ajax appender

-		var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");

-		ajaxAppender.setLayout(new log4javascript.JsonLayout());

-		ajaxAppender.setBatchSize(3);

-		ajaxAppender.setRequestSuccessCallback(

-			function(xmlHttp) {

-				// Response comes back as JSON array of messages logged

-				var jsonResponse = xmlHttp.responseText;

-				var arr = eval(jsonResponse);

-				t.assertEquals(arr.length, 3);

-				t.assertEquals(arr[0], message1);

-				t.assertEquals(arr[1], message2);

-				t.assertEquals(arr[2], message3);

-				t.succeed();

-			}

-		);

-		ajaxAppender.setFailCallback(

-			function(msg) {

-				t.fail(msg);

-				ajaxErrorMessage = msg;

-			}

-		);

-		t.logger.addAppender(ajaxAppender);

-		t.logger.debug(message1);

-		t.logger.info(message2);

-		t.logger.warn(message3);

-	});

-

-	s.test("AjaxAppender HttpPostDataLayout single message test", function(t) {

-		t.async(10000);

-		// Create and add an Ajax appender

-		var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");

-		var testMessage = "TEST +\"1\"";

-		ajaxAppender.setLayout(new log4javascript.HttpPostDataLayout());

-		ajaxAppender.setRequestSuccessCallback(

-			function(xmlHttp) {

-				// Response comes back as JSON array of messages logged

-				var jsonResponse = xmlHttp.responseText;

-				var arr = eval(jsonResponse);

-				t.assertEquals(arr.length, 1);

-				t.assertEquals(arr[0], testMessage);

-				t.succeed();

-			}

-		);

-		ajaxAppender.setFailCallback(

-			function(msg) {

-				t.fail(msg);

-				ajaxErrorMessage = msg;

-			}

-		);

-		t.logger.addAppender(ajaxAppender);

-		t.logger.debug(testMessage);

-	});

-*/

-	var testConsoleAppender = function(t, appender) {

-		var timeoutCallback = function() {

-			//alert("Failed. Debug messages follow.");

-			//log4javascript.logLog.displayDebug();

-			return (windowLoaded ? "Timed out while waiting for messages to appear" :

-				   "Timed out while waiting for window to load") + ". Debug messages: " +

-				   log4javascript.logLog.debugMessages.join("\r\n");

-		}

-

-		t.async(60000, timeoutCallback);

-

-		var windowLoaded = false;

-		var domChecked = false;

-

-		// Set a timeout to allow the pop-up to appear

-		var onLoadHandler = function() {

-			log4javascript.logLog.debug("onLoadHandler");

-			windowLoaded = true;

-			var win = appender.getConsoleWindow();

-

-			if (win && win.loaded) {

-				// Check that the log container element contains the log message. Since

-				// the console window waits 100 milliseconds before actually rendering the

-				// message as a DOM element, we need to use a timer

-				var checkDom = function() {

-					log4javascript.logLog.debug("checkDom");

-					domChecked = true;

-					var logContainer = win.logMainContainer;

-					if (logContainer.hasChildNodes()) {

-						if (logContainer.innerHTML.indexOf("TEST MESSAGE") == -1) {

-							appender.close();

-							t.fail("Log message not correctly logged (log container innerHTML: " + logContainer.innerHTML + ")");

-						} else {

-							t.assert(appender.isVisible());

-							appender.close();

-							t.assert(!appender.isVisible());

-							t.succeed();

-						}

-					} else {

-						appender.close();

-						t.fail("Console has no log messages");

-					}

-				}

-				window.setTimeout(checkDom, 300);

-			} else {

-				appender.close();

-				t.fail("Console mistakenly raised load event");

-			}

-		}

-

-		appender.addEventListener("load", onLoadHandler);

-		t.logger.addAppender(appender);

-		t.logger.debug("TEST MESSAGE");

-	};

-

-	s.test("InlineAppender test", function(t) {

-		var inlineAppender = new log4javascript.InlineAppender();

-		inlineAppender.setInitiallyMinimized(false);

-		inlineAppender.setNewestMessageAtTop(false);

-		inlineAppender.setScrollToLatestMessage(true);

-		inlineAppender.setWidth(600);

-		inlineAppender.setHeight(200);

-

-		testConsoleAppender(t, inlineAppender);

-	});

-

-	s.test("InPageAppender with separate console HTML file test", function(t) {

-		var inPageAppender = new log4javascript.InPageAppender();

-		inPageAppender.setInitiallyMinimized(false);

-		inPageAppender.setNewestMessageAtTop(false);

-		inPageAppender.setScrollToLatestMessage(true);

-		inPageAppender.setUseDocumentWrite(false);

-		inPageAppender.setWidth(600);

-		inPageAppender.setHeight(200);

-

-		testConsoleAppender(t, inPageAppender);

-	});

-

-	s.test("PopUpAppender test", function(t) {

-		var popUpAppender = new log4javascript.PopUpAppender();

-		popUpAppender.setFocusPopUp(true);

-		popUpAppender.setUseOldPopUp(false);

-		popUpAppender.setNewestMessageAtTop(false);

-		popUpAppender.setScrollToLatestMessage(true);

-		popUpAppender.setComplainAboutPopUpBlocking(false);

-		popUpAppender.setWidth(600);

-		popUpAppender.setHeight(200);

-

-		testConsoleAppender(t, popUpAppender);

-		

-		

-	});

-

-	s.test("PopUpAppender with separate console HTML file test", function(t) {

-		var popUpAppender = new log4javascript.PopUpAppender();

-		popUpAppender.setFocusPopUp(true);

-		popUpAppender.setUseOldPopUp(false);

-		popUpAppender.setNewestMessageAtTop(false);

-		popUpAppender.setScrollToLatestMessage(true);

-		popUpAppender.setComplainAboutPopUpBlocking(false);

-		popUpAppender.setUseDocumentWrite(false);

-		popUpAppender.setWidth(600);

-		popUpAppender.setHeight(200);

-

-		testConsoleAppender(t, popUpAppender);

-	});

-});
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/license.txt b/xos/core/static/log4javascript-1.4.6/license.txt
deleted file mode 100644
index 29f81d8..0000000
--- a/xos/core/static/log4javascript-1.4.6/license.txt
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License

-                           Version 2.0, January 2004

-                        http://www.apache.org/licenses/

-

-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

-

-   1. Definitions.

-

-      "License" shall mean the terms and conditions for use, reproduction,

-      and distribution as defined by Sections 1 through 9 of this document.

-

-      "Licensor" shall mean the copyright owner or entity authorized by

-      the copyright owner that is granting the License.

-

-      "Legal Entity" shall mean the union of the acting entity and all

-      other entities that control, are controlled by, or are under common

-      control with that entity. For the purposes of this definition,

-      "control" means (i) the power, direct or indirect, to cause the

-      direction or management of such entity, whether by contract or

-      otherwise, or (ii) ownership of fifty percent (50%) or more of the

-      outstanding shares, or (iii) beneficial ownership of such entity.

-

-      "You" (or "Your") shall mean an individual or Legal Entity

-      exercising permissions granted by this License.

-

-      "Source" form shall mean the preferred form for making modifications,

-      including but not limited to software source code, documentation

-      source, and configuration files.

-

-      "Object" form shall mean any form resulting from mechanical

-      transformation or translation of a Source form, including but

-      not limited to compiled object code, generated documentation,

-      and conversions to other media types.

-

-      "Work" shall mean the work of authorship, whether in Source or

-      Object form, made available under the License, as indicated by a

-      copyright notice that is included in or attached to the work

-      (an example is provided in the Appendix below).

-

-      "Derivative Works" shall mean any work, whether in Source or Object

-      form, that is based on (or derived from) the Work and for which the

-      editorial revisions, annotations, elaborations, or other modifications

-      represent, as a whole, an original work of authorship. For the purposes

-      of this License, Derivative Works shall not include works that remain

-      separable from, or merely link (or bind by name) to the interfaces of,

-      the Work and Derivative Works thereof.

-

-      "Contribution" shall mean any work of authorship, including

-      the original version of the Work and any modifications or additions

-      to that Work or Derivative Works thereof, that is intentionally

-      submitted to Licensor for inclusion in the Work by the copyright owner

-      or by an individual or Legal Entity authorized to submit on behalf of

-      the copyright owner. For the purposes of this definition, "submitted"

-      means any form of electronic, verbal, or written communication sent

-      to the Licensor or its representatives, including but not limited to

-      communication on electronic mailing lists, source code control systems,

-      and issue tracking systems that are managed by, or on behalf of, the

-      Licensor for the purpose of discussing and improving the Work, but

-      excluding communication that is conspicuously marked or otherwise

-      designated in writing by the copyright owner as "Not a Contribution."

-

-      "Contributor" shall mean Licensor and any individual or Legal Entity

-      on behalf of whom a Contribution has been received by Licensor and

-      subsequently incorporated within the Work.

-

-   2. Grant of Copyright License. Subject to the terms and conditions of

-      this License, each Contributor hereby grants to You a perpetual,

-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable

-      copyright license to reproduce, prepare Derivative Works of,

-      publicly display, publicly perform, sublicense, and distribute the

-      Work and such Derivative Works in Source or Object form.

-

-   3. Grant of Patent License. Subject to the terms and conditions of

-      this License, each Contributor hereby grants to You a perpetual,

-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable

-      (except as stated in this section) patent license to make, have made,

-      use, offer to sell, sell, import, and otherwise transfer the Work,

-      where such license applies only to those patent claims licensable

-      by such Contributor that are necessarily infringed by their

-      Contribution(s) alone or by combination of their Contribution(s)

-      with the Work to which such Contribution(s) was submitted. If You

-      institute patent litigation against any entity (including a

-      cross-claim or counterclaim in a lawsuit) alleging that the Work

-      or a Contribution incorporated within the Work constitutes direct

-      or contributory patent infringement, then any patent licenses

-      granted to You under this License for that Work shall terminate

-      as of the date such litigation is filed.

-

-   4. Redistribution. You may reproduce and distribute copies of the

-      Work or Derivative Works thereof in any medium, with or without

-      modifications, and in Source or Object form, provided that You

-      meet the following conditions:

-

-      (a) You must give any other recipients of the Work or

-          Derivative Works a copy of this License; and

-

-      (b) You must cause any modified files to carry prominent notices

-          stating that You changed the files; and

-

-      (c) You must retain, in the Source form of any Derivative Works

-          that You distribute, all copyright, patent, trademark, and

-          attribution notices from the Source form of the Work,

-          excluding those notices that do not pertain to any part of

-          the Derivative Works; and

-

-      (d) If the Work includes a "NOTICE" text file as part of its

-          distribution, then any Derivative Works that You distribute must

-          include a readable copy of the attribution notices contained

-          within such NOTICE file, excluding those notices that do not

-          pertain to any part of the Derivative Works, in at least one

-          of the following places: within a NOTICE text file distributed

-          as part of the Derivative Works; within the Source form or

-          documentation, if provided along with the Derivative Works; or,

-          within a display generated by the Derivative Works, if and

-          wherever such third-party notices normally appear. The contents

-          of the NOTICE file are for informational purposes only and

-          do not modify the License. You may add Your own attribution

-          notices within Derivative Works that You distribute, alongside

-          or as an addendum to the NOTICE text from the Work, provided

-          that such additional attribution notices cannot be construed

-          as modifying the License.

-

-      You may add Your own copyright statement to Your modifications and

-      may provide additional or different license terms and conditions

-      for use, reproduction, or distribution of Your modifications, or

-      for any such Derivative Works as a whole, provided Your use,

-      reproduction, and distribution of the Work otherwise complies with

-      the conditions stated in this License.

-

-   5. Submission of Contributions. Unless You explicitly state otherwise,

-      any Contribution intentionally submitted for inclusion in the Work

-      by You to the Licensor shall be under the terms and conditions of

-      this License, without any additional terms or conditions.

-      Notwithstanding the above, nothing herein shall supersede or modify

-      the terms of any separate license agreement you may have executed

-      with Licensor regarding such Contributions.

-

-   6. Trademarks. This License does not grant permission to use the trade

-      names, trademarks, service marks, or product names of the Licensor,

-      except as required for reasonable and customary use in describing the

-      origin of the Work and reproducing the content of the NOTICE file.

-

-   7. Disclaimer of Warranty. Unless required by applicable law or

-      agreed to in writing, Licensor provides the Work (and each

-      Contributor provides its Contributions) on an "AS IS" BASIS,

-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or

-      implied, including, without limitation, any warranties or conditions

-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A

-      PARTICULAR PURPOSE. You are solely responsible for determining the

-      appropriateness of using or redistributing the Work and assume any

-      risks associated with Your exercise of permissions under this License.

-

-   8. Limitation of Liability. In no event and under no legal theory,

-      whether in tort (including negligence), contract, or otherwise,

-      unless required by applicable law (such as deliberate and grossly

-      negligent acts) or agreed to in writing, shall any Contributor be

-      liable to You for damages, including any direct, indirect, special,

-      incidental, or consequential damages of any character arising as a

-      result of this License or out of the use or inability to use the

-      Work (including but not limited to damages for loss of goodwill,

-      work stoppage, computer failure or malfunction, or any and all

-      other commercial damages or losses), even if such Contributor

-      has been advised of the possibility of such damages.

-

-   9. Accepting Warranty or Additional Liability. While redistributing

-      the Work or Derivative Works thereof, You may choose to offer,

-      and charge a fee for, acceptance of support, warranty, indemnity,

-      or other liability obligations and/or rights consistent with this

-      License. However, in accepting such obligations, You may act only

-      on Your own behalf and on Your sole responsibility, not on behalf

-      of any other Contributor, and only if You agree to indemnify,

-      defend, and hold each Contributor harmless for any liability

-      incurred by, or claims asserted against, such Contributor by reason

-      of your accepting any such warranty or additional liability.

-

-   END OF TERMS AND CONDITIONS

-

-   APPENDIX: How to apply the Apache License to your work.

-

-      To apply the Apache License to your work, attach the following

-      boilerplate notice, with the fields enclosed by brackets "[]"

-      replaced with your own identifying information. (Don't include

-      the brackets!)  The text should be enclosed in the appropriate

-      comment syntax for the file format. We also recommend that a

-      file or class name and description of purpose be included on the

-      same "printed page" as the copyright notice for easier

-      identification within third-party archives.

-

-   Copyright [yyyy] [name of copyright owner]

-

-   Licensed 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.

diff --git a/xos/core/static/log4javascript-1.4.6/log4javascript.js b/xos/core/static/log4javascript-1.4.6/log4javascript.js
deleted file mode 100644
index b555b9f..0000000
--- a/xos/core/static/log4javascript-1.4.6/log4javascript.js
+++ /dev/null
@@ -1,292 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-

-if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}

-return this.length;};}

-if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}

-this.length=this.length-1;return firstItem;}};}

-if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}

-var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}

-return itemsDeleted;};}

-var log4javascript=(function(){function isUndefined(obj){return typeof obj=="undefined";}

-function EventSupport(){}

-EventSupport.prototype={eventTypes:[],eventListeners:{},setEventTypes:function(eventTypesParam){if(eventTypesParam instanceof Array){this.eventTypes=eventTypesParam;this.eventListeners={};for(var i=0,len=this.eventTypes.length;i<len;i++){this.eventListeners[this.eventTypes[i]]=[];}}else{handleError("log4javascript.EventSupport ["+this+"]: setEventTypes: eventTypes parameter must be an Array");}},addEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: addEventListener: no event called '"+eventType+"'");}

-this.eventListeners[eventType].push(listener);}else{handleError("log4javascript.EventSupport ["+this+"]: addEventListener: listener must be a function");}},removeEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: no event called '"+eventType+"'");}

-array_remove(this.eventListeners[eventType],listener);}else{handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: listener must be a function");}},dispatchEvent:function(eventType,eventArgs){if(array_contains(this.eventTypes,eventType)){var listeners=this.eventListeners[eventType];for(var i=0,len=listeners.length;i<len;i++){listeners[i](this,eventType,eventArgs);}}else{handleError("log4javascript.EventSupport ["+this+"]: dispatchEvent: no event called '"+eventType+"'");}}};var applicationStartDate=new Date();var uniqueId="log4javascript_"+applicationStartDate.getTime()+"_"+

-Math.floor(Math.random()*100000000);var emptyFunction=function(){};var newLine="\r\n";var pageLoaded=false;function Log4JavaScript(){}

-Log4JavaScript.prototype=new EventSupport();log4javascript=new Log4JavaScript();log4javascript.version="1.4.6";log4javascript.edition="log4javascript";function toStr(obj){if(obj&&obj.toString){return obj.toString();}else{return String(obj);}}

-function getExceptionMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}else{return toStr(ex);}}

-function getUrlFileName(url){var lastSlashIndex=Math.max(url.lastIndexOf("/"),url.lastIndexOf("\\"));return url.substr(lastSlashIndex+1);}

-function getExceptionStringRep(ex){if(ex){var exStr="Exception: "+getExceptionMessage(ex);try{if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber;}

-if(ex.fileName){exStr+=" in file "+getUrlFileName(ex.fileName);}}catch(localEx){logLog.warn("Unable to obtain file and line information for error");}

-if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack;}

-return exStr;}

-return null;}

-function bool(obj){return Boolean(obj);}

-function trim(str){return str.replace(/^\s+/,"").replace(/\s+$/,"");}

-function splitIntoLines(text){var text2=text.replace(/\r\n/g,"\n").replace(/\r/g,"\n");return text2.split("\n");}

-var urlEncode=(typeof window.encodeURIComponent!="undefined")?function(str){return encodeURIComponent(str);}:function(str){return escape(str).replace(/\+/g,"%2B").replace(/"/g,"%22").replace(/'/g,"%27").replace(/\//g,"%2F").replace(/=/g,"%3D");};var urlDecode=(typeof window.decodeURIComponent!="undefined")?function(str){return decodeURIComponent(str);}:function(str){return unescape(str).replace(/%2B/g,"+").replace(/%22/g,"\"").replace(/%27/g,"'").replace(/%2F/g,"/").replace(/%3D/g,"=");};function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}

-if(index>=0){arr.splice(index,1);return true;}else{return false;}}

-function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}

-return false;}

-function extractBooleanFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return bool(param);}}

-function extractStringFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return String(param);}}

-function extractIntFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{try{var value=parseInt(param,10);return isNaN(value)?defaultValue:value;}catch(ex){logLog.warn("Invalid int param "+param,ex);return defaultValue;}}}

-function extractFunctionFromParam(param,defaultValue){if(typeof param=="function"){return param;}else{return defaultValue;}}

-function isError(err){return(err instanceof Error);}

-if(!Function.prototype.apply){Function.prototype.apply=function(obj,args){var methodName="__apply__";if(typeof obj[methodName]!="undefined"){methodName+=String(Math.random()).substr(2);}

-obj[methodName]=this;var argsStrings=[];for(var i=0,len=args.length;i<len;i++){argsStrings[i]="args["+i+"]";}

-var script="obj."+methodName+"("+argsStrings.join(",")+")";var returnValue=eval(script);delete obj[methodName];return returnValue;};}

-if(!Function.prototype.call){Function.prototype.call=function(obj){var args=[];for(var i=1,len=arguments.length;i<len;i++){args[i-1]=arguments[i];}

-return this.apply(obj,args);};}

-function getListenersPropertyName(eventName){return"__log4javascript_listeners__"+eventName;}

-function addEvent(node,eventName,listener,useCapture,win){win=win?win:window;if(node.addEventListener){node.addEventListener(eventName,listener,useCapture);}else if(node.attachEvent){node.attachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(!node[propertyName]){node[propertyName]=[];node["on"+eventName]=function(evt){evt=getEvent(evt,win);var listenersPropertyName=getListenersPropertyName(eventName);var listeners=this[listenersPropertyName].concat([]);var currentListener;while((currentListener=listeners.shift())){currentListener.call(this,evt);}};}

-node[propertyName].push(listener);}}

-function removeEvent(node,eventName,listener,useCapture){if(node.removeEventListener){node.removeEventListener(eventName,listener,useCapture);}else if(node.detachEvent){node.detachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(node[propertyName]){array_remove(node[propertyName],listener);}}}

-function getEvent(evt,win){win=win?win:window;return evt?evt:win.event;}

-function stopEventPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}

-evt.returnValue=false;}

-var logLog={quietMode:false,debugMessages:[],setQuietMode:function(quietMode){this.quietMode=bool(quietMode);},numberOfErrors:0,alertAllErrors:false,setAlertAllErrors:function(alertAllErrors){this.alertAllErrors=alertAllErrors;},debug:function(message){this.debugMessages.push(message);},displayDebug:function(){alert(this.debugMessages.join(newLine));},warn:function(message,exception){},error:function(message,exception){if(++this.numberOfErrors==1||this.alertAllErrors){if(!this.quietMode){var alertMessage="log4javascript error: "+message;if(exception){alertMessage+=newLine+newLine+"Original error: "+getExceptionStringRep(exception);}

-alert(alertMessage);}}}};log4javascript.logLog=logLog;log4javascript.setEventTypes(["load","error"]);function handleError(message,exception){logLog.error(message,exception);log4javascript.dispatchEvent("error",{"message":message,"exception":exception});}

-log4javascript.handleError=handleError;var enabled=!((typeof log4javascript_disabled!="undefined")&&log4javascript_disabled);log4javascript.setEnabled=function(enable){enabled=bool(enable);};log4javascript.isEnabled=function(){return enabled;};var useTimeStampsInMilliseconds=true;log4javascript.setTimeStampsInMilliseconds=function(timeStampsInMilliseconds){useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);};log4javascript.isTimeStampsInMilliseconds=function(){return useTimeStampsInMilliseconds;};log4javascript.evalInScope=function(expr){return eval(expr);};var showStackTraces=false;log4javascript.setShowStackTraces=function(show){showStackTraces=bool(show);};var Level=function(level,name){this.level=level;this.name=name;};Level.prototype={toString:function(){return this.name;},equals:function(level){return this.level==level.level;},isGreaterOrEqual:function(level){return this.level>=level.level;}};Level.ALL=new Level(Number.MIN_VALUE,"ALL");Level.TRACE=new Level(10000,"TRACE");Level.DEBUG=new Level(20000,"DEBUG");Level.INFO=new Level(30000,"INFO");Level.WARN=new Level(40000,"WARN");Level.ERROR=new Level(50000,"ERROR");Level.FATAL=new Level(60000,"FATAL");Level.OFF=new Level(Number.MAX_VALUE,"OFF");log4javascript.Level=Level;function Timer(name,level){this.name=name;this.level=isUndefined(level)?Level.INFO:level;this.start=new Date();}

-Timer.prototype.getElapsedTime=function(){return new Date().getTime()-this.start.getTime();};var anonymousLoggerName="[anonymous]";var defaultLoggerName="[default]";var nullLoggerName="[null]";var rootLoggerName="root";function Logger(name){this.name=name;this.parent=null;this.children=[];var appenders=[];var loggerLevel=null;var isRoot=(this.name===rootLoggerName);var isNull=(this.name===nullLoggerName);var appenderCache=null;var appenderCacheInvalidated=false;this.addChild=function(childLogger){this.children.push(childLogger);childLogger.parent=this;childLogger.invalidateAppenderCache();};var additive=true;this.getAdditivity=function(){return additive;};this.setAdditivity=function(additivity){var valueChanged=(additive!=additivity);additive=additivity;if(valueChanged){this.invalidateAppenderCache();}};this.addAppender=function(appender){if(isNull){handleError("Logger.addAppender: you may not add an appender to the null logger");}else{if(appender instanceof log4javascript.Appender){if(!array_contains(appenders,appender)){appenders.push(appender);appender.setAddedToLogger(this);this.invalidateAppenderCache();}}else{handleError("Logger.addAppender: appender supplied ('"+

-toStr(appender)+"') is not a subclass of Appender");}}};this.removeAppender=function(appender){array_remove(appenders,appender);appender.setRemovedFromLogger(this);this.invalidateAppenderCache();};this.removeAllAppenders=function(){var appenderCount=appenders.length;if(appenderCount>0){for(var i=0;i<appenderCount;i++){appenders[i].setRemovedFromLogger(this);}

-appenders.length=0;this.invalidateAppenderCache();}};this.getEffectiveAppenders=function(){if(appenderCache===null||appenderCacheInvalidated){var parentEffectiveAppenders=(isRoot||!this.getAdditivity())?[]:this.parent.getEffectiveAppenders();appenderCache=parentEffectiveAppenders.concat(appenders);appenderCacheInvalidated=false;}

-return appenderCache;};this.invalidateAppenderCache=function(){appenderCacheInvalidated=true;for(var i=0,len=this.children.length;i<len;i++){this.children[i].invalidateAppenderCache();}};this.log=function(level,params){if(enabled&&level.isGreaterOrEqual(this.getEffectiveLevel())){var exception;var finalParamIndex=params.length-1;var lastParam=params[finalParamIndex];if(params.length>1&&isError(lastParam)){exception=lastParam;finalParamIndex--;}

-var messages=[];for(var i=0;i<=finalParamIndex;i++){messages[i]=params[i];}

-var loggingEvent=new LoggingEvent(this,new Date(),level,messages,exception);this.callAppenders(loggingEvent);}};this.callAppenders=function(loggingEvent){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].doAppend(loggingEvent);}};this.setLevel=function(level){if(isRoot&&level===null){handleError("Logger.setLevel: you cannot set the level of the root logger to null");}else if(level instanceof Level){loggerLevel=level;}else{handleError("Logger.setLevel: level supplied to logger "+

-this.name+" is not an instance of log4javascript.Level");}};this.getLevel=function(){return loggerLevel;};this.getEffectiveLevel=function(){for(var logger=this;logger!==null;logger=logger.parent){var level=logger.getLevel();if(level!==null){return level;}}};this.group=function(name,initiallyExpanded){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].group(name,initiallyExpanded);}}};this.groupEnd=function(){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].groupEnd();}}};var timers={};this.time=function(name,level){if(enabled){if(isUndefined(name)){handleError("Logger.time: a name for the timer must be supplied");}else if(level&&!(level instanceof Level)){handleError("Logger.time: level supplied to timer "+

-name+" is not an instance of log4javascript.Level");}else{timers[name]=new Timer(name,level);}}};this.timeEnd=function(name){if(enabled){if(isUndefined(name)){handleError("Logger.timeEnd: a name for the timer must be supplied");}else if(timers[name]){var timer=timers[name];var milliseconds=timer.getElapsedTime();this.log(timer.level,["Timer "+toStr(name)+" completed in "+milliseconds+"ms"]);delete timers[name];}else{logLog.warn("Logger.timeEnd: no timer found with name "+name);}}};this.assert=function(expr){if(enabled&&!expr){var args=[];for(var i=1,len=arguments.length;i<len;i++){args.push(arguments[i]);}

-args=(args.length>0)?args:["Assertion Failure"];args.push(newLine);args.push(expr);this.log(Level.ERROR,args);}};this.toString=function(){return"Logger["+this.name+"]";};}

-Logger.prototype={trace:function(){this.log(Level.TRACE,arguments);},debug:function(){this.log(Level.DEBUG,arguments);},info:function(){this.log(Level.INFO,arguments);},warn:function(){this.log(Level.WARN,arguments);},error:function(){this.log(Level.ERROR,arguments);},fatal:function(){this.log(Level.FATAL,arguments);},isEnabledFor:function(level){return level.isGreaterOrEqual(this.getEffectiveLevel());},isTraceEnabled:function(){return this.isEnabledFor(Level.TRACE);},isDebugEnabled:function(){return this.isEnabledFor(Level.DEBUG);},isInfoEnabled:function(){return this.isEnabledFor(Level.INFO);},isWarnEnabled:function(){return this.isEnabledFor(Level.WARN);},isErrorEnabled:function(){return this.isEnabledFor(Level.ERROR);},isFatalEnabled:function(){return this.isEnabledFor(Level.FATAL);}};Logger.prototype.trace.isEntryPoint=true;Logger.prototype.debug.isEntryPoint=true;Logger.prototype.info.isEntryPoint=true;Logger.prototype.warn.isEntryPoint=true;Logger.prototype.error.isEntryPoint=true;Logger.prototype.fatal.isEntryPoint=true;var loggers={};var loggerNames=[];var ROOT_LOGGER_DEFAULT_LEVEL=Level.DEBUG;var rootLogger=new Logger(rootLoggerName);rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);log4javascript.getRootLogger=function(){return rootLogger;};log4javascript.getLogger=function(loggerName){if(!(typeof loggerName=="string")){loggerName=anonymousLoggerName;logLog.warn("log4javascript.getLogger: non-string logger name "+

-toStr(loggerName)+" supplied, returning anonymous logger");}

-if(loggerName==rootLoggerName){handleError("log4javascript.getLogger: root logger may not be obtained by name");}

-if(!loggers[loggerName]){var logger=new Logger(loggerName);loggers[loggerName]=logger;loggerNames.push(loggerName);var lastDotIndex=loggerName.lastIndexOf(".");var parentLogger;if(lastDotIndex>-1){var parentLoggerName=loggerName.substring(0,lastDotIndex);parentLogger=log4javascript.getLogger(parentLoggerName);}else{parentLogger=rootLogger;}

-parentLogger.addChild(logger);}

-return loggers[loggerName];};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=log4javascript.getLogger(defaultLoggerName);var a=new log4javascript.PopUpAppender();defaultLogger.addAppender(a);}

-return defaultLogger;};var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=new Logger(nullLoggerName);nullLogger.setLevel(Level.OFF);}

-return nullLogger;};log4javascript.resetConfiguration=function(){rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);loggers={};};var LoggingEvent=function(logger,timeStamp,level,messages,exception){this.logger=logger;this.timeStamp=timeStamp;this.timeStampInMilliseconds=timeStamp.getTime();this.timeStampInSeconds=Math.floor(this.timeStampInMilliseconds/1000);this.milliseconds=this.timeStamp.getMilliseconds();this.level=level;this.messages=messages;this.exception=exception;};LoggingEvent.prototype={getThrowableStrRep:function(){return this.exception?getExceptionStringRep(this.exception):"";},getCombinedMessages:function(){return(this.messages.length==1)?this.messages[0]:this.messages.join(newLine);},toString:function(){return"LoggingEvent["+this.level+"]";}};log4javascript.LoggingEvent=LoggingEvent;var Layout=function(){};Layout.prototype={defaults:{loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url"},loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url",batchHeader:"",batchFooter:"",batchSeparator:"",returnsPostData:false,overrideTimeStampsSetting:false,useTimeStampsInMilliseconds:null,format:function(){handleError("Layout.format: layout supplied has no format() method");},ignoresThrowable:function(){handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");},getContentType:function(){return"text/plain";},allowBatching:function(){return true;},setTimeStampsInMilliseconds:function(timeStampsInMilliseconds){this.overrideTimeStampsSetting=true;this.useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);},isTimeStampsInMilliseconds:function(){return this.overrideTimeStampsSetting?this.useTimeStampsInMilliseconds:useTimeStampsInMilliseconds;},getTimeStampValue:function(loggingEvent){return this.isTimeStampsInMilliseconds()?loggingEvent.timeStampInMilliseconds:loggingEvent.timeStampInSeconds;},getDataValues:function(loggingEvent,combineMessages){var dataValues=[[this.loggerKey,loggingEvent.logger.name],[this.timeStampKey,this.getTimeStampValue(loggingEvent)],[this.levelKey,loggingEvent.level.name],[this.urlKey,window.location.href],[this.messageKey,combineMessages?loggingEvent.getCombinedMessages():loggingEvent.messages]];if(!this.isTimeStampsInMilliseconds()){dataValues.push([this.millisecondsKey,loggingEvent.milliseconds]);}

-if(loggingEvent.exception){dataValues.push([this.exceptionKey,getExceptionStringRep(loggingEvent.exception)]);}

-if(this.hasCustomFields()){for(var i=0,len=this.customFields.length;i<len;i++){var val=this.customFields[i].value;if(typeof val==="function"){val=val(this,loggingEvent);}

-dataValues.push([this.customFields[i].name,val]);}}

-return dataValues;},setKeys:function(loggerKey,timeStampKey,levelKey,messageKey,exceptionKey,urlKey,millisecondsKey){this.loggerKey=extractStringFromParam(loggerKey,this.defaults.loggerKey);this.timeStampKey=extractStringFromParam(timeStampKey,this.defaults.timeStampKey);this.levelKey=extractStringFromParam(levelKey,this.defaults.levelKey);this.messageKey=extractStringFromParam(messageKey,this.defaults.messageKey);this.exceptionKey=extractStringFromParam(exceptionKey,this.defaults.exceptionKey);this.urlKey=extractStringFromParam(urlKey,this.defaults.urlKey);this.millisecondsKey=extractStringFromParam(millisecondsKey,this.defaults.millisecondsKey);},setCustomField:function(name,value){var fieldUpdated=false;for(var i=0,len=this.customFields.length;i<len;i++){if(this.customFields[i].name===name){this.customFields[i].value=value;fieldUpdated=true;}}

-if(!fieldUpdated){this.customFields.push({"name":name,"value":value});}},hasCustomFields:function(){return(this.customFields.length>0);},toString:function(){handleError("Layout.toString: all layouts must override this method");}};log4javascript.Layout=Layout;var Appender=function(){};Appender.prototype=new EventSupport();Appender.prototype.layout=new PatternLayout();Appender.prototype.threshold=Level.ALL;Appender.prototype.loggers=[];Appender.prototype.doAppend=function(loggingEvent){if(enabled&&loggingEvent.level.level>=this.threshold.level){this.append(loggingEvent);}};Appender.prototype.append=function(loggingEvent){};Appender.prototype.setLayout=function(layout){if(layout instanceof Layout){this.layout=layout;}else{handleError("Appender.setLayout: layout supplied to "+

-this.toString()+" is not a subclass of Layout");}};Appender.prototype.getLayout=function(){return this.layout;};Appender.prototype.setThreshold=function(threshold){if(threshold instanceof Level){this.threshold=threshold;}else{handleError("Appender.setThreshold: threshold supplied to "+

-this.toString()+" is not a subclass of Level");}};Appender.prototype.getThreshold=function(){return this.threshold;};Appender.prototype.setAddedToLogger=function(logger){this.loggers.push(logger);};Appender.prototype.setRemovedFromLogger=function(logger){array_remove(this.loggers,logger);};Appender.prototype.group=emptyFunction;Appender.prototype.groupEnd=emptyFunction;Appender.prototype.toString=function(){handleError("Appender.toString: all appenders must override this method");};log4javascript.Appender=Appender;function SimpleLayout(){this.customFields=[];}

-SimpleLayout.prototype=new Layout();SimpleLayout.prototype.format=function(loggingEvent){return loggingEvent.level.name+" - "+loggingEvent.getCombinedMessages();};SimpleLayout.prototype.ignoresThrowable=function(){return true;};SimpleLayout.prototype.toString=function(){return"SimpleLayout";};log4javascript.SimpleLayout=SimpleLayout;function NullLayout(){this.customFields=[];}

-NullLayout.prototype=new Layout();NullLayout.prototype.format=function(loggingEvent){return loggingEvent.messages;};NullLayout.prototype.ignoresThrowable=function(){return true;};NullLayout.prototype.toString=function(){return"NullLayout";};log4javascript.NullLayout=NullLayout;function XmlLayout(combineMessages){this.combineMessages=extractBooleanFromParam(combineMessages,true);this.customFields=[];}

-XmlLayout.prototype=new Layout();XmlLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};XmlLayout.prototype.getContentType=function(){return"text/xml";};XmlLayout.prototype.escapeCdata=function(str){return str.replace(/\]\]>/,"]]>]]&gt;<![CDATA[");};XmlLayout.prototype.format=function(loggingEvent){var layout=this;var i,len;function formatMessage(message){message=(typeof message==="string")?message:toStr(message);return"<log4javascript:message><![CDATA["+

-layout.escapeCdata(message)+"]]></log4javascript:message>";}

-var str="<log4javascript:event logger=\""+loggingEvent.logger.name+"\" timestamp=\""+this.getTimeStampValue(loggingEvent)+"\"";if(!this.isTimeStampsInMilliseconds()){str+=" milliseconds=\""+loggingEvent.milliseconds+"\"";}

-str+=" level=\""+loggingEvent.level.name+"\">"+newLine;if(this.combineMessages){str+=formatMessage(loggingEvent.getCombinedMessages());}else{str+="<log4javascript:messages>"+newLine;for(i=0,len=loggingEvent.messages.length;i<len;i++){str+=formatMessage(loggingEvent.messages[i])+newLine;}

-str+="</log4javascript:messages>"+newLine;}

-if(this.hasCustomFields()){for(i=0,len=this.customFields.length;i<len;i++){str+="<log4javascript:customfield name=\""+

-this.customFields[i].name+"\"><![CDATA["+

-this.customFields[i].value.toString()+"]]></log4javascript:customfield>"+newLine;}}

-if(loggingEvent.exception){str+="<log4javascript:exception><![CDATA["+

-getExceptionStringRep(loggingEvent.exception)+"]]></log4javascript:exception>"+newLine;}

-str+="</log4javascript:event>"+newLine+newLine;return str;};XmlLayout.prototype.ignoresThrowable=function(){return false;};XmlLayout.prototype.toString=function(){return"XmlLayout";};log4javascript.XmlLayout=XmlLayout;function escapeNewLines(str){return str.replace(/\r\n|\r|\n/g,"\\r\\n");}

-function JsonLayout(readable,combineMessages){this.readable=extractBooleanFromParam(readable,false);this.combineMessages=extractBooleanFromParam(combineMessages,true);this.batchHeader=this.readable?"["+newLine:"[";this.batchFooter=this.readable?"]"+newLine:"]";this.batchSeparator=this.readable?","+newLine:",";this.setKeys();this.colon=this.readable?": ":":";this.tab=this.readable?"\t":"";this.lineBreak=this.readable?newLine:"";this.customFields=[];}

-JsonLayout.prototype=new Layout();JsonLayout.prototype.isReadable=function(){return this.readable;};JsonLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};JsonLayout.prototype.format=function(loggingEvent){var layout=this;var dataValues=this.getDataValues(loggingEvent,this.combineMessages);var str="{"+this.lineBreak;var i,len;function formatValue(val,prefix,expand){var formattedValue;var valType=typeof val;if(val instanceof Date){formattedValue=String(val.getTime());}else if(expand&&(val instanceof Array)){formattedValue="["+layout.lineBreak;for(var i=0,len=val.length;i<len;i++){var childPrefix=prefix+layout.tab;formattedValue+=childPrefix+formatValue(val[i],childPrefix,false);if(i<val.length-1){formattedValue+=",";}

-formattedValue+=layout.lineBreak;}

-formattedValue+=prefix+"]";}else if(valType!=="number"&&valType!=="boolean"){formattedValue="\""+escapeNewLines(toStr(val).replace(/\"/g,"\\\""))+"\"";}else{formattedValue=val;}

-return formattedValue;}

-for(i=0,len=dataValues.length-1;i<=len;i++){str+=this.tab+"\""+dataValues[i][0]+"\""+this.colon+formatValue(dataValues[i][1],this.tab,true);if(i<len){str+=",";}

-str+=this.lineBreak;}

-str+="}"+this.lineBreak;return str;};JsonLayout.prototype.ignoresThrowable=function(){return false;};JsonLayout.prototype.toString=function(){return"JsonLayout";};JsonLayout.prototype.getContentType=function(){return"application/json";};log4javascript.JsonLayout=JsonLayout;function HttpPostDataLayout(){this.setKeys();this.customFields=[];this.returnsPostData=true;}

-HttpPostDataLayout.prototype=new Layout();HttpPostDataLayout.prototype.allowBatching=function(){return false;};HttpPostDataLayout.prototype.format=function(loggingEvent){var dataValues=this.getDataValues(loggingEvent);var queryBits=[];for(var i=0,len=dataValues.length;i<len;i++){var val=(dataValues[i][1]instanceof Date)?String(dataValues[i][1].getTime()):dataValues[i][1];queryBits.push(urlEncode(dataValues[i][0])+"="+urlEncode(val));}

-return queryBits.join("&");};HttpPostDataLayout.prototype.ignoresThrowable=function(loggingEvent){return false;};HttpPostDataLayout.prototype.toString=function(){return"HttpPostDataLayout";};log4javascript.HttpPostDataLayout=HttpPostDataLayout;function formatObjectExpansion(obj,depth,indentation){var objectsExpanded=[];function doFormat(obj,depth,indentation){var i,j,len,childDepth,childIndentation,childLines,expansion,childExpansion;if(!indentation){indentation="";}

-function formatString(text){var lines=splitIntoLines(text);for(var j=1,jLen=lines.length;j<jLen;j++){lines[j]=indentation+lines[j];}

-return lines.join(newLine);}

-if(obj===null){return"null";}else if(typeof obj=="undefined"){return"undefined";}else if(typeof obj=="string"){return formatString(obj);}else if(typeof obj=="object"&&array_contains(objectsExpanded,obj)){try{expansion=toStr(obj);}catch(ex){expansion="Error formatting property. Details: "+getExceptionStringRep(ex);}

-return expansion+" [already expanded]";}else if((obj instanceof Array)&&depth>0){objectsExpanded.push(obj);expansion="["+newLine;childDepth=depth-1;childIndentation=indentation+"  ";childLines=[];for(i=0,len=obj.length;i<len;i++){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+childExpansion);}catch(ex){childLines.push(childIndentation+"Error formatting array member. Details: "+

-getExceptionStringRep(ex)+"");}}

-expansion+=childLines.join(","+newLine)+newLine+indentation+"]";return expansion;}else if(Object.prototype.toString.call(obj)=="[object Date]"){return obj.toString();}else if(typeof obj=="object"&&depth>0){objectsExpanded.push(obj);expansion="{"+newLine;childDepth=depth-1;childIndentation=indentation+"  ";childLines=[];for(i in obj){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+i+": "+childExpansion);}catch(ex){childLines.push(childIndentation+i+": Error formatting property. Details: "+

-getExceptionStringRep(ex));}}

-expansion+=childLines.join(","+newLine)+newLine+indentation+"}";return expansion;}else{return formatString(toStr(obj));}}

-return doFormat(obj,depth,indentation);}

-var SimpleDateFormat;(function(){var regex=/('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;var monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];var dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var TEXT2=0,TEXT3=1,NUMBER=2,YEAR=3,MONTH=4,TIMEZONE=5;var types={G:TEXT2,y:YEAR,M:MONTH,w:NUMBER,W:NUMBER,D:NUMBER,d:NUMBER,F:NUMBER,E:TEXT3,a:TEXT2,H:NUMBER,k:NUMBER,K:NUMBER,h:NUMBER,m:NUMBER,s:NUMBER,S:NUMBER,Z:TIMEZONE};var ONE_DAY=24*60*60*1000;var ONE_WEEK=7*ONE_DAY;var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK=1;var newDateAtMidnight=function(year,month,day){var d=new Date(year,month,day,0,0,0);d.setMilliseconds(0);return d;};Date.prototype.getDifference=function(date){return this.getTime()-date.getTime();};Date.prototype.isBefore=function(d){return this.getTime()<d.getTime();};Date.prototype.getUTCTime=function(){return Date.UTC(this.getFullYear(),this.getMonth(),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds(),this.getMilliseconds());};Date.prototype.getTimeSince=function(d){return this.getUTCTime()-d.getUTCTime();};Date.prototype.getPreviousSunday=function(){var midday=new Date(this.getFullYear(),this.getMonth(),this.getDate(),12,0,0);var previousSunday=new Date(midday.getTime()-this.getDay()*ONE_DAY);return newDateAtMidnight(previousSunday.getFullYear(),previousSunday.getMonth(),previousSunday.getDate());};Date.prototype.getWeekInYear=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}

-var previousSunday=this.getPreviousSunday();var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);var numberOfSundays=previousSunday.isBefore(startOfYear)?0:1+Math.floor(previousSunday.getTimeSince(startOfYear)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfYear.getDay();var weekInYear=numberOfSundays;if(numberOfDaysInFirstWeek<minimalDaysInFirstWeek){weekInYear--;}

-return weekInYear;};Date.prototype.getWeekInMonth=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}

-var previousSunday=this.getPreviousSunday();var startOfMonth=newDateAtMidnight(this.getFullYear(),this.getMonth(),1);var numberOfSundays=previousSunday.isBefore(startOfMonth)?0:1+Math.floor(previousSunday.getTimeSince(startOfMonth)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfMonth.getDay();var weekInMonth=numberOfSundays;if(numberOfDaysInFirstWeek>=minimalDaysInFirstWeek){weekInMonth++;}

-return weekInMonth;};Date.prototype.getDayInYear=function(){var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);return 1+Math.floor(this.getTimeSince(startOfYear)/ONE_DAY);};SimpleDateFormat=function(formatString){this.formatString=formatString;};SimpleDateFormat.prototype.setMinimalDaysInFirstWeek=function(days){this.minimalDaysInFirstWeek=days;};SimpleDateFormat.prototype.getMinimalDaysInFirstWeek=function(){return isUndefined(this.minimalDaysInFirstWeek)?DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK:this.minimalDaysInFirstWeek;};var padWithZeroes=function(str,len){while(str.length<len){str="0"+str;}

-return str;};var formatText=function(data,numberOfLetters,minLength){return(numberOfLetters>=4)?data:data.substr(0,Math.max(minLength,numberOfLetters));};var formatNumber=function(data,numberOfLetters){var dataString=""+data;return padWithZeroes(dataString,numberOfLetters);};SimpleDateFormat.prototype.format=function(date){var formattedString="";var result;var searchString=this.formatString;while((result=regex.exec(searchString))){var quotedString=result[1];var patternLetters=result[2];var otherLetters=result[3];var otherCharacters=result[4];if(quotedString){if(quotedString=="''"){formattedString+="'";}else{formattedString+=quotedString.substring(1,quotedString.length-1);}}else if(otherLetters){}else if(otherCharacters){formattedString+=otherCharacters;}else if(patternLetters){var patternLetter=patternLetters.charAt(0);var numberOfLetters=patternLetters.length;var rawData="";switch(patternLetter){case"G":rawData="AD";break;case"y":rawData=date.getFullYear();break;case"M":rawData=date.getMonth();break;case"w":rawData=date.getWeekInYear(this.getMinimalDaysInFirstWeek());break;case"W":rawData=date.getWeekInMonth(this.getMinimalDaysInFirstWeek());break;case"D":rawData=date.getDayInYear();break;case"d":rawData=date.getDate();break;case"F":rawData=1+Math.floor((date.getDate()-1)/7);break;case"E":rawData=dayNames[date.getDay()];break;case"a":rawData=(date.getHours()>=12)?"PM":"AM";break;case"H":rawData=date.getHours();break;case"k":rawData=date.getHours()||24;break;case"K":rawData=date.getHours()%12;break;case"h":rawData=(date.getHours()%12)||12;break;case"m":rawData=date.getMinutes();break;case"s":rawData=date.getSeconds();break;case"S":rawData=date.getMilliseconds();break;case"Z":rawData=date.getTimezoneOffset();break;}

-switch(types[patternLetter]){case TEXT2:formattedString+=formatText(rawData,numberOfLetters,2);break;case TEXT3:formattedString+=formatText(rawData,numberOfLetters,3);break;case NUMBER:formattedString+=formatNumber(rawData,numberOfLetters);break;case YEAR:if(numberOfLetters<=3){var dataString=""+rawData;formattedString+=dataString.substr(2,2);}else{formattedString+=formatNumber(rawData,numberOfLetters);}

-break;case MONTH:if(numberOfLetters>=3){formattedString+=formatText(monthNames[rawData],numberOfLetters,numberOfLetters);}else{formattedString+=formatNumber(rawData+1,numberOfLetters);}

-break;case TIMEZONE:var isPositive=(rawData>0);var prefix=isPositive?"-":"+";var absData=Math.abs(rawData);var hours=""+Math.floor(absData/60);hours=padWithZeroes(hours,2);var minutes=""+(absData%60);minutes=padWithZeroes(minutes,2);formattedString+=prefix+hours+minutes;break;}}

-searchString=searchString.substr(result.index+result[0].length);}

-return formattedString;};})();log4javascript.SimpleDateFormat=SimpleDateFormat;function PatternLayout(pattern){if(pattern){this.pattern=pattern;}else{this.pattern=PatternLayout.DEFAULT_CONVERSION_PATTERN;}

-this.customFields=[];}

-PatternLayout.TTCC_CONVERSION_PATTERN="%r %p %c - %m%n";PatternLayout.DEFAULT_CONVERSION_PATTERN="%m%n";PatternLayout.ISO8601_DATEFORMAT="yyyy-MM-dd HH:mm:ss,SSS";PatternLayout.DATETIME_DATEFORMAT="dd MMM yyyy HH:mm:ss,SSS";PatternLayout.ABSOLUTETIME_DATEFORMAT="HH:mm:ss,SSS";PatternLayout.prototype=new Layout();PatternLayout.prototype.format=function(loggingEvent){var regex=/%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;var formattedString="";var result;var searchString=this.pattern;while((result=regex.exec(searchString))){var matchedString=result[0];var padding=result[1];var truncation=result[2];var conversionCharacter=result[3];var specifier=result[5];var text=result[6];if(text){formattedString+=""+text;}else{var replacement="";switch(conversionCharacter){case"a":case"m":var depth=0;if(specifier){depth=parseInt(specifier,10);if(isNaN(depth)){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character '"+conversionCharacter+"' - should be a number");depth=0;}}

-var messages=(conversionCharacter==="a")?loggingEvent.messages[0]:loggingEvent.messages;for(var i=0,len=messages.length;i<len;i++){if(i>0&&(replacement.charAt(replacement.length-1)!==" ")){replacement+=" ";}

-if(depth===0){replacement+=messages[i];}else{replacement+=formatObjectExpansion(messages[i],depth);}}

-break;case"c":var loggerName=loggingEvent.logger.name;if(specifier){var precision=parseInt(specifier,10);var loggerNameBits=loggingEvent.logger.name.split(".");if(precision>=loggerNameBits.length){replacement=loggerName;}else{replacement=loggerNameBits.slice(loggerNameBits.length-precision).join(".");}}else{replacement=loggerName;}

-break;case"d":var dateFormat=PatternLayout.ISO8601_DATEFORMAT;if(specifier){dateFormat=specifier;if(dateFormat=="ISO8601"){dateFormat=PatternLayout.ISO8601_DATEFORMAT;}else if(dateFormat=="ABSOLUTE"){dateFormat=PatternLayout.ABSOLUTETIME_DATEFORMAT;}else if(dateFormat=="DATE"){dateFormat=PatternLayout.DATETIME_DATEFORMAT;}}

-replacement=(new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);break;case"f":if(this.hasCustomFields()){var fieldIndex=0;if(specifier){fieldIndex=parseInt(specifier,10);if(isNaN(fieldIndex)){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character 'f' - should be a number");}else if(fieldIndex===0){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character 'f' - must be greater than zero");}else if(fieldIndex>this.customFields.length){handleError("PatternLayout.format: invalid specifier '"+

-specifier+"' for conversion character 'f' - there aren't that many custom fields");}else{fieldIndex=fieldIndex-1;}}

-var val=this.customFields[fieldIndex].value;if(typeof val=="function"){val=val(this,loggingEvent);}

-replacement=val;}

-break;case"n":replacement=newLine;break;case"p":replacement=loggingEvent.level.name;break;case"r":replacement=""+loggingEvent.timeStamp.getDifference(applicationStartDate);break;case"%":replacement="%";break;default:replacement=matchedString;break;}

-var l;if(truncation){l=parseInt(truncation.substr(1),10);var strLen=replacement.length;if(l<strLen){replacement=replacement.substring(strLen-l,strLen);}}

-if(padding){if(padding.charAt(0)=="-"){l=parseInt(padding.substr(1),10);while(replacement.length<l){replacement+=" ";}}else{l=parseInt(padding,10);while(replacement.length<l){replacement=" "+replacement;}}}

-formattedString+=replacement;}

-searchString=searchString.substr(result.index+result[0].length);}

-return formattedString;};PatternLayout.prototype.ignoresThrowable=function(){return true;};PatternLayout.prototype.toString=function(){return"PatternLayout";};log4javascript.PatternLayout=PatternLayout;function AlertAppender(){}

-AlertAppender.prototype=new Appender();AlertAppender.prototype.layout=new SimpleLayout();AlertAppender.prototype.append=function(loggingEvent){var formattedMessage=this.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}

-alert(formattedMessage);};AlertAppender.prototype.toString=function(){return"AlertAppender";};log4javascript.AlertAppender=AlertAppender;function BrowserConsoleAppender(){}

-BrowserConsoleAppender.prototype=new log4javascript.Appender();BrowserConsoleAppender.prototype.layout=new NullLayout();BrowserConsoleAppender.prototype.threshold=Level.DEBUG;BrowserConsoleAppender.prototype.append=function(loggingEvent){var appender=this;var getFormattedMessage=function(){var layout=appender.getLayout();var formattedMessage=layout.format(loggingEvent);if(layout.ignoresThrowable()&&loggingEvent.exception){formattedMessage+=loggingEvent.getThrowableStrRep();}

-return formattedMessage;};if((typeof opera!="undefined")&&opera.postError){opera.postError(getFormattedMessage());}else if(window.console&&window.console.log){var formattedMesage=getFormattedMessage();if(window.console.debug&&Level.DEBUG.isGreaterOrEqual(loggingEvent.level)){window.console.debug(formattedMesage);}else if(window.console.info&&Level.INFO.equals(loggingEvent.level)){window.console.info(formattedMesage);}else if(window.console.warn&&Level.WARN.equals(loggingEvent.level)){window.console.warn(formattedMesage);}else if(window.console.error&&loggingEvent.level.isGreaterOrEqual(Level.ERROR)){window.console.error(formattedMesage);}else{window.console.log(formattedMesage);}}};BrowserConsoleAppender.prototype.group=function(name){if(window.console&&window.console.group){window.console.group(name);}};BrowserConsoleAppender.prototype.groupEnd=function(){if(window.console&&window.console.groupEnd){window.console.groupEnd();}};BrowserConsoleAppender.prototype.toString=function(){return"BrowserConsoleAppender";};log4javascript.BrowserConsoleAppender=BrowserConsoleAppender;var xmlHttpFactories=[function(){return new XMLHttpRequest();},function(){return new ActiveXObject("Msxml2.XMLHTTP");},function(){return new ActiveXObject("Microsoft.XMLHTTP");}];var getXmlHttp=function(errorHandler){var xmlHttp=null,factory;for(var i=0,len=xmlHttpFactories.length;i<len;i++){factory=xmlHttpFactories[i];try{xmlHttp=factory();getXmlHttp=factory;return xmlHttp;}catch(e){}}

-if(errorHandler){errorHandler();}else{handleError("getXmlHttp: unable to obtain XMLHttpRequest object");}};function isHttpRequestSuccessful(xmlHttp){return isUndefined(xmlHttp.status)||xmlHttp.status===0||(xmlHttp.status>=200&&xmlHttp.status<300)||xmlHttp.status==1223;}

-function AjaxAppender(url){var appender=this;var isSupported=true;if(!url){handleError("AjaxAppender: URL must be specified in constructor");isSupported=false;}

-var timed=this.defaults.timed;var waitForResponse=this.defaults.waitForResponse;var batchSize=this.defaults.batchSize;var timerInterval=this.defaults.timerInterval;var requestSuccessCallback=this.defaults.requestSuccessCallback;var failCallback=this.defaults.failCallback;var postVarName=this.defaults.postVarName;var sendAllOnUnload=this.defaults.sendAllOnUnload;var contentType=this.defaults.contentType;var sessionId=null;var queuedLoggingEvents=[];var queuedRequests=[];var headers=[];var sending=false;var initialized=false;function checkCanConfigure(configOptionName){if(initialized){handleError("AjaxAppender: configuration option '"+

-configOptionName+"' may not be set after the appender has been initialized");return false;}

-return true;}

-this.getSessionId=function(){return sessionId;};this.setSessionId=function(sessionIdParam){sessionId=extractStringFromParam(sessionIdParam,null);this.layout.setCustomField("sessionid",sessionId);};this.setLayout=function(layoutParam){if(checkCanConfigure("layout")){this.layout=layoutParam;if(sessionId!==null){this.setSessionId(sessionId);}}};this.isTimed=function(){return timed;};this.setTimed=function(timedParam){if(checkCanConfigure("timed")){timed=bool(timedParam);}};this.getTimerInterval=function(){return timerInterval;};this.setTimerInterval=function(timerIntervalParam){if(checkCanConfigure("timerInterval")){timerInterval=extractIntFromParam(timerIntervalParam,timerInterval);}};this.isWaitForResponse=function(){return waitForResponse;};this.setWaitForResponse=function(waitForResponseParam){if(checkCanConfigure("waitForResponse")){waitForResponse=bool(waitForResponseParam);}};this.getBatchSize=function(){return batchSize;};this.setBatchSize=function(batchSizeParam){if(checkCanConfigure("batchSize")){batchSize=extractIntFromParam(batchSizeParam,batchSize);}};this.isSendAllOnUnload=function(){return sendAllOnUnload;};this.setSendAllOnUnload=function(sendAllOnUnloadParam){if(checkCanConfigure("sendAllOnUnload")){sendAllOnUnload=extractBooleanFromParam(sendAllOnUnloadParam,sendAllOnUnload);}};this.setRequestSuccessCallback=function(requestSuccessCallbackParam){requestSuccessCallback=extractFunctionFromParam(requestSuccessCallbackParam,requestSuccessCallback);};this.setFailCallback=function(failCallbackParam){failCallback=extractFunctionFromParam(failCallbackParam,failCallback);};this.getPostVarName=function(){return postVarName;};this.setPostVarName=function(postVarNameParam){if(checkCanConfigure("postVarName")){postVarName=extractStringFromParam(postVarNameParam,postVarName);}};this.getHeaders=function(){return headers;};this.addHeader=function(name,value){if(name.toLowerCase()=="content-type"){contentType=value;}else{headers.push({name:name,value:value});}};function sendAll(){if(isSupported&&enabled){sending=true;var currentRequestBatch;if(waitForResponse){if(queuedRequests.length>0){currentRequestBatch=queuedRequests.shift();sendRequest(preparePostData(currentRequestBatch),sendAll);}else{sending=false;if(timed){scheduleSending();}}}else{while((currentRequestBatch=queuedRequests.shift())){sendRequest(preparePostData(currentRequestBatch));}

-sending=false;if(timed){scheduleSending();}}}}

-this.sendAll=sendAll;function sendAllRemaining(){var sendingAnything=false;if(isSupported&&enabled){var actualBatchSize=appender.getLayout().allowBatching()?batchSize:1;var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);if(queuedLoggingEvents.length>=actualBatchSize){queuedRequests.push(batchedLoggingEvents);batchedLoggingEvents=[];}}

-if(batchedLoggingEvents.length>0){queuedRequests.push(batchedLoggingEvents);}

-sendingAnything=(queuedRequests.length>0);waitForResponse=false;timed=false;sendAll();}

-return sendingAnything;}

-this.sendAllRemaining=sendAllRemaining;function preparePostData(batchedLoggingEvents){var formattedMessages=[];var currentLoggingEvent;var postData="";while((currentLoggingEvent=batchedLoggingEvents.shift())){var currentFormattedMessage=appender.getLayout().format(currentLoggingEvent);if(appender.getLayout().ignoresThrowable()){currentFormattedMessage+=currentLoggingEvent.getThrowableStrRep();}

-formattedMessages.push(currentFormattedMessage);}

-if(batchedLoggingEvents.length==1){postData=formattedMessages.join("");}else{postData=appender.getLayout().batchHeader+

-formattedMessages.join(appender.getLayout().batchSeparator)+

-appender.getLayout().batchFooter;}

-if(contentType==appender.defaults.contentType){postData=appender.getLayout().returnsPostData?postData:urlEncode(postVarName)+"="+urlEncode(postData);if(postData.length>0){postData+="&";}

-postData+="layout="+urlEncode(appender.getLayout().toString());}

-return postData;}

-function scheduleSending(){window.setTimeout(sendAll,timerInterval);}

-function xmlHttpErrorHandler(){var msg="AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}}

-function sendRequest(postData,successCallback){try{var xmlHttp=getXmlHttp(xmlHttpErrorHandler);if(isSupported){if(xmlHttp.overrideMimeType){xmlHttp.overrideMimeType(appender.getLayout().getContentType());}

-xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4){if(isHttpRequestSuccessful(xmlHttp)){if(requestSuccessCallback){requestSuccessCallback(xmlHttp);}

-if(successCallback){successCallback(xmlHttp);}}else{var msg="AjaxAppender.append: XMLHttpRequest request to URL "+

-url+" returned status code "+xmlHttp.status;handleError(msg);if(failCallback){failCallback(msg);}}

-xmlHttp.onreadystatechange=emptyFunction;xmlHttp=null;}};xmlHttp.open("POST",url,true);try{for(var i=0,header;header=headers[i++];){xmlHttp.setRequestHeader(header.name,header.value);}

-xmlHttp.setRequestHeader("Content-Type",contentType);}catch(headerEx){var msg="AjaxAppender.append: your browser's XMLHttpRequest implementation"+" does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}

-return;}

-xmlHttp.send(postData);}}catch(ex){var errMsg="AjaxAppender.append: error sending log message to "+url;handleError(errMsg,ex);isSupported=false;if(failCallback){failCallback(errMsg+". Details: "+getExceptionStringRep(ex));}}}

-this.append=function(loggingEvent){if(isSupported){if(!initialized){init();}

-queuedLoggingEvents.push(loggingEvent);var actualBatchSize=this.getLayout().allowBatching()?batchSize:1;if(queuedLoggingEvents.length>=actualBatchSize){var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);}

-queuedRequests.push(batchedLoggingEvents);if(!timed&&(!waitForResponse||(waitForResponse&&!sending))){sendAll();}}}};function init(){initialized=true;if(sendAllOnUnload){var oldBeforeUnload=window.onbeforeunload;window.onbeforeunload=function(){if(oldBeforeUnload){oldBeforeUnload();}

-if(sendAllRemaining()){return"Sending log messages";}};}

-if(timed){scheduleSending();}}}

-AjaxAppender.prototype=new Appender();AjaxAppender.prototype.defaults={waitForResponse:false,timed:false,timerInterval:1000,batchSize:1,sendAllOnUnload:false,requestSuccessCallback:null,failCallback:null,postVarName:"data",contentType:"application/x-www-form-urlencoded"};AjaxAppender.prototype.layout=new HttpPostDataLayout();AjaxAppender.prototype.toString=function(){return"AjaxAppender";};log4javascript.AjaxAppender=AjaxAppender;function setCookie(name,value,days,path){var expires;path=path?"; path="+path:"";if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));expires="; expires="+date.toGMTString();}else{expires="";}

-document.cookie=escape(name)+"="+escape(value)+expires+path;}

-function getCookie(name){var nameEquals=escape(name)+"=";var ca=document.cookie.split(";");for(var i=0,len=ca.length;i<len;i++){var c=ca[i];while(c.charAt(0)===" "){c=c.substring(1,c.length);}

-if(c.indexOf(nameEquals)===0){return unescape(c.substring(nameEquals.length,c.length));}}

-return null;}

-function getBaseUrl(){var scripts=document.getElementsByTagName("script");for(var i=0,len=scripts.length;i<len;++i){if(scripts[i].src.indexOf("log4javascript")!=-1){var lastSlash=scripts[i].src.lastIndexOf("/");return(lastSlash==-1)?"":scripts[i].src.substr(0,lastSlash+1);}}

-return null;}

-function isLoaded(win){try{return bool(win.loaded);}catch(ex){return false;}}

-var ConsoleAppender;(function(){var getConsoleHtmlLines=function(){return['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">','<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">','<head>','<title>log4javascript</title>','<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />','<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->','<meta http-equiv="X-UA-Compatible" content="IE=7" />','<script type="text/javascript">var isIe = false, isIePre7 = false;</script>','<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->','<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->','<script type="text/javascript">','//<![CDATA[','var loggingEnabled=true;var logQueuedEventsTimer=null;var logEntries=[];var logEntriesAndSeparators=[];var logItems=[];var renderDelay=100;var unrenderedLogItemsExist=false;var rootGroup,currentGroup=null;var loaded=false;var currentLogItem=null;var logMainContainer;function copyProperties(obj,props){for(var i in props){obj[i]=props[i];}}','function LogItem(){}','LogItem.prototype={mainContainer:null,wrappedContainer:null,unwrappedContainer:null,group:null,appendToLog:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].appendToLog();}','this.group.update();},doRemove:function(doUpdate,removeFromGroup){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].remove();}','this.unwrappedElementContainer=null;this.wrappedElementContainer=null;this.mainElementContainer=null;}','if(this.group&&removeFromGroup){this.group.removeChild(this,doUpdate);}','if(this===currentLogItem){currentLogItem=null;}},remove:function(doUpdate,removeFromGroup){this.doRemove(doUpdate,removeFromGroup);},render:function(){},accept:function(visitor){visitor.visit(this);},getUnwrappedDomContainer:function(){return this.group.unwrappedElementContainer.contentDiv;},getWrappedDomContainer:function(){return this.group.wrappedElementContainer.contentDiv;},getMainDomContainer:function(){return this.group.mainElementContainer.contentDiv;}};LogItem.serializedItemKeys={LOG_ENTRY:0,GROUP_START:1,GROUP_END:2};function LogItemContainerElement(){}','LogItemContainerElement.prototype={appendToLog:function(){var insertBeforeFirst=(newestAtTop&&this.containerDomNode.hasChildNodes());if(insertBeforeFirst){this.containerDomNode.insertBefore(this.mainDiv,this.containerDomNode.firstChild);}else{this.containerDomNode.appendChild(this.mainDiv);}}};function SeparatorElementContainer(containerDomNode){this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="separator";this.mainDiv.innerHTML="&nbsp;";}','SeparatorElementContainer.prototype=new LogItemContainerElement();SeparatorElementContainer.prototype.remove=function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;};function Separator(){this.rendered=false;}','Separator.prototype=new LogItem();copyProperties(Separator.prototype,{render:function(){var containerDomNode=this.group.contentDiv;if(isIe){this.unwrappedElementContainer=new SeparatorElementContainer(this.getUnwrappedDomContainer());this.wrappedElementContainer=new SeparatorElementContainer(this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new SeparatorElementContainer(this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}','this.content=this.formattedMessage;this.rendered=true;}});function GroupElementContainer(group,containerDomNode,isRoot,isWrapped){this.group=group;this.containerDomNode=containerDomNode;this.isRoot=isRoot;this.isWrapped=isWrapped;this.expandable=false;if(this.isRoot){if(isIe){this.contentDiv=logMainContainer.appendChild(document.createElement("div"));this.contentDiv.id=this.isWrapped?"log_wrapped":"log_unwrapped";}else{this.contentDiv=logMainContainer;}}else{var groupElementContainer=this;this.mainDiv=document.createElement("div");this.mainDiv.className="group";this.headingDiv=this.mainDiv.appendChild(document.createElement("div"));this.headingDiv.className="groupheading";this.expander=this.headingDiv.appendChild(document.createElement("span"));this.expander.className="expander unselectable greyedout";this.expander.unselectable=true;var expanderText=this.group.expanded?"-":"+";this.expanderTextNode=this.expander.appendChild(document.createTextNode(expanderText));this.headingDiv.appendChild(document.createTextNode(" "+this.group.name));this.contentDiv=this.mainDiv.appendChild(document.createElement("div"));var contentCssClass=this.group.expanded?"expanded":"collapsed";this.contentDiv.className="groupcontent "+contentCssClass;this.expander.onclick=function(){if(groupElementContainer.group.expandable){groupElementContainer.group.toggleExpanded();}};}}','GroupElementContainer.prototype=new LogItemContainerElement();copyProperties(GroupElementContainer.prototype,{toggleExpanded:function(){if(!this.isRoot){var oldCssClass,newCssClass,expanderText;if(this.group.expanded){newCssClass="expanded";oldCssClass="collapsed";expanderText="-";}else{newCssClass="collapsed";oldCssClass="expanded";expanderText="+";}','replaceClass(this.contentDiv,newCssClass,oldCssClass);this.expanderTextNode.nodeValue=expanderText;}},remove:function(){if(!this.isRoot){this.headingDiv=null;this.expander.onclick=null;this.expander=null;this.expanderTextNode=null;this.contentDiv=null;this.containerDomNode=null;this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;}},reverseChildren:function(){var node=null;var childDomNodes=[];while((node=this.contentDiv.firstChild)){this.contentDiv.removeChild(node);childDomNodes.push(node);}','while((node=childDomNodes.pop())){this.contentDiv.appendChild(node);}},update:function(){if(!this.isRoot){if(this.group.expandable){removeClass(this.expander,"greyedout");}else{addClass(this.expander,"greyedout");}}},clear:function(){if(this.isRoot){this.contentDiv.innerHTML="";}}});function Group(name,isRoot,initiallyExpanded){this.name=name;this.group=null;this.isRoot=isRoot;this.initiallyExpanded=initiallyExpanded;this.elementContainers=[];this.children=[];this.expanded=initiallyExpanded;this.rendered=false;this.expandable=false;}','Group.prototype=new LogItem();copyProperties(Group.prototype,{addChild:function(logItem){this.children.push(logItem);logItem.group=this;},render:function(){if(isIe){var unwrappedDomContainer,wrappedDomContainer;if(this.isRoot){unwrappedDomContainer=logMainContainer;wrappedDomContainer=logMainContainer;}else{unwrappedDomContainer=this.getUnwrappedDomContainer();wrappedDomContainer=this.getWrappedDomContainer();}','this.unwrappedElementContainer=new GroupElementContainer(this,unwrappedDomContainer,this.isRoot,false);this.wrappedElementContainer=new GroupElementContainer(this,wrappedDomContainer,this.isRoot,true);this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{var mainDomContainer=this.isRoot?logMainContainer:this.getMainDomContainer();this.mainElementContainer=new GroupElementContainer(this,mainDomContainer,this.isRoot,false);this.elementContainers=[this.mainElementContainer];}','this.rendered=true;},toggleExpanded:function(){this.expanded=!this.expanded;for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].toggleExpanded();}},expand:function(){if(!this.expanded){this.toggleExpanded();}},accept:function(visitor){visitor.visitGroup(this);},reverseChildren:function(){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].reverseChildren();}}},update:function(){var previouslyExpandable=this.expandable;this.expandable=(this.children.length!==0);if(this.expandable!==previouslyExpandable){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].update();}}},flatten:function(){var visitor=new GroupFlattener();this.accept(visitor);return visitor.logEntriesAndSeparators;},removeChild:function(child,doUpdate){array_remove(this.children,child);child.group=null;if(doUpdate){this.update();}},remove:function(doUpdate,removeFromGroup){for(var i=0,len=this.children.length;i<len;i++){this.children[i].remove(false,false);}','this.children=[];this.update();if(this===currentGroup){currentGroup=this.group;}','this.doRemove(doUpdate,removeFromGroup);},serialize:function(items){items.push([LogItem.serializedItemKeys.GROUP_START,this.name]);for(var i=0,len=this.children.length;i<len;i++){this.children[i].serialize(items);}','if(this!==currentGroup){items.push([LogItem.serializedItemKeys.GROUP_END]);}},clear:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clear();}}});function LogEntryElementContainer(){}','LogEntryElementContainer.prototype=new LogItemContainerElement();copyProperties(LogEntryElementContainer.prototype,{remove:function(){this.doRemove();},doRemove:function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;this.contentElement=null;this.containerDomNode=null;},setContent:function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=content;}},setSearchMatch:function(isMatch){var oldCssClass=isMatch?"searchnonmatch":"searchmatch";var newCssClass=isMatch?"searchmatch":"searchnonmatch";replaceClass(this.mainDiv,newCssClass,oldCssClass);},clearSearch:function(){removeClass(this.mainDiv,"searchmatch");removeClass(this.mainDiv,"searchnonmatch");}});function LogEntryWrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.mainDiv.className="logentry wrapped "+this.logEntry.level;this.contentElement=this.mainDiv;}','LogEntryWrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryWrappedElementContainer.prototype.setContent=function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=wrappedContent;}};function LogEntryUnwrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry unwrapped "+this.logEntry.level;this.pre=this.mainDiv.appendChild(document.createElement("pre"));this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.pre.className="unwrapped";this.contentElement=this.pre;}','LogEntryUnwrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryUnwrappedElementContainer.prototype.remove=function(){this.doRemove();this.pre=null;};function LogEntryMainElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry nonielogentry "+this.logEntry.level;this.contentElement=this.mainDiv.appendChild(document.createElement("span"));this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));}','LogEntryMainElementContainer.prototype=new LogEntryElementContainer();function LogEntry(level,formattedMessage){this.level=level;this.formattedMessage=formattedMessage;this.rendered=false;}','LogEntry.prototype=new LogItem();copyProperties(LogEntry.prototype,{render:function(){var logEntry=this;var containerDomNode=this.group.contentDiv;if(isIe){this.formattedMessage=this.formattedMessage.replace(/\\r\\n/g,"\\r");this.unwrappedElementContainer=new LogEntryUnwrappedElementContainer(this,this.getUnwrappedDomContainer());this.wrappedElementContainer=new LogEntryWrappedElementContainer(this,this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new LogEntryMainElementContainer(this,this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}','this.content=this.formattedMessage;this.rendered=true;},setContent:function(content,wrappedContent){if(content!=this.content){if(isIe&&(content!==this.formattedMessage)){content=content.replace(/\\r\\n/g,"\\r");}','for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setContent(content,wrappedContent);}','this.content=content;}},getSearchMatches:function(){var matches=[];var i,len;if(isIe){var unwrappedEls=getElementsByClass(this.unwrappedElementContainer.mainDiv,"searchterm","span");var wrappedEls=getElementsByClass(this.wrappedElementContainer.mainDiv,"searchterm","span");for(i=0,len=unwrappedEls.length;i<len;i++){matches[i]=new Match(this.level,null,unwrappedEls[i],wrappedEls[i]);}}else{var els=getElementsByClass(this.mainElementContainer.mainDiv,"searchterm","span");for(i=0,len=els.length;i<len;i++){matches[i]=new Match(this.level,els[i]);}}','return matches;},setSearchMatch:function(isMatch){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setSearchMatch(isMatch);}},clearSearch:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clearSearch();}},accept:function(visitor){visitor.visitLogEntry(this);},serialize:function(items){items.push([LogItem.serializedItemKeys.LOG_ENTRY,this.level,this.formattedMessage]);}});function LogItemVisitor(){}','LogItemVisitor.prototype={visit:function(logItem){},visitParent:function(logItem){if(logItem.group){logItem.group.accept(this);}},visitChildren:function(logItem){for(var i=0,len=logItem.children.length;i<len;i++){logItem.children[i].accept(this);}},visitLogEntry:function(logEntry){this.visit(logEntry);},visitSeparator:function(separator){this.visit(separator);},visitGroup:function(group){this.visit(group);}};function GroupFlattener(){this.logEntriesAndSeparators=[];}','GroupFlattener.prototype=new LogItemVisitor();GroupFlattener.prototype.visitGroup=function(group){this.visitChildren(group);};GroupFlattener.prototype.visitLogEntry=function(logEntry){this.logEntriesAndSeparators.push(logEntry);};GroupFlattener.prototype.visitSeparator=function(separator){this.logEntriesAndSeparators.push(separator);};window.onload=function(){if(location.search){var queryBits=unescape(location.search).substr(1).split("&"),nameValueBits;for(var i=0,len=queryBits.length;i<len;i++){nameValueBits=queryBits[i].split("=");if(nameValueBits[0]=="log4javascript_domain"){document.domain=nameValueBits[1];break;}}}','logMainContainer=$("log");if(isIePre7){addClass(logMainContainer,"oldIe");}','rootGroup=new Group("root",true);rootGroup.render();currentGroup=rootGroup;setCommandInputWidth();setLogContainerHeight();toggleLoggingEnabled();toggleSearchEnabled();toggleSearchFilter();toggleSearchHighlight();applyFilters();checkAllLevels();toggleWrap();toggleNewestAtTop();toggleScrollToLatest();renderQueuedLogItems();loaded=true;$("command").value="";$("command").autocomplete="off";$("command").onkeydown=function(evt){evt=getEvent(evt);if(evt.keyCode==10||evt.keyCode==13){evalCommandLine();stopPropagation(evt);}else if(evt.keyCode==27){this.value="";this.focus();}else if(evt.keyCode==38&&commandHistory.length>0){currentCommandIndex=Math.max(0,currentCommandIndex-1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}else if(evt.keyCode==40&&commandHistory.length>0){currentCommandIndex=Math.min(commandHistory.length-1,currentCommandIndex+1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}};$("command").onkeypress=function(evt){evt=getEvent(evt);if(evt.keyCode==38&&commandHistory.length>0&&evt.preventDefault){evt.preventDefault();}};$("command").onkeyup=function(evt){evt=getEvent(evt);if(evt.keyCode==27&&evt.preventDefault){evt.preventDefault();this.focus();}};document.onkeydown=function keyEventHandler(evt){evt=getEvent(evt);switch(evt.keyCode){case 69:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){evalLastCommand();cancelKeyEvent(evt);return false;}','break;case 75:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusSearch();cancelKeyEvent(evt);return false;}','break;case 40:case 76:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusCommandLine();cancelKeyEvent(evt);return false;}','break;}};setTimeout(setLogContainerHeight,20);setShowCommandLine(showCommandLine);doSearch();};window.onunload=function(){if(mainWindowExists()){appender.unload();}','appender=null;};function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}','function setLoggingEnabled(enable){loggingEnabled=enable;}','var appender=null;function setAppender(appenderParam){appender=appenderParam;}','function setShowCloseButton(showCloseButton){$("closeButton").style.display=showCloseButton?"inline":"none";}','function setShowHideButton(showHideButton){$("hideButton").style.display=showHideButton?"inline":"none";}','var newestAtTop=false;function LogItemContentReverser(){}','LogItemContentReverser.prototype=new LogItemVisitor();LogItemContentReverser.prototype.visitGroup=function(group){group.reverseChildren();this.visitChildren(group);};function setNewestAtTop(isNewestAtTop){var oldNewestAtTop=newestAtTop;var i,iLen,j,jLen;newestAtTop=Boolean(isNewestAtTop);if(oldNewestAtTop!=newestAtTop){var visitor=new LogItemContentReverser();rootGroup.accept(visitor);if(currentSearch){var currentMatch=currentSearch.matches[currentMatchIndex];var matchIndex=0;var matches=[];var actOnLogEntry=function(logEntry){var logEntryMatches=logEntry.getSearchMatches();for(j=0,jLen=logEntryMatches.length;j<jLen;j++){matches[matchIndex]=logEntryMatches[j];if(currentMatch&&logEntryMatches[j].equals(currentMatch)){currentMatchIndex=matchIndex;}','matchIndex++;}};if(newestAtTop){for(i=logEntries.length-1;i>=0;i--){actOnLogEntry(logEntries[i]);}}else{for(i=0,iLen=logEntries.length;i<iLen;i++){actOnLogEntry(logEntries[i]);}}','currentSearch.matches=matches;if(currentMatch){currentMatch.setCurrent();}}else if(scrollToLatest){doScrollToLatest();}}','$("newestAtTop").checked=isNewestAtTop;}','function toggleNewestAtTop(){var isNewestAtTop=$("newestAtTop").checked;setNewestAtTop(isNewestAtTop);}','var scrollToLatest=true;function setScrollToLatest(isScrollToLatest){scrollToLatest=isScrollToLatest;if(scrollToLatest){doScrollToLatest();}','$("scrollToLatest").checked=isScrollToLatest;}','function toggleScrollToLatest(){var isScrollToLatest=$("scrollToLatest").checked;setScrollToLatest(isScrollToLatest);}','function doScrollToLatest(){var l=logMainContainer;if(typeof l.scrollTop!="undefined"){if(newestAtTop){l.scrollTop=0;}else{var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}}','var closeIfOpenerCloses=true;function setCloseIfOpenerCloses(isCloseIfOpenerCloses){closeIfOpenerCloses=isCloseIfOpenerCloses;}','var maxMessages=null;function setMaxMessages(max){maxMessages=max;pruneLogEntries();}','var showCommandLine=false;function setShowCommandLine(isShowCommandLine){showCommandLine=isShowCommandLine;if(loaded){$("commandLine").style.display=showCommandLine?"block":"none";setCommandInputWidth();setLogContainerHeight();}}','function focusCommandLine(){if(loaded){$("command").focus();}}','function focusSearch(){if(loaded){$("searchBox").focus();}}','function getLogItems(){var items=[];for(var i=0,len=logItems.length;i<len;i++){logItems[i].serialize(items);}','return items;}','function setLogItems(items){var loggingReallyEnabled=loggingEnabled;loggingEnabled=true;for(var i=0,len=items.length;i<len;i++){switch(items[i][0]){case LogItem.serializedItemKeys.LOG_ENTRY:log(items[i][1],items[i][2]);break;case LogItem.serializedItemKeys.GROUP_START:group(items[i][1]);break;case LogItem.serializedItemKeys.GROUP_END:groupEnd();break;}}','loggingEnabled=loggingReallyEnabled;}','function log(logLevel,formattedMessage){if(loggingEnabled){var logEntry=new LogEntry(logLevel,formattedMessage);logEntries.push(logEntry);logEntriesAndSeparators.push(logEntry);logItems.push(logEntry);currentGroup.addChild(logEntry);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}','logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}','function renderQueuedLogItems(){logQueuedEventsTimer=null;var pruned=pruneLogEntries();var initiallyHasMatches=currentSearch?currentSearch.hasMatches():false;for(var i=0,len=logItems.length;i<len;i++){if(!logItems[i].rendered){logItems[i].render();logItems[i].appendToLog();if(currentSearch&&(logItems[i]instanceof LogEntry)){currentSearch.applyTo(logItems[i]);}}}','if(currentSearch){if(pruned){if(currentSearch.hasVisibleMatches()){if(currentMatchIndex===null){setCurrentMatchIndex(0);}','displayMatches();}else{displayNoMatches();}}else if(!initiallyHasMatches&&currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}}','if(scrollToLatest){doScrollToLatest();}','unrenderedLogItemsExist=false;}','function pruneLogEntries(){if((maxMessages!==null)&&(logEntriesAndSeparators.length>maxMessages)){var numberToDelete=logEntriesAndSeparators.length-maxMessages;var prunedLogEntries=logEntriesAndSeparators.slice(0,numberToDelete);if(currentSearch){currentSearch.removeMatches(prunedLogEntries);}','var group;for(var i=0;i<numberToDelete;i++){group=logEntriesAndSeparators[i].group;array_remove(logItems,logEntriesAndSeparators[i]);array_remove(logEntries,logEntriesAndSeparators[i]);logEntriesAndSeparators[i].remove(true,true);if(group.children.length===0&&group!==currentGroup&&group!==rootGroup){array_remove(logItems,group);group.remove(true,true);}}','logEntriesAndSeparators=array_removeFromStart(logEntriesAndSeparators,numberToDelete);return true;}','return false;}','function group(name,startExpanded){if(loggingEnabled){initiallyExpanded=(typeof startExpanded==="undefined")?true:Boolean(startExpanded);var newGroup=new Group(name,false,initiallyExpanded);currentGroup.addChild(newGroup);currentGroup=newGroup;logItems.push(newGroup);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}','logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}','function groupEnd(){currentGroup=(currentGroup===rootGroup)?rootGroup:currentGroup.group;}','function mainPageReloaded(){currentGroup=rootGroup;var separator=new Separator();logEntriesAndSeparators.push(separator);logItems.push(separator);currentGroup.addChild(separator);}','function closeWindow(){if(appender&&mainWindowExists()){appender.close(true);}else{window.close();}}','function hide(){if(appender&&mainWindowExists()){appender.hide();}}','var mainWindow=window;var windowId="log4javascriptConsoleWindow_"+new Date().getTime()+"_"+(""+Math.random()).substr(2);function setMainWindow(win){mainWindow=win;mainWindow[windowId]=window;if(opener&&closeIfOpenerCloses){pollOpener();}}','function pollOpener(){if(closeIfOpenerCloses){if(mainWindowExists()){setTimeout(pollOpener,500);}else{closeWindow();}}}','function mainWindowExists(){try{return(mainWindow&&!mainWindow.closed&&mainWindow[windowId]==window);}catch(ex){}','return false;}','var logLevels=["TRACE","DEBUG","INFO","WARN","ERROR","FATAL"];function getCheckBox(logLevel){return $("switch_"+logLevel);}','function getIeWrappedLogContainer(){return $("log_wrapped");}','function getIeUnwrappedLogContainer(){return $("log_unwrapped");}','function applyFilters(){for(var i=0;i<logLevels.length;i++){if(getCheckBox(logLevels[i]).checked){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}','updateSearchFromFilters();}','function toggleAllLevels(){var turnOn=$("switch_ALL").checked;for(var i=0;i<logLevels.length;i++){getCheckBox(logLevels[i]).checked=turnOn;if(turnOn){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}}','function checkAllLevels(){for(var i=0;i<logLevels.length;i++){if(!getCheckBox(logLevels[i]).checked){getCheckBox("ALL").checked=false;return;}}','getCheckBox("ALL").checked=true;}','function clearLog(){rootGroup.clear();currentGroup=rootGroup;logEntries=[];logItems=[];logEntriesAndSeparators=[];doSearch();}','function toggleWrap(){var enable=$("wrap").checked;if(enable){addClass(logMainContainer,"wrap");}else{removeClass(logMainContainer,"wrap");}','refreshCurrentMatch();}','var searchTimer=null;function scheduleSearch(){try{clearTimeout(searchTimer);}catch(ex){}','searchTimer=setTimeout(doSearch,500);}','function Search(searchTerm,isRegex,searchRegex,isCaseSensitive){this.searchTerm=searchTerm;this.isRegex=isRegex;this.searchRegex=searchRegex;this.isCaseSensitive=isCaseSensitive;this.matches=[];}','Search.prototype={hasMatches:function(){return this.matches.length>0;},hasVisibleMatches:function(){if(this.hasMatches()){for(var i=0;i<this.matches.length;i++){if(this.matches[i].isVisible()){return true;}}}','return false;},match:function(logEntry){var entryText=String(logEntry.formattedMessage);var matchesSearch=false;if(this.isRegex){matchesSearch=this.searchRegex.test(entryText);}else if(this.isCaseSensitive){matchesSearch=(entryText.indexOf(this.searchTerm)>-1);}else{matchesSearch=(entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase())>-1);}','return matchesSearch;},getNextVisibleMatchIndex:function(){for(var i=currentMatchIndex+1;i<this.matches.length;i++){if(this.matches[i].isVisible()){return i;}}','for(i=0;i<=currentMatchIndex;i++){if(this.matches[i].isVisible()){return i;}}','return-1;},getPreviousVisibleMatchIndex:function(){for(var i=currentMatchIndex-1;i>=0;i--){if(this.matches[i].isVisible()){return i;}}','for(var i=this.matches.length-1;i>=currentMatchIndex;i--){if(this.matches[i].isVisible()){return i;}}','return-1;},applyTo:function(logEntry){var doesMatch=this.match(logEntry);if(doesMatch){logEntry.group.expand();logEntry.setSearchMatch(true);var logEntryContent;var wrappedLogEntryContent;var searchTermReplacementStartTag="<span class=\\\"searchterm\\\">";var searchTermReplacementEndTag="<"+"/span>";var preTagName=isIe?"pre":"span";var preStartTag="<"+preTagName+" class=\\\"pre\\\">";var preEndTag="<"+"/"+preTagName+">";var startIndex=0;var searchIndex,matchedText,textBeforeMatch;if(this.isRegex){var flags=this.isCaseSensitive?"g":"gi";var capturingRegex=new RegExp("("+this.searchRegex.source+")",flags);var rnd=(""+Math.random()).substr(2);var startToken="%%s"+rnd+"%%";var endToken="%%e"+rnd+"%%";logEntryContent=logEntry.formattedMessage.replace(capturingRegex,startToken+"$1"+endToken);logEntryContent=escapeHtml(logEntryContent);var result;var searchString=logEntryContent;logEntryContent="";wrappedLogEntryContent="";while((searchIndex=searchString.indexOf(startToken,startIndex))>-1){var endTokenIndex=searchString.indexOf(endToken,searchIndex);matchedText=searchString.substring(searchIndex+startToken.length,endTokenIndex);textBeforeMatch=searchString.substring(startIndex,searchIndex);logEntryContent+=preStartTag+textBeforeMatch+preEndTag;logEntryContent+=searchTermReplacementStartTag+preStartTag+matchedText+','preEndTag+searchTermReplacementEndTag;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+','matchedText+searchTermReplacementEndTag;}','startIndex=endTokenIndex+endToken.length;}','logEntryContent+=preStartTag+searchString.substr(startIndex)+preEndTag;if(isIe){wrappedLogEntryContent+=searchString.substr(startIndex);}}else{logEntryContent="";wrappedLogEntryContent="";var searchTermReplacementLength=searchTermReplacementStartTag.length+','this.searchTerm.length+searchTermReplacementEndTag.length;var searchTermLength=this.searchTerm.length;var searchTermLowerCase=this.searchTerm.toLowerCase();var logTextLowerCase=logEntry.formattedMessage.toLowerCase();while((searchIndex=logTextLowerCase.indexOf(searchTermLowerCase,startIndex))>-1){matchedText=escapeHtml(logEntry.formattedMessage.substr(searchIndex,this.searchTerm.length));textBeforeMatch=escapeHtml(logEntry.formattedMessage.substring(startIndex,searchIndex));var searchTermReplacement=searchTermReplacementStartTag+','preStartTag+matchedText+preEndTag+searchTermReplacementEndTag;logEntryContent+=preStartTag+textBeforeMatch+preEndTag+searchTermReplacement;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+','matchedText+searchTermReplacementEndTag;}','startIndex=searchIndex+searchTermLength;}','var textAfterLastMatch=escapeHtml(logEntry.formattedMessage.substr(startIndex));logEntryContent+=preStartTag+textAfterLastMatch+preEndTag;if(isIe){wrappedLogEntryContent+=textAfterLastMatch;}}','logEntry.setContent(logEntryContent,wrappedLogEntryContent);var logEntryMatches=logEntry.getSearchMatches();this.matches=this.matches.concat(logEntryMatches);}else{logEntry.setSearchMatch(false);logEntry.setContent(logEntry.formattedMessage,logEntry.formattedMessage);}','return doesMatch;},removeMatches:function(logEntries){var matchesToRemoveCount=0;var currentMatchRemoved=false;var matchesToRemove=[];var i,iLen,j,jLen;for(i=0,iLen=this.matches.length;i<iLen;i++){for(j=0,jLen=logEntries.length;j<jLen;j++){if(this.matches[i].belongsTo(logEntries[j])){matchesToRemove.push(this.matches[i]);if(i===currentMatchIndex){currentMatchRemoved=true;}}}}','var newMatch=currentMatchRemoved?null:this.matches[currentMatchIndex];if(currentMatchRemoved){for(i=currentMatchIndex,iLen=this.matches.length;i<iLen;i++){if(this.matches[i].isVisible()&&!array_contains(matchesToRemove,this.matches[i])){newMatch=this.matches[i];break;}}}','for(i=0,iLen=matchesToRemove.length;i<iLen;i++){array_remove(this.matches,matchesToRemove[i]);matchesToRemove[i].remove();}','if(this.hasVisibleMatches()){if(newMatch===null){setCurrentMatchIndex(0);}else{var newMatchIndex=0;for(i=0,iLen=this.matches.length;i<iLen;i++){if(newMatch===this.matches[i]){newMatchIndex=i;break;}}','setCurrentMatchIndex(newMatchIndex);}}else{currentMatchIndex=null;displayNoMatches();}}};function getPageOffsetTop(el,container){var currentEl=el;var y=0;while(currentEl&&currentEl!=container){y+=currentEl.offsetTop;currentEl=currentEl.offsetParent;}','return y;}','function scrollIntoView(el){var logContainer=logMainContainer;if(!$("wrap").checked){var logContainerLeft=logContainer.scrollLeft;var logContainerRight=logContainerLeft+logContainer.offsetWidth;var elLeft=el.offsetLeft;var elRight=elLeft+el.offsetWidth;if(elLeft<logContainerLeft||elRight>logContainerRight){logContainer.scrollLeft=elLeft-(logContainer.offsetWidth-el.offsetWidth)/2;}}','var logContainerTop=logContainer.scrollTop;var logContainerBottom=logContainerTop+logContainer.offsetHeight;var elTop=getPageOffsetTop(el)-getToolBarsHeight();var elBottom=elTop+el.offsetHeight;if(elTop<logContainerTop||elBottom>logContainerBottom){logContainer.scrollTop=elTop-(logContainer.offsetHeight-el.offsetHeight)/2;}}','function Match(logEntryLevel,spanInMainDiv,spanInUnwrappedPre,spanInWrappedDiv){this.logEntryLevel=logEntryLevel;this.spanInMainDiv=spanInMainDiv;if(isIe){this.spanInUnwrappedPre=spanInUnwrappedPre;this.spanInWrappedDiv=spanInWrappedDiv;}','this.mainSpan=isIe?spanInUnwrappedPre:spanInMainDiv;}','Match.prototype={equals:function(match){return this.mainSpan===match.mainSpan;},setCurrent:function(){if(isIe){addClass(this.spanInUnwrappedPre,"currentmatch");addClass(this.spanInWrappedDiv,"currentmatch");var elementToScroll=$("wrap").checked?this.spanInWrappedDiv:this.spanInUnwrappedPre;scrollIntoView(elementToScroll);}else{addClass(this.spanInMainDiv,"currentmatch");scrollIntoView(this.spanInMainDiv);}},belongsTo:function(logEntry){if(isIe){return isDescendant(this.spanInUnwrappedPre,logEntry.unwrappedPre);}else{return isDescendant(this.spanInMainDiv,logEntry.mainDiv);}},setNotCurrent:function(){if(isIe){removeClass(this.spanInUnwrappedPre,"currentmatch");removeClass(this.spanInWrappedDiv,"currentmatch");}else{removeClass(this.spanInMainDiv,"currentmatch");}},isOrphan:function(){return isOrphan(this.mainSpan);},isVisible:function(){return getCheckBox(this.logEntryLevel).checked;},remove:function(){if(isIe){this.spanInUnwrappedPre=null;this.spanInWrappedDiv=null;}else{this.spanInMainDiv=null;}}};var currentSearch=null;var currentMatchIndex=null;function doSearch(){var searchBox=$("searchBox");var searchTerm=searchBox.value;var isRegex=$("searchRegex").checked;var isCaseSensitive=$("searchCaseSensitive").checked;var i;if(searchTerm===""){$("searchReset").disabled=true;$("searchNav").style.display="none";removeClass(document.body,"searching");removeClass(searchBox,"hasmatches");removeClass(searchBox,"nomatches");for(i=0;i<logEntries.length;i++){logEntries[i].clearSearch();logEntries[i].setContent(logEntries[i].formattedMessage,logEntries[i].formattedMessage);}','currentSearch=null;setLogContainerHeight();}else{$("searchReset").disabled=false;$("searchNav").style.display="block";var searchRegex;var regexValid;if(isRegex){try{searchRegex=isCaseSensitive?new RegExp(searchTerm,"g"):new RegExp(searchTerm,"gi");regexValid=true;replaceClass(searchBox,"validregex","invalidregex");searchBox.title="Valid regex";}catch(ex){regexValid=false;replaceClass(searchBox,"invalidregex","validregex");searchBox.title="Invalid regex: "+(ex.message?ex.message:(ex.description?ex.description:"unknown error"));return;}}else{searchBox.title="";removeClass(searchBox,"validregex");removeClass(searchBox,"invalidregex");}','addClass(document.body,"searching");currentSearch=new Search(searchTerm,isRegex,searchRegex,isCaseSensitive);for(i=0;i<logEntries.length;i++){currentSearch.applyTo(logEntries[i]);}','setLogContainerHeight();if(currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}else{displayNoMatches();}}}','function updateSearchFromFilters(){if(currentSearch){if(currentSearch.hasMatches()){if(currentMatchIndex===null){currentMatchIndex=0;}','var currentMatch=currentSearch.matches[currentMatchIndex];if(currentMatch.isVisible()){displayMatches();setCurrentMatchIndex(currentMatchIndex);}else{currentMatch.setNotCurrent();var nextVisibleMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextVisibleMatchIndex>-1){setCurrentMatchIndex(nextVisibleMatchIndex);displayMatches();}else{displayNoMatches();}}}else{displayNoMatches();}}}','function refreshCurrentMatch(){if(currentSearch&&currentSearch.hasVisibleMatches()){setCurrentMatchIndex(currentMatchIndex);}}','function displayMatches(){replaceClass($("searchBox"),"hasmatches","nomatches");$("searchBox").title=""+currentSearch.matches.length+" matches found";$("searchNav").style.display="block";setLogContainerHeight();}','function displayNoMatches(){replaceClass($("searchBox"),"nomatches","hasmatches");$("searchBox").title="No matches found";$("searchNav").style.display="none";setLogContainerHeight();}','function toggleSearchEnabled(enable){enable=(typeof enable=="undefined")?!$("searchDisable").checked:enable;$("searchBox").disabled=!enable;$("searchReset").disabled=!enable;$("searchRegex").disabled=!enable;$("searchNext").disabled=!enable;$("searchPrevious").disabled=!enable;$("searchCaseSensitive").disabled=!enable;$("searchNav").style.display=(enable&&($("searchBox").value!=="")&&currentSearch&&currentSearch.hasVisibleMatches())?"block":"none";if(enable){removeClass($("search"),"greyedout");addClass(document.body,"searching");if($("searchHighlight").checked){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}','if($("searchFilter").checked){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}','$("searchDisable").checked=!enable;}else{addClass($("search"),"greyedout");removeClass(document.body,"searching");removeClass(logMainContainer,"searchhighlight");removeClass(logMainContainer,"searchfilter");}','setLogContainerHeight();}','function toggleSearchFilter(){var enable=$("searchFilter").checked;if(enable){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}','refreshCurrentMatch();}','function toggleSearchHighlight(){var enable=$("searchHighlight").checked;if(enable){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}}','function clearSearch(){$("searchBox").value="";doSearch();}','function searchNext(){if(currentSearch!==null&&currentMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var nextMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextMatchIndex>currentMatchIndex||confirm("Reached the end of the page. Start from the top?")){setCurrentMatchIndex(nextMatchIndex);}}}','function searchPrevious(){if(currentSearch!==null&&currentMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var previousMatchIndex=currentSearch.getPreviousVisibleMatchIndex();if(previousMatchIndex<currentMatchIndex||confirm("Reached the start of the page. Continue from the bottom?")){setCurrentMatchIndex(previousMatchIndex);}}}','function setCurrentMatchIndex(index){currentMatchIndex=index;currentSearch.matches[currentMatchIndex].setCurrent();}','function addClass(el,cssClass){if(!hasClass(el,cssClass)){if(el.className){el.className+=" "+cssClass;}else{el.className=cssClass;}}}','function hasClass(el,cssClass){if(el.className){var classNames=el.className.split(" ");return array_contains(classNames,cssClass);}','return false;}','function removeClass(el,cssClass){if(hasClass(el,cssClass)){var existingClasses=el.className.split(" ");var newClasses=[];for(var i=0,len=existingClasses.length;i<len;i++){if(existingClasses[i]!=cssClass){newClasses[newClasses.length]=existingClasses[i];}}','el.className=newClasses.join(" ");}}','function replaceClass(el,newCssClass,oldCssClass){removeClass(el,oldCssClass);addClass(el,newCssClass);}','function getElementsByClass(el,cssClass,tagName){var elements=el.getElementsByTagName(tagName);var matches=[];for(var i=0,len=elements.length;i<len;i++){if(hasClass(elements[i],cssClass)){matches.push(elements[i]);}}','return matches;}','function $(id){return document.getElementById(id);}','function isDescendant(node,ancestorNode){while(node!=null){if(node===ancestorNode){return true;}','node=node.parentNode;}','return false;}','function isOrphan(node){var currentNode=node;while(currentNode){if(currentNode==document.body){return false;}','currentNode=currentNode.parentNode;}','return true;}','function escapeHtml(str){return str.replace(/&/g,"&amp;").replace(/[<]/g,"&lt;").replace(/>/g,"&gt;");}','function getWindowWidth(){if(window.innerWidth){return window.innerWidth;}else if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth;}else if(document.body){return document.body.clientWidth;}','return 0;}','function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}','return 0;}','function getToolBarsHeight(){return $("switches").offsetHeight;}','function getChromeHeight(){var height=getToolBarsHeight();if(showCommandLine){height+=$("commandLine").offsetHeight;}','return height;}','function setLogContainerHeight(){if(logMainContainer){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";logMainContainer.style.height=""+','Math.max(0,windowHeight-getChromeHeight())+"px";}}','function setCommandInputWidth(){if(showCommandLine){$("command").style.width=""+Math.max(0,$("commandLineContainer").offsetWidth-','($("evaluateButton").offsetWidth+13))+"px";}}','window.onresize=function(){setCommandInputWidth();setLogContainerHeight();};if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}','return this.length;};}','if(!Array.prototype.pop){Array.prototype.pop=function(){if(this.length>0){var val=this[this.length-1];this.length=this.length-1;return val;}};}','if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}','this.length=this.length-1;return firstItem;}};}','if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}','var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}','return itemsDeleted;};}','function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}','if(index>=0){arr.splice(index,1);return index;}else{return false;}}','function array_removeFromStart(array,numberToRemove){if(Array.prototype.splice){array.splice(0,numberToRemove);}else{for(var i=numberToRemove,len=array.length;i<len;i++){array[i-numberToRemove]=array[i];}','array.length=array.length-numberToRemove;}','return array;}','function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}','return false;}','function getErrorMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}','return""+ex;}','function moveCaretToEnd(input){if(input.setSelectionRange){input.focus();var length=input.value.length;input.setSelectionRange(length,length);}else if(input.createTextRange){var range=input.createTextRange();range.collapse(false);range.select();}','input.focus();}','function stopPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}}','function getEvent(evt){return evt?evt:event;}','function getTarget(evt){return evt.target?evt.target:evt.srcElement;}','function getRelatedTarget(evt){if(evt.relatedTarget){return evt.relatedTarget;}else if(evt.srcElement){switch(evt.type){case"mouseover":return evt.fromElement;case"mouseout":return evt.toElement;default:return evt.srcElement;}}}','function cancelKeyEvent(evt){evt.returnValue=false;stopPropagation(evt);}','function evalCommandLine(){var expr=$("command").value;evalCommand(expr);$("command").value="";}','function evalLastCommand(){if(lastCommand!=null){evalCommand(lastCommand);}}','var lastCommand=null;var commandHistory=[];var currentCommandIndex=0;function evalCommand(expr){if(appender){appender.evalCommandAndAppend(expr);}else{var prefix=">>> "+expr+"\\r\\n";try{log("INFO",prefix+eval(expr));}catch(ex){log("ERROR",prefix+"Error: "+getErrorMessage(ex));}}','if(expr!=commandHistory[commandHistory.length-1]){commandHistory.push(expr);if(appender){appender.storeCommandHistory(commandHistory);}}','currentCommandIndex=(expr==commandHistory[currentCommandIndex])?currentCommandIndex+1:commandHistory.length;lastCommand=expr;}','//]]>','</script>','<style type="text/css">','body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#switchesContainer input{margin-bottom:0}div.toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div.toolbar,div#search input{font-family:tahoma,verdana,arial,helvetica,sans-serif}div.toolbar input.button{padding:0 5px;font-size:100%}div.toolbar input.hidden{display:none}div#switches input#clearButton{margin-left:20px}div#levels label{font-weight:bold}div#levels label,div#options label{margin-right:5px}div#levels label#wrapLabel{font-weight:normal}div#search label{margin-right:10px}div#search label.searchboxlabel{margin-right:0}div#search input{font-size:100%}div#search input.validregex{color:green}div#search input.invalidregex{color:red}div#search input.nomatches{color:white;background-color:#ff6666}div#search input.nomatches{color:white;background-color:#ff6666}div#searchNav{display:none}div#commandLine{display:none}div#commandLine input#command{font-size:100%;font-family:Courier New,Courier}div#commandLine input#evaluateButton{}*.greyedout{color:gray !important;border-color:gray !important}*.greyedout *.alwaysenabled{color:black}*.unselectable{-khtml-user-select:none;-moz-user-select:none;user-select:none}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both;position:relative}div.group{border-color:#cccccc;border-style:solid;border-width:1px 0 1px 1px;overflow:visible}div.oldIe div.group,div.oldIe div.group *,div.oldIe *.logentry{height:1%}div.group div.groupheading span.expander{border:solid black 1px;font-family:Courier New,Courier;font-size:0.833em;background-color:#eeeeee;position:relative;top:-1px;color:black;padding:0 2px;cursor:pointer;cursor:hand;height:1%}div.group div.groupcontent{margin-left:10px;padding-bottom:2px;overflow:visible}div.group div.expanded{display:block}div.group div.collapsed{display:none}*.logentry{overflow:visible;display:none;white-space:pre}span.pre{white-space:pre}pre.unwrapped{display:inline !important}pre.unwrapped pre.pre,div.wrapped pre.pre{display:inline}div.wrapped pre.pre{white-space:normal}div.wrapped{display:none}body.searching *.logentry span.currentmatch{color:white !important;background-color:green !important}body.searching div.searchhighlight *.logentry span.searchterm{color:black;background-color:yellow}div.wrap *.logentry{white-space:normal !important;border-width:0 0 1px 0;border-color:#dddddd;border-style:dotted}div.wrap #log_wrapped,#log_unwrapped{display:block}div.wrap #log_unwrapped,#log_wrapped{display:none}div.wrap *.logentry span.pre{overflow:visible;white-space:normal}div.wrap *.logentry pre.unwrapped{display:none}div.wrap *.logentry span.wrapped{display:inline}div.searchfilter *.searchnonmatch{display:none !important}div#log *.TRACE,label#label_TRACE{color:#666666}div#log *.DEBUG,label#label_DEBUG{color:green}div#log *.INFO,label#label_INFO{color:#000099}div#log *.WARN,label#label_WARN{color:#999900}div#log *.ERROR,label#label_ERROR{color:red}div#log *.FATAL,label#label_FATAL{color:#660066}div.TRACE#log *.TRACE,div.DEBUG#log *.DEBUG,div.INFO#log *.INFO,div.WARN#log *.WARN,div.ERROR#log *.ERROR,div.FATAL#log *.FATAL{display:block}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}','</style>','</head>','<body id="body">','<div id="switchesContainer">','<div id="switches">','<div id="levels" class="toolbar">','Filters:','<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>','<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>','<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>','<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>','<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>','<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>','<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>','</div>','<div id="search" class="toolbar">','<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />','<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />','<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>','<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>','<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>','<div id="searchNav">','<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />','<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />','<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>','<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>','</div>','</div>','<div id="options" class="toolbar">','Options:','<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>','<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>','<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>','<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>','<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages"  />','<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />','<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />','</div>','</div>','</div>','<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>','<div id="commandLine" class="toolbar">','<div id="commandLineContainer">','<input type="text" id="command" title="Enter a JavaScript command here and hit return or press \'Evaluate\'" />','<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />','</div>','</div>','</body>','</html>',''];};var defaultCommandLineFunctions=[];ConsoleAppender=function(){};var consoleAppenderIdCounter=1;ConsoleAppender.prototype=new Appender();ConsoleAppender.prototype.create=function(inPage,container,lazyInit,initiallyMinimized,useDocumentWrite,width,height,focusConsoleWindow){var appender=this;var initialized=false;var consoleWindowCreated=false;var consoleWindowLoaded=false;var consoleClosed=false;var queuedLoggingEvents=[];var isSupported=true;var consoleAppenderId=consoleAppenderIdCounter++;initiallyMinimized=extractBooleanFromParam(initiallyMinimized,this.defaults.initiallyMinimized);lazyInit=extractBooleanFromParam(lazyInit,this.defaults.lazyInit);useDocumentWrite=extractBooleanFromParam(useDocumentWrite,this.defaults.useDocumentWrite);var newestMessageAtTop=this.defaults.newestMessageAtTop;var scrollToLatestMessage=this.defaults.scrollToLatestMessage;width=width?width:this.defaults.width;height=height?height:this.defaults.height;var maxMessages=this.defaults.maxMessages;var showCommandLine=this.defaults.showCommandLine;var commandLineObjectExpansionDepth=this.defaults.commandLineObjectExpansionDepth;var showHideButton=this.defaults.showHideButton;var showCloseButton=this.defaults.showCloseButton;var showLogEntryDeleteButtons=this.defaults.showLogEntryDeleteButtons;this.setLayout(this.defaults.layout);var init,createWindow,safeToAppend,getConsoleWindow,open;var appenderName=inPage?"InPageAppender":"PopUpAppender";var checkCanConfigure=function(configOptionName){if(consoleWindowCreated){handleError(appenderName+": configuration option '"+configOptionName+"' may not be set after the appender has been initialized");return false;}

-return true;};var consoleWindowExists=function(){return(consoleWindowLoaded&&isSupported&&!consoleClosed);};this.isNewestMessageAtTop=function(){return newestMessageAtTop;};this.setNewestMessageAtTop=function(newestMessageAtTopParam){newestMessageAtTop=bool(newestMessageAtTopParam);if(consoleWindowExists()){getConsoleWindow().setNewestAtTop(newestMessageAtTop);}};this.isScrollToLatestMessage=function(){return scrollToLatestMessage;};this.setScrollToLatestMessage=function(scrollToLatestMessageParam){scrollToLatestMessage=bool(scrollToLatestMessageParam);if(consoleWindowExists()){getConsoleWindow().setScrollToLatest(scrollToLatestMessage);}};this.getWidth=function(){return width;};this.setWidth=function(widthParam){if(checkCanConfigure("width")){width=extractStringFromParam(widthParam,width);}};this.getHeight=function(){return height;};this.setHeight=function(heightParam){if(checkCanConfigure("height")){height=extractStringFromParam(heightParam,height);}};this.getMaxMessages=function(){return maxMessages;};this.setMaxMessages=function(maxMessagesParam){maxMessages=extractIntFromParam(maxMessagesParam,maxMessages);if(consoleWindowExists()){getConsoleWindow().setMaxMessages(maxMessages);}};this.isShowCommandLine=function(){return showCommandLine;};this.setShowCommandLine=function(showCommandLineParam){showCommandLine=bool(showCommandLineParam);if(consoleWindowExists()){getConsoleWindow().setShowCommandLine(showCommandLine);}};this.isShowHideButton=function(){return showHideButton;};this.setShowHideButton=function(showHideButtonParam){showHideButton=bool(showHideButtonParam);if(consoleWindowExists()){getConsoleWindow().setShowHideButton(showHideButton);}};this.isShowCloseButton=function(){return showCloseButton;};this.setShowCloseButton=function(showCloseButtonParam){showCloseButton=bool(showCloseButtonParam);if(consoleWindowExists()){getConsoleWindow().setShowCloseButton(showCloseButton);}};this.getCommandLineObjectExpansionDepth=function(){return commandLineObjectExpansionDepth;};this.setCommandLineObjectExpansionDepth=function(commandLineObjectExpansionDepthParam){commandLineObjectExpansionDepth=extractIntFromParam(commandLineObjectExpansionDepthParam,commandLineObjectExpansionDepth);};var minimized=initiallyMinimized;this.isInitiallyMinimized=function(){return initiallyMinimized;};this.setInitiallyMinimized=function(initiallyMinimizedParam){if(checkCanConfigure("initiallyMinimized")){initiallyMinimized=bool(initiallyMinimizedParam);minimized=initiallyMinimized;}};this.isUseDocumentWrite=function(){return useDocumentWrite;};this.setUseDocumentWrite=function(useDocumentWriteParam){if(checkCanConfigure("useDocumentWrite")){useDocumentWrite=bool(useDocumentWriteParam);}};function QueuedLoggingEvent(loggingEvent,formattedMessage){this.loggingEvent=loggingEvent;this.levelName=loggingEvent.level.name;this.formattedMessage=formattedMessage;}

-QueuedLoggingEvent.prototype.append=function(){getConsoleWindow().log(this.levelName,this.formattedMessage);};function QueuedGroup(name,initiallyExpanded){this.name=name;this.initiallyExpanded=initiallyExpanded;}

-QueuedGroup.prototype.append=function(){getConsoleWindow().group(this.name,this.initiallyExpanded);};function QueuedGroupEnd(){}

-QueuedGroupEnd.prototype.append=function(){getConsoleWindow().groupEnd();};var checkAndAppend=function(){safeToAppend();if(!initialized){init();}else if(consoleClosed&&reopenWhenClosed){createWindow();}

-if(safeToAppend()){appendQueuedLoggingEvents();}};this.append=function(loggingEvent){if(isSupported){var formattedMessage=appender.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}

-queuedLoggingEvents.push(new QueuedLoggingEvent(loggingEvent,formattedMessage));checkAndAppend();}};this.group=function(name,initiallyExpanded){if(isSupported){queuedLoggingEvents.push(new QueuedGroup(name,initiallyExpanded));checkAndAppend();}};this.groupEnd=function(){if(isSupported){queuedLoggingEvents.push(new QueuedGroupEnd());checkAndAppend();}};var appendQueuedLoggingEvents=function(){var currentLoggingEvent;while(queuedLoggingEvents.length>0){queuedLoggingEvents.shift().append();}

-if(focusConsoleWindow){getConsoleWindow().focus();}};this.setAddedToLogger=function(logger){this.loggers.push(logger);if(enabled&&!lazyInit){init();}};this.clear=function(){if(consoleWindowExists()){getConsoleWindow().clearLog();}

-queuedLoggingEvents.length=0;};this.focus=function(){if(consoleWindowExists()){getConsoleWindow().focus();}};this.focusCommandLine=function(){if(consoleWindowExists()){getConsoleWindow().focusCommandLine();}};this.focusSearch=function(){if(consoleWindowExists()){getConsoleWindow().focusSearch();}};var commandWindow=window;this.getCommandWindow=function(){return commandWindow;};this.setCommandWindow=function(commandWindowParam){commandWindow=commandWindowParam;};this.executeLastCommand=function(){if(consoleWindowExists()){getConsoleWindow().evalLastCommand();}};var commandLayout=new PatternLayout("%m");this.getCommandLayout=function(){return commandLayout;};this.setCommandLayout=function(commandLayoutParam){commandLayout=commandLayoutParam;};this.evalCommandAndAppend=function(expr){var commandReturnValue={appendResult:true,isError:false};var commandOutput="";try{var result,i;if(!commandWindow.eval&&commandWindow.execScript){commandWindow.execScript("null");}

-var commandLineFunctionsHash={};for(i=0,len=commandLineFunctions.length;i<len;i++){commandLineFunctionsHash[commandLineFunctions[i][0]]=commandLineFunctions[i][1];}

-var objectsToRestore=[];var addObjectToRestore=function(name){objectsToRestore.push([name,commandWindow[name]]);};addObjectToRestore("appender");commandWindow.appender=appender;addObjectToRestore("commandReturnValue");commandWindow.commandReturnValue=commandReturnValue;addObjectToRestore("commandLineFunctionsHash");commandWindow.commandLineFunctionsHash=commandLineFunctionsHash;var addFunctionToWindow=function(name){addObjectToRestore(name);commandWindow[name]=function(){return this.commandLineFunctionsHash[name](appender,arguments,commandReturnValue);};};for(i=0,len=commandLineFunctions.length;i<len;i++){addFunctionToWindow(commandLineFunctions[i][0]);}

-if(commandWindow===window&&commandWindow.execScript){addObjectToRestore("evalExpr");addObjectToRestore("result");window.evalExpr=expr;commandWindow.execScript("window.result=eval(window.evalExpr);");result=window.result;}else{result=commandWindow.eval(expr);}

-commandOutput=isUndefined(result)?result:formatObjectExpansion(result,commandLineObjectExpansionDepth);for(i=0,len=objectsToRestore.length;i<len;i++){commandWindow[objectsToRestore[i][0]]=objectsToRestore[i][1];}}catch(ex){commandOutput="Error evaluating command: "+getExceptionStringRep(ex);commandReturnValue.isError=true;}

-if(commandReturnValue.appendResult){var message=">>> "+expr;if(!isUndefined(commandOutput)){message+=newLine+commandOutput;}

-var level=commandReturnValue.isError?Level.ERROR:Level.INFO;var loggingEvent=new LoggingEvent(null,new Date(),level,[message],null);var mainLayout=this.getLayout();this.setLayout(commandLayout);this.append(loggingEvent);this.setLayout(mainLayout);}};var commandLineFunctions=defaultCommandLineFunctions.concat([]);this.addCommandLineFunction=function(functionName,commandLineFunction){commandLineFunctions.push([functionName,commandLineFunction]);};var commandHistoryCookieName="log4javascriptCommandHistory";this.storeCommandHistory=function(commandHistory){setCookie(commandHistoryCookieName,commandHistory.join(","));};var writeHtml=function(doc){var lines=getConsoleHtmlLines();doc.open();for(var i=0,len=lines.length;i<len;i++){doc.writeln(lines[i]);}

-doc.close();};this.setEventTypes(["load","unload"]);var consoleWindowLoadHandler=function(){var win=getConsoleWindow();win.setAppender(appender);win.setNewestAtTop(newestMessageAtTop);win.setScrollToLatest(scrollToLatestMessage);win.setMaxMessages(maxMessages);win.setShowCommandLine(showCommandLine);win.setShowHideButton(showHideButton);win.setShowCloseButton(showCloseButton);win.setMainWindow(window);var storedValue=getCookie(commandHistoryCookieName);if(storedValue){win.commandHistory=storedValue.split(",");win.currentCommandIndex=win.commandHistory.length;}

-appender.dispatchEvent("load",{"win":win});};this.unload=function(){logLog.debug("unload "+this+", caller: "+this.unload.caller);if(!consoleClosed){logLog.debug("really doing unload "+this);consoleClosed=true;consoleWindowLoaded=false;consoleWindowCreated=false;appender.dispatchEvent("unload",{});}};var pollConsoleWindow=function(windowTest,interval,successCallback,errorMessage){function doPoll(){try{if(consoleClosed){clearInterval(poll);}

-if(windowTest(getConsoleWindow())){clearInterval(poll);successCallback();}}catch(ex){clearInterval(poll);isSupported=false;handleError(errorMessage,ex);}}

-var poll=setInterval(doPoll,interval);};var getConsoleUrl=function(){var documentDomainSet=(document.domain!=location.hostname);return useDocumentWrite?"":getBaseUrl()+"console.html"+

-(documentDomainSet?"?log4javascript_domain="+escape(document.domain):"");};if(inPage){var containerElement=null;var cssProperties=[];this.addCssProperty=function(name,value){if(checkCanConfigure("cssProperties")){cssProperties.push([name,value]);}};var windowCreationStarted=false;var iframeContainerDiv;var iframeId=uniqueId+"_InPageAppender_"+consoleAppenderId;this.hide=function(){if(initialized&&consoleWindowCreated){if(consoleWindowExists()){getConsoleWindow().$("command").blur();}

-iframeContainerDiv.style.display="none";minimized=true;}};this.show=function(){if(initialized){if(consoleWindowCreated){iframeContainerDiv.style.display="block";this.setShowCommandLine(showCommandLine);minimized=false;}else if(!windowCreationStarted){createWindow(true);}}};this.isVisible=function(){return!minimized&&!consoleClosed;};this.close=function(fromButton){if(!consoleClosed&&(!fromButton||confirm("This will permanently remove the console from the page. No more messages will be logged. Do you wish to continue?"))){iframeContainerDiv.parentNode.removeChild(iframeContainerDiv);this.unload();}};open=function(){var initErrorMessage="InPageAppender.open: unable to create console iframe";function finalInit(){try{if(!initiallyMinimized){appender.show();}

-consoleWindowLoadHandler();consoleWindowLoaded=true;appendQueuedLoggingEvents();}catch(ex){isSupported=false;handleError(initErrorMessage,ex);}}

-function writeToDocument(){try{var windowTest=function(win){return isLoaded(win);};if(useDocumentWrite){writeHtml(getConsoleWindow().document);}

-if(windowTest(getConsoleWindow())){finalInit();}else{pollConsoleWindow(windowTest,100,finalInit,initErrorMessage);}}catch(ex){isSupported=false;handleError(initErrorMessage,ex);}}

-minimized=false;iframeContainerDiv=containerElement.appendChild(document.createElement("div"));iframeContainerDiv.style.width=width;iframeContainerDiv.style.height=height;iframeContainerDiv.style.border="solid gray 1px";for(var i=0,len=cssProperties.length;i<len;i++){iframeContainerDiv.style[cssProperties[i][0]]=cssProperties[i][1];}

-var iframeSrc=useDocumentWrite?"":" src='"+getConsoleUrl()+"'";iframeContainerDiv.innerHTML="<iframe id='"+iframeId+"' name='"+iframeId+"' width='100%' height='100%' frameborder='0'"+iframeSrc+" scrolling='no'></iframe>";consoleClosed=false;var iframeDocumentExistsTest=function(win){try{return bool(win)&&bool(win.document);}catch(ex){return false;}};if(iframeDocumentExistsTest(getConsoleWindow())){writeToDocument();}else{pollConsoleWindow(iframeDocumentExistsTest,100,writeToDocument,initErrorMessage);}

-consoleWindowCreated=true;};createWindow=function(show){if(show||!initiallyMinimized){var pageLoadHandler=function(){if(!container){containerElement=document.createElement("div");containerElement.style.position="fixed";containerElement.style.left="0";containerElement.style.right="0";containerElement.style.bottom="0";document.body.appendChild(containerElement);appender.addCssProperty("borderWidth","1px 0 0 0");appender.addCssProperty("zIndex",1000000);open();}else{try{var el=document.getElementById(container);if(el.nodeType==1){containerElement=el;}

-open();}catch(ex){handleError("InPageAppender.init: invalid container element '"+container+"' supplied",ex);}}};if(pageLoaded&&container&&container.appendChild){containerElement=container;open();}else if(pageLoaded){pageLoadHandler();}else{log4javascript.addEventListener("load",pageLoadHandler);}

-windowCreationStarted=true;}};init=function(){createWindow();initialized=true;};getConsoleWindow=function(){var iframe=window.frames[iframeId];if(iframe){return iframe;}};safeToAppend=function(){if(isSupported&&!consoleClosed){if(consoleWindowCreated&&!consoleWindowLoaded&&getConsoleWindow()&&isLoaded(getConsoleWindow())){consoleWindowLoaded=true;}

-return consoleWindowLoaded;}

-return false;};}else{var useOldPopUp=appender.defaults.useOldPopUp;var complainAboutPopUpBlocking=appender.defaults.complainAboutPopUpBlocking;var reopenWhenClosed=this.defaults.reopenWhenClosed;this.isUseOldPopUp=function(){return useOldPopUp;};this.setUseOldPopUp=function(useOldPopUpParam){if(checkCanConfigure("useOldPopUp")){useOldPopUp=bool(useOldPopUpParam);}};this.isComplainAboutPopUpBlocking=function(){return complainAboutPopUpBlocking;};this.setComplainAboutPopUpBlocking=function(complainAboutPopUpBlockingParam){if(checkCanConfigure("complainAboutPopUpBlocking")){complainAboutPopUpBlocking=bool(complainAboutPopUpBlockingParam);}};this.isFocusPopUp=function(){return focusConsoleWindow;};this.setFocusPopUp=function(focusPopUpParam){focusConsoleWindow=bool(focusPopUpParam);};this.isReopenWhenClosed=function(){return reopenWhenClosed;};this.setReopenWhenClosed=function(reopenWhenClosedParam){reopenWhenClosed=bool(reopenWhenClosedParam);};this.close=function(){logLog.debug("close "+this);try{popUp.close();this.unload();}catch(ex){}};this.hide=function(){logLog.debug("hide "+this);if(consoleWindowExists()){this.close();}};this.show=function(){logLog.debug("show "+this);if(!consoleWindowCreated){open();}};this.isVisible=function(){return safeToAppend();};var popUp;open=function(){var windowProperties="width="+width+",height="+height+",status,resizable";var frameInfo="";try{var frameEl=window.frameElement;if(frameEl){frameInfo="_"+frameEl.tagName+"_"+(frameEl.name||frameEl.id||"");}}catch(e){frameInfo="_inaccessibleParentFrame";}

-var windowName="PopUp_"+location.host.replace(/[^a-z0-9]/gi,"_")+"_"+consoleAppenderId+frameInfo;if(!useOldPopUp||!useDocumentWrite){windowName=windowName+"_"+uniqueId;}

-var checkPopUpClosed=function(win){if(consoleClosed){return true;}else{try{return bool(win)&&win.closed;}catch(ex){}}

-return false;};var popUpClosedCallback=function(){if(!consoleClosed){appender.unload();}};function finalInit(){getConsoleWindow().setCloseIfOpenerCloses(!useOldPopUp||!useDocumentWrite);consoleWindowLoadHandler();consoleWindowLoaded=true;appendQueuedLoggingEvents();pollConsoleWindow(checkPopUpClosed,500,popUpClosedCallback,"PopUpAppender.checkPopUpClosed: error checking pop-up window");}

-try{popUp=window.open(getConsoleUrl(),windowName,windowProperties);consoleClosed=false;consoleWindowCreated=true;if(popUp&&popUp.document){if(useDocumentWrite&&useOldPopUp&&isLoaded(popUp)){popUp.mainPageReloaded();finalInit();}else{if(useDocumentWrite){writeHtml(popUp.document);}

-var popUpLoadedTest=function(win){return bool(win)&&isLoaded(win);};if(isLoaded(popUp)){finalInit();}else{pollConsoleWindow(popUpLoadedTest,100,finalInit,"PopUpAppender.init: unable to create console window");}}}else{isSupported=false;logLog.warn("PopUpAppender.init: pop-ups blocked, please unblock to use PopUpAppender");if(complainAboutPopUpBlocking){handleError("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");}}}catch(ex){handleError("PopUpAppender.init: error creating pop-up",ex);}};createWindow=function(){if(!initiallyMinimized){open();}};init=function(){createWindow();initialized=true;};getConsoleWindow=function(){return popUp;};safeToAppend=function(){if(isSupported&&!isUndefined(popUp)&&!consoleClosed){if(popUp.closed||(consoleWindowLoaded&&isUndefined(popUp.closed))){appender.unload();logLog.debug("PopUpAppender: pop-up closed");return false;}

-if(!consoleWindowLoaded&&isLoaded(popUp)){consoleWindowLoaded=true;}}

-return isSupported&&consoleWindowLoaded&&!consoleClosed;};}

-this.getConsoleWindow=getConsoleWindow;};ConsoleAppender.addGlobalCommandLineFunction=function(functionName,commandLineFunction){defaultCommandLineFunctions.push([functionName,commandLineFunction]);};function PopUpAppender(lazyInit,initiallyMinimized,useDocumentWrite,width,height){this.create(false,null,lazyInit,initiallyMinimized,useDocumentWrite,width,height,this.defaults.focusPopUp);}

-PopUpAppender.prototype=new ConsoleAppender();PopUpAppender.prototype.defaults={layout:new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),initiallyMinimized:false,focusPopUp:false,lazyInit:true,useOldPopUp:true,complainAboutPopUpBlocking:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:"600",height:"400",reopenWhenClosed:false,maxMessages:null,showCommandLine:true,commandLineObjectExpansionDepth:1,showHideButton:false,showCloseButton:true,showLogEntryDeleteButtons:true,useDocumentWrite:true};PopUpAppender.prototype.toString=function(){return"PopUpAppender";};log4javascript.PopUpAppender=PopUpAppender;function InPageAppender(container,lazyInit,initiallyMinimized,useDocumentWrite,width,height){this.create(true,container,lazyInit,initiallyMinimized,useDocumentWrite,width,height,false);}

-InPageAppender.prototype=new ConsoleAppender();InPageAppender.prototype.defaults={layout:new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),initiallyMinimized:false,lazyInit:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:"100%",height:"220px",maxMessages:null,showCommandLine:true,commandLineObjectExpansionDepth:1,showHideButton:false,showCloseButton:false,showLogEntryDeleteButtons:true,useDocumentWrite:true};InPageAppender.prototype.toString=function(){return"InPageAppender";};log4javascript.InPageAppender=InPageAppender;log4javascript.InlineAppender=InPageAppender;})();function padWithSpaces(str,len){if(str.length<len){var spaces=[];var numberOfSpaces=Math.max(0,len-str.length);for(var i=0;i<numberOfSpaces;i++){spaces[i]=" ";}

-str+=spaces.join("");}

-return str;}

-(function(){function dir(obj){var maxLen=0;for(var p in obj){maxLen=Math.max(toStr(p).length,maxLen);}

-var propList=[];for(p in obj){var propNameStr="  "+padWithSpaces(toStr(p),maxLen+2);var propVal;try{propVal=splitIntoLines(toStr(obj[p])).join(padWithSpaces(newLine,maxLen+6));}catch(ex){propVal="[Error obtaining property. Details: "+getExceptionMessage(ex)+"]";}

-propList.push(propNameStr+propVal);}

-return propList.join(newLine);}

-var nodeTypes={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12};var preFormattedElements=["script","pre"];var emptyElements=["br","img","hr","param","link","area","input","col","base","meta"];var indentationUnit="  ";function getXhtml(rootNode,includeRootNode,indentation,startNewLine,preformatted){includeRootNode=(typeof includeRootNode=="undefined")?true:!!includeRootNode;if(typeof indentation!="string"){indentation="";}

-startNewLine=!!startNewLine;preformatted=!!preformatted;var xhtml;function isWhitespace(node){return((node.nodeType==nodeTypes.TEXT_NODE)&&/^[ \t\r\n]*$/.test(node.nodeValue));}

-function fixAttributeValue(attrValue){return attrValue.toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/"/g,"&quot;");}

-function getStyleAttributeValue(el){var stylePairs=el.style.cssText.split(";");var styleValue="";var isFirst=true;for(var j=0,len=stylePairs.length;j<len;j++){var nameValueBits=stylePairs[j].split(":");var props=[];if(!/^\s*$/.test(nameValueBits[0])){props.push(trim(nameValueBits[0]).toLowerCase()+":"+trim(nameValueBits[1]));}

-styleValue=props.join(";");}

-return styleValue;}

-function getNamespace(el){if(el.prefix){return el.prefix;}else if(el.outerHTML){var regex=new RegExp("<([^:]+):"+el.tagName+"[^>]*>","i");if(regex.test(el.outerHTML)){return RegExp.$1.toLowerCase();}}

-return"";}

-var lt="<";var gt=">";if(includeRootNode&&rootNode.nodeType!=nodeTypes.DOCUMENT_FRAGMENT_NODE){switch(rootNode.nodeType){case nodeTypes.ELEMENT_NODE:var tagName=rootNode.tagName.toLowerCase();xhtml=startNewLine?newLine+indentation:"";xhtml+=lt;var prefix=getNamespace(rootNode);var hasPrefix=!!prefix;if(hasPrefix){xhtml+=prefix+":";}

-xhtml+=tagName;for(i=0,len=rootNode.attributes.length;i<len;i++){var currentAttr=rootNode.attributes[i];if(!currentAttr.specified||currentAttr.nodeValue===null||currentAttr.nodeName.toLowerCase()==="style"||typeof currentAttr.nodeValue!=="string"||currentAttr.nodeName.indexOf("_moz")===0){continue;}

-xhtml+=" "+currentAttr.nodeName.toLowerCase()+"=\"";xhtml+=fixAttributeValue(currentAttr.nodeValue);xhtml+="\"";}

-if(rootNode.style.cssText){var styleValue=getStyleAttributeValue(rootNode);if(styleValue!==""){xhtml+=" style=\""+getStyleAttributeValue(rootNode)+"\"";}}

-if(array_contains(emptyElements,tagName)||(hasPrefix&&!rootNode.hasChildNodes())){xhtml+="/"+gt;}else{xhtml+=gt;var childStartNewLine=!(rootNode.childNodes.length===1&&rootNode.childNodes[0].nodeType===nodeTypes.TEXT_NODE);var childPreformatted=array_contains(preFormattedElements,tagName);for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation+indentationUnit,childStartNewLine,childPreformatted);}

-var endTag=lt+"/"+tagName+gt;xhtml+=childStartNewLine?newLine+indentation+endTag:endTag;}

-return xhtml;case nodeTypes.TEXT_NODE:if(isWhitespace(rootNode)){xhtml="";}else{if(preformatted){xhtml=rootNode.nodeValue;}else{var lines=splitIntoLines(trim(rootNode.nodeValue));var trimmedLines=[];for(var i=0,len=lines.length;i<len;i++){trimmedLines[i]=trim(lines[i]);}

-xhtml=trimmedLines.join(newLine+indentation);}

-if(startNewLine){xhtml=newLine+indentation+xhtml;}}

-return xhtml;case nodeTypes.CDATA_SECTION_NODE:return"<![CDA"+"TA["+rootNode.nodeValue+"]"+"]>"+newLine;case nodeTypes.DOCUMENT_NODE:xhtml="";for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation);}

-return xhtml;default:return"";}}else{xhtml="";for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation+indentationUnit);}

-return xhtml;}}

-function createCommandLineFunctions(){ConsoleAppender.addGlobalCommandLineFunction("$",function(appender,args,returnValue){return document.getElementById(args[0]);});ConsoleAppender.addGlobalCommandLineFunction("dir",function(appender,args,returnValue){var lines=[];for(var i=0,len=args.length;i<len;i++){lines[i]=dir(args[i]);}

-return lines.join(newLine+newLine);});ConsoleAppender.addGlobalCommandLineFunction("dirxml",function(appender,args,returnValue){var lines=[];for(var i=0,len=args.length;i<len;i++){var win=appender.getCommandWindow();lines[i]=getXhtml(args[i]);}

-return lines.join(newLine+newLine);});ConsoleAppender.addGlobalCommandLineFunction("cd",function(appender,args,returnValue){var win,message;if(args.length===0||args[0]===""){win=window;message="Command line set to run in main window";}else{if(args[0].window==args[0]){win=args[0];message="Command line set to run in frame '"+args[0].name+"'";}else{win=window.frames[args[0]];if(win){message="Command line set to run in frame '"+args[0]+"'";}else{returnValue.isError=true;message="Frame '"+args[0]+"' does not exist";win=appender.getCommandWindow();}}}

-appender.setCommandWindow(win);return message;});ConsoleAppender.addGlobalCommandLineFunction("clear",function(appender,args,returnValue){returnValue.appendResult=false;appender.clear();});ConsoleAppender.addGlobalCommandLineFunction("keys",function(appender,args,returnValue){var keys=[];for(var k in args[0]){keys.push(k);}

-return keys;});ConsoleAppender.addGlobalCommandLineFunction("values",function(appender,args,returnValue){var values=[];for(var k in args[0]){try{values.push(args[0][k]);}catch(ex){logLog.warn("values(): Unable to obtain value for key "+k+". Details: "+getExceptionMessage(ex));}}

-return values;});ConsoleAppender.addGlobalCommandLineFunction("expansionDepth",function(appender,args,returnValue){var expansionDepth=parseInt(args[0],10);if(isNaN(expansionDepth)||expansionDepth<0){returnValue.isError=true;return""+args[0]+" is not a valid expansion depth";}else{appender.setCommandLineObjectExpansionDepth(expansionDepth);return"Object expansion depth set to "+expansionDepth;}});}

-function init(){createCommandLineFunctions();}

-init();})();log4javascript.setDocumentReady=function(){pageLoaded=true;log4javascript.dispatchEvent("load",{});};if(window.addEventListener){window.addEventListener("load",log4javascript.setDocumentReady,false);}else if(window.attachEvent){window.attachEvent("onload",log4javascript.setDocumentReady);}else{var oldOnload=window.onload;if(typeof window.onload!="function"){window.onload=log4javascript.setDocumentReady;}else{window.onload=function(evt){if(oldOnload){oldOnload(evt);}

-log4javascript.setDocumentReady();};}}

-window.log4javascript=log4javascript;return log4javascript;})();

diff --git a/xos/core/static/log4javascript-1.4.6/log4javascript_uncompressed.js b/xos/core/static/log4javascript-1.4.6/log4javascript_uncompressed.js
deleted file mode 100644
index 146c266..0000000
--- a/xos/core/static/log4javascript-1.4.6/log4javascript_uncompressed.js
+++ /dev/null
@@ -1,5897 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/**

- * Copyright 2013 Tim Down.

- *

- * Licensed 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.

- */

-

-/**

- * log4javascript

- *

- * log4javascript is a logging framework for JavaScript based on log4j

- * for Java. This file contains all core log4javascript code and is the only

- * file required to use log4javascript, unless you require support for

- * document.domain, in which case you will also need console.html, which must be

- * stored in the same directory as the main log4javascript.js file.

- *

- * Author: Tim Down <tim@log4javascript.org>

- * Version: 1.4.6

- * Edition: log4javascript

- * Build date: 19 March 2013

- * Website: http://log4javascript.org

- */

-

-/* -------------------------------------------------------------------------- */

-// Array-related stuff

-

-// Next three methods are solely for IE5, which is missing them

-if (!Array.prototype.push) {

-	Array.prototype.push = function() {

-		for (var i = 0, len = arguments.length; i < len; i++){

-			this[this.length] = arguments[i];

-		}

-		return this.length;

-	};

-}

-

-if (!Array.prototype.shift) {

-	Array.prototype.shift = function() {

-		if (this.length > 0) {

-			var firstItem = this[0];

-			for (var i = 0, len = this.length - 1; i < len; i++) {

-				this[i] = this[i + 1];

-			}

-			this.length = this.length - 1;

-			return firstItem;

-		}

-	};

-}

-

-if (!Array.prototype.splice) {

-	Array.prototype.splice = function(startIndex, deleteCount) {

-		var itemsAfterDeleted = this.slice(startIndex + deleteCount);

-		var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);

-		this.length = startIndex;

-		// Copy the arguments into a proper Array object

-		var argumentsArray = [];

-		for (var i = 0, len = arguments.length; i < len; i++) {

-			argumentsArray[i] = arguments[i];

-		}

-		var itemsToAppend = (argumentsArray.length > 2) ?

-			itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;

-		for (i = 0, len = itemsToAppend.length; i < len; i++) {

-			this.push(itemsToAppend[i]);

-		}

-		return itemsDeleted;

-	};

-}

-

-/* -------------------------------------------------------------------------- */

-

-var log4javascript = (function() {

-

-	function isUndefined(obj) {

-		return typeof obj == "undefined";

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// Custom event support

-

-	function EventSupport() {}

-

-	EventSupport.prototype = {

-		eventTypes: [],

-		eventListeners: {},

-		setEventTypes: function(eventTypesParam) {

-			if (eventTypesParam instanceof Array) {

-				this.eventTypes = eventTypesParam;

-				this.eventListeners = {};

-				for (var i = 0, len = this.eventTypes.length; i < len; i++) {

-					this.eventListeners[this.eventTypes[i]] = [];

-				}

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: setEventTypes: eventTypes parameter must be an Array");

-			}

-		},

-

-		addEventListener: function(eventType, listener) {

-			if (typeof listener == "function") {

-				if (!array_contains(this.eventTypes, eventType)) {

-					handleError("log4javascript.EventSupport [" + this + "]: addEventListener: no event called '" + eventType + "'");

-				}

-				this.eventListeners[eventType].push(listener);

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: addEventListener: listener must be a function");

-			}

-		},

-

-		removeEventListener: function(eventType, listener) {

-			if (typeof listener == "function") {

-				if (!array_contains(this.eventTypes, eventType)) {

-					handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: no event called '" + eventType + "'");

-				}

-				array_remove(this.eventListeners[eventType], listener);

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: listener must be a function");

-			}

-		},

-

-		dispatchEvent: function(eventType, eventArgs) {

-			if (array_contains(this.eventTypes, eventType)) {

-				var listeners = this.eventListeners[eventType];

-				for (var i = 0, len = listeners.length; i < len; i++) {

-					listeners[i](this, eventType, eventArgs);

-				}

-			} else {

-				handleError("log4javascript.EventSupport [" + this + "]: dispatchEvent: no event called '" + eventType + "'");

-			}

-		}

-	};

-

-	/* -------------------------------------------------------------------------- */

-

-	var applicationStartDate = new Date();

-	var uniqueId = "log4javascript_" + applicationStartDate.getTime() + "_" +

-		Math.floor(Math.random() * 100000000);

-	var emptyFunction = function() {};

-	var newLine = "\r\n";

-	var pageLoaded = false;

-

-	// Create main log4javascript object; this will be assigned public properties

-	function Log4JavaScript() {}

-	Log4JavaScript.prototype = new EventSupport();

-

-	log4javascript = new Log4JavaScript();

-	log4javascript.version = "1.4.6";

-	log4javascript.edition = "log4javascript";

-

-	/* -------------------------------------------------------------------------- */

-	// Utility functions

-

-	function toStr(obj) {

-		if (obj && obj.toString) {

-			return obj.toString();

-		} else {

-			return String(obj);

-		}

-	}

-

-	function getExceptionMessage(ex) {

-		if (ex.message) {

-			return ex.message;

-		} else if (ex.description) {

-			return ex.description;

-		} else {

-			return toStr(ex);

-		}

-	}

-

-	// Gets the portion of the URL after the last slash

-	function getUrlFileName(url) {

-		var lastSlashIndex = Math.max(url.lastIndexOf("/"), url.lastIndexOf("\\"));

-		return url.substr(lastSlashIndex + 1);

-	}

-

-	// Returns a nicely formatted representation of an error

-	function getExceptionStringRep(ex) {

-		if (ex) {

-			var exStr = "Exception: " + getExceptionMessage(ex);

-			try {

-				if (ex.lineNumber) {

-					exStr += " on line number " + ex.lineNumber;

-				}

-				if (ex.fileName) {

-					exStr += " in file " + getUrlFileName(ex.fileName);

-				}

-			} catch (localEx) {

-				logLog.warn("Unable to obtain file and line information for error");

-			}

-			if (showStackTraces && ex.stack) {

-				exStr += newLine + "Stack trace:" + newLine + ex.stack;

-			}

-			return exStr;

-		}

-		return null;

-	}

-

-	function bool(obj) {

-		return Boolean(obj);

-	}

-

-	function trim(str) {

-		return str.replace(/^\s+/, "").replace(/\s+$/, "");

-	}

-

-	function splitIntoLines(text) {

-		// Ensure all line breaks are \n only

-		var text2 = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");

-		return text2.split("\n");

-	}

-

-	var urlEncode = (typeof window.encodeURIComponent != "undefined") ?

-		function(str) {

-			return encodeURIComponent(str);

-		}: 

-		function(str) {

-			return escape(str).replace(/\+/g, "%2B").replace(/"/g, "%22").replace(/'/g, "%27").replace(/\//g, "%2F").replace(/=/g, "%3D");

-		};

-

-	var urlDecode = (typeof window.decodeURIComponent != "undefined") ?

-		function(str) {

-			return decodeURIComponent(str);

-		}: 

-		function(str) {

-			return unescape(str).replace(/%2B/g, "+").replace(/%22/g, "\"").replace(/%27/g, "'").replace(/%2F/g, "/").replace(/%3D/g, "=");

-		};

-

-	function array_remove(arr, val) {

-		var index = -1;

-		for (var i = 0, len = arr.length; i < len; i++) {

-			if (arr[i] === val) {

-				index = i;

-				break;

-			}

-		}

-		if (index >= 0) {

-			arr.splice(index, 1);

-			return true;

-		} else {

-			return false;

-		}

-	}

-

-	function array_contains(arr, val) {

-		for(var i = 0, len = arr.length; i < len; i++) {

-			if (arr[i] == val) {

-				return true;

-			}

-		}

-		return false;

-	}

-

-	function extractBooleanFromParam(param, defaultValue) {

-		if (isUndefined(param)) {

-			return defaultValue;

-		} else {

-			return bool(param);

-		}

-	}

-

-	function extractStringFromParam(param, defaultValue) {

-		if (isUndefined(param)) {

-			return defaultValue;

-		} else {

-			return String(param);

-		}

-	}

-

-	function extractIntFromParam(param, defaultValue) {

-		if (isUndefined(param)) {

-			return defaultValue;

-		} else {

-			try {

-				var value = parseInt(param, 10);

-				return isNaN(value) ? defaultValue : value;

-			} catch (ex) {

-				logLog.warn("Invalid int param " + param, ex);

-				return defaultValue;

-			}

-		}

-	}

-

-	function extractFunctionFromParam(param, defaultValue) {

-		if (typeof param == "function") {

-			return param;

-		} else {

-			return defaultValue;

-		}

-	}

-

-	function isError(err) {

-		return (err instanceof Error);

-	}

-

-	if (!Function.prototype.apply){

-		Function.prototype.apply = function(obj, args) {

-			var methodName = "__apply__";

-			if (typeof obj[methodName] != "undefined") {

-				methodName += String(Math.random()).substr(2);

-			}

-			obj[methodName] = this;

-

-			var argsStrings = [];

-			for (var i = 0, len = args.length; i < len; i++) {

-				argsStrings[i] = "args[" + i + "]";

-			}

-			var script = "obj." + methodName + "(" + argsStrings.join(",") + ")";

-			var returnValue = eval(script);

-			delete obj[methodName];

-			return returnValue;

-		};

-	}

-

-	if (!Function.prototype.call){

-		Function.prototype.call = function(obj) {

-			var args = [];

-			for (var i = 1, len = arguments.length; i < len; i++) {

-				args[i - 1] = arguments[i];

-			}

-			return this.apply(obj, args);

-		};

-	}

-

-	function getListenersPropertyName(eventName) {

-		return "__log4javascript_listeners__" + eventName;

-	}

-

-	function addEvent(node, eventName, listener, useCapture, win) {

-		win = win ? win : window;

-		if (node.addEventListener) {

-			node.addEventListener(eventName, listener, useCapture);

-		} else if (node.attachEvent) {

-			node.attachEvent("on" + eventName, listener);

-		} else {

-			var propertyName = getListenersPropertyName(eventName);

-			if (!node[propertyName]) {

-				node[propertyName] = [];

-				// Set event handler

-				node["on" + eventName] = function(evt) {

-					evt = getEvent(evt, win);

-					var listenersPropertyName = getListenersPropertyName(eventName);

-

-					// Clone the array of listeners to leave the original untouched

-					var listeners = this[listenersPropertyName].concat([]);

-					var currentListener;

-

-					// Call each listener in turn

-					while ((currentListener = listeners.shift())) {

-						currentListener.call(this, evt);

-					}

-				};

-			}

-			node[propertyName].push(listener);

-		}

-	}

-

-	function removeEvent(node, eventName, listener, useCapture) {

-		if (node.removeEventListener) {

-			node.removeEventListener(eventName, listener, useCapture);

-		} else if (node.detachEvent) {

-			node.detachEvent("on" + eventName, listener);

-		} else {

-			var propertyName = getListenersPropertyName(eventName);

-			if (node[propertyName]) {

-				array_remove(node[propertyName], listener);

-			}

-		}

-	}

-

-	function getEvent(evt, win) {

-		win = win ? win : window;

-		return evt ? evt : win.event;

-	}

-

-	function stopEventPropagation(evt) {

-		if (evt.stopPropagation) {

-			evt.stopPropagation();

-		} else if (typeof evt.cancelBubble != "undefined") {

-			evt.cancelBubble = true;

-		}

-		evt.returnValue = false;

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// Simple logging for log4javascript itself

-

-	var logLog = {

-		quietMode: false,

-

-		debugMessages: [],

-

-		setQuietMode: function(quietMode) {

-			this.quietMode = bool(quietMode);

-		},

-

-		numberOfErrors: 0,

-

-		alertAllErrors: false,

-

-		setAlertAllErrors: function(alertAllErrors) {

-			this.alertAllErrors = alertAllErrors;

-		},

-

-		debug: function(message) {

-			this.debugMessages.push(message);

-		},

-

-		displayDebug: function() {

-			alert(this.debugMessages.join(newLine));

-		},

-

-		warn: function(message, exception) {

-		},

-

-		error: function(message, exception) {

-			if (++this.numberOfErrors == 1 || this.alertAllErrors) {

-				if (!this.quietMode) {

-					var alertMessage = "log4javascript error: " + message;

-					if (exception) {

-						alertMessage += newLine + newLine + "Original error: " + getExceptionStringRep(exception);

-					}

-					alert(alertMessage);

-				}

-			}

-		}

-	};

-	log4javascript.logLog = logLog;

-

-	log4javascript.setEventTypes(["load", "error"]);

-

-	function handleError(message, exception) {

-		logLog.error(message, exception);

-		log4javascript.dispatchEvent("error", { "message": message, "exception": exception });

-	}

-

-	log4javascript.handleError = handleError;

-

-	/* ---------------------------------------------------------------------- */

-

-	var enabled = !((typeof log4javascript_disabled != "undefined") &&

-					log4javascript_disabled);

-

-	log4javascript.setEnabled = function(enable) {

-		enabled = bool(enable);

-	};

-

-	log4javascript.isEnabled = function() {

-		return enabled;

-	};

-

-	var useTimeStampsInMilliseconds = true;

-

-	log4javascript.setTimeStampsInMilliseconds = function(timeStampsInMilliseconds) {

-		useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);

-	};

-

-	log4javascript.isTimeStampsInMilliseconds = function() {

-		return useTimeStampsInMilliseconds;

-	};

-	

-

-	// This evaluates the given expression in the current scope, thus allowing

-	// scripts to access private variables. Particularly useful for testing

-	log4javascript.evalInScope = function(expr) {

-		return eval(expr);

-	};

-

-	var showStackTraces = false;

-

-	log4javascript.setShowStackTraces = function(show) {

-		showStackTraces = bool(show);

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Levels

-

-	var Level = function(level, name) {

-		this.level = level;

-		this.name = name;

-	};

-

-	Level.prototype = {

-		toString: function() {

-			return this.name;

-		},

-		equals: function(level) {

-			return this.level == level.level;

-		},

-		isGreaterOrEqual: function(level) {

-			return this.level >= level.level;

-		}

-	};

-

-	Level.ALL = new Level(Number.MIN_VALUE, "ALL");

-	Level.TRACE = new Level(10000, "TRACE");

-	Level.DEBUG = new Level(20000, "DEBUG");

-	Level.INFO = new Level(30000, "INFO");

-	Level.WARN = new Level(40000, "WARN");

-	Level.ERROR = new Level(50000, "ERROR");

-	Level.FATAL = new Level(60000, "FATAL");

-	Level.OFF = new Level(Number.MAX_VALUE, "OFF");

-

-	log4javascript.Level = Level;

-

-	/* ---------------------------------------------------------------------- */

-	// Timers

-

-	function Timer(name, level) {

-		this.name = name;

-		this.level = isUndefined(level) ? Level.INFO : level;

-		this.start = new Date();

-	}

-

-	Timer.prototype.getElapsedTime = function() {

-		return new Date().getTime() - this.start.getTime();

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Loggers

-

-	var anonymousLoggerName = "[anonymous]";

-	var defaultLoggerName = "[default]";

-	var nullLoggerName = "[null]";

-	var rootLoggerName = "root";

-

-	function Logger(name) {

-		this.name = name;

-		this.parent = null;

-		this.children = [];

-

-		var appenders = [];

-		var loggerLevel = null;

-		var isRoot = (this.name === rootLoggerName);

-		var isNull = (this.name === nullLoggerName);

-

-		var appenderCache = null;

-		var appenderCacheInvalidated = false;

-		

-		this.addChild = function(childLogger) {

-			this.children.push(childLogger);

-			childLogger.parent = this;

-			childLogger.invalidateAppenderCache();

-		};

-

-		// Additivity

-		var additive = true;

-		this.getAdditivity = function() {

-			return additive;

-		};

-

-		this.setAdditivity = function(additivity) {

-			var valueChanged = (additive != additivity);

-			additive = additivity;

-			if (valueChanged) {

-				this.invalidateAppenderCache();

-			}

-		};

-

-		// Create methods that use the appenders variable in this scope

-		this.addAppender = function(appender) {

-			if (isNull) {

-				handleError("Logger.addAppender: you may not add an appender to the null logger");

-			} else {

-				if (appender instanceof log4javascript.Appender) {

-					if (!array_contains(appenders, appender)) {

-						appenders.push(appender);

-						appender.setAddedToLogger(this);

-						this.invalidateAppenderCache();

-					}

-				} else {

-					handleError("Logger.addAppender: appender supplied ('" +

-						toStr(appender) + "') is not a subclass of Appender");

-				}

-			}

-		};

-

-		this.removeAppender = function(appender) {

-			array_remove(appenders, appender);

-			appender.setRemovedFromLogger(this);

-			this.invalidateAppenderCache();

-		};

-

-		this.removeAllAppenders = function() {

-			var appenderCount = appenders.length;

-			if (appenderCount > 0) {

-				for (var i = 0; i < appenderCount; i++) {

-					appenders[i].setRemovedFromLogger(this);

-				}

-				appenders.length = 0;

-				this.invalidateAppenderCache();

-			}

-		};

-

-		this.getEffectiveAppenders = function() {

-			if (appenderCache === null || appenderCacheInvalidated) {

-				// Build appender cache

-				var parentEffectiveAppenders = (isRoot || !this.getAdditivity()) ?

-					[] : this.parent.getEffectiveAppenders();

-				appenderCache = parentEffectiveAppenders.concat(appenders);

-				appenderCacheInvalidated = false;

-			}

-			return appenderCache;

-		};

-		

-		this.invalidateAppenderCache = function() {

-			appenderCacheInvalidated = true;

-			for (var i = 0, len = this.children.length; i < len; i++) {

-				this.children[i].invalidateAppenderCache();

-			}

-		};

-

-		this.log = function(level, params) {

-			if (enabled && level.isGreaterOrEqual(this.getEffectiveLevel())) {

-				// Check whether last param is an exception

-				var exception;

-				var finalParamIndex = params.length - 1;

-				var lastParam = params[finalParamIndex];

-				if (params.length > 1 && isError(lastParam)) {

-					exception = lastParam;

-					finalParamIndex--;

-				}

-

-				// Construct genuine array for the params

-				var messages = [];

-				for (var i = 0; i <= finalParamIndex; i++) {

-					messages[i] = params[i];

-				}

-

-				var loggingEvent = new LoggingEvent(

-					this, new Date(), level, messages, exception);

-

-				this.callAppenders(loggingEvent);

-			}

-		};

-

-		this.callAppenders = function(loggingEvent) {

-			var effectiveAppenders = this.getEffectiveAppenders();

-			for (var i = 0, len = effectiveAppenders.length; i < len; i++) {

-				effectiveAppenders[i].doAppend(loggingEvent);

-			}

-		};

-

-		this.setLevel = function(level) {

-			// Having a level of null on the root logger would be very bad.

-			if (isRoot && level === null) {

-				handleError("Logger.setLevel: you cannot set the level of the root logger to null");

-			} else if (level instanceof Level) {

-				loggerLevel = level;

-			} else {

-				handleError("Logger.setLevel: level supplied to logger " +

-					this.name + " is not an instance of log4javascript.Level");

-			}

-		};

-

-		this.getLevel = function() {

-			return loggerLevel;

-		};

-

-		this.getEffectiveLevel = function() {

-			for (var logger = this; logger !== null; logger = logger.parent) {

-				var level = logger.getLevel();

-				if (level !== null) {

-					return level;

-				}

-			}

-		};

-

-		this.group = function(name, initiallyExpanded) {

-			if (enabled) {

-				var effectiveAppenders = this.getEffectiveAppenders();

-				for (var i = 0, len = effectiveAppenders.length; i < len; i++) {

-					effectiveAppenders[i].group(name, initiallyExpanded);

-				}

-			}

-		};

-

-		this.groupEnd = function() {

-			if (enabled) {

-				var effectiveAppenders = this.getEffectiveAppenders();

-				for (var i = 0, len = effectiveAppenders.length; i < len; i++) {

-					effectiveAppenders[i].groupEnd();

-				}

-			}

-		};

-

-		var timers = {};

-

-		this.time = function(name, level) {

-			if (enabled) {

-				if (isUndefined(name)) {

-					handleError("Logger.time: a name for the timer must be supplied");

-				} else if (level && !(level instanceof Level)) {

-					handleError("Logger.time: level supplied to timer " +

-						name + " is not an instance of log4javascript.Level");

-				} else {

-					timers[name] = new Timer(name, level);

-				}

-			}

-		};

-

-		this.timeEnd = function(name) {

-			if (enabled) {

-				if (isUndefined(name)) {

-					handleError("Logger.timeEnd: a name for the timer must be supplied");

-				} else if (timers[name]) {

-					var timer = timers[name];

-					var milliseconds = timer.getElapsedTime();

-					this.log(timer.level, ["Timer " + toStr(name) + " completed in " + milliseconds + "ms"]);

-					delete timers[name];

-				} else {

-					logLog.warn("Logger.timeEnd: no timer found with name " + name);

-				}

-			}

-		};

-

-		this.assert = function(expr) {

-			if (enabled && !expr) {

-				var args = [];

-				for (var i = 1, len = arguments.length; i < len; i++) {

-					args.push(arguments[i]);

-				}

-				args = (args.length > 0) ? args : ["Assertion Failure"];

-				args.push(newLine);

-				args.push(expr);

-				this.log(Level.ERROR, args);

-			}

-		};

-

-		this.toString = function() {

-			return "Logger[" + this.name + "]";

-		};

-	}

-

-	Logger.prototype = {

-		trace: function() {

-			this.log(Level.TRACE, arguments);

-		},

-

-		debug: function() {

-			this.log(Level.DEBUG, arguments);

-		},

-

-		info: function() {

-			this.log(Level.INFO, arguments);

-		},

-

-		warn: function() {

-			this.log(Level.WARN, arguments);

-		},

-

-		error: function() {

-			this.log(Level.ERROR, arguments);

-		},

-

-		fatal: function() {

-			this.log(Level.FATAL, arguments);

-		},

-

-		isEnabledFor: function(level) {

-			return level.isGreaterOrEqual(this.getEffectiveLevel());

-		},

-

-		isTraceEnabled: function() {

-			return this.isEnabledFor(Level.TRACE);

-		},

-

-		isDebugEnabled: function() {

-			return this.isEnabledFor(Level.DEBUG);

-		},

-

-		isInfoEnabled: function() {

-			return this.isEnabledFor(Level.INFO);

-		},

-

-		isWarnEnabled: function() {

-			return this.isEnabledFor(Level.WARN);

-		},

-

-		isErrorEnabled: function() {

-			return this.isEnabledFor(Level.ERROR);

-		},

-

-		isFatalEnabled: function() {

-			return this.isEnabledFor(Level.FATAL);

-		}

-	};

-

-	Logger.prototype.trace.isEntryPoint = true;

-	Logger.prototype.debug.isEntryPoint = true;

-	Logger.prototype.info.isEntryPoint = true;

-	Logger.prototype.warn.isEntryPoint = true;

-	Logger.prototype.error.isEntryPoint = true;

-	Logger.prototype.fatal.isEntryPoint = true;

-

-	/* ---------------------------------------------------------------------- */

-	// Logger access methods

-

-	// Hashtable of loggers keyed by logger name

-	var loggers = {};

-	var loggerNames = [];

-

-	var ROOT_LOGGER_DEFAULT_LEVEL = Level.DEBUG;

-	var rootLogger = new Logger(rootLoggerName);

-	rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);

-

-	log4javascript.getRootLogger = function() {

-		return rootLogger;

-	};

-

-	log4javascript.getLogger = function(loggerName) {

-		// Use default logger if loggerName is not specified or invalid

-		if (!(typeof loggerName == "string")) {

-			loggerName = anonymousLoggerName;

-			logLog.warn("log4javascript.getLogger: non-string logger name "	+

-				toStr(loggerName) + " supplied, returning anonymous logger");

-		}

-

-		// Do not allow retrieval of the root logger by name

-		if (loggerName == rootLoggerName) {

-			handleError("log4javascript.getLogger: root logger may not be obtained by name");

-		}

-

-		// Create the logger for this name if it doesn't already exist

-		if (!loggers[loggerName]) {

-			var logger = new Logger(loggerName);

-			loggers[loggerName] = logger;

-			loggerNames.push(loggerName);

-

-			// Set up parent logger, if it doesn't exist

-			var lastDotIndex = loggerName.lastIndexOf(".");

-			var parentLogger;

-			if (lastDotIndex > -1) {

-				var parentLoggerName = loggerName.substring(0, lastDotIndex);

-				parentLogger = log4javascript.getLogger(parentLoggerName); // Recursively sets up grandparents etc.

-			} else {

-				parentLogger = rootLogger;

-			}

-			parentLogger.addChild(logger);

-		}

-		return loggers[loggerName];

-	};

-

-	var defaultLogger = null;

-	log4javascript.getDefaultLogger = function() {

-		if (!defaultLogger) {

-			defaultLogger = log4javascript.getLogger(defaultLoggerName);

-			var a = new log4javascript.PopUpAppender();

-			defaultLogger.addAppender(a);

-		}

-		return defaultLogger;

-	};

-

-	var nullLogger = null;

-	log4javascript.getNullLogger = function() {

-		if (!nullLogger) {

-			nullLogger = new Logger(nullLoggerName);

-			nullLogger.setLevel(Level.OFF);

-		}

-		return nullLogger;

-	};

-

-	// Destroys all loggers

-	log4javascript.resetConfiguration = function() {

-		rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);

-		loggers = {};

-	};

-

-	/* ---------------------------------------------------------------------- */

-	// Logging events

-

-	var LoggingEvent = function(logger, timeStamp, level, messages,

-			exception) {

-		this.logger = logger;

-		this.timeStamp = timeStamp;

-		this.timeStampInMilliseconds = timeStamp.getTime();

-		this.timeStampInSeconds = Math.floor(this.timeStampInMilliseconds / 1000);

-		this.milliseconds = this.timeStamp.getMilliseconds();

-		this.level = level;

-		this.messages = messages;

-		this.exception = exception;

-	};

-

-	LoggingEvent.prototype = {

-		getThrowableStrRep: function() {

-			return this.exception ?

-				getExceptionStringRep(this.exception) : "";

-		},

-		getCombinedMessages: function() {

-			return (this.messages.length == 1) ? this.messages[0] :

-				   this.messages.join(newLine);

-		},

-		toString: function() {

-			return "LoggingEvent[" + this.level + "]";

-		}

-	};

-

-	log4javascript.LoggingEvent = LoggingEvent;

-

-	/* ---------------------------------------------------------------------- */

-	// Layout prototype

-

-	var Layout = function() {

-	};

-

-	Layout.prototype = {

-		defaults: {

-			loggerKey: "logger",

-			timeStampKey: "timestamp",

-			millisecondsKey: "milliseconds",

-			levelKey: "level",

-			messageKey: "message",

-			exceptionKey: "exception",

-			urlKey: "url"

-		},

-		loggerKey: "logger",

-		timeStampKey: "timestamp",

-		millisecondsKey: "milliseconds",

-		levelKey: "level",

-		messageKey: "message",

-		exceptionKey: "exception",

-		urlKey: "url",

-		batchHeader: "",

-		batchFooter: "",

-		batchSeparator: "",

-		returnsPostData: false,

-		overrideTimeStampsSetting: false,

-		useTimeStampsInMilliseconds: null,

-

-		format: function() {

-			handleError("Layout.format: layout supplied has no format() method");

-		},

-

-		ignoresThrowable: function() {

-			handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");

-		},

-

-		getContentType: function() {

-			return "text/plain";

-		},

-

-		allowBatching: function() {

-			return true;

-		},

-

-		setTimeStampsInMilliseconds: function(timeStampsInMilliseconds) {

-			this.overrideTimeStampsSetting = true;

-			this.useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);

-		},

-

-		isTimeStampsInMilliseconds: function() {

-			return this.overrideTimeStampsSetting ?

-				this.useTimeStampsInMilliseconds : useTimeStampsInMilliseconds;

-		},

-

-		getTimeStampValue: function(loggingEvent) {

-			return this.isTimeStampsInMilliseconds() ?

-				loggingEvent.timeStampInMilliseconds : loggingEvent.timeStampInSeconds;

-		},

-

-		getDataValues: function(loggingEvent, combineMessages) {

-			var dataValues = [

-				[this.loggerKey, loggingEvent.logger.name],

-				[this.timeStampKey, this.getTimeStampValue(loggingEvent)],

-				[this.levelKey, loggingEvent.level.name],

-				[this.urlKey, window.location.href],

-				[this.messageKey, combineMessages ? loggingEvent.getCombinedMessages() : loggingEvent.messages]

-			];

-			if (!this.isTimeStampsInMilliseconds()) {

-				dataValues.push([this.millisecondsKey, loggingEvent.milliseconds]);

-			}

-			if (loggingEvent.exception) {

-				dataValues.push([this.exceptionKey, getExceptionStringRep(loggingEvent.exception)]);

-			}

-			if (this.hasCustomFields()) {

-				for (var i = 0, len = this.customFields.length; i < len; i++) {

-					var val = this.customFields[i].value;

-

-					// Check if the value is a function. If so, execute it, passing it the

-					// current layout and the logging event

-					if (typeof val === "function") {

-						val = val(this, loggingEvent);

-					}

-					dataValues.push([this.customFields[i].name, val]);

-				}

-			}

-			return dataValues;

-		},

-

-		setKeys: function(loggerKey, timeStampKey, levelKey, messageKey,

-				exceptionKey, urlKey, millisecondsKey) {

-			this.loggerKey = extractStringFromParam(loggerKey, this.defaults.loggerKey);

-			this.timeStampKey = extractStringFromParam(timeStampKey, this.defaults.timeStampKey);

-			this.levelKey = extractStringFromParam(levelKey, this.defaults.levelKey);

-			this.messageKey = extractStringFromParam(messageKey, this.defaults.messageKey);

-			this.exceptionKey = extractStringFromParam(exceptionKey, this.defaults.exceptionKey);

-			this.urlKey = extractStringFromParam(urlKey, this.defaults.urlKey);

-			this.millisecondsKey = extractStringFromParam(millisecondsKey, this.defaults.millisecondsKey);

-		},

-

-		setCustomField: function(name, value) {

-			var fieldUpdated = false;

-			for (var i = 0, len = this.customFields.length; i < len; i++) {

-				if (this.customFields[i].name === name) {

-					this.customFields[i].value = value;

-					fieldUpdated = true;

-				}

-			}

-			if (!fieldUpdated) {

-				this.customFields.push({"name": name, "value": value});

-			}

-		},

-

-		hasCustomFields: function() {

-			return (this.customFields.length > 0);

-		},

-

-		toString: function() {

-			handleError("Layout.toString: all layouts must override this method");

-		}

-	};

-

-	log4javascript.Layout = Layout;

-

-	/* ---------------------------------------------------------------------- */

-	// Appender prototype

-

-	var Appender = function() {};

-

-	Appender.prototype = new EventSupport();

-

-	Appender.prototype.layout = new PatternLayout();

-	Appender.prototype.threshold = Level.ALL;

-	Appender.prototype.loggers = [];

-

-	// Performs threshold checks before delegating actual logging to the

-	// subclass's specific append method.

-	Appender.prototype.doAppend = function(loggingEvent) {

-		if (enabled && loggingEvent.level.level >= this.threshold.level) {

-			this.append(loggingEvent);

-		}

-	};

-

-	Appender.prototype.append = function(loggingEvent) {};

-

-	Appender.prototype.setLayout = function(layout) {

-		if (layout instanceof Layout) {

-			this.layout = layout;

-		} else {

-			handleError("Appender.setLayout: layout supplied to " +

-				this.toString() + " is not a subclass of Layout");

-		}

-	};

-

-	Appender.prototype.getLayout = function() {

-		return this.layout;

-	};

-

-	Appender.prototype.setThreshold = function(threshold) {

-		if (threshold instanceof Level) {

-			this.threshold = threshold;

-		} else {

-			handleError("Appender.setThreshold: threshold supplied to " +

-				this.toString() + " is not a subclass of Level");

-		}

-	};

-

-	Appender.prototype.getThreshold = function() {

-		return this.threshold;

-	};

-

-	Appender.prototype.setAddedToLogger = function(logger) {

-		this.loggers.push(logger);

-	};

-

-	Appender.prototype.setRemovedFromLogger = function(logger) {

-		array_remove(this.loggers, logger);

-	};

-

-	Appender.prototype.group = emptyFunction;

-	Appender.prototype.groupEnd = emptyFunction;

-

-	Appender.prototype.toString = function() {

-		handleError("Appender.toString: all appenders must override this method");

-	};

-

-	log4javascript.Appender = Appender;

-

-	/* ---------------------------------------------------------------------- */

-	// SimpleLayout 

-

-	function SimpleLayout() {

-		this.customFields = [];

-	}

-

-	SimpleLayout.prototype = new Layout();

-

-	SimpleLayout.prototype.format = function(loggingEvent) {

-		return loggingEvent.level.name + " - " + loggingEvent.getCombinedMessages();

-	};

-

-	SimpleLayout.prototype.ignoresThrowable = function() {

-	    return true;

-	};

-

-	SimpleLayout.prototype.toString = function() {

-	    return "SimpleLayout";

-	};

-

-	log4javascript.SimpleLayout = SimpleLayout;

-	/* ----------------------------------------------------------------------- */

-	// NullLayout 

-

-	function NullLayout() {

-		this.customFields = [];

-	}

-

-	NullLayout.prototype = new Layout();

-

-	NullLayout.prototype.format = function(loggingEvent) {

-		return loggingEvent.messages;

-	};

-

-	NullLayout.prototype.ignoresThrowable = function() {

-	    return true;

-	};

-

-	NullLayout.prototype.toString = function() {

-	    return "NullLayout";

-	};

-

-	log4javascript.NullLayout = NullLayout;

-/* ---------------------------------------------------------------------- */

-	// XmlLayout

-

-	function XmlLayout(combineMessages) {

-		this.combineMessages = extractBooleanFromParam(combineMessages, true);

-		this.customFields = [];

-	}

-

-	XmlLayout.prototype = new Layout();

-

-	XmlLayout.prototype.isCombinedMessages = function() {

-		return this.combineMessages;

-	};

-

-	XmlLayout.prototype.getContentType = function() {

-		return "text/xml";

-	};

-

-	XmlLayout.prototype.escapeCdata = function(str) {

-		return str.replace(/\]\]>/, "]]>]]&gt;<![CDATA[");

-	};

-

-	XmlLayout.prototype.format = function(loggingEvent) {

-		var layout = this;

-		var i, len;

-		function formatMessage(message) {

-			message = (typeof message === "string") ? message : toStr(message);

-			return "<log4javascript:message><![CDATA[" +

-				layout.escapeCdata(message) + "]]></log4javascript:message>";

-		}

-

-		var str = "<log4javascript:event logger=\"" + loggingEvent.logger.name +

-			"\" timestamp=\"" + this.getTimeStampValue(loggingEvent) + "\"";

-		if (!this.isTimeStampsInMilliseconds()) {

-			str += " milliseconds=\"" + loggingEvent.milliseconds + "\"";

-		}

-		str += " level=\"" + loggingEvent.level.name + "\">" + newLine;

-		if (this.combineMessages) {

-			str += formatMessage(loggingEvent.getCombinedMessages());

-		} else {

-			str += "<log4javascript:messages>" + newLine;

-			for (i = 0, len = loggingEvent.messages.length; i < len; i++) {

-				str += formatMessage(loggingEvent.messages[i]) + newLine;

-			}

-			str += "</log4javascript:messages>" + newLine;

-		}

-		if (this.hasCustomFields()) {

-			for (i = 0, len = this.customFields.length; i < len; i++) {

-				str += "<log4javascript:customfield name=\"" +

-					this.customFields[i].name + "\"><![CDATA[" +

-					this.customFields[i].value.toString() +

-					"]]></log4javascript:customfield>" + newLine;

-			}

-		}

-		if (loggingEvent.exception) {

-			str += "<log4javascript:exception><![CDATA[" +

-				getExceptionStringRep(loggingEvent.exception) +

-				"]]></log4javascript:exception>" + newLine;

-		}

-		str += "</log4javascript:event>" + newLine + newLine;

-		return str;

-	};

-

-	XmlLayout.prototype.ignoresThrowable = function() {

-	    return false;

-	};

-

-	XmlLayout.prototype.toString = function() {

-	    return "XmlLayout";

-	};

-

-	log4javascript.XmlLayout = XmlLayout;

-	/* ---------------------------------------------------------------------- */

-	// JsonLayout related

-

-	function escapeNewLines(str) {

-		return str.replace(/\r\n|\r|\n/g, "\\r\\n");

-	}

-

-	function JsonLayout(readable, combineMessages) {

-		this.readable = extractBooleanFromParam(readable, false);

-		this.combineMessages = extractBooleanFromParam(combineMessages, true);

-		this.batchHeader = this.readable ? "[" + newLine : "[";

-		this.batchFooter = this.readable ? "]" + newLine : "]";

-		this.batchSeparator = this.readable ? "," + newLine : ",";

-		this.setKeys();

-		this.colon = this.readable ? ": " : ":";

-		this.tab = this.readable ? "\t" : "";

-		this.lineBreak = this.readable ? newLine : "";

-		this.customFields = [];

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// JsonLayout

-

-	JsonLayout.prototype = new Layout();

-

-	JsonLayout.prototype.isReadable = function() {

-		return this.readable;

-	};

-

-	JsonLayout.prototype.isCombinedMessages = function() {

-		return this.combineMessages;

-	};

-

-    JsonLayout.prototype.format = function(loggingEvent) {

-        var layout = this;

-        var dataValues = this.getDataValues(loggingEvent, this.combineMessages);

-        var str = "{" + this.lineBreak;

-        var i, len;

-

-        function formatValue(val, prefix, expand) {

-            // Check the type of the data value to decide whether quotation marks

-            // or expansion are required

-            var formattedValue;

-            var valType = typeof val;

-            if (val instanceof Date) {

-                formattedValue = String(val.getTime());

-            } else if (expand && (val instanceof Array)) {

-                formattedValue = "[" + layout.lineBreak;

-                for (var i = 0, len = val.length; i < len; i++) {

-                    var childPrefix = prefix + layout.tab;

-                    formattedValue += childPrefix + formatValue(val[i], childPrefix, false);

-                    if (i < val.length - 1) {

-                        formattedValue += ",";

-                    }

-                    formattedValue += layout.lineBreak;

-                }

-                formattedValue += prefix + "]";

-            } else if (valType !== "number" && valType !== "boolean") {

-                formattedValue = "\"" + escapeNewLines(toStr(val).replace(/\"/g, "\\\"")) + "\"";

-            } else {

-                formattedValue = val;

-            }

-            return formattedValue;

-        }

-

-        for (i = 0, len = dataValues.length - 1; i <= len; i++) {

-            str += this.tab + "\"" + dataValues[i][0] + "\"" + this.colon + formatValue(dataValues[i][1], this.tab, true);

-            if (i < len) {

-                str += ",";

-            }

-            str += this.lineBreak;

-        }

-

-        str += "}" + this.lineBreak;

-        return str;

-    };

-

-	JsonLayout.prototype.ignoresThrowable = function() {

-	    return false;

-	};

-

-	JsonLayout.prototype.toString = function() {

-	    return "JsonLayout";

-	};

-

-	JsonLayout.prototype.getContentType = function() {

-		return "application/json";

-	};

-

-	log4javascript.JsonLayout = JsonLayout;

-	/* ---------------------------------------------------------------------- */

-	// HttpPostDataLayout

-

-	function HttpPostDataLayout() {

-		this.setKeys();

-		this.customFields = [];

-		this.returnsPostData = true;

-	}

-

-	HttpPostDataLayout.prototype = new Layout();

-

-	// Disable batching

-	HttpPostDataLayout.prototype.allowBatching = function() {

-		return false;

-	};

-

-	HttpPostDataLayout.prototype.format = function(loggingEvent) {

-		var dataValues = this.getDataValues(loggingEvent);

-		var queryBits = [];

-		for (var i = 0, len = dataValues.length; i < len; i++) {

-			var val = (dataValues[i][1] instanceof Date) ?

-				String(dataValues[i][1].getTime()) : dataValues[i][1];

-			queryBits.push(urlEncode(dataValues[i][0]) + "=" + urlEncode(val));

-		}

-		return queryBits.join("&");

-	};

-

-	HttpPostDataLayout.prototype.ignoresThrowable = function(loggingEvent) {

-	    return false;

-	};

-

-	HttpPostDataLayout.prototype.toString = function() {

-	    return "HttpPostDataLayout";

-	};

-

-	log4javascript.HttpPostDataLayout = HttpPostDataLayout;

-	/* ---------------------------------------------------------------------- */

-	// formatObjectExpansion

-

-	function formatObjectExpansion(obj, depth, indentation) {

-		var objectsExpanded = [];

-

-		function doFormat(obj, depth, indentation) {

-			var i, j, len, childDepth, childIndentation, childLines, expansion,

-				childExpansion;

-

-			if (!indentation) {

-				indentation = "";

-			}

-

-			function formatString(text) {

-				var lines = splitIntoLines(text);

-				for (var j = 1, jLen = lines.length; j < jLen; j++) {

-					lines[j] = indentation + lines[j];

-				}

-				return lines.join(newLine);

-			}

-

-			if (obj === null) {

-				return "null";

-			} else if (typeof obj == "undefined") {

-				return "undefined";

-			} else if (typeof obj == "string") {

-				return formatString(obj);

-			} else if (typeof obj == "object" && array_contains(objectsExpanded, obj)) {

-				try {

-					expansion = toStr(obj);

-				} catch (ex) {

-					expansion = "Error formatting property. Details: " + getExceptionStringRep(ex);

-				}

-				return expansion + " [already expanded]";

-			} else if ((obj instanceof Array) && depth > 0) {

-				objectsExpanded.push(obj);

-				expansion = "[" + newLine;

-				childDepth = depth - 1;

-				childIndentation = indentation + "  ";

-				childLines = [];

-				for (i = 0, len = obj.length; i < len; i++) {

-					try {

-						childExpansion = doFormat(obj[i], childDepth, childIndentation);

-						childLines.push(childIndentation + childExpansion);

-					} catch (ex) {

-						childLines.push(childIndentation + "Error formatting array member. Details: " +

-							getExceptionStringRep(ex) + "");

-					}

-				}

-				expansion += childLines.join("," + newLine) + newLine + indentation + "]";

-				return expansion;

-            } else if (Object.prototype.toString.call(obj) == "[object Date]") {

-                return obj.toString();

-			} else if (typeof obj == "object" && depth > 0) {

-				objectsExpanded.push(obj);

-				expansion = "{" + newLine;

-				childDepth = depth - 1;

-				childIndentation = indentation + "  ";

-				childLines = [];

-				for (i in obj) {

-					try {

-						childExpansion = doFormat(obj[i], childDepth, childIndentation);

-						childLines.push(childIndentation + i + ": " + childExpansion);

-					} catch (ex) {

-						childLines.push(childIndentation + i + ": Error formatting property. Details: " +

-							getExceptionStringRep(ex));

-					}

-				}

-				expansion += childLines.join("," + newLine) + newLine + indentation + "}";

-				return expansion;

-			} else {

-				return formatString(toStr(obj));

-			}

-		}

-		return doFormat(obj, depth, indentation);

-	}

-	/* ---------------------------------------------------------------------- */

-	// Date-related stuff

-

-	var SimpleDateFormat;

-

-	(function() {

-		var regex = /('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;

-		var monthNames = ["January", "February", "March", "April", "May", "June",

-			"July", "August", "September", "October", "November", "December"];

-		var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

-		var TEXT2 = 0, TEXT3 = 1, NUMBER = 2, YEAR = 3, MONTH = 4, TIMEZONE = 5;

-		var types = {

-			G : TEXT2,

-			y : YEAR,

-			M : MONTH,

-			w : NUMBER,

-			W : NUMBER,

-			D : NUMBER,

-			d : NUMBER,

-			F : NUMBER,

-			E : TEXT3,

-			a : TEXT2,

-			H : NUMBER,

-			k : NUMBER,

-			K : NUMBER,

-			h : NUMBER,

-			m : NUMBER,

-			s : NUMBER,

-			S : NUMBER,

-			Z : TIMEZONE

-		};

-		var ONE_DAY = 24 * 60 * 60 * 1000;

-		var ONE_WEEK = 7 * ONE_DAY;

-		var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK = 1;

-

-		var newDateAtMidnight = function(year, month, day) {

-			var d = new Date(year, month, day, 0, 0, 0);

-			d.setMilliseconds(0);

-			return d;

-		};

-

-		Date.prototype.getDifference = function(date) {

-			return this.getTime() - date.getTime();

-		};

-

-		Date.prototype.isBefore = function(d) {

-			return this.getTime() < d.getTime();

-		};

-

-		Date.prototype.getUTCTime = function() {

-			return Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(),

-					this.getSeconds(), this.getMilliseconds());

-		};

-

-		Date.prototype.getTimeSince = function(d) {

-			return this.getUTCTime() - d.getUTCTime();

-		};

-

-		Date.prototype.getPreviousSunday = function() {

-			// Using midday avoids any possibility of DST messing things up

-			var midday = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 12, 0, 0);

-			var previousSunday = new Date(midday.getTime() - this.getDay() * ONE_DAY);

-			return newDateAtMidnight(previousSunday.getFullYear(), previousSunday.getMonth(),

-					previousSunday.getDate());

-		};

-

-		Date.prototype.getWeekInYear = function(minimalDaysInFirstWeek) {

-			if (isUndefined(this.minimalDaysInFirstWeek)) {

-				minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;

-			}

-			var previousSunday = this.getPreviousSunday();

-			var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);

-			var numberOfSundays = previousSunday.isBefore(startOfYear) ?

-				0 : 1 + Math.floor(previousSunday.getTimeSince(startOfYear) / ONE_WEEK);

-			var numberOfDaysInFirstWeek =  7 - startOfYear.getDay();

-			var weekInYear = numberOfSundays;

-			if (numberOfDaysInFirstWeek < minimalDaysInFirstWeek) {

-				weekInYear--;

-			}

-			return weekInYear;

-		};

-

-		Date.prototype.getWeekInMonth = function(minimalDaysInFirstWeek) {

-			if (isUndefined(this.minimalDaysInFirstWeek)) {

-				minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;

-			}

-			var previousSunday = this.getPreviousSunday();

-			var startOfMonth = newDateAtMidnight(this.getFullYear(), this.getMonth(), 1);

-			var numberOfSundays = previousSunday.isBefore(startOfMonth) ?

-				0 : 1 + Math.floor(previousSunday.getTimeSince(startOfMonth) / ONE_WEEK);

-			var numberOfDaysInFirstWeek =  7 - startOfMonth.getDay();

-			var weekInMonth = numberOfSundays;

-			if (numberOfDaysInFirstWeek >= minimalDaysInFirstWeek) {

-				weekInMonth++;

-			}

-			return weekInMonth;

-		};

-

-		Date.prototype.getDayInYear = function() {

-			var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);

-			return 1 + Math.floor(this.getTimeSince(startOfYear) / ONE_DAY);

-		};

-

-		/* ------------------------------------------------------------------ */

-

-		SimpleDateFormat = function(formatString) {

-			this.formatString = formatString;

-		};

-

-		/**

-		 * Sets the minimum number of days in a week in order for that week to

-		 * be considered as belonging to a particular month or year

-		 */

-		SimpleDateFormat.prototype.setMinimalDaysInFirstWeek = function(days) {

-			this.minimalDaysInFirstWeek = days;

-		};

-

-		SimpleDateFormat.prototype.getMinimalDaysInFirstWeek = function() {

-			return isUndefined(this.minimalDaysInFirstWeek)	?

-				DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK : this.minimalDaysInFirstWeek;

-		};

-

-		var padWithZeroes = function(str, len) {

-			while (str.length < len) {

-				str = "0" + str;

-			}

-			return str;

-		};

-

-		var formatText = function(data, numberOfLetters, minLength) {

-			return (numberOfLetters >= 4) ? data : data.substr(0, Math.max(minLength, numberOfLetters));

-		};

-

-		var formatNumber = function(data, numberOfLetters) {

-			var dataString = "" + data;

-			// Pad with 0s as necessary

-			return padWithZeroes(dataString, numberOfLetters);

-		};

-

-		SimpleDateFormat.prototype.format = function(date) {

-			var formattedString = "";

-			var result;

-			var searchString = this.formatString;

-			while ((result = regex.exec(searchString))) {

-				var quotedString = result[1];

-				var patternLetters = result[2];

-				var otherLetters = result[3];

-				var otherCharacters = result[4];

-

-				// If the pattern matched is quoted string, output the text between the quotes

-				if (quotedString) {

-					if (quotedString == "''") {

-						formattedString += "'";

-					} else {

-						formattedString += quotedString.substring(1, quotedString.length - 1);

-					}

-				} else if (otherLetters) {

-					// Swallow non-pattern letters by doing nothing here

-				} else if (otherCharacters) {

-					// Simply output other characters

-					formattedString += otherCharacters;

-				} else if (patternLetters) {

-					// Replace pattern letters

-					var patternLetter = patternLetters.charAt(0);

-					var numberOfLetters = patternLetters.length;

-					var rawData = "";

-					switch(patternLetter) {

-						case "G":

-							rawData = "AD";

-							break;

-						case "y":

-							rawData = date.getFullYear();

-							break;

-						case "M":

-							rawData = date.getMonth();

-							break;

-						case "w":

-							rawData = date.getWeekInYear(this.getMinimalDaysInFirstWeek());

-							break;

-						case "W":

-							rawData = date.getWeekInMonth(this.getMinimalDaysInFirstWeek());

-							break;

-						case "D":

-							rawData = date.getDayInYear();

-							break;

-						case "d":

-							rawData = date.getDate();

-							break;

-						case "F":

-							rawData = 1 + Math.floor((date.getDate() - 1) / 7);

-							break;

-						case "E":

-							rawData = dayNames[date.getDay()];

-							break;

-						case "a":

-							rawData = (date.getHours() >= 12) ? "PM" : "AM";

-							break;

-						case "H":

-							rawData = date.getHours();

-							break;

-						case "k":

-							rawData = date.getHours() || 24;

-							break;

-						case "K":

-							rawData = date.getHours() % 12;

-							break;

-						case "h":

-							rawData = (date.getHours() % 12) || 12;

-							break;

-						case "m":

-							rawData = date.getMinutes();

-							break;

-						case "s":

-							rawData = date.getSeconds();

-							break;

-						case "S":

-							rawData = date.getMilliseconds();

-							break;

-						case "Z":

-							rawData = date.getTimezoneOffset(); // This returns the number of minutes since GMT was this time.

-							break;

-					}

-					// Format the raw data depending on the type

-					switch(types[patternLetter]) {

-						case TEXT2:

-							formattedString += formatText(rawData, numberOfLetters, 2);

-							break;

-						case TEXT3:

-							formattedString += formatText(rawData, numberOfLetters, 3);

-							break;

-						case NUMBER:

-							formattedString += formatNumber(rawData, numberOfLetters);

-							break;

-						case YEAR:

-							if (numberOfLetters <= 3) {

-								// Output a 2-digit year

-								var dataString = "" + rawData;

-								formattedString += dataString.substr(2, 2);

-							} else {

-								formattedString += formatNumber(rawData, numberOfLetters);

-							}

-							break;

-						case MONTH:

-							if (numberOfLetters >= 3) {

-								formattedString += formatText(monthNames[rawData], numberOfLetters, numberOfLetters);

-							} else {

-								// NB. Months returned by getMonth are zero-based

-								formattedString += formatNumber(rawData + 1, numberOfLetters);

-							}

-							break;

-						case TIMEZONE:

-							var isPositive = (rawData > 0);

-							// The following line looks like a mistake but isn't

-							// because of the way getTimezoneOffset measures.

-							var prefix = isPositive ? "-" : "+";

-							var absData = Math.abs(rawData);

-

-							// Hours

-							var hours = "" + Math.floor(absData / 60);

-							hours = padWithZeroes(hours, 2);

-							// Minutes

-							var minutes = "" + (absData % 60);

-							minutes = padWithZeroes(minutes, 2);

-

-							formattedString += prefix + hours + minutes;

-							break;

-					}

-				}

-				searchString = searchString.substr(result.index + result[0].length);

-			}

-			return formattedString;

-		};

-	})();

-

-	log4javascript.SimpleDateFormat = SimpleDateFormat;

-

-	/* ---------------------------------------------------------------------- */

-	// PatternLayout

-

-	function PatternLayout(pattern) {

-		if (pattern) {

-			this.pattern = pattern;

-		} else {

-			this.pattern = PatternLayout.DEFAULT_CONVERSION_PATTERN;

-		}

-		this.customFields = [];

-	}

-

-	PatternLayout.TTCC_CONVERSION_PATTERN = "%r %p %c - %m%n";

-	PatternLayout.DEFAULT_CONVERSION_PATTERN = "%m%n";

-	PatternLayout.ISO8601_DATEFORMAT = "yyyy-MM-dd HH:mm:ss,SSS";

-	PatternLayout.DATETIME_DATEFORMAT = "dd MMM yyyy HH:mm:ss,SSS";

-	PatternLayout.ABSOLUTETIME_DATEFORMAT = "HH:mm:ss,SSS";

-

-	PatternLayout.prototype = new Layout();

-

-	PatternLayout.prototype.format = function(loggingEvent) {

-		var regex = /%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;

-		var formattedString = "";

-		var result;

-		var searchString = this.pattern;

-

-		// Cannot use regex global flag since it doesn't work with exec in IE5

-		while ((result = regex.exec(searchString))) {

-			var matchedString = result[0];

-			var padding = result[1];

-			var truncation = result[2];

-			var conversionCharacter = result[3];

-			var specifier = result[5];

-			var text = result[6];

-

-			// Check if the pattern matched was just normal text

-			if (text) {

-				formattedString += "" + text;

-			} else {

-				// Create a raw replacement string based on the conversion

-				// character and specifier

-				var replacement = "";

-				switch(conversionCharacter) {

-					case "a": // Array of messages

-					case "m": // Message

-						var depth = 0;

-						if (specifier) {

-							depth = parseInt(specifier, 10);

-							if (isNaN(depth)) {

-								handleError("PatternLayout.format: invalid specifier '" +

-									specifier + "' for conversion character '" + conversionCharacter +

-									"' - should be a number");

-								depth = 0;

-							}

-						}

-						var messages = (conversionCharacter === "a") ? loggingEvent.messages[0] : loggingEvent.messages;

-						for (var i = 0, len = messages.length; i < len; i++) {

-							if (i > 0 && (replacement.charAt(replacement.length - 1) !== " ")) {

-								replacement += " ";

-							}

-							if (depth === 0) {

-								replacement += messages[i];

-							} else {

-								replacement += formatObjectExpansion(messages[i], depth);

-							}

-						}

-						break;

-					case "c": // Logger name

-						var loggerName = loggingEvent.logger.name;

-						if (specifier) {

-							var precision = parseInt(specifier, 10);

-							var loggerNameBits = loggingEvent.logger.name.split(".");

-							if (precision >= loggerNameBits.length) {

-								replacement = loggerName;

-							} else {

-								replacement = loggerNameBits.slice(loggerNameBits.length - precision).join(".");

-							}

-						} else {

-							replacement = loggerName;

-						}

-						break;

-					case "d": // Date

-						var dateFormat = PatternLayout.ISO8601_DATEFORMAT;

-						if (specifier) {

-							dateFormat = specifier;

-							// Pick up special cases

-							if (dateFormat == "ISO8601") {

-								dateFormat = PatternLayout.ISO8601_DATEFORMAT;

-							} else if (dateFormat == "ABSOLUTE") {

-								dateFormat = PatternLayout.ABSOLUTETIME_DATEFORMAT;

-							} else if (dateFormat == "DATE") {

-								dateFormat = PatternLayout.DATETIME_DATEFORMAT;

-							}

-						}

-						// Format the date

-						replacement = (new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);

-						break;

-					case "f": // Custom field

-						if (this.hasCustomFields()) {

-							var fieldIndex = 0;

-							if (specifier) {

-								fieldIndex = parseInt(specifier, 10);

-								if (isNaN(fieldIndex)) {

-									handleError("PatternLayout.format: invalid specifier '" +

-										specifier + "' for conversion character 'f' - should be a number");

-								} else if (fieldIndex === 0) {

-									handleError("PatternLayout.format: invalid specifier '" +

-										specifier + "' for conversion character 'f' - must be greater than zero");

-								} else if (fieldIndex > this.customFields.length) {

-									handleError("PatternLayout.format: invalid specifier '" +

-										specifier + "' for conversion character 'f' - there aren't that many custom fields");

-								} else {

-									fieldIndex = fieldIndex - 1;

-								}

-							}

-                            var val = this.customFields[fieldIndex].value;

-                            if (typeof val == "function") {

-                                val = val(this, loggingEvent);

-                            }

-                            replacement = val;

-						}

-						break;

-					case "n": // New line

-						replacement = newLine;

-						break;

-					case "p": // Level

-						replacement = loggingEvent.level.name;

-						break;

-					case "r": // Milliseconds since log4javascript startup

-						replacement = "" + loggingEvent.timeStamp.getDifference(applicationStartDate);

-						break;

-					case "%": // Literal % sign

-						replacement = "%";

-						break;

-					default:

-						replacement = matchedString;

-						break;

-				}

-				// Format the replacement according to any padding or

-				// truncation specified

-				var l;

-

-				// First, truncation

-				if (truncation) {

-					l = parseInt(truncation.substr(1), 10);

-					var strLen = replacement.length;

-					if (l < strLen) {

-						replacement = replacement.substring(strLen - l, strLen);

-					}

-				}

-				// Next, padding

-				if (padding) {

-					if (padding.charAt(0) == "-") {

-						l = parseInt(padding.substr(1), 10);

-						// Right pad with spaces

-						while (replacement.length < l) {

-							replacement += " ";

-						}

-					} else {

-						l = parseInt(padding, 10);

-						// Left pad with spaces

-						while (replacement.length < l) {

-							replacement = " " + replacement;

-						}

-					}

-				}

-				formattedString += replacement;

-			}

-			searchString = searchString.substr(result.index + result[0].length);

-		}

-		return formattedString;

-	};

-

-	PatternLayout.prototype.ignoresThrowable = function() {

-	    return true;

-	};

-

-	PatternLayout.prototype.toString = function() {

-	    return "PatternLayout";

-	};

-

-	log4javascript.PatternLayout = PatternLayout;

-	/* ---------------------------------------------------------------------- */

-	// AlertAppender

-

-	function AlertAppender() {}

-

-	AlertAppender.prototype = new Appender();

-

-	AlertAppender.prototype.layout = new SimpleLayout();

-

-	AlertAppender.prototype.append = function(loggingEvent) {

-		var formattedMessage = this.getLayout().format(loggingEvent);

-		if (this.getLayout().ignoresThrowable()) {

-			formattedMessage += loggingEvent.getThrowableStrRep();

-		}

-		alert(formattedMessage);

-	};

-

-	AlertAppender.prototype.toString = function() {

-		return "AlertAppender";

-	};

-

-	log4javascript.AlertAppender = AlertAppender;

-	/* ---------------------------------------------------------------------- */

-	// BrowserConsoleAppender (only works in Opera and Safari and Firefox with

-	// Firebug extension)

-

-	function BrowserConsoleAppender() {}

-

-	BrowserConsoleAppender.prototype = new log4javascript.Appender();

-	BrowserConsoleAppender.prototype.layout = new NullLayout();

-	BrowserConsoleAppender.prototype.threshold = Level.DEBUG;

-

-	BrowserConsoleAppender.prototype.append = function(loggingEvent) {

-		var appender = this;

-

-		var getFormattedMessage = function() {

-			var layout = appender.getLayout();

-			var formattedMessage = layout.format(loggingEvent);

-			if (layout.ignoresThrowable() && loggingEvent.exception) {

-				formattedMessage += loggingEvent.getThrowableStrRep();

-			}

-			return formattedMessage;

-		};

-

-		if ((typeof opera != "undefined") && opera.postError) { // Opera

-			opera.postError(getFormattedMessage());

-		} else if (window.console && window.console.log) { // Safari and Firebug

-			var formattedMesage = getFormattedMessage();

-			// Log to Firebug using its logging methods or revert to the console.log

-			// method in Safari

-			if (window.console.debug && Level.DEBUG.isGreaterOrEqual(loggingEvent.level)) {

-				window.console.debug(formattedMesage);

-			} else if (window.console.info && Level.INFO.equals(loggingEvent.level)) {

-				window.console.info(formattedMesage);

-			} else if (window.console.warn && Level.WARN.equals(loggingEvent.level)) {

-				window.console.warn(formattedMesage);

-			} else if (window.console.error && loggingEvent.level.isGreaterOrEqual(Level.ERROR)) {

-				window.console.error(formattedMesage);

-			} else {

-				window.console.log(formattedMesage);

-			}

-		}

-	};

-

-	BrowserConsoleAppender.prototype.group = function(name) {

-		if (window.console && window.console.group) {

-			window.console.group(name);

-		}

-	};

-

-	BrowserConsoleAppender.prototype.groupEnd = function() {

-		if (window.console && window.console.groupEnd) {

-			window.console.groupEnd();

-		}

-	};

-

-	BrowserConsoleAppender.prototype.toString = function() {

-		return "BrowserConsoleAppender";

-	};

-

-	log4javascript.BrowserConsoleAppender = BrowserConsoleAppender;

-	/* ---------------------------------------------------------------------- */

-	// AjaxAppender related

-

-	var xmlHttpFactories = [

-		function() { return new XMLHttpRequest(); },

-		function() { return new ActiveXObject("Msxml2.XMLHTTP"); },

-		function() { return new ActiveXObject("Microsoft.XMLHTTP"); }

-	];

-

-	var getXmlHttp = function(errorHandler) {

-		// This is only run the first time; the value of getXmlHttp gets

-		// replaced with the factory that succeeds on the first run

-		var xmlHttp = null, factory;

-		for (var i = 0, len = xmlHttpFactories.length; i < len; i++) {

-			factory = xmlHttpFactories[i];

-			try {

-				xmlHttp = factory();

-				getXmlHttp = factory;

-				return xmlHttp;

-			} catch (e) {

-			}

-		}

-		// If we're here, all factories have failed, so throw an error

-		if (errorHandler) {

-			errorHandler();

-		} else {

-			handleError("getXmlHttp: unable to obtain XMLHttpRequest object");

-		}

-	};

-

-	function isHttpRequestSuccessful(xmlHttp) {

-		return isUndefined(xmlHttp.status) || xmlHttp.status === 0 ||

-			(xmlHttp.status >= 200 && xmlHttp.status < 300) ||

-			xmlHttp.status == 1223 /* Fix for IE */;

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// AjaxAppender

-

-	function AjaxAppender(url) {

-		var appender = this;

-		var isSupported = true;

-		if (!url) {

-			handleError("AjaxAppender: URL must be specified in constructor");

-			isSupported = false;

-		}

-

-		var timed = this.defaults.timed;

-		var waitForResponse = this.defaults.waitForResponse;

-		var batchSize = this.defaults.batchSize;

-		var timerInterval = this.defaults.timerInterval;

-		var requestSuccessCallback = this.defaults.requestSuccessCallback;

-		var failCallback = this.defaults.failCallback;

-		var postVarName = this.defaults.postVarName;

-		var sendAllOnUnload = this.defaults.sendAllOnUnload;

-		var contentType = this.defaults.contentType;

-		var sessionId = null;

-

-		var queuedLoggingEvents = [];

-		var queuedRequests = [];

-		var headers = [];

-		var sending = false;

-		var initialized = false;

-

-		// Configuration methods. The function scope is used to prevent

-		// direct alteration to the appender configuration properties.

-		function checkCanConfigure(configOptionName) {

-			if (initialized) {

-				handleError("AjaxAppender: configuration option '" +

-					configOptionName +

-					"' may not be set after the appender has been initialized");

-				return false;

-			}

-			return true;

-		}

-

-		this.getSessionId = function() { return sessionId; };

-		this.setSessionId = function(sessionIdParam) {

-			sessionId = extractStringFromParam(sessionIdParam, null);

-			this.layout.setCustomField("sessionid", sessionId);

-		};

-

-		this.setLayout = function(layoutParam) {

-			if (checkCanConfigure("layout")) {

-				this.layout = layoutParam;

-				// Set the session id as a custom field on the layout, if not already present

-				if (sessionId !== null) {

-					this.setSessionId(sessionId);

-				}

-			}

-		};

-

-		this.isTimed = function() { return timed; };

-		this.setTimed = function(timedParam) {

-			if (checkCanConfigure("timed")) {

-				timed = bool(timedParam);

-			}

-		};

-

-		this.getTimerInterval = function() { return timerInterval; };

-		this.setTimerInterval = function(timerIntervalParam) {

-			if (checkCanConfigure("timerInterval")) {

-				timerInterval = extractIntFromParam(timerIntervalParam, timerInterval);

-			}

-		};

-

-		this.isWaitForResponse = function() { return waitForResponse; };

-		this.setWaitForResponse = function(waitForResponseParam) {

-			if (checkCanConfigure("waitForResponse")) {

-				waitForResponse = bool(waitForResponseParam);

-			}

-		};

-

-		this.getBatchSize = function() { return batchSize; };

-		this.setBatchSize = function(batchSizeParam) {

-			if (checkCanConfigure("batchSize")) {

-				batchSize = extractIntFromParam(batchSizeParam, batchSize);

-			}

-		};

-

-		this.isSendAllOnUnload = function() { return sendAllOnUnload; };

-		this.setSendAllOnUnload = function(sendAllOnUnloadParam) {

-			if (checkCanConfigure("sendAllOnUnload")) {

-				sendAllOnUnload = extractBooleanFromParam(sendAllOnUnloadParam, sendAllOnUnload);

-			}

-		};

-

-		this.setRequestSuccessCallback = function(requestSuccessCallbackParam) {

-			requestSuccessCallback = extractFunctionFromParam(requestSuccessCallbackParam, requestSuccessCallback);

-		};

-

-		this.setFailCallback = function(failCallbackParam) {

-			failCallback = extractFunctionFromParam(failCallbackParam, failCallback);

-		};

-

-		this.getPostVarName = function() { return postVarName; };

-		this.setPostVarName = function(postVarNameParam) {

-			if (checkCanConfigure("postVarName")) {

-				postVarName = extractStringFromParam(postVarNameParam, postVarName);

-			}

-		};

-

-		this.getHeaders = function() { return headers; };

-		this.addHeader = function(name, value) {

-			if (name.toLowerCase() == "content-type") {

-				contentType = value;

-			} else {

-				headers.push( { name: name, value: value } );

-			}

-		};

-

-		// Internal functions

-		function sendAll() {

-			if (isSupported && enabled) {

-				sending = true;

-				var currentRequestBatch;

-				if (waitForResponse) {

-					// Send the first request then use this function as the callback once

-					// the response comes back

-					if (queuedRequests.length > 0) {

-						currentRequestBatch = queuedRequests.shift();

-						sendRequest(preparePostData(currentRequestBatch), sendAll);

-					} else {

-						sending = false;

-						if (timed) {

-							scheduleSending();

-						}

-					}

-				} else {

-					// Rattle off all the requests without waiting to see the response

-					while ((currentRequestBatch = queuedRequests.shift())) {

-						sendRequest(preparePostData(currentRequestBatch));

-					}

-					sending = false;

-					if (timed) {

-						scheduleSending();

-					}

-				}

-			}

-		}

-

-		this.sendAll = sendAll;

-

-		// Called when the window unloads. At this point we're past caring about

-		// waiting for responses or timers or incomplete batches - everything

-		// must go, now

-		function sendAllRemaining() {

-			var sendingAnything = false;

-			if (isSupported && enabled) {

-				// Create requests for everything left over, batched as normal

-				var actualBatchSize = appender.getLayout().allowBatching() ? batchSize : 1;

-				var currentLoggingEvent;

-				var batchedLoggingEvents = [];

-				while ((currentLoggingEvent = queuedLoggingEvents.shift())) {

-					batchedLoggingEvents.push(currentLoggingEvent);

-					if (queuedLoggingEvents.length >= actualBatchSize) {

-						// Queue this batch of log entries

-						queuedRequests.push(batchedLoggingEvents);

-						batchedLoggingEvents = [];

-					}

-				}

-				// If there's a partially completed batch, add it

-				if (batchedLoggingEvents.length > 0) {

-					queuedRequests.push(batchedLoggingEvents);

-				}

-				sendingAnything = (queuedRequests.length > 0);

-				waitForResponse = false;

-				timed = false;

-				sendAll();

-			}

-			return sendingAnything;

-		}

-

-		this.sendAllRemaining = sendAllRemaining;

-

-		function preparePostData(batchedLoggingEvents) {

-			// Format the logging events

-			var formattedMessages = [];

-			var currentLoggingEvent;

-			var postData = "";

-			while ((currentLoggingEvent = batchedLoggingEvents.shift())) {

-				var currentFormattedMessage = appender.getLayout().format(currentLoggingEvent);

-				if (appender.getLayout().ignoresThrowable()) {

-					currentFormattedMessage += currentLoggingEvent.getThrowableStrRep();

-				}

-				formattedMessages.push(currentFormattedMessage);

-			}

-			// Create the post data string

-			if (batchedLoggingEvents.length == 1) {

-				postData = formattedMessages.join("");

-			} else {

-				postData = appender.getLayout().batchHeader +

-					formattedMessages.join(appender.getLayout().batchSeparator) +

-					appender.getLayout().batchFooter;

-			}

-			if (contentType == appender.defaults.contentType) {

-				postData = appender.getLayout().returnsPostData ? postData :

-					urlEncode(postVarName) + "=" + urlEncode(postData);

-				// Add the layout name to the post data

-				if (postData.length > 0) {

-					postData += "&";

-				}

-				postData += "layout=" + urlEncode(appender.getLayout().toString());

-			}

-			return postData;

-		}

-

-		function scheduleSending() {

-			window.setTimeout(sendAll, timerInterval);

-		}

-

-		function xmlHttpErrorHandler() {

-			var msg = "AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";

-			handleError(msg);

-			isSupported = false;

-			if (failCallback) {

-				failCallback(msg);

-			}

-		}

-

-		function sendRequest(postData, successCallback) {

-			try {

-				var xmlHttp = getXmlHttp(xmlHttpErrorHandler);

-				if (isSupported) {

-					if (xmlHttp.overrideMimeType) {

-						xmlHttp.overrideMimeType(appender.getLayout().getContentType());

-					}

-					xmlHttp.onreadystatechange = function() {

-						if (xmlHttp.readyState == 4) {

-							if (isHttpRequestSuccessful(xmlHttp)) {

-								if (requestSuccessCallback) {

-									requestSuccessCallback(xmlHttp);

-								}

-								if (successCallback) {

-									successCallback(xmlHttp);

-								}

-							} else {

-								var msg = "AjaxAppender.append: XMLHttpRequest request to URL " +

-									url + " returned status code " + xmlHttp.status;

-								handleError(msg);

-								if (failCallback) {

-									failCallback(msg);

-								}

-							}

-							xmlHttp.onreadystatechange = emptyFunction;

-							xmlHttp = null;

-						}

-					};

-					xmlHttp.open("POST", url, true);

-					try {

-						for (var i = 0, header; header = headers[i++]; ) {

-							xmlHttp.setRequestHeader(header.name, header.value);

-						}

-						xmlHttp.setRequestHeader("Content-Type", contentType);

-					} catch (headerEx) {

-						var msg = "AjaxAppender.append: your browser's XMLHttpRequest implementation" +

-							" does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";

-						handleError(msg);

-						isSupported = false;

-						if (failCallback) {

-							failCallback(msg);

-						}

-						return;

-					}

-					xmlHttp.send(postData);

-				}

-			} catch (ex) {

-				var errMsg = "AjaxAppender.append: error sending log message to " + url;

-				handleError(errMsg, ex);

-				isSupported = false;

-				if (failCallback) {

-					failCallback(errMsg + ". Details: " + getExceptionStringRep(ex));

-				}

-			}

-		}

-

-		this.append = function(loggingEvent) {

-			if (isSupported) {

-				if (!initialized) {

-					init();

-				}

-				queuedLoggingEvents.push(loggingEvent);

-				var actualBatchSize = this.getLayout().allowBatching() ? batchSize : 1;

-

-				if (queuedLoggingEvents.length >= actualBatchSize) {

-					var currentLoggingEvent;

-					var batchedLoggingEvents = [];

-					while ((currentLoggingEvent = queuedLoggingEvents.shift())) {

-						batchedLoggingEvents.push(currentLoggingEvent);

-					}

-					// Queue this batch of log entries

-					queuedRequests.push(batchedLoggingEvents);

-

-					// If using a timer, the queue of requests will be processed by the

-					// timer function, so nothing needs to be done here.

-					if (!timed && (!waitForResponse || (waitForResponse && !sending))) {

-						sendAll();

-					}

-				}

-			}

-		};

-

-		function init() {

-			initialized = true;

-			// Add unload event to send outstanding messages

-			if (sendAllOnUnload) {

-				var oldBeforeUnload = window.onbeforeunload;

-				window.onbeforeunload = function() {

-					if (oldBeforeUnload) {

-						oldBeforeUnload();

-					}

-					if (sendAllRemaining()) {

-						return "Sending log messages";

-					}

-				};

-			}

-			// Start timer

-			if (timed) {

-				scheduleSending();

-			}

-		}

-	}

-

-	AjaxAppender.prototype = new Appender();

-

-	AjaxAppender.prototype.defaults = {

-		waitForResponse: false,

-		timed: false,

-		timerInterval: 1000,

-		batchSize: 1,

-		sendAllOnUnload: false,

-		requestSuccessCallback: null,

-		failCallback: null,

-		postVarName: "data",

-		contentType: "application/x-www-form-urlencoded"

-	};

-

-	AjaxAppender.prototype.layout = new HttpPostDataLayout();

-

-	AjaxAppender.prototype.toString = function() {

-		return "AjaxAppender";

-	};

-

-	log4javascript.AjaxAppender = AjaxAppender;

-	/* ---------------------------------------------------------------------- */

-	// PopUpAppender and InPageAppender related

-

-	function setCookie(name, value, days, path) {

-	    var expires;

-	    path = path ? "; path=" + path : "";

-		if (days) {

-			var date = new Date();

-			date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));

-			expires = "; expires=" + date.toGMTString();

-		} else {

-		    expires = "";

-	    }

-		document.cookie = escape(name) + "=" + escape(value) + expires + path;

-	}

-

-	function getCookie(name) {

-		var nameEquals = escape(name) + "=";

-		var ca = document.cookie.split(";");

-		for (var i = 0, len = ca.length; i < len; i++) {

-			var c = ca[i];

-			while (c.charAt(0) === " ") {

-			    c = c.substring(1, c.length);

-			}

-			if (c.indexOf(nameEquals) === 0) {

-			    return unescape(c.substring(nameEquals.length, c.length));

-	        }

-		}

-		return null;

-	}

-

-	// Gets the base URL of the location of the log4javascript script.

-	// This is far from infallible.

-	function getBaseUrl() {

-		var scripts = document.getElementsByTagName("script");

-		for (var i = 0, len = scripts.length; i < len; ++i) {

-			if (scripts[i].src.indexOf("log4javascript") != -1) {

-				var lastSlash = scripts[i].src.lastIndexOf("/");

-				return (lastSlash == -1) ? "" : scripts[i].src.substr(0, lastSlash + 1);

-			}

-		}

-        return null;

-    }

-

-	function isLoaded(win) {

-		try {

-			return bool(win.loaded);

-		} catch (ex) {

-			return false;

-		}

-	}

-

-	/* ---------------------------------------------------------------------- */

-	// ConsoleAppender (prototype for PopUpAppender and InPageAppender)

-

-	var ConsoleAppender;

-

-	// Create an anonymous function to protect base console methods

-	(function() {

-		var getConsoleHtmlLines = function() {

-			return [

-'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',

-'<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">',

-'	<head>',

-'		<title>log4javascript</title>',

-'		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />',

-'		<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->',

-'		<meta http-equiv="X-UA-Compatible" content="IE=7" />',

-'		<script type="text/javascript">var isIe = false, isIePre7 = false;</script>',

-'		<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->',

-'		<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->',

-'		<script type="text/javascript">',

-'			//<![CDATA[',

-'			var loggingEnabled = true;',

-'			var logQueuedEventsTimer = null;',

-'			var logEntries = [];',

-'			var logEntriesAndSeparators = [];',

-'			var logItems = [];',

-'			var renderDelay = 100;',

-'			var unrenderedLogItemsExist = false;',

-'			var rootGroup, currentGroup = null;',

-'			var loaded = false;',

-'			var currentLogItem = null;',

-'			var logMainContainer;',

-'',

-'			function copyProperties(obj, props) {',

-'				for (var i in props) {',

-'					obj[i] = props[i];',

-'				}',

-'			}',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogItem() {',

-'			}',

-'',

-'			LogItem.prototype = {',

-'				mainContainer: null,',

-'				wrappedContainer: null,',

-'				unwrappedContainer: null,',

-'				group: null,',

-'',

-'				appendToLog: function() {',

-'					for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'						this.elementContainers[i].appendToLog();',

-'					}',

-'					this.group.update();',

-'				},',

-'',

-'				doRemove: function(doUpdate, removeFromGroup) {',

-'					if (this.rendered) {',

-'						for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'							this.elementContainers[i].remove();',

-'						}',

-'						this.unwrappedElementContainer = null;',

-'						this.wrappedElementContainer = null;',

-'						this.mainElementContainer = null;',

-'					}',

-'					if (this.group && removeFromGroup) {',

-'						this.group.removeChild(this, doUpdate);',

-'					}',

-'					if (this === currentLogItem) {',

-'						currentLogItem = null;',

-'					}',

-'				},',

-'',

-'				remove: function(doUpdate, removeFromGroup) {',

-'					this.doRemove(doUpdate, removeFromGroup);',

-'				},',

-'',

-'				render: function() {},',

-'',

-'				accept: function(visitor) {',

-'					visitor.visit(this);',

-'				},',

-'',

-'				getUnwrappedDomContainer: function() {',

-'					return this.group.unwrappedElementContainer.contentDiv;',

-'				},',

-'',

-'				getWrappedDomContainer: function() {',

-'					return this.group.wrappedElementContainer.contentDiv;',

-'				},',

-'',

-'				getMainDomContainer: function() {',

-'					return this.group.mainElementContainer.contentDiv;',

-'				}',

-'			};',

-'',

-'			LogItem.serializedItemKeys = {LOG_ENTRY: 0, GROUP_START: 1, GROUP_END: 2};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogItemContainerElement() {',

-'			}',

-'',

-'			LogItemContainerElement.prototype = {',

-'				appendToLog: function() {',

-'					var insertBeforeFirst = (newestAtTop && this.containerDomNode.hasChildNodes());',

-'					if (insertBeforeFirst) {',

-'						this.containerDomNode.insertBefore(this.mainDiv, this.containerDomNode.firstChild);',

-'					} else {',

-'						this.containerDomNode.appendChild(this.mainDiv);',

-'					}',

-'				}',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function SeparatorElementContainer(containerDomNode) {',

-'				this.containerDomNode = containerDomNode;',

-'				this.mainDiv = document.createElement("div");',

-'				this.mainDiv.className = "separator";',

-'				this.mainDiv.innerHTML = "&nbsp;";',

-'			}',

-'',

-'			SeparatorElementContainer.prototype = new LogItemContainerElement();',

-'',

-'			SeparatorElementContainer.prototype.remove = function() {',

-'				this.mainDiv.parentNode.removeChild(this.mainDiv);',

-'				this.mainDiv = null;',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function Separator() {',

-'				this.rendered = false;',

-'			}',

-'',

-'			Separator.prototype = new LogItem();',

-'',

-'			copyProperties(Separator.prototype, {',

-'				render: function() {',

-'					var containerDomNode = this.group.contentDiv;',

-'					if (isIe) {',

-'						this.unwrappedElementContainer = new SeparatorElementContainer(this.getUnwrappedDomContainer());',

-'						this.wrappedElementContainer = new SeparatorElementContainer(this.getWrappedDomContainer());',

-'						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',

-'					} else {',

-'						this.mainElementContainer = new SeparatorElementContainer(this.getMainDomContainer());',

-'						this.elementContainers = [this.mainElementContainer];',

-'					}',

-'					this.content = this.formattedMessage;',

-'					this.rendered = true;',

-'				}',

-'			});',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function GroupElementContainer(group, containerDomNode, isRoot, isWrapped) {',

-'				this.group = group;',

-'				this.containerDomNode = containerDomNode;',

-'				this.isRoot = isRoot;',

-'				this.isWrapped = isWrapped;',

-'				this.expandable = false;',

-'',

-'				if (this.isRoot) {',

-'					if (isIe) {',

-'						this.contentDiv = logMainContainer.appendChild(document.createElement("div"));',

-'						this.contentDiv.id = this.isWrapped ? "log_wrapped" : "log_unwrapped";',

-'					} else {',

-'						this.contentDiv = logMainContainer;',

-'					}',

-'				} else {',

-'					var groupElementContainer = this;',

-'					',

-'					this.mainDiv = document.createElement("div");',

-'					this.mainDiv.className = "group";',

-'',

-'					this.headingDiv = this.mainDiv.appendChild(document.createElement("div"));',

-'					this.headingDiv.className = "groupheading";',

-'',

-'					this.expander = this.headingDiv.appendChild(document.createElement("span"));',

-'					this.expander.className = "expander unselectable greyedout";',

-'					this.expander.unselectable = true;',

-'					var expanderText = this.group.expanded ? "-" : "+";',

-'					this.expanderTextNode = this.expander.appendChild(document.createTextNode(expanderText));',

-'					',

-'					this.headingDiv.appendChild(document.createTextNode(" " + this.group.name));',

-'',

-'					this.contentDiv = this.mainDiv.appendChild(document.createElement("div"));',

-'					var contentCssClass = this.group.expanded ? "expanded" : "collapsed";',

-'					this.contentDiv.className = "groupcontent " + contentCssClass;',

-'',

-'					this.expander.onclick = function() {',

-'						if (groupElementContainer.group.expandable) {',

-'							groupElementContainer.group.toggleExpanded();',

-'						}',

-'					};',

-'				}',

-'			}',

-'',

-'			GroupElementContainer.prototype = new LogItemContainerElement();',

-'',

-'			copyProperties(GroupElementContainer.prototype, {',

-'				toggleExpanded: function() {',

-'					if (!this.isRoot) {',

-'						var oldCssClass, newCssClass, expanderText;',

-'						if (this.group.expanded) {',

-'							newCssClass = "expanded";',

-'							oldCssClass = "collapsed";',

-'							expanderText = "-";',

-'						} else {',

-'							newCssClass = "collapsed";',

-'							oldCssClass = "expanded";',

-'							expanderText = "+";',

-'						}',

-'						replaceClass(this.contentDiv, newCssClass, oldCssClass);',

-'						this.expanderTextNode.nodeValue = expanderText;',

-'					}',

-'				},',

-'',

-'				remove: function() {',

-'					if (!this.isRoot) {',

-'						this.headingDiv = null;',

-'						this.expander.onclick = null;',

-'						this.expander = null;',

-'						this.expanderTextNode = null;',

-'						this.contentDiv = null;',

-'						this.containerDomNode = null;',

-'						this.mainDiv.parentNode.removeChild(this.mainDiv);',

-'						this.mainDiv = null;',

-'					}',

-'				},',

-'',

-'				reverseChildren: function() {',

-'					// Invert the order of the log entries',

-'					var node = null;',

-'',

-'					// Remove all the log container nodes',

-'					var childDomNodes = [];',

-'					while ((node = this.contentDiv.firstChild)) {',

-'						this.contentDiv.removeChild(node);',

-'						childDomNodes.push(node);',

-'					}',

-'',

-'					// Put them all back in reverse order',

-'					while ((node = childDomNodes.pop())) {',

-'						this.contentDiv.appendChild(node);',

-'					}',

-'				},',

-'',

-'				update: function() {',

-'					if (!this.isRoot) {',

-'						if (this.group.expandable) {',

-'							removeClass(this.expander, "greyedout");',

-'						} else {',

-'							addClass(this.expander, "greyedout");',

-'						}',

-'					}',

-'				},',

-'',

-'				clear: function() {',

-'					if (this.isRoot) {',

-'						this.contentDiv.innerHTML = "";',

-'					}',

-'				}',

-'			});',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function Group(name, isRoot, initiallyExpanded) {',

-'				this.name = name;',

-'				this.group = null;',

-'				this.isRoot = isRoot;',

-'				this.initiallyExpanded = initiallyExpanded;',

-'				this.elementContainers = [];',

-'				this.children = [];',

-'				this.expanded = initiallyExpanded;',

-'				this.rendered = false;',

-'				this.expandable = false;',

-'			}',

-'',

-'			Group.prototype = new LogItem();',

-'',

-'			copyProperties(Group.prototype, {',

-'				addChild: function(logItem) {',

-'					this.children.push(logItem);',

-'					logItem.group = this;',

-'				},',

-'',

-'				render: function() {',

-'					if (isIe) {',

-'						var unwrappedDomContainer, wrappedDomContainer;',

-'						if (this.isRoot) {',

-'							unwrappedDomContainer = logMainContainer;',

-'							wrappedDomContainer = logMainContainer;',

-'						} else {',

-'							unwrappedDomContainer = this.getUnwrappedDomContainer();',

-'							wrappedDomContainer = this.getWrappedDomContainer();',

-'						}',

-'						this.unwrappedElementContainer = new GroupElementContainer(this, unwrappedDomContainer, this.isRoot, false);',

-'						this.wrappedElementContainer = new GroupElementContainer(this, wrappedDomContainer, this.isRoot, true);',

-'						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',

-'					} else {',

-'						var mainDomContainer = this.isRoot ? logMainContainer : this.getMainDomContainer();',

-'						this.mainElementContainer = new GroupElementContainer(this, mainDomContainer, this.isRoot, false);',

-'						this.elementContainers = [this.mainElementContainer];',

-'					}',

-'					this.rendered = true;',

-'				},',

-'',

-'				toggleExpanded: function() {',

-'					this.expanded = !this.expanded;',

-'					for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'						this.elementContainers[i].toggleExpanded();',

-'					}',

-'				},',

-'',

-'				expand: function() {',

-'					if (!this.expanded) {',

-'						this.toggleExpanded();',

-'					}',

-'				},',

-'',

-'				accept: function(visitor) {',

-'					visitor.visitGroup(this);',

-'				},',

-'',

-'				reverseChildren: function() {',

-'					if (this.rendered) {',

-'						for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'							this.elementContainers[i].reverseChildren();',

-'						}',

-'					}',

-'				},',

-'',

-'				update: function() {',

-'					var previouslyExpandable = this.expandable;',

-'					this.expandable = (this.children.length !== 0);',

-'					if (this.expandable !== previouslyExpandable) {',

-'						for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'							this.elementContainers[i].update();',

-'						}',

-'					}',

-'				},',

-'',

-'				flatten: function() {',

-'					var visitor = new GroupFlattener();',

-'					this.accept(visitor);',

-'					return visitor.logEntriesAndSeparators;',

-'				},',

-'',

-'				removeChild: function(child, doUpdate) {',

-'					array_remove(this.children, child);',

-'					child.group = null;',

-'					if (doUpdate) {',

-'						this.update();',

-'					}',

-'				},',

-'',

-'				remove: function(doUpdate, removeFromGroup) {',

-'					for (var i = 0, len = this.children.length; i < len; i++) {',

-'						this.children[i].remove(false, false);',

-'					}',

-'					this.children = [];',

-'					this.update();',

-'					if (this === currentGroup) {',

-'						currentGroup = this.group;',

-'					}',

-'					this.doRemove(doUpdate, removeFromGroup);',

-'				},',

-'',

-'				serialize: function(items) {',

-'					items.push([LogItem.serializedItemKeys.GROUP_START, this.name]);',

-'					for (var i = 0, len = this.children.length; i < len; i++) {',

-'						this.children[i].serialize(items);',

-'					}',

-'					if (this !== currentGroup) {',

-'						items.push([LogItem.serializedItemKeys.GROUP_END]);',

-'					}',

-'				},',

-'',

-'				clear: function() {',

-'					for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'						this.elementContainers[i].clear();',

-'					}',

-'				}',

-'			});',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogEntryElementContainer() {',

-'			}',

-'',

-'			LogEntryElementContainer.prototype = new LogItemContainerElement();',

-'',

-'			copyProperties(LogEntryElementContainer.prototype, {',

-'				remove: function() {',

-'					this.doRemove();',

-'				},',

-'',

-'				doRemove: function() {',

-'					this.mainDiv.parentNode.removeChild(this.mainDiv);',

-'					this.mainDiv = null;',

-'					this.contentElement = null;',

-'					this.containerDomNode = null;',

-'				},',

-'',

-'				setContent: function(content, wrappedContent) {',

-'					if (content === this.formattedMessage) {',

-'						this.contentElement.innerHTML = "";',

-'						this.contentElement.appendChild(document.createTextNode(this.formattedMessage));',

-'					} else {',

-'						this.contentElement.innerHTML = content;',

-'					}',

-'				},',

-'',

-'				setSearchMatch: function(isMatch) {',

-'					var oldCssClass = isMatch ? "searchnonmatch" : "searchmatch";',

-'					var newCssClass = isMatch ? "searchmatch" : "searchnonmatch";',

-'					replaceClass(this.mainDiv, newCssClass, oldCssClass);',

-'				},',

-'',

-'				clearSearch: function() {',

-'					removeClass(this.mainDiv, "searchmatch");',

-'					removeClass(this.mainDiv, "searchnonmatch");',

-'				}',

-'			});',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogEntryWrappedElementContainer(logEntry, containerDomNode) {',

-'				this.logEntry = logEntry;',

-'				this.containerDomNode = containerDomNode;',

-'				this.mainDiv = document.createElement("div");',

-'				this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));',

-'				this.mainDiv.className = "logentry wrapped " + this.logEntry.level;',

-'				this.contentElement = this.mainDiv;',

-'			}',

-'',

-'			LogEntryWrappedElementContainer.prototype = new LogEntryElementContainer();',

-'',

-'			LogEntryWrappedElementContainer.prototype.setContent = function(content, wrappedContent) {',

-'				if (content === this.formattedMessage) {',

-'					this.contentElement.innerHTML = "";',

-'					this.contentElement.appendChild(document.createTextNode(this.formattedMessage));',

-'				} else {',

-'					this.contentElement.innerHTML = wrappedContent;',

-'				}',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogEntryUnwrappedElementContainer(logEntry, containerDomNode) {',

-'				this.logEntry = logEntry;',

-'				this.containerDomNode = containerDomNode;',

-'				this.mainDiv = document.createElement("div");',

-'				this.mainDiv.className = "logentry unwrapped " + this.logEntry.level;',

-'				this.pre = this.mainDiv.appendChild(document.createElement("pre"));',

-'				this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));',

-'				this.pre.className = "unwrapped";',

-'				this.contentElement = this.pre;',

-'			}',

-'',

-'			LogEntryUnwrappedElementContainer.prototype = new LogEntryElementContainer();',

-'',

-'			LogEntryUnwrappedElementContainer.prototype.remove = function() {',

-'				this.doRemove();',

-'				this.pre = null;',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogEntryMainElementContainer(logEntry, containerDomNode) {',

-'				this.logEntry = logEntry;',

-'				this.containerDomNode = containerDomNode;',

-'				this.mainDiv = document.createElement("div");',

-'				this.mainDiv.className = "logentry nonielogentry " + this.logEntry.level;',

-'				this.contentElement = this.mainDiv.appendChild(document.createElement("span"));',

-'				this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));',

-'			}',

-'',

-'			LogEntryMainElementContainer.prototype = new LogEntryElementContainer();',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogEntry(level, formattedMessage) {',

-'				this.level = level;',

-'				this.formattedMessage = formattedMessage;',

-'				this.rendered = false;',

-'			}',

-'',

-'			LogEntry.prototype = new LogItem();',

-'',

-'			copyProperties(LogEntry.prototype, {',

-'				render: function() {',

-'					var logEntry = this;',

-'					var containerDomNode = this.group.contentDiv;',

-'',

-'					// Support for the CSS attribute white-space in IE for Windows is',

-'					// non-existent pre version 6 and slightly odd in 6, so instead',

-'					// use two different HTML elements',

-'					if (isIe) {',

-'						this.formattedMessage = this.formattedMessage.replace(/\\r\\n/g, "\\r"); // Workaround for IE\'s treatment of white space',

-'						this.unwrappedElementContainer = new LogEntryUnwrappedElementContainer(this, this.getUnwrappedDomContainer());',

-'						this.wrappedElementContainer = new LogEntryWrappedElementContainer(this, this.getWrappedDomContainer());',

-'						this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',

-'					} else {',

-'						this.mainElementContainer = new LogEntryMainElementContainer(this, this.getMainDomContainer());',

-'						this.elementContainers = [this.mainElementContainer];',

-'					}',

-'					this.content = this.formattedMessage;',

-'					this.rendered = true;',

-'				},',

-'',

-'				setContent: function(content, wrappedContent) {',

-'					if (content != this.content) {',

-'						if (isIe && (content !== this.formattedMessage)) {',

-'							content = content.replace(/\\r\\n/g, "\\r"); // Workaround for IE\'s treatment of white space',

-'						}',

-'						for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'							this.elementContainers[i].setContent(content, wrappedContent);',

-'						}',

-'						this.content = content;',

-'					}',

-'				},',

-'',

-'				getSearchMatches: function() {',

-'					var matches = [];',

-'					var i, len;',

-'					if (isIe) {',

-'						var unwrappedEls = getElementsByClass(this.unwrappedElementContainer.mainDiv, "searchterm", "span");',

-'						var wrappedEls = getElementsByClass(this.wrappedElementContainer.mainDiv, "searchterm", "span");',

-'						for (i = 0, len = unwrappedEls.length; i < len; i++) {',

-'							matches[i] = new Match(this.level, null, unwrappedEls[i], wrappedEls[i]);',

-'						}',

-'					} else {',

-'						var els = getElementsByClass(this.mainElementContainer.mainDiv, "searchterm", "span");',

-'						for (i = 0, len = els.length; i < len; i++) {',

-'							matches[i] = new Match(this.level, els[i]);',

-'						}',

-'					}',

-'					return matches;',

-'				},',

-'',

-'				setSearchMatch: function(isMatch) {',

-'					for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'						this.elementContainers[i].setSearchMatch(isMatch);',

-'					}',

-'				},',

-'',

-'				clearSearch: function() {',

-'					for (var i = 0, len = this.elementContainers.length; i < len; i++) {',

-'						this.elementContainers[i].clearSearch();',

-'					}',

-'				},',

-'',

-'				accept: function(visitor) {',

-'					visitor.visitLogEntry(this);',

-'				},',

-'',

-'				serialize: function(items) {',

-'					items.push([LogItem.serializedItemKeys.LOG_ENTRY, this.level, this.formattedMessage]);',

-'				}',

-'			});',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogItemVisitor() {',

-'			}',

-'',

-'			LogItemVisitor.prototype = {',

-'				visit: function(logItem) {',

-'				},',

-'',

-'				visitParent: function(logItem) {',

-'					if (logItem.group) {',

-'						logItem.group.accept(this);',

-'					}',

-'				},',

-'',

-'				visitChildren: function(logItem) {',

-'					for (var i = 0, len = logItem.children.length; i < len; i++) {',

-'						logItem.children[i].accept(this);',

-'					}',

-'				},',

-'',

-'				visitLogEntry: function(logEntry) {',

-'					this.visit(logEntry);',

-'				},',

-'',

-'				visitSeparator: function(separator) {',

-'					this.visit(separator);',

-'				},',

-'',

-'				visitGroup: function(group) {',

-'					this.visit(group);',

-'				}',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function GroupFlattener() {',

-'				this.logEntriesAndSeparators = [];',

-'			}',

-'',

-'			GroupFlattener.prototype = new LogItemVisitor();',

-'',

-'			GroupFlattener.prototype.visitGroup = function(group) {',

-'				this.visitChildren(group);',

-'			};',

-'',

-'			GroupFlattener.prototype.visitLogEntry = function(logEntry) {',

-'				this.logEntriesAndSeparators.push(logEntry);',

-'			};',

-'',

-'			GroupFlattener.prototype.visitSeparator = function(separator) {',

-'				this.logEntriesAndSeparators.push(separator);',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			window.onload = function() {',

-'				// Sort out document.domain',

-'				if (location.search) {',

-'					var queryBits = unescape(location.search).substr(1).split("&"), nameValueBits;',

-'					for (var i = 0, len = queryBits.length; i < len; i++) {',

-'						nameValueBits = queryBits[i].split("=");',

-'						if (nameValueBits[0] == "log4javascript_domain") {',

-'							document.domain = nameValueBits[1];',

-'							break;',

-'						}',

-'					}',

-'				}',

-'',

-'				// Create DOM objects',

-'				logMainContainer = $("log");',

-'				if (isIePre7) {',

-'					addClass(logMainContainer, "oldIe");',

-'				}',

-'',

-'				rootGroup = new Group("root", true);',

-'				rootGroup.render();',

-'				currentGroup = rootGroup;',

-'				',

-'				setCommandInputWidth();',

-'				setLogContainerHeight();',

-'				toggleLoggingEnabled();',

-'				toggleSearchEnabled();',

-'				toggleSearchFilter();',

-'				toggleSearchHighlight();',

-'				applyFilters();',

-'				checkAllLevels();',

-'				toggleWrap();',

-'				toggleNewestAtTop();',

-'				toggleScrollToLatest();',

-'				renderQueuedLogItems();',

-'				loaded = true;',

-'				$("command").value = "";',

-'				$("command").autocomplete = "off";',

-'				$("command").onkeydown = function(evt) {',

-'					evt = getEvent(evt);',

-'					if (evt.keyCode == 10 || evt.keyCode == 13) { // Return/Enter',

-'						evalCommandLine();',

-'						stopPropagation(evt);',

-'					} else if (evt.keyCode == 27) { // Escape',

-'						this.value = "";',

-'						this.focus();',

-'					} else if (evt.keyCode == 38 && commandHistory.length > 0) { // Up',

-'						currentCommandIndex = Math.max(0, currentCommandIndex - 1);',

-'						this.value = commandHistory[currentCommandIndex];',

-'						moveCaretToEnd(this);',

-'					} else if (evt.keyCode == 40 && commandHistory.length > 0) { // Down',

-'						currentCommandIndex = Math.min(commandHistory.length - 1, currentCommandIndex + 1);',

-'						this.value = commandHistory[currentCommandIndex];',

-'						moveCaretToEnd(this);',

-'					}',

-'				};',

-'',

-'				// Prevent the keypress moving the caret in Firefox',

-'				$("command").onkeypress = function(evt) {',

-'					evt = getEvent(evt);',

-'					if (evt.keyCode == 38 && commandHistory.length > 0 && evt.preventDefault) { // Up',

-'						evt.preventDefault();',

-'					}',

-'				};',

-'',

-'				// Prevent the keyup event blurring the input in Opera',

-'				$("command").onkeyup = function(evt) {',

-'					evt = getEvent(evt);',

-'					if (evt.keyCode == 27 && evt.preventDefault) { // Up',

-'						evt.preventDefault();',

-'						this.focus();',

-'					}',

-'				};',

-'',

-'				// Add document keyboard shortcuts',

-'				document.onkeydown = function keyEventHandler(evt) {',

-'					evt = getEvent(evt);',

-'					switch (evt.keyCode) {',

-'						case 69: // Ctrl + shift + E: re-execute last command',

-'							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',

-'								evalLastCommand();',

-'								cancelKeyEvent(evt);',

-'								return false;',

-'							}',

-'							break;',

-'						case 75: // Ctrl + shift + K: focus search',

-'							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',

-'								focusSearch();',

-'								cancelKeyEvent(evt);',

-'								return false;',

-'							}',

-'							break;',

-'						case 40: // Ctrl + shift + down arrow: focus command line',

-'						case 76: // Ctrl + shift + L: focus command line',

-'							if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',

-'								focusCommandLine();',

-'								cancelKeyEvent(evt);',

-'								return false;',

-'							}',

-'							break;',

-'					}',

-'				};',

-'',

-'				// Workaround to make sure log div starts at the correct size',

-'				setTimeout(setLogContainerHeight, 20);',

-'',

-'				setShowCommandLine(showCommandLine);',

-'				doSearch();',

-'			};',

-'',

-'			window.onunload = function() {',

-'				if (mainWindowExists()) {',

-'					appender.unload();',

-'				}',

-'				appender = null;',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function toggleLoggingEnabled() {',

-'				setLoggingEnabled($("enableLogging").checked);',

-'			}',

-'',

-'			function setLoggingEnabled(enable) {',

-'				loggingEnabled = enable;',

-'			}',

-'',

-'			var appender = null;',

-'',

-'			function setAppender(appenderParam) {',

-'				appender = appenderParam;',

-'			}',

-'',

-'			function setShowCloseButton(showCloseButton) {',

-'				$("closeButton").style.display = showCloseButton ? "inline" : "none";',

-'			}',

-'',

-'			function setShowHideButton(showHideButton) {',

-'				$("hideButton").style.display = showHideButton ? "inline" : "none";',

-'			}',

-'',

-'			var newestAtTop = false;',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function LogItemContentReverser() {',

-'			}',

-'			',

-'			LogItemContentReverser.prototype = new LogItemVisitor();',

-'			',

-'			LogItemContentReverser.prototype.visitGroup = function(group) {',

-'				group.reverseChildren();',

-'				this.visitChildren(group);',

-'			};',

-'',

-'			/*----------------------------------------------------------------*/',

-'',

-'			function setNewestAtTop(isNewestAtTop) {',

-'				var oldNewestAtTop = newestAtTop;',

-'				var i, iLen, j, jLen;',

-'				newestAtTop = Boolean(isNewestAtTop);',

-'				if (oldNewestAtTop != newestAtTop) {',

-'					var visitor = new LogItemContentReverser();',

-'					rootGroup.accept(visitor);',

-'',

-'					// Reassemble the matches array',

-'					if (currentSearch) {',

-'						var currentMatch = currentSearch.matches[currentMatchIndex];',

-'						var matchIndex = 0;',

-'						var matches = [];',

-'						var actOnLogEntry = function(logEntry) {',

-'							var logEntryMatches = logEntry.getSearchMatches();',

-'							for (j = 0, jLen = logEntryMatches.length; j < jLen; j++) {',

-'								matches[matchIndex] = logEntryMatches[j];',

-'								if (currentMatch && logEntryMatches[j].equals(currentMatch)) {',

-'									currentMatchIndex = matchIndex;',

-'								}',

-'								matchIndex++;',

-'							}',

-'						};',

-'						if (newestAtTop) {',

-'							for (i = logEntries.length - 1; i >= 0; i--) {',

-'								actOnLogEntry(logEntries[i]);',

-'							}',

-'						} else {',

-'							for (i = 0, iLen = logEntries.length; i < iLen; i++) {',

-'								actOnLogEntry(logEntries[i]);',

-'							}',

-'						}',

-'						currentSearch.matches = matches;',

-'						if (currentMatch) {',

-'							currentMatch.setCurrent();',

-'						}',

-'					} else if (scrollToLatest) {',

-'						doScrollToLatest();',

-'					}',

-'				}',

-'				$("newestAtTop").checked = isNewestAtTop;',

-'			}',

-'',

-'			function toggleNewestAtTop() {',

-'				var isNewestAtTop = $("newestAtTop").checked;',

-'				setNewestAtTop(isNewestAtTop);',

-'			}',

-'',

-'			var scrollToLatest = true;',

-'',

-'			function setScrollToLatest(isScrollToLatest) {',

-'				scrollToLatest = isScrollToLatest;',

-'				if (scrollToLatest) {',

-'					doScrollToLatest();',

-'				}',

-'				$("scrollToLatest").checked = isScrollToLatest;',

-'			}',

-'',

-'			function toggleScrollToLatest() {',

-'				var isScrollToLatest = $("scrollToLatest").checked;',

-'				setScrollToLatest(isScrollToLatest);',

-'			}',

-'',

-'			function doScrollToLatest() {',

-'				var l = logMainContainer;',

-'				if (typeof l.scrollTop != "undefined") {',

-'					if (newestAtTop) {',

-'						l.scrollTop = 0;',

-'					} else {',

-'						var latestLogEntry = l.lastChild;',

-'						if (latestLogEntry) {',

-'							l.scrollTop = l.scrollHeight;',

-'						}',

-'					}',

-'				}',

-'			}',

-'',

-'			var closeIfOpenerCloses = true;',

-'',

-'			function setCloseIfOpenerCloses(isCloseIfOpenerCloses) {',

-'				closeIfOpenerCloses = isCloseIfOpenerCloses;',

-'			}',

-'',

-'			var maxMessages = null;',

-'',

-'			function setMaxMessages(max) {',

-'				maxMessages = max;',

-'				pruneLogEntries();',

-'			}',

-'',

-'			var showCommandLine = false;',

-'',

-'			function setShowCommandLine(isShowCommandLine) {',

-'				showCommandLine = isShowCommandLine;',

-'				if (loaded) {',

-'					$("commandLine").style.display = showCommandLine ? "block" : "none";',

-'					setCommandInputWidth();',

-'					setLogContainerHeight();',

-'				}',

-'			}',

-'',

-'			function focusCommandLine() {',

-'				if (loaded) {',

-'					$("command").focus();',

-'				}',

-'			}',

-'',

-'			function focusSearch() {',

-'				if (loaded) {',

-'					$("searchBox").focus();',

-'				}',

-'			}',

-'',

-'			function getLogItems() {',

-'				var items = [];',

-'				for (var i = 0, len = logItems.length; i < len; i++) {',

-'					logItems[i].serialize(items);',

-'				}',

-'				return items;',

-'			}',

-'',

-'			function setLogItems(items) {',

-'				var loggingReallyEnabled = loggingEnabled;',

-'				// Temporarily turn logging on',

-'				loggingEnabled = true;',

-'				for (var i = 0, len = items.length; i < len; i++) {',

-'					switch (items[i][0]) {',

-'						case LogItem.serializedItemKeys.LOG_ENTRY:',

-'							log(items[i][1], items[i][2]);',

-'							break;',

-'						case LogItem.serializedItemKeys.GROUP_START:',

-'							group(items[i][1]);',

-'							break;',

-'						case LogItem.serializedItemKeys.GROUP_END:',

-'							groupEnd();',

-'							break;',

-'					}',

-'				}',

-'				loggingEnabled = loggingReallyEnabled;',

-'			}',

-'',

-'			function log(logLevel, formattedMessage) {',

-'				if (loggingEnabled) {',

-'					var logEntry = new LogEntry(logLevel, formattedMessage);',

-'					logEntries.push(logEntry);',

-'					logEntriesAndSeparators.push(logEntry);',

-'					logItems.push(logEntry);',

-'					currentGroup.addChild(logEntry);',

-'					if (loaded) {',

-'						if (logQueuedEventsTimer !== null) {',

-'							clearTimeout(logQueuedEventsTimer);',

-'						}',

-'						logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);',

-'						unrenderedLogItemsExist = true;',

-'					}',

-'				}',

-'			}',

-'',

-'			function renderQueuedLogItems() {',

-'				logQueuedEventsTimer = null;',

-'				var pruned = pruneLogEntries();',

-'',

-'				// Render any unrendered log entries and apply the current search to them',

-'				var initiallyHasMatches = currentSearch ? currentSearch.hasMatches() : false;',

-'				for (var i = 0, len = logItems.length; i < len; i++) {',

-'					if (!logItems[i].rendered) {',

-'						logItems[i].render();',

-'						logItems[i].appendToLog();',

-'						if (currentSearch && (logItems[i] instanceof LogEntry)) {',

-'							currentSearch.applyTo(logItems[i]);',

-'						}',

-'					}',

-'				}',

-'				if (currentSearch) {',

-'					if (pruned) {',

-'						if (currentSearch.hasVisibleMatches()) {',

-'							if (currentMatchIndex === null) {',

-'								setCurrentMatchIndex(0);',

-'							}',

-'							displayMatches();',

-'						} else {',

-'							displayNoMatches();',

-'						}',

-'					} else if (!initiallyHasMatches && currentSearch.hasVisibleMatches()) {',

-'						setCurrentMatchIndex(0);',

-'						displayMatches();',

-'					}',

-'				}',

-'				if (scrollToLatest) {',

-'					doScrollToLatest();',

-'				}',

-'				unrenderedLogItemsExist = false;',

-'			}',

-'',

-'			function pruneLogEntries() {',

-'				if ((maxMessages !== null) && (logEntriesAndSeparators.length > maxMessages)) {',

-'					var numberToDelete = logEntriesAndSeparators.length - maxMessages;',

-'					var prunedLogEntries = logEntriesAndSeparators.slice(0, numberToDelete);',

-'					if (currentSearch) {',

-'						currentSearch.removeMatches(prunedLogEntries);',

-'					}',

-'					var group;',

-'					for (var i = 0; i < numberToDelete; i++) {',

-'						group = logEntriesAndSeparators[i].group;',

-'						array_remove(logItems, logEntriesAndSeparators[i]);',

-'						array_remove(logEntries, logEntriesAndSeparators[i]);',

-'						logEntriesAndSeparators[i].remove(true, true);',

-'						if (group.children.length === 0 && group !== currentGroup && group !== rootGroup) {',

-'							array_remove(logItems, group);',

-'							group.remove(true, true);',

-'						}',

-'					}',

-'					logEntriesAndSeparators = array_removeFromStart(logEntriesAndSeparators, numberToDelete);',

-'					return true;',

-'				}',

-'				return false;',

-'			}',

-'',

-'			function group(name, startExpanded) {',

-'				if (loggingEnabled) {',

-'					initiallyExpanded = (typeof startExpanded === "undefined") ? true : Boolean(startExpanded);',

-'					var newGroup = new Group(name, false, initiallyExpanded);',

-'					currentGroup.addChild(newGroup);',

-'					currentGroup = newGroup;',

-'					logItems.push(newGroup);',

-'					if (loaded) {',

-'						if (logQueuedEventsTimer !== null) {',

-'							clearTimeout(logQueuedEventsTimer);',

-'						}',

-'						logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);',

-'						unrenderedLogItemsExist = true;',

-'					}',

-'				}',

-'			}',

-'',

-'			function groupEnd() {',

-'				currentGroup = (currentGroup === rootGroup) ? rootGroup : currentGroup.group;',

-'			}',

-'',

-'			function mainPageReloaded() {',

-'				currentGroup = rootGroup;',

-'				var separator = new Separator();',

-'				logEntriesAndSeparators.push(separator);',

-'				logItems.push(separator);',

-'				currentGroup.addChild(separator);',

-'			}',

-'',

-'			function closeWindow() {',

-'				if (appender && mainWindowExists()) {',

-'					appender.close(true);',

-'				} else {',

-'					window.close();',

-'				}',

-'			}',

-'',

-'			function hide() {',

-'				if (appender && mainWindowExists()) {',

-'					appender.hide();',

-'				}',

-'			}',

-'',

-'			var mainWindow = window;',

-'			var windowId = "log4javascriptConsoleWindow_" + new Date().getTime() + "_" + ("" + Math.random()).substr(2);',

-'',

-'			function setMainWindow(win) {',

-'				mainWindow = win;',

-'				mainWindow[windowId] = window;',

-'				// If this is a pop-up, poll the opener to see if it\'s closed',

-'				if (opener && closeIfOpenerCloses) {',

-'					pollOpener();',

-'				}',

-'			}',

-'',

-'			function pollOpener() {',

-'				if (closeIfOpenerCloses) {',

-'					if (mainWindowExists()) {',

-'						setTimeout(pollOpener, 500);',

-'					} else {',

-'						closeWindow();',

-'					}',

-'				}',

-'			}',

-'',

-'			function mainWindowExists() {',

-'				try {',

-'					return (mainWindow && !mainWindow.closed &&',

-'						mainWindow[windowId] == window);',

-'				} catch (ex) {}',

-'				return false;',

-'			}',

-'',

-'			var logLevels = ["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"];',

-'',

-'			function getCheckBox(logLevel) {',

-'				return $("switch_" + logLevel);',

-'			}',

-'',

-'			function getIeWrappedLogContainer() {',

-'				return $("log_wrapped");',

-'			}',

-'',

-'			function getIeUnwrappedLogContainer() {',

-'				return $("log_unwrapped");',

-'			}',

-'',

-'			function applyFilters() {',

-'				for (var i = 0; i < logLevels.length; i++) {',

-'					if (getCheckBox(logLevels[i]).checked) {',

-'						addClass(logMainContainer, logLevels[i]);',

-'					} else {',

-'						removeClass(logMainContainer, logLevels[i]);',

-'					}',

-'				}',

-'				updateSearchFromFilters();',

-'			}',

-'',

-'			function toggleAllLevels() {',

-'				var turnOn = $("switch_ALL").checked;',

-'				for (var i = 0; i < logLevels.length; i++) {',

-'					getCheckBox(logLevels[i]).checked = turnOn;',

-'					if (turnOn) {',

-'						addClass(logMainContainer, logLevels[i]);',

-'					} else {',

-'						removeClass(logMainContainer, logLevels[i]);',

-'					}',

-'				}',

-'			}',

-'',

-'			function checkAllLevels() {',

-'				for (var i = 0; i < logLevels.length; i++) {',

-'					if (!getCheckBox(logLevels[i]).checked) {',

-'						getCheckBox("ALL").checked = false;',

-'						return;',

-'					}',

-'				}',

-'				getCheckBox("ALL").checked = true;',

-'			}',

-'',

-'			function clearLog() {',

-'				rootGroup.clear();',

-'				currentGroup = rootGroup;',

-'				logEntries = [];',

-'				logItems = [];',

-'				logEntriesAndSeparators = [];',

-' 				doSearch();',

-'			}',

-'',

-'			function toggleWrap() {',

-'				var enable = $("wrap").checked;',

-'				if (enable) {',

-'					addClass(logMainContainer, "wrap");',

-'				} else {',

-'					removeClass(logMainContainer, "wrap");',

-'				}',

-'				refreshCurrentMatch();',

-'			}',

-'',

-'			/* ------------------------------------------------------------------- */',

-'',

-'			// Search',

-'',

-'			var searchTimer = null;',

-'',

-'			function scheduleSearch() {',

-'				try {',

-'					clearTimeout(searchTimer);',

-'				} catch (ex) {',

-'					// Do nothing',

-'				}',

-'				searchTimer = setTimeout(doSearch, 500);',

-'			}',

-'',

-'			function Search(searchTerm, isRegex, searchRegex, isCaseSensitive) {',

-'				this.searchTerm = searchTerm;',

-'				this.isRegex = isRegex;',

-'				this.searchRegex = searchRegex;',

-'				this.isCaseSensitive = isCaseSensitive;',

-'				this.matches = [];',

-'			}',

-'',

-'			Search.prototype = {',

-'				hasMatches: function() {',

-'					return this.matches.length > 0;',

-'				},',

-'',

-'				hasVisibleMatches: function() {',

-'					if (this.hasMatches()) {',

-'						for (var i = 0; i < this.matches.length; i++) {',

-'							if (this.matches[i].isVisible()) {',

-'								return true;',

-'							}',

-'						}',

-'					}',

-'					return false;',

-'				},',

-'',

-'				match: function(logEntry) {',

-'					var entryText = String(logEntry.formattedMessage);',

-'					var matchesSearch = false;',

-'					if (this.isRegex) {',

-'						matchesSearch = this.searchRegex.test(entryText);',

-'					} else if (this.isCaseSensitive) {',

-'						matchesSearch = (entryText.indexOf(this.searchTerm) > -1);',

-'					} else {',

-'						matchesSearch = (entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1);',

-'					}',

-'					return matchesSearch;',

-'				},',

-'',

-'				getNextVisibleMatchIndex: function() {',

-'					for (var i = currentMatchIndex + 1; i < this.matches.length; i++) {',

-'						if (this.matches[i].isVisible()) {',

-'							return i;',

-'						}',

-'					}',

-'					// Start again from the first match',

-'					for (i = 0; i <= currentMatchIndex; i++) {',

-'						if (this.matches[i].isVisible()) {',

-'							return i;',

-'						}',

-'					}',

-'					return -1;',

-'				},',

-'',

-'				getPreviousVisibleMatchIndex: function() {',

-'					for (var i = currentMatchIndex - 1; i >= 0; i--) {',

-'						if (this.matches[i].isVisible()) {',

-'							return i;',

-'						}',

-'					}',

-'					// Start again from the last match',

-'					for (var i = this.matches.length - 1; i >= currentMatchIndex; i--) {',

-'						if (this.matches[i].isVisible()) {',

-'							return i;',

-'						}',

-'					}',

-'					return -1;',

-'				},',

-'',

-'				applyTo: function(logEntry) {',

-'					var doesMatch = this.match(logEntry);',

-'					if (doesMatch) {',

-'						logEntry.group.expand();',

-'						logEntry.setSearchMatch(true);',

-'						var logEntryContent;',

-'						var wrappedLogEntryContent;',

-'						var searchTermReplacementStartTag = "<span class=\\\"searchterm\\\">";',

-'						var searchTermReplacementEndTag = "<" + "/span>";',

-'						var preTagName = isIe ? "pre" : "span";',

-'						var preStartTag = "<" + preTagName + " class=\\\"pre\\\">";',

-'						var preEndTag = "<" + "/" + preTagName + ">";',

-'						var startIndex = 0;',

-'						var searchIndex, matchedText, textBeforeMatch;',

-'						if (this.isRegex) {',

-'							var flags = this.isCaseSensitive ? "g" : "gi";',

-'							var capturingRegex = new RegExp("(" + this.searchRegex.source + ")", flags);',

-'',

-'							// Replace the search term with temporary tokens for the start and end tags',

-'							var rnd = ("" + Math.random()).substr(2);',

-'							var startToken = "%%s" + rnd + "%%";',

-'							var endToken = "%%e" + rnd + "%%";',

-'							logEntryContent = logEntry.formattedMessage.replace(capturingRegex, startToken + "$1" + endToken);',

-'',

-'							// Escape the HTML to get rid of angle brackets',

-'							logEntryContent = escapeHtml(logEntryContent);',

-'',

-'							// Substitute the proper HTML back in for the search match',

-'							var result;',

-'							var searchString = logEntryContent;',

-'							logEntryContent = "";',

-'							wrappedLogEntryContent = "";',

-'							while ((searchIndex = searchString.indexOf(startToken, startIndex)) > -1) {',

-'								var endTokenIndex = searchString.indexOf(endToken, searchIndex);',

-'								matchedText = searchString.substring(searchIndex + startToken.length, endTokenIndex);',

-'								textBeforeMatch = searchString.substring(startIndex, searchIndex);',

-'								logEntryContent += preStartTag + textBeforeMatch + preEndTag;',

-'								logEntryContent += searchTermReplacementStartTag + preStartTag + matchedText +',

-'									preEndTag + searchTermReplacementEndTag;',

-'								if (isIe) {',

-'									wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +',

-'										matchedText + searchTermReplacementEndTag;',

-'								}',

-'								startIndex = endTokenIndex + endToken.length;',

-'							}',

-'							logEntryContent += preStartTag + searchString.substr(startIndex) + preEndTag;',

-'							if (isIe) {',

-'								wrappedLogEntryContent += searchString.substr(startIndex);',

-'							}',

-'						} else {',

-'							logEntryContent = "";',

-'							wrappedLogEntryContent = "";',

-'							var searchTermReplacementLength = searchTermReplacementStartTag.length +',

-'								this.searchTerm.length + searchTermReplacementEndTag.length;',

-'							var searchTermLength = this.searchTerm.length;',

-'							var searchTermLowerCase = this.searchTerm.toLowerCase();',

-'							var logTextLowerCase = logEntry.formattedMessage.toLowerCase();',

-'							while ((searchIndex = logTextLowerCase.indexOf(searchTermLowerCase, startIndex)) > -1) {',

-'								matchedText = escapeHtml(logEntry.formattedMessage.substr(searchIndex, this.searchTerm.length));',

-'								textBeforeMatch = escapeHtml(logEntry.formattedMessage.substring(startIndex, searchIndex));',

-'								var searchTermReplacement = searchTermReplacementStartTag +',

-'									preStartTag + matchedText + preEndTag + searchTermReplacementEndTag;',

-'								logEntryContent += preStartTag + textBeforeMatch + preEndTag + searchTermReplacement;',

-'								if (isIe) {',

-'									wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +',

-'										matchedText + searchTermReplacementEndTag;',

-'								}',

-'								startIndex = searchIndex + searchTermLength;',

-'							}',

-'							var textAfterLastMatch = escapeHtml(logEntry.formattedMessage.substr(startIndex));',

-'							logEntryContent += preStartTag + textAfterLastMatch + preEndTag;',

-'							if (isIe) {',

-'								wrappedLogEntryContent += textAfterLastMatch;',

-'							}',

-'						}',

-'						logEntry.setContent(logEntryContent, wrappedLogEntryContent);',

-'						var logEntryMatches = logEntry.getSearchMatches();',

-'						this.matches = this.matches.concat(logEntryMatches);',

-'					} else {',

-'						logEntry.setSearchMatch(false);',

-'						logEntry.setContent(logEntry.formattedMessage, logEntry.formattedMessage);',

-'					}',

-'					return doesMatch;',

-'				},',

-'',

-'				removeMatches: function(logEntries) {',

-'					var matchesToRemoveCount = 0;',

-'					var currentMatchRemoved = false;',

-'					var matchesToRemove = [];',

-'					var i, iLen, j, jLen;',

-'',

-'					// Establish the list of matches to be removed',

-'					for (i = 0, iLen = this.matches.length; i < iLen; i++) {',

-'						for (j = 0, jLen = logEntries.length; j < jLen; j++) {',

-'							if (this.matches[i].belongsTo(logEntries[j])) {',

-'								matchesToRemove.push(this.matches[i]);',

-'								if (i === currentMatchIndex) {',

-'									currentMatchRemoved = true;',

-'								}',

-'							}',

-'						}',

-'					}',

-'',

-'					// Set the new current match index if the current match has been deleted',

-'					// This will be the first match that appears after the first log entry being',

-'					// deleted, if one exists; otherwise, it\'s the first match overall',

-'					var newMatch = currentMatchRemoved ? null : this.matches[currentMatchIndex];',

-'					if (currentMatchRemoved) {',

-'						for (i = currentMatchIndex, iLen = this.matches.length; i < iLen; i++) {',

-'							if (this.matches[i].isVisible() && !array_contains(matchesToRemove, this.matches[i])) {',

-'								newMatch = this.matches[i];',

-'								break;',

-'							}',

-'						}',

-'					}',

-'',

-'					// Remove the matches',

-'					for (i = 0, iLen = matchesToRemove.length; i < iLen; i++) {',

-'						array_remove(this.matches, matchesToRemove[i]);',

-'						matchesToRemove[i].remove();',

-'					}',

-'',

-'					// Set the new match, if one exists',

-'					if (this.hasVisibleMatches()) {',

-'						if (newMatch === null) {',

-'							setCurrentMatchIndex(0);',

-'						} else {',

-'							// Get the index of the new match',

-'							var newMatchIndex = 0;',

-'							for (i = 0, iLen = this.matches.length; i < iLen; i++) {',

-'								if (newMatch === this.matches[i]) {',

-'									newMatchIndex = i;',

-'									break;',

-'								}',

-'							}',

-'							setCurrentMatchIndex(newMatchIndex);',

-'						}',

-'					} else {',

-'						currentMatchIndex = null;',

-'						displayNoMatches();',

-'					}',

-'				}',

-'			};',

-'',

-'			function getPageOffsetTop(el, container) {',

-'				var currentEl = el;',

-'				var y = 0;',

-'				while (currentEl && currentEl != container) {',

-'					y += currentEl.offsetTop;',

-'					currentEl = currentEl.offsetParent;',

-'				}',

-'				return y;',

-'			}',

-'',

-'			function scrollIntoView(el) {',

-'				var logContainer = logMainContainer;',

-'				// Check if the whole width of the element is visible and centre if not',

-'				if (!$("wrap").checked) {',

-'					var logContainerLeft = logContainer.scrollLeft;',

-'					var logContainerRight = logContainerLeft  + logContainer.offsetWidth;',

-'					var elLeft = el.offsetLeft;',

-'					var elRight = elLeft + el.offsetWidth;',

-'					if (elLeft < logContainerLeft || elRight > logContainerRight) {',

-'						logContainer.scrollLeft = elLeft - (logContainer.offsetWidth - el.offsetWidth) / 2;',

-'					}',

-'				}',

-'				// Check if the whole height of the element is visible and centre if not',

-'				var logContainerTop = logContainer.scrollTop;',

-'				var logContainerBottom = logContainerTop  + logContainer.offsetHeight;',

-'				var elTop = getPageOffsetTop(el) - getToolBarsHeight();',

-'				var elBottom = elTop + el.offsetHeight;',

-'				if (elTop < logContainerTop || elBottom > logContainerBottom) {',

-'					logContainer.scrollTop = elTop - (logContainer.offsetHeight - el.offsetHeight) / 2;',

-'				}',

-'			}',

-'',

-'			function Match(logEntryLevel, spanInMainDiv, spanInUnwrappedPre, spanInWrappedDiv) {',

-'				this.logEntryLevel = logEntryLevel;',

-'				this.spanInMainDiv = spanInMainDiv;',

-'				if (isIe) {',

-'					this.spanInUnwrappedPre = spanInUnwrappedPre;',

-'					this.spanInWrappedDiv = spanInWrappedDiv;',

-'				}',

-'				this.mainSpan = isIe ? spanInUnwrappedPre : spanInMainDiv;',

-'			}',

-'',

-'			Match.prototype = {',

-'				equals: function(match) {',

-'					return this.mainSpan === match.mainSpan;',

-'				},',

-'',

-'				setCurrent: function() {',

-'					if (isIe) {',

-'						addClass(this.spanInUnwrappedPre, "currentmatch");',

-'						addClass(this.spanInWrappedDiv, "currentmatch");',

-'						// Scroll the visible one into view',

-'						var elementToScroll = $("wrap").checked ? this.spanInWrappedDiv : this.spanInUnwrappedPre;',

-'						scrollIntoView(elementToScroll);',

-'					} else {',

-'						addClass(this.spanInMainDiv, "currentmatch");',

-'						scrollIntoView(this.spanInMainDiv);',

-'					}',

-'				},',

-'',

-'				belongsTo: function(logEntry) {',

-'					if (isIe) {',

-'						return isDescendant(this.spanInUnwrappedPre, logEntry.unwrappedPre);',

-'					} else {',

-'						return isDescendant(this.spanInMainDiv, logEntry.mainDiv);',

-'					}',

-'				},',

-'',

-'				setNotCurrent: function() {',

-'					if (isIe) {',

-'						removeClass(this.spanInUnwrappedPre, "currentmatch");',

-'						removeClass(this.spanInWrappedDiv, "currentmatch");',

-'					} else {',

-'						removeClass(this.spanInMainDiv, "currentmatch");',

-'					}',

-'				},',

-'',

-'				isOrphan: function() {',

-'					return isOrphan(this.mainSpan);',

-'				},',

-'',

-'				isVisible: function() {',

-'					return getCheckBox(this.logEntryLevel).checked;',

-'				},',

-'',

-'				remove: function() {',

-'					if (isIe) {',

-'						this.spanInUnwrappedPre = null;',

-'						this.spanInWrappedDiv = null;',

-'					} else {',

-'						this.spanInMainDiv = null;',

-'					}',

-'				}',

-'			};',

-'',

-'			var currentSearch = null;',

-'			var currentMatchIndex = null;',

-'',

-'			function doSearch() {',

-'				var searchBox = $("searchBox");',

-'				var searchTerm = searchBox.value;',

-'				var isRegex = $("searchRegex").checked;',

-'				var isCaseSensitive = $("searchCaseSensitive").checked;',

-'				var i;',

-'',

-'				if (searchTerm === "") {',

-'					$("searchReset").disabled = true;',

-'					$("searchNav").style.display = "none";',

-'					removeClass(document.body, "searching");',

-'					removeClass(searchBox, "hasmatches");',

-'					removeClass(searchBox, "nomatches");',

-'					for (i = 0; i < logEntries.length; i++) {',

-'						logEntries[i].clearSearch();',

-'						logEntries[i].setContent(logEntries[i].formattedMessage, logEntries[i].formattedMessage);',

-'					}',

-'					currentSearch = null;',

-'					setLogContainerHeight();',

-'				} else {',

-'					$("searchReset").disabled = false;',

-'					$("searchNav").style.display = "block";',

-'					var searchRegex;',

-'					var regexValid;',

-'					if (isRegex) {',

-'						try {',

-'							searchRegex = isCaseSensitive ? new RegExp(searchTerm, "g") : new RegExp(searchTerm, "gi");',

-'							regexValid = true;',

-'							replaceClass(searchBox, "validregex", "invalidregex");',

-'							searchBox.title = "Valid regex";',

-'						} catch (ex) {',

-'							regexValid = false;',

-'							replaceClass(searchBox, "invalidregex", "validregex");',

-'							searchBox.title = "Invalid regex: " + (ex.message ? ex.message : (ex.description ? ex.description : "unknown error"));',

-'							return;',

-'						}',

-'					} else {',

-'						searchBox.title = "";',

-'						removeClass(searchBox, "validregex");',

-'						removeClass(searchBox, "invalidregex");',

-'					}',

-'					addClass(document.body, "searching");',

-'					currentSearch = new Search(searchTerm, isRegex, searchRegex, isCaseSensitive);',

-'					for (i = 0; i < logEntries.length; i++) {',

-'						currentSearch.applyTo(logEntries[i]);',

-'					}',

-'					setLogContainerHeight();',

-'',

-'					// Highlight the first search match',

-'					if (currentSearch.hasVisibleMatches()) {',

-'						setCurrentMatchIndex(0);',

-'						displayMatches();',

-'					} else {',

-'						displayNoMatches();',

-'					}',

-'				}',

-'			}',

-'',

-'			function updateSearchFromFilters() {',

-'				if (currentSearch) {',

-'					if (currentSearch.hasMatches()) {',

-'						if (currentMatchIndex === null) {',

-'							currentMatchIndex = 0;',

-'						}',

-'						var currentMatch = currentSearch.matches[currentMatchIndex];',

-'						if (currentMatch.isVisible()) {',

-'							displayMatches();',

-'							setCurrentMatchIndex(currentMatchIndex);',

-'						} else {',

-'							currentMatch.setNotCurrent();',

-'							// Find the next visible match, if one exists',

-'							var nextVisibleMatchIndex = currentSearch.getNextVisibleMatchIndex();',

-'							if (nextVisibleMatchIndex > -1) {',

-'								setCurrentMatchIndex(nextVisibleMatchIndex);',

-'								displayMatches();',

-'							} else {',

-'								displayNoMatches();',

-'							}',

-'						}',

-'					} else {',

-'						displayNoMatches();',

-'					}',

-'				}',

-'			}',

-'',

-'			function refreshCurrentMatch() {',

-'				if (currentSearch && currentSearch.hasVisibleMatches()) {',

-'					setCurrentMatchIndex(currentMatchIndex);',

-'				}',

-'			}',

-'',

-'			function displayMatches() {',

-'				replaceClass($("searchBox"), "hasmatches", "nomatches");',

-'				$("searchBox").title = "" + currentSearch.matches.length + " matches found";',

-'				$("searchNav").style.display = "block";',

-'				setLogContainerHeight();',

-'			}',

-'',

-'			function displayNoMatches() {',

-'				replaceClass($("searchBox"), "nomatches", "hasmatches");',

-'				$("searchBox").title = "No matches found";',

-'				$("searchNav").style.display = "none";',

-'				setLogContainerHeight();',

-'			}',

-'',

-'			function toggleSearchEnabled(enable) {',

-'				enable = (typeof enable == "undefined") ? !$("searchDisable").checked : enable;',

-'				$("searchBox").disabled = !enable;',

-'				$("searchReset").disabled = !enable;',

-'				$("searchRegex").disabled = !enable;',

-'				$("searchNext").disabled = !enable;',

-'				$("searchPrevious").disabled = !enable;',

-'				$("searchCaseSensitive").disabled = !enable;',

-'				$("searchNav").style.display = (enable && ($("searchBox").value !== "") &&',

-'						currentSearch && currentSearch.hasVisibleMatches()) ?',

-'					"block" : "none";',

-'				if (enable) {',

-'					removeClass($("search"), "greyedout");',

-'					addClass(document.body, "searching");',

-'					if ($("searchHighlight").checked) {',

-'						addClass(logMainContainer, "searchhighlight");',

-'					} else {',

-'						removeClass(logMainContainer, "searchhighlight");',

-'					}',

-'					if ($("searchFilter").checked) {',

-'						addClass(logMainContainer, "searchfilter");',

-'					} else {',

-'						removeClass(logMainContainer, "searchfilter");',

-'					}',

-'					$("searchDisable").checked = !enable;',

-'				} else {',

-'					addClass($("search"), "greyedout");',

-'					removeClass(document.body, "searching");',

-'					removeClass(logMainContainer, "searchhighlight");',

-'					removeClass(logMainContainer, "searchfilter");',

-'				}',

-'				setLogContainerHeight();',

-'			}',

-'',

-'			function toggleSearchFilter() {',

-'				var enable = $("searchFilter").checked;',

-'				if (enable) {',

-'					addClass(logMainContainer, "searchfilter");',

-'				} else {',

-'					removeClass(logMainContainer, "searchfilter");',

-'				}',

-'				refreshCurrentMatch();',

-'			}',

-'',

-'			function toggleSearchHighlight() {',

-'				var enable = $("searchHighlight").checked;',

-'				if (enable) {',

-'					addClass(logMainContainer, "searchhighlight");',

-'				} else {',

-'					removeClass(logMainContainer, "searchhighlight");',

-'				}',

-'			}',

-'',

-'			function clearSearch() {',

-'				$("searchBox").value = "";',

-'				doSearch();',

-'			}',

-'',

-'			function searchNext() {',

-'				if (currentSearch !== null && currentMatchIndex !== null) {',

-'					currentSearch.matches[currentMatchIndex].setNotCurrent();',

-'					var nextMatchIndex = currentSearch.getNextVisibleMatchIndex();',

-'					if (nextMatchIndex > currentMatchIndex || confirm("Reached the end of the page. Start from the top?")) {',

-'						setCurrentMatchIndex(nextMatchIndex);',

-'					}',

-'				}',

-'			}',

-'',

-'			function searchPrevious() {',

-'				if (currentSearch !== null && currentMatchIndex !== null) {',

-'					currentSearch.matches[currentMatchIndex].setNotCurrent();',

-'					var previousMatchIndex = currentSearch.getPreviousVisibleMatchIndex();',

-'					if (previousMatchIndex < currentMatchIndex || confirm("Reached the start of the page. Continue from the bottom?")) {',

-'						setCurrentMatchIndex(previousMatchIndex);',

-'					}',

-'				}',

-'			}',

-'',

-'			function setCurrentMatchIndex(index) {',

-'				currentMatchIndex = index;',

-'				currentSearch.matches[currentMatchIndex].setCurrent();',

-'			}',

-'',

-'			/* ------------------------------------------------------------------------- */',

-'',

-'			// CSS Utilities',

-'',

-'			function addClass(el, cssClass) {',

-'				if (!hasClass(el, cssClass)) {',

-'					if (el.className) {',

-'						el.className += " " + cssClass;',

-'					} else {',

-'						el.className = cssClass;',

-'					}',

-'				}',

-'			}',

-'',

-'			function hasClass(el, cssClass) {',

-'				if (el.className) {',

-'					var classNames = el.className.split(" ");',

-'					return array_contains(classNames, cssClass);',

-'				}',

-'				return false;',

-'			}',

-'',

-'			function removeClass(el, cssClass) {',

-'				if (hasClass(el, cssClass)) {',

-'					// Rebuild the className property',

-'					var existingClasses = el.className.split(" ");',

-'					var newClasses = [];',

-'					for (var i = 0, len = existingClasses.length; i < len; i++) {',

-'						if (existingClasses[i] != cssClass) {',

-'							newClasses[newClasses.length] = existingClasses[i];',

-'						}',

-'					}',

-'					el.className = newClasses.join(" ");',

-'				}',

-'			}',

-'',

-'			function replaceClass(el, newCssClass, oldCssClass) {',

-'				removeClass(el, oldCssClass);',

-'				addClass(el, newCssClass);',

-'			}',

-'',

-'			/* ------------------------------------------------------------------------- */',

-'',

-'			// Other utility functions',

-'',

-'			function getElementsByClass(el, cssClass, tagName) {',

-'				var elements = el.getElementsByTagName(tagName);',

-'				var matches = [];',

-'				for (var i = 0, len = elements.length; i < len; i++) {',

-'					if (hasClass(elements[i], cssClass)) {',

-'						matches.push(elements[i]);',

-'					}',

-'				}',

-'				return matches;',

-'			}',

-'',

-'			// Syntax borrowed from Prototype library',

-'			function $(id) {',

-'				return document.getElementById(id);',

-'			}',

-'',

-'			function isDescendant(node, ancestorNode) {',

-'				while (node != null) {',

-'					if (node === ancestorNode) {',

-'						return true;',

-'					}',

-'					node = node.parentNode;',

-'				}',

-'				return false;',

-'			}',

-'',

-'			function isOrphan(node) {',

-'				var currentNode = node;',

-'				while (currentNode) {',

-'					if (currentNode == document.body) {',

-'						return false;',

-'					}',

-'					currentNode = currentNode.parentNode;',

-'				}',

-'				return true;',

-'			}',

-'',

-'			function escapeHtml(str) {',

-'				return str.replace(/&/g, "&amp;").replace(/[<]/g, "&lt;").replace(/>/g, "&gt;");',

-'			}',

-'',

-'			function getWindowWidth() {',

-'				if (window.innerWidth) {',

-'					return window.innerWidth;',

-'				} else if (document.documentElement && document.documentElement.clientWidth) {',

-'					return document.documentElement.clientWidth;',

-'				} else if (document.body) {',

-'					return document.body.clientWidth;',

-'				}',

-'				return 0;',

-'			}',

-'',

-'			function getWindowHeight() {',

-'				if (window.innerHeight) {',

-'					return window.innerHeight;',

-'				} else if (document.documentElement && document.documentElement.clientHeight) {',

-'					return document.documentElement.clientHeight;',

-'				} else if (document.body) {',

-'					return document.body.clientHeight;',

-'				}',

-'				return 0;',

-'			}',

-'',

-'			function getToolBarsHeight() {',

-'				return $("switches").offsetHeight;',

-'			}',

-'',

-'			function getChromeHeight() {',

-'				var height = getToolBarsHeight();',

-'				if (showCommandLine) {',

-'					height += $("commandLine").offsetHeight;',

-'				}',

-'				return height;',

-'			}',

-'',

-'			function setLogContainerHeight() {',

-'				if (logMainContainer) {',

-'					var windowHeight = getWindowHeight();',

-'					$("body").style.height = getWindowHeight() + "px";',

-'					logMainContainer.style.height = "" +',

-'						Math.max(0, windowHeight - getChromeHeight()) + "px";',

-'				}',

-'			}',

-'',

-'			function setCommandInputWidth() {',

-'				if (showCommandLine) {',

-'					$("command").style.width = "" + Math.max(0, $("commandLineContainer").offsetWidth -',

-'						($("evaluateButton").offsetWidth + 13)) + "px";',

-'				}',

-'			}',

-'',

-'			window.onresize = function() {',

-'				setCommandInputWidth();',

-'				setLogContainerHeight();',

-'			};',

-'',

-'			if (!Array.prototype.push) {',

-'				Array.prototype.push = function() {',

-'			        for (var i = 0, len = arguments.length; i < len; i++){',

-'			            this[this.length] = arguments[i];',

-'			        }',

-'			        return this.length;',

-'				};',

-'			}',

-'',

-'			if (!Array.prototype.pop) {',

-'				Array.prototype.pop = function() {',

-'					if (this.length > 0) {',

-'						var val = this[this.length - 1];',

-'						this.length = this.length - 1;',

-'						return val;',

-'					}',

-'				};',

-'			}',

-'',

-'			if (!Array.prototype.shift) {',

-'				Array.prototype.shift = function() {',

-'					if (this.length > 0) {',

-'						var firstItem = this[0];',

-'						for (var i = 0, len = this.length - 1; i < len; i++) {',

-'							this[i] = this[i + 1];',

-'						}',

-'						this.length = this.length - 1;',

-'						return firstItem;',

-'					}',

-'				};',

-'			}',

-'',

-'			if (!Array.prototype.splice) {',

-'				Array.prototype.splice = function(startIndex, deleteCount) {',

-'					var itemsAfterDeleted = this.slice(startIndex + deleteCount);',

-'					var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);',

-'					this.length = startIndex;',

-'					// Copy the arguments into a proper Array object',

-'					var argumentsArray = [];',

-'					for (var i = 0, len = arguments.length; i < len; i++) {',

-'						argumentsArray[i] = arguments[i];',

-'					}',

-'					var itemsToAppend = (argumentsArray.length > 2) ?',

-'						itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;',

-'					for (i = 0, len = itemsToAppend.length; i < len; i++) {',

-'						this.push(itemsToAppend[i]);',

-'					}',

-'					return itemsDeleted;',

-'				};',

-'			}',

-'',

-'			function array_remove(arr, val) {',

-'				var index = -1;',

-'				for (var i = 0, len = arr.length; i < len; i++) {',

-'					if (arr[i] === val) {',

-'						index = i;',

-'						break;',

-'					}',

-'				}',

-'				if (index >= 0) {',

-'					arr.splice(index, 1);',

-'					return index;',

-'				} else {',

-'					return false;',

-'				}',

-'			}',

-'',

-'			function array_removeFromStart(array, numberToRemove) {',

-'				if (Array.prototype.splice) {',

-'					array.splice(0, numberToRemove);',

-'				} else {',

-'					for (var i = numberToRemove, len = array.length; i < len; i++) {',

-'						array[i - numberToRemove] = array[i];',

-'					}',

-'					array.length = array.length - numberToRemove;',

-'				}',

-'				return array;',

-'			}',

-'',

-'			function array_contains(arr, val) {',

-'				for (var i = 0, len = arr.length; i < len; i++) {',

-'					if (arr[i] == val) {',

-'						return true;',

-'					}',

-'				}',

-'				return false;',

-'			}',

-'',

-'			function getErrorMessage(ex) {',

-'				if (ex.message) {',

-'					return ex.message;',

-'				} else if (ex.description) {',

-'					return ex.description;',

-'				}',

-'				return "" + ex;',

-'			}',

-'',

-'			function moveCaretToEnd(input) {',

-'				if (input.setSelectionRange) {',

-'					input.focus();',

-'					var length = input.value.length;',

-'					input.setSelectionRange(length, length);',

-'				} else if (input.createTextRange) {',

-'					var range = input.createTextRange();',

-'					range.collapse(false);',

-'					range.select();',

-'				}',

-'				input.focus();',

-'			}',

-'',

-'			function stopPropagation(evt) {',

-'				if (evt.stopPropagation) {',

-'					evt.stopPropagation();',

-'				} else if (typeof evt.cancelBubble != "undefined") {',

-'					evt.cancelBubble = true;',

-'				}',

-'			}',

-'',

-'			function getEvent(evt) {',

-'				return evt ? evt : event;',

-'			}',

-'',

-'			function getTarget(evt) {',

-'				return evt.target ? evt.target : evt.srcElement;',

-'			}',

-'',

-'			function getRelatedTarget(evt) {',

-'				if (evt.relatedTarget) {',

-'					return evt.relatedTarget;',

-'				} else if (evt.srcElement) {',

-'					switch(evt.type) {',

-'						case "mouseover":',

-'							return evt.fromElement;',

-'						case "mouseout":',

-'							return evt.toElement;',

-'						default:',

-'							return evt.srcElement;',

-'					}',

-'				}',

-'			}',

-'',

-'			function cancelKeyEvent(evt) {',

-'				evt.returnValue = false;',

-'				stopPropagation(evt);',

-'			}',

-'',

-'			function evalCommandLine() {',

-'				var expr = $("command").value;',

-'				evalCommand(expr);',

-'				$("command").value = "";',

-'			}',

-'',

-'			function evalLastCommand() {',

-'				if (lastCommand != null) {',

-'					evalCommand(lastCommand);',

-'				}',

-'			}',

-'',

-'			var lastCommand = null;',

-'			var commandHistory = [];',

-'			var currentCommandIndex = 0;',

-'',

-'			function evalCommand(expr) {',

-'				if (appender) {',

-'					appender.evalCommandAndAppend(expr);',

-'				} else {',

-'					var prefix = ">>> " + expr + "\\r\\n";',

-'					try {',

-'						log("INFO", prefix + eval(expr));',

-'					} catch (ex) {',

-'						log("ERROR", prefix + "Error: " + getErrorMessage(ex));',

-'					}',

-'				}',

-'				// Update command history',

-'				if (expr != commandHistory[commandHistory.length - 1]) {',

-'					commandHistory.push(expr);',

-'					// Update the appender',

-'					if (appender) {',

-'						appender.storeCommandHistory(commandHistory);',

-'					}',

-'				}',

-'				currentCommandIndex = (expr == commandHistory[currentCommandIndex]) ? currentCommandIndex + 1 : commandHistory.length;',

-'				lastCommand = expr;',

-'			}',

-'			//]]>',

-'		</script>',

-'		<style type="text/css">',

-'			body {',

-'				background-color: white;',

-'				color: black;',

-'				padding: 0;',

-'				margin: 0;',

-'				font-family: tahoma, verdana, arial, helvetica, sans-serif;',

-'				overflow: hidden;',

-'			}',

-'',

-'			div#switchesContainer input {',

-'				margin-bottom: 0;',

-'			}',

-'',

-'			div.toolbar {',

-'				border-top: solid #ffffff 1px;',

-'				border-bottom: solid #aca899 1px;',

-'				background-color: #f1efe7;',

-'				padding: 3px 5px;',

-'				font-size: 68.75%;',

-'			}',

-'',

-'			div.toolbar, div#search input {',

-'				font-family: tahoma, verdana, arial, helvetica, sans-serif;',

-'			}',

-'',

-'			div.toolbar input.button {',

-'				padding: 0 5px;',

-'				font-size: 100%;',

-'			}',

-'',

-'			div.toolbar input.hidden {',

-'				display: none;',

-'			}',

-'',

-'			div#switches input#clearButton {',

-'				margin-left: 20px;',

-'			}',

-'',

-'			div#levels label {',

-'				font-weight: bold;',

-'			}',

-'',

-'			div#levels label, div#options label {',

-'				margin-right: 5px;',

-'			}',

-'',

-'			div#levels label#wrapLabel {',

-'				font-weight: normal;',

-'			}',

-'',

-'			div#search label {',

-'				margin-right: 10px;',

-'			}',

-'',

-'			div#search label.searchboxlabel {',

-'				margin-right: 0;',

-'			}',

-'',

-'			div#search input {',

-'				font-size: 100%;',

-'			}',

-'',

-'			div#search input.validregex {',

-'				color: green;',

-'			}',

-'',

-'			div#search input.invalidregex {',

-'				color: red;',

-'			}',

-'',

-'			div#search input.nomatches {',

-'				color: white;',

-'				background-color: #ff6666;',

-'			}',

-'',

-'			div#search input.nomatches {',

-'				color: white;',

-'				background-color: #ff6666;',

-'			}',

-'',

-'			div#searchNav {',

-'				display: none;',

-'			}',

-'',

-'			div#commandLine {',

-'				display: none;',

-'			}',

-'',

-'			div#commandLine input#command {',

-'				font-size: 100%;',

-'				font-family: Courier New, Courier;',

-'			}',

-'',

-'			div#commandLine input#evaluateButton {',

-'			}',

-'',

-'			*.greyedout {',

-'				color: gray !important;',

-'				border-color: gray !important;',

-'			}',

-'',

-'			*.greyedout *.alwaysenabled { color: black; }',

-'',

-'			*.unselectable {',

-'				-khtml-user-select: none;',

-'				-moz-user-select: none;',

-'				user-select: none;',

-'			}',

-'',

-'			div#log {',

-'				font-family: Courier New, Courier;',

-'				font-size: 75%;',

-'				width: 100%;',

-'				overflow: auto;',

-'				clear: both;',

-'				position: relative;',

-'			}',

-'',

-'			div.group {',

-'				border-color: #cccccc;',

-'				border-style: solid;',

-'				border-width: 1px 0 1px 1px;',

-'				overflow: visible;',

-'			}',

-'',

-'			div.oldIe div.group, div.oldIe div.group *, div.oldIe *.logentry {',

-'				height: 1%;',

-'			}',

-'',

-'			div.group div.groupheading span.expander {',

-'				border: solid black 1px;',

-'				font-family: Courier New, Courier;',

-'				font-size: 0.833em;',

-'				background-color: #eeeeee;',

-'				position: relative;',

-'				top: -1px;',

-'				color: black;',

-'				padding: 0 2px;',

-'				cursor: pointer;',

-'				cursor: hand;',

-'				height: 1%;',

-'			}',

-'',

-'			div.group div.groupcontent {',

-'				margin-left: 10px;',

-'				padding-bottom: 2px;',

-'				overflow: visible;',

-'			}',

-'',

-'			div.group div.expanded {',

-'				display: block;',

-'			}',

-'',

-'			div.group div.collapsed {',

-'				display: none;',

-'			}',

-'',

-'			*.logentry {',

-'				overflow: visible;',

-'				display: none;',

-'				white-space: pre;',

-'			}',

-'',

-'			span.pre {',

-'				white-space: pre;',

-'			}',

-'			',

-'			pre.unwrapped {',

-'				display: inline !important;',

-'			}',

-'',

-'			pre.unwrapped pre.pre, div.wrapped pre.pre {',

-'				display: inline;',

-'			}',

-'',

-'			div.wrapped pre.pre {',

-'				white-space: normal;',

-'			}',

-'',

-'			div.wrapped {',

-'				display: none;',

-'			}',

-'',

-'			body.searching *.logentry span.currentmatch {',

-'				color: white !important;',

-'				background-color: green !important;',

-'			}',

-'',

-'			body.searching div.searchhighlight *.logentry span.searchterm {',

-'				color: black;',

-'				background-color: yellow;',

-'			}',

-'',

-'			div.wrap *.logentry {',

-'				white-space: normal !important;',

-'				border-width: 0 0 1px 0;',

-'				border-color: #dddddd;',

-'				border-style: dotted;',

-'			}',

-'',

-'			div.wrap #log_wrapped, #log_unwrapped {',

-'				display: block;',

-'			}',

-'',

-'			div.wrap #log_unwrapped, #log_wrapped {',

-'				display: none;',

-'			}',

-'',

-'			div.wrap *.logentry span.pre {',

-'				overflow: visible;',

-'				white-space: normal;',

-'			}',

-'',

-'			div.wrap *.logentry pre.unwrapped {',

-'				display: none;',

-'			}',

-'',

-'			div.wrap *.logentry span.wrapped {',

-'				display: inline;',

-'			}',

-'',

-'			div.searchfilter *.searchnonmatch {',

-'				display: none !important;',

-'			}',

-'',

-'			div#log *.TRACE, label#label_TRACE {',

-'				color: #666666;',

-'			}',

-'',

-'			div#log *.DEBUG, label#label_DEBUG {',

-'				color: green;',

-'			}',

-'',

-'			div#log *.INFO, label#label_INFO {',

-'				color: #000099;',

-'			}',

-'',

-'			div#log *.WARN, label#label_WARN {',

-'				color: #999900;',

-'			}',

-'',

-'			div#log *.ERROR, label#label_ERROR {',

-'				color: red;',

-'			}',

-'',

-'			div#log *.FATAL, label#label_FATAL {',

-'				color: #660066;',

-'			}',

-'',

-'			div.TRACE#log *.TRACE,',

-'			div.DEBUG#log *.DEBUG,',

-'			div.INFO#log *.INFO,',

-'			div.WARN#log *.WARN,',

-'			div.ERROR#log *.ERROR,',

-'			div.FATAL#log *.FATAL {',

-'				display: block;',

-'			}',

-'',

-'			div#log div.separator {',

-'				background-color: #cccccc;',

-'				margin: 5px 0;',

-'				line-height: 1px;',

-'			}',

-'		</style>',

-'	</head>',

-'',

-'	<body id="body">',

-'		<div id="switchesContainer">',

-'			<div id="switches">',

-'				<div id="levels" class="toolbar">',

-'					Filters:',

-'					<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>',

-'					<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>',

-'					<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>',

-'					<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>',

-'					<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>',

-'					<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>',

-'					<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>',

-'				</div>',

-'				<div id="search" class="toolbar">',

-'					<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />',

-'					<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />',

-'					<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>',

-'					<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>',

-'					<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>',

-'					<div id="searchNav">',

-'						<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />',

-'						<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />',

-'						<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>',

-'						<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>',

-'					</div>',

-'				</div>',

-'				<div id="options" class="toolbar">',

-'					Options:',

-'					<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>',

-'					<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>',

-'					<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>',

-'					<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>',

-'					<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages"  />',

-'					<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />',

-'					<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />',

-'				</div>',

-'			</div>',

-'		</div>',

-'		<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>',

-'		<div id="commandLine" class="toolbar">',

-'			<div id="commandLineContainer">',

-'				<input type="text" id="command" title="Enter a JavaScript command here and hit return or press \'Evaluate\'" />',

-'				<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />',

-'			</div>',

-'		</div>',

-'	</body>',

-'</html>',

-''

-];

-		};

-

-		var defaultCommandLineFunctions = [];

-

-		ConsoleAppender = function() {};

-

-		var consoleAppenderIdCounter = 1;

-		ConsoleAppender.prototype = new Appender();

-

-		ConsoleAppender.prototype.create = function(inPage, container,

-				lazyInit, initiallyMinimized, useDocumentWrite, width, height, focusConsoleWindow) {

-			var appender = this;

-

-			// Common properties

-			var initialized = false;

-			var consoleWindowCreated = false;

-			var consoleWindowLoaded = false;

-			var consoleClosed = false;

-

-			var queuedLoggingEvents = [];

-			var isSupported = true;

-			var consoleAppenderId = consoleAppenderIdCounter++;

-

-			// Local variables

-			initiallyMinimized = extractBooleanFromParam(initiallyMinimized, this.defaults.initiallyMinimized);

-			lazyInit = extractBooleanFromParam(lazyInit, this.defaults.lazyInit);

-			useDocumentWrite = extractBooleanFromParam(useDocumentWrite, this.defaults.useDocumentWrite);

-			var newestMessageAtTop = this.defaults.newestMessageAtTop;

-			var scrollToLatestMessage = this.defaults.scrollToLatestMessage;

-			width = width ? width : this.defaults.width;

-			height = height ? height : this.defaults.height;

-			var maxMessages = this.defaults.maxMessages;

-			var showCommandLine = this.defaults.showCommandLine;

-			var commandLineObjectExpansionDepth = this.defaults.commandLineObjectExpansionDepth;

-			var showHideButton = this.defaults.showHideButton;

-            var showCloseButton = this.defaults.showCloseButton;

-            var showLogEntryDeleteButtons = this.defaults.showLogEntryDeleteButtons;

-

-			this.setLayout(this.defaults.layout);

-

-			// Functions whose implementations vary between subclasses

-			var init, createWindow, safeToAppend, getConsoleWindow, open;

-

-			// Configuration methods. The function scope is used to prevent

-			// direct alteration to the appender configuration properties.

-			var appenderName = inPage ? "InPageAppender" : "PopUpAppender";

-			var checkCanConfigure = function(configOptionName) {

-				if (consoleWindowCreated) {

-					handleError(appenderName + ": configuration option '" + configOptionName + "' may not be set after the appender has been initialized");

-					return false;

-				}

-				return true;

-			};

-

-			var consoleWindowExists = function() {

-				return (consoleWindowLoaded && isSupported && !consoleClosed);

-			};

-

-			this.isNewestMessageAtTop = function() { return newestMessageAtTop; };

-			this.setNewestMessageAtTop = function(newestMessageAtTopParam) {

-				newestMessageAtTop = bool(newestMessageAtTopParam);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setNewestAtTop(newestMessageAtTop);

-				}

-			};

-

-			this.isScrollToLatestMessage = function() { return scrollToLatestMessage; };

-			this.setScrollToLatestMessage = function(scrollToLatestMessageParam) {

-				scrollToLatestMessage = bool(scrollToLatestMessageParam);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setScrollToLatest(scrollToLatestMessage);

-				}

-			};

-

-			this.getWidth = function() { return width; };

-			this.setWidth = function(widthParam) {

-				if (checkCanConfigure("width")) {

-					width = extractStringFromParam(widthParam, width);

-				}

-			};

-

-			this.getHeight = function() { return height; };

-			this.setHeight = function(heightParam) {

-				if (checkCanConfigure("height")) {

-					height = extractStringFromParam(heightParam, height);

-				}

-			};

-

-			this.getMaxMessages = function() { return maxMessages; };

-			this.setMaxMessages = function(maxMessagesParam) {

-				maxMessages = extractIntFromParam(maxMessagesParam, maxMessages);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setMaxMessages(maxMessages);

-				}

-			};

-

-			this.isShowCommandLine = function() { return showCommandLine; };

-			this.setShowCommandLine = function(showCommandLineParam) {

-				showCommandLine = bool(showCommandLineParam);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setShowCommandLine(showCommandLine);

-				}

-			};

-

-			this.isShowHideButton = function() { return showHideButton; };

-			this.setShowHideButton = function(showHideButtonParam) {

-				showHideButton = bool(showHideButtonParam);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setShowHideButton(showHideButton);

-				}

-			};

-

-			this.isShowCloseButton = function() { return showCloseButton; };

-			this.setShowCloseButton = function(showCloseButtonParam) {

-				showCloseButton = bool(showCloseButtonParam);

-				if (consoleWindowExists()) {

-					getConsoleWindow().setShowCloseButton(showCloseButton);

-				}

-			};

-

-			this.getCommandLineObjectExpansionDepth = function() { return commandLineObjectExpansionDepth; };

-			this.setCommandLineObjectExpansionDepth = function(commandLineObjectExpansionDepthParam) {

-				commandLineObjectExpansionDepth = extractIntFromParam(commandLineObjectExpansionDepthParam, commandLineObjectExpansionDepth);

-			};

-

-			var minimized = initiallyMinimized;

-			this.isInitiallyMinimized = function() { return initiallyMinimized; };

-			this.setInitiallyMinimized = function(initiallyMinimizedParam) {

-				if (checkCanConfigure("initiallyMinimized")) {

-					initiallyMinimized = bool(initiallyMinimizedParam);

-					minimized = initiallyMinimized;

-				}

-			};

-

-			this.isUseDocumentWrite = function() { return useDocumentWrite; };

-			this.setUseDocumentWrite = function(useDocumentWriteParam) {

-				if (checkCanConfigure("useDocumentWrite")) {

-					useDocumentWrite = bool(useDocumentWriteParam);

-				}

-			};

-

-			// Common methods

-			function QueuedLoggingEvent(loggingEvent, formattedMessage) {

-				this.loggingEvent = loggingEvent;

-				this.levelName = loggingEvent.level.name;

-				this.formattedMessage = formattedMessage;

-			}

-

-			QueuedLoggingEvent.prototype.append = function() {

-				getConsoleWindow().log(this.levelName, this.formattedMessage);

-			};

-

-			function QueuedGroup(name, initiallyExpanded) {

-				this.name = name;

-				this.initiallyExpanded = initiallyExpanded;

-			}

-

-			QueuedGroup.prototype.append = function() {

-				getConsoleWindow().group(this.name, this.initiallyExpanded);

-			};

-

-			function QueuedGroupEnd() {}

-

-			QueuedGroupEnd.prototype.append = function() {

-				getConsoleWindow().groupEnd();

-			};

-

-			var checkAndAppend = function() {

-				// Next line forces a check of whether the window has been closed

-				safeToAppend();

-				if (!initialized) {

-					init();

-				} else if (consoleClosed && reopenWhenClosed) {

-					createWindow();

-				}

-				if (safeToAppend()) {

-					appendQueuedLoggingEvents();

-				}

-			};

-

-			this.append = function(loggingEvent) {

-				if (isSupported) {

-					// Format the message

-					var formattedMessage = appender.getLayout().format(loggingEvent);

-					if (this.getLayout().ignoresThrowable()) {

-						formattedMessage += loggingEvent.getThrowableStrRep();

-					}

-					queuedLoggingEvents.push(new QueuedLoggingEvent(loggingEvent, formattedMessage));

-					checkAndAppend();

-				}

-			};

-

-            this.group = function(name, initiallyExpanded) {

-				if (isSupported) {

-					queuedLoggingEvents.push(new QueuedGroup(name, initiallyExpanded));

-					checkAndAppend();

-				}

-			};

-

-            this.groupEnd = function() {

-				if (isSupported) {

-					queuedLoggingEvents.push(new QueuedGroupEnd());

-					checkAndAppend();

-				}

-			};

-

-			var appendQueuedLoggingEvents = function() {

-				var currentLoggingEvent;

-				while (queuedLoggingEvents.length > 0) {

-					queuedLoggingEvents.shift().append();

-				}

-				if (focusConsoleWindow) {

-					getConsoleWindow().focus();

-				}

-			};

-

-			this.setAddedToLogger = function(logger) {

-				this.loggers.push(logger);

-				if (enabled && !lazyInit) {

-					init();

-				}

-			};

-

-			this.clear = function() {

-				if (consoleWindowExists()) {

-					getConsoleWindow().clearLog();

-				}

-				queuedLoggingEvents.length = 0;

-			};

-

-			this.focus = function() {

-				if (consoleWindowExists()) {

-					getConsoleWindow().focus();

-				}

-			};

-

-			this.focusCommandLine = function() {

-				if (consoleWindowExists()) {

-					getConsoleWindow().focusCommandLine();

-				}

-			};

-

-			this.focusSearch = function() {

-				if (consoleWindowExists()) {

-					getConsoleWindow().focusSearch();

-				}

-			};

-

-			var commandWindow = window;

-

-			this.getCommandWindow = function() { return commandWindow; };

-			this.setCommandWindow = function(commandWindowParam) {

-				commandWindow = commandWindowParam;

-			};

-

-			this.executeLastCommand = function() {

-				if (consoleWindowExists()) {

-					getConsoleWindow().evalLastCommand();

-				}

-			};

-

-			var commandLayout = new PatternLayout("%m");

-			this.getCommandLayout = function() { return commandLayout; };

-			this.setCommandLayout = function(commandLayoutParam) {

-				commandLayout = commandLayoutParam;

-			};

-

-			this.evalCommandAndAppend = function(expr) {

-				var commandReturnValue = { appendResult: true, isError: false };

-				var commandOutput = "";

-				// Evaluate the command

-				try {

-					var result, i;

-					// The next three lines constitute a workaround for IE. Bizarrely, iframes seem to have no

-					// eval method on the window object initially, but once execScript has been called on

-					// it once then the eval method magically appears. See http://www.thismuchiknow.co.uk/?p=25

-					if (!commandWindow.eval && commandWindow.execScript) {

-						commandWindow.execScript("null");

-					}

-

-					var commandLineFunctionsHash = {};

-					for (i = 0, len = commandLineFunctions.length; i < len; i++) {

-						commandLineFunctionsHash[commandLineFunctions[i][0]] = commandLineFunctions[i][1];

-					}

-

-					// Keep an array of variables that are being changed in the command window so that they

-					// can be restored to their original values afterwards

-					var objectsToRestore = [];

-					var addObjectToRestore = function(name) {

-						objectsToRestore.push([name, commandWindow[name]]);

-					};

-

-					addObjectToRestore("appender");

-					commandWindow.appender = appender;

-

-					addObjectToRestore("commandReturnValue");

-					commandWindow.commandReturnValue = commandReturnValue;

-

-					addObjectToRestore("commandLineFunctionsHash");

-					commandWindow.commandLineFunctionsHash = commandLineFunctionsHash;

-

-					var addFunctionToWindow = function(name) {

-						addObjectToRestore(name);

-						commandWindow[name] = function() {

-							return this.commandLineFunctionsHash[name](appender, arguments, commandReturnValue);

-						};

-					};

-

-					for (i = 0, len = commandLineFunctions.length; i < len; i++) {

-						addFunctionToWindow(commandLineFunctions[i][0]);

-					}

-

-					// Another bizarre workaround to get IE to eval in the global scope

-					if (commandWindow === window && commandWindow.execScript) {

-						addObjectToRestore("evalExpr");

-						addObjectToRestore("result");

-						window.evalExpr = expr;

-						commandWindow.execScript("window.result=eval(window.evalExpr);");

-						result = window.result;

- 					} else {

- 						result = commandWindow.eval(expr);

- 					}

-					commandOutput = isUndefined(result) ? result : formatObjectExpansion(result, commandLineObjectExpansionDepth);

-

-					// Restore variables in the command window to their original state

-					for (i = 0, len = objectsToRestore.length; i < len; i++) {

-						commandWindow[objectsToRestore[i][0]] = objectsToRestore[i][1];

-					}

-				} catch (ex) {

-					commandOutput = "Error evaluating command: " + getExceptionStringRep(ex);

-					commandReturnValue.isError = true;

-				}

-				// Append command output

-				if (commandReturnValue.appendResult) {

-					var message = ">>> " + expr;

-					if (!isUndefined(commandOutput)) {

-						message += newLine + commandOutput;

-					}

-					var level = commandReturnValue.isError ? Level.ERROR : Level.INFO;

-					var loggingEvent = new LoggingEvent(null, new Date(), level, [message], null);

-					var mainLayout = this.getLayout();

-					this.setLayout(commandLayout);

-					this.append(loggingEvent);

-					this.setLayout(mainLayout);

-				}

-			};

-

-			var commandLineFunctions = defaultCommandLineFunctions.concat([]);

-

-			this.addCommandLineFunction = function(functionName, commandLineFunction) {

-				commandLineFunctions.push([functionName, commandLineFunction]);

-			};

-

-			var commandHistoryCookieName = "log4javascriptCommandHistory";

-			this.storeCommandHistory = function(commandHistory) {

-				setCookie(commandHistoryCookieName, commandHistory.join(","));

-			};

-

-			var writeHtml = function(doc) {

-				var lines = getConsoleHtmlLines();

-				doc.open();

-				for (var i = 0, len = lines.length; i < len; i++) {

-					doc.writeln(lines[i]);

-				}

-				doc.close();

-			};

-

-			// Set up event listeners

-			this.setEventTypes(["load", "unload"]);

-

-			var consoleWindowLoadHandler = function() {

-				var win = getConsoleWindow();

-				win.setAppender(appender);

-				win.setNewestAtTop(newestMessageAtTop);

-				win.setScrollToLatest(scrollToLatestMessage);

-				win.setMaxMessages(maxMessages);

-				win.setShowCommandLine(showCommandLine);

-				win.setShowHideButton(showHideButton);

-				win.setShowCloseButton(showCloseButton);

-				win.setMainWindow(window);

-

-				// Restore command history stored in cookie

-				var storedValue = getCookie(commandHistoryCookieName);

-				if (storedValue) {

-					win.commandHistory = storedValue.split(",");

-					win.currentCommandIndex = win.commandHistory.length;

-				}

-

-				appender.dispatchEvent("load", { "win" : win });

-			};

-

-			this.unload = function() {

-				logLog.debug("unload " + this + ", caller: " + this.unload.caller);

-				if (!consoleClosed) {

-					logLog.debug("really doing unload " + this);

-					consoleClosed = true;

-					consoleWindowLoaded = false;

-					consoleWindowCreated = false;

-					appender.dispatchEvent("unload", {});

-				}

-			};

-

-			var pollConsoleWindow = function(windowTest, interval, successCallback, errorMessage) {

-				function doPoll() {

-					try {

-						// Test if the console has been closed while polling

-						if (consoleClosed) {

-							clearInterval(poll);

-						}

-						if (windowTest(getConsoleWindow())) {

-							clearInterval(poll);

-							successCallback();

-						}

-					} catch (ex) {

-						clearInterval(poll);

-						isSupported = false;

-						handleError(errorMessage, ex);

-					}

-				}

-

-				// Poll the pop-up since the onload event is not reliable

-				var poll = setInterval(doPoll, interval);

-			};

-

-			var getConsoleUrl = function() {

-				var documentDomainSet = (document.domain != location.hostname);

-				return useDocumentWrite ? "" : getBaseUrl() + "console_uncompressed.html" +

-											   (documentDomainSet ? "?log4javascript_domain=" + escape(document.domain) : "");

-			};

-

-			// Define methods and properties that vary between subclasses

-			if (inPage) {

-				// InPageAppender

-

-				var containerElement = null;

-

-				// Configuration methods. The function scope is used to prevent

-				// direct alteration to the appender configuration properties.

-				var cssProperties = [];

-				this.addCssProperty = function(name, value) {

-					if (checkCanConfigure("cssProperties")) {

-						cssProperties.push([name, value]);

-					}

-				};

-

-				// Define useful variables

-				var windowCreationStarted = false;

-				var iframeContainerDiv;

-				var iframeId = uniqueId + "_InPageAppender_" + consoleAppenderId;

-

-				this.hide = function() {

-					if (initialized && consoleWindowCreated) {

-						if (consoleWindowExists()) {

-							getConsoleWindow().$("command").blur();

-						}

-						iframeContainerDiv.style.display = "none";

-						minimized = true;

-					}

-				};

-

-				this.show = function() {

-					if (initialized) {

-						if (consoleWindowCreated) {

-							iframeContainerDiv.style.display = "block";

-							this.setShowCommandLine(showCommandLine); // Force IE to update

-							minimized = false;

-						} else if (!windowCreationStarted) {

-							createWindow(true);

-						}

-					}

-				};

-

-				this.isVisible = function() {

-					return !minimized && !consoleClosed;

-				};

-

-				this.close = function(fromButton) {

-					if (!consoleClosed && (!fromButton || confirm("This will permanently remove the console from the page. No more messages will be logged. Do you wish to continue?"))) {

-						iframeContainerDiv.parentNode.removeChild(iframeContainerDiv);

-						this.unload();

-					}

-				};

-

-				// Create open, init, getConsoleWindow and safeToAppend functions

-				open = function() {

-					var initErrorMessage = "InPageAppender.open: unable to create console iframe";

-

-					function finalInit() {

-						try {

-							if (!initiallyMinimized) {

-								appender.show();

-							}

-							consoleWindowLoadHandler();

-							consoleWindowLoaded = true;

-							appendQueuedLoggingEvents();

-						} catch (ex) {

-							isSupported = false;

-							handleError(initErrorMessage, ex);

-						}

-					}

-

-					function writeToDocument() {

-						try {

-							var windowTest = function(win) { return isLoaded(win); };

-							if (useDocumentWrite) {

-								writeHtml(getConsoleWindow().document);

-							}

-							if (windowTest(getConsoleWindow())) {

-								finalInit();

-							} else {

-								pollConsoleWindow(windowTest, 100, finalInit, initErrorMessage);

-							}

-						} catch (ex) {

-							isSupported = false;

-							handleError(initErrorMessage, ex);

-						}

-					}

-

-					minimized = false;

-					iframeContainerDiv = containerElement.appendChild(document.createElement("div"));

-

-					iframeContainerDiv.style.width = width;

-					iframeContainerDiv.style.height = height;

-					iframeContainerDiv.style.border = "solid gray 1px";

-

-					for (var i = 0, len = cssProperties.length; i < len; i++) {

-						iframeContainerDiv.style[cssProperties[i][0]] = cssProperties[i][1];

-					}

-

-					var iframeSrc = useDocumentWrite ? "" : " src='" + getConsoleUrl() + "'";

-

-					// Adding an iframe using the DOM would be preferable, but it doesn't work

-					// in IE5 on Windows, or in Konqueror prior to version 3.5 - in Konqueror

-					// it creates the iframe fine but I haven't been able to find a way to obtain

-					// the iframe's window object

-					iframeContainerDiv.innerHTML = "<iframe id='" + iframeId + "' name='" + iframeId +

-						"' width='100%' height='100%' frameborder='0'" + iframeSrc +

-						" scrolling='no'></iframe>";

-					consoleClosed = false;

-

-					// Write the console HTML to the iframe

-					var iframeDocumentExistsTest = function(win) {

-						try {

-							return bool(win) && bool(win.document);

-						} catch (ex) {

-							return false;

-						}

-					};

-					if (iframeDocumentExistsTest(getConsoleWindow())) {

-						writeToDocument();

-					} else {

-						pollConsoleWindow(iframeDocumentExistsTest, 100, writeToDocument, initErrorMessage);

-					}

-					consoleWindowCreated = true;

-				};

-

-				createWindow = function(show) {

-					if (show || !initiallyMinimized) {

-						var pageLoadHandler = function() {

-							if (!container) {

-								// Set up default container element

-								containerElement = document.createElement("div");

-								containerElement.style.position = "fixed";

-								containerElement.style.left = "0";

-								containerElement.style.right = "0";

-								containerElement.style.bottom = "0";

-								document.body.appendChild(containerElement);

-								appender.addCssProperty("borderWidth", "1px 0 0 0");

-								appender.addCssProperty("zIndex", 1000000); // Can't find anything authoritative that says how big z-index can be

-								open();

-							} else {

-								try {

-									var el = document.getElementById(container);

-									if (el.nodeType == 1) {

-										containerElement = el;

-									}

-									open();

-								} catch (ex) {

-									handleError("InPageAppender.init: invalid container element '" + container + "' supplied", ex);

-								}

-							}

-						};

-

-						// Test the type of the container supplied. First, check if it's an element

-						if (pageLoaded && container && container.appendChild) {

-							containerElement = container;

-							open();

-						} else if (pageLoaded) {

-							pageLoadHandler();

-						} else {

-							log4javascript.addEventListener("load", pageLoadHandler);

-						}

-						windowCreationStarted = true;

-					}

-				};

-

-				init = function() {

-					createWindow();

-					initialized = true;

-				};

-

-				getConsoleWindow = function() {

-					var iframe = window.frames[iframeId];

-					if (iframe) {

-						return iframe;

-					}

-				};

-

-				safeToAppend = function() {

-					if (isSupported && !consoleClosed) {

-						if (consoleWindowCreated && !consoleWindowLoaded && getConsoleWindow() && isLoaded(getConsoleWindow())) {

-							consoleWindowLoaded = true;

-						}

-						return consoleWindowLoaded;

-					}

-					return false;

-				};

-			} else {

-				// PopUpAppender

-

-				// Extract params

-				var useOldPopUp = appender.defaults.useOldPopUp;

-				var complainAboutPopUpBlocking = appender.defaults.complainAboutPopUpBlocking;

-				var reopenWhenClosed = this.defaults.reopenWhenClosed;

-

-				// Configuration methods. The function scope is used to prevent

-				// direct alteration to the appender configuration properties.

-				this.isUseOldPopUp = function() { return useOldPopUp; };

-				this.setUseOldPopUp = function(useOldPopUpParam) {

-					if (checkCanConfigure("useOldPopUp")) {

-						useOldPopUp = bool(useOldPopUpParam);

-					}

-				};

-

-				this.isComplainAboutPopUpBlocking = function() { return complainAboutPopUpBlocking; };

-				this.setComplainAboutPopUpBlocking = function(complainAboutPopUpBlockingParam) {

-					if (checkCanConfigure("complainAboutPopUpBlocking")) {

-						complainAboutPopUpBlocking = bool(complainAboutPopUpBlockingParam);

-					}

-				};

-

-				this.isFocusPopUp = function() { return focusConsoleWindow; };

-				this.setFocusPopUp = function(focusPopUpParam) {

-					// This property can be safely altered after logging has started

-					focusConsoleWindow = bool(focusPopUpParam);

-				};

-

-				this.isReopenWhenClosed = function() { return reopenWhenClosed; };

-				this.setReopenWhenClosed = function(reopenWhenClosedParam) {

-					// This property can be safely altered after logging has started

-					reopenWhenClosed = bool(reopenWhenClosedParam);

-				};

-

-				this.close = function() {

-					logLog.debug("close " + this);

-					try {

-						popUp.close();

-						this.unload();

-					} catch (ex) {

-						// Do nothing

-					}

-				};

-

-				this.hide = function() {

-					logLog.debug("hide " + this);

-					if (consoleWindowExists()) {

-						this.close();

-					}

-				};

-

-				this.show = function() {

-					logLog.debug("show " + this);

-					if (!consoleWindowCreated) {

-						open();

-					}

-				};

-

-				this.isVisible = function() {

-					return safeToAppend();

-				};

-

-				// Define useful variables

-				var popUp;

-

-				// Create open, init, getConsoleWindow and safeToAppend functions

-				open = function() {

-					var windowProperties = "width=" + width + ",height=" + height + ",status,resizable";

-					var frameInfo = "";

-					try {

-						var frameEl = window.frameElement;

-						if (frameEl) {

-							frameInfo = "_" + frameEl.tagName + "_" + (frameEl.name || frameEl.id || "");

-						}

-					} catch (e) {

-						frameInfo = "_inaccessibleParentFrame";

-					}

-					var windowName = "PopUp_" + location.host.replace(/[^a-z0-9]/gi, "_") + "_" + consoleAppenderId + frameInfo;

-					if (!useOldPopUp || !useDocumentWrite) {

-						// Ensure a previous window isn't used by using a unique name

-						windowName = windowName + "_" + uniqueId;

-					}

-

-					var checkPopUpClosed = function(win) {

-						if (consoleClosed) {

-							return true;

-						} else {

-							try {

-								return bool(win) && win.closed;

-							} catch(ex) {}

-						}

-						return false;

-					};

-

-					var popUpClosedCallback = function() {

-						if (!consoleClosed) {

-							appender.unload();

-						}

-					};

-

-					function finalInit() {

-						getConsoleWindow().setCloseIfOpenerCloses(!useOldPopUp || !useDocumentWrite);

-						consoleWindowLoadHandler();

-						consoleWindowLoaded = true;

-						appendQueuedLoggingEvents();

-						pollConsoleWindow(checkPopUpClosed, 500, popUpClosedCallback,

-								"PopUpAppender.checkPopUpClosed: error checking pop-up window");

-					}

-

-					try {

-						popUp = window.open(getConsoleUrl(), windowName, windowProperties);

-						consoleClosed = false;

-						consoleWindowCreated = true;

-						if (popUp && popUp.document) {

-							if (useDocumentWrite && useOldPopUp && isLoaded(popUp)) {

-								popUp.mainPageReloaded();

-								finalInit();

-							} else {

-								if (useDocumentWrite) {

-									writeHtml(popUp.document);

-								}

-								// Check if the pop-up window object is available

-								var popUpLoadedTest = function(win) { return bool(win) && isLoaded(win); };

-								if (isLoaded(popUp)) {

-									finalInit();

-								} else {

-									pollConsoleWindow(popUpLoadedTest, 100, finalInit,

-											"PopUpAppender.init: unable to create console window");

-								}

-							}

-						} else {

-							isSupported = false;

-							logLog.warn("PopUpAppender.init: pop-ups blocked, please unblock to use PopUpAppender");

-							if (complainAboutPopUpBlocking) {

-								handleError("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");

-							}

-						}

-					} catch (ex) {

-						handleError("PopUpAppender.init: error creating pop-up", ex);

-					}

-				};

-

-				createWindow = function() {

-					if (!initiallyMinimized) {

-						open();

-					}

-				};

-

-				init = function() {

-					createWindow();

-					initialized = true;

-				};

-

-				getConsoleWindow = function() {

-					return popUp;

-				};

-

-				safeToAppend = function() {

-					if (isSupported && !isUndefined(popUp) && !consoleClosed) {

-						if (popUp.closed ||

-								(consoleWindowLoaded && isUndefined(popUp.closed))) { // Extra check for Opera

-							appender.unload();

-							logLog.debug("PopUpAppender: pop-up closed");

-							return false;

-						}

-						if (!consoleWindowLoaded && isLoaded(popUp)) {

-							consoleWindowLoaded = true;

-						}

-					}

-					return isSupported && consoleWindowLoaded && !consoleClosed;

-				};

-			}

-

-			// Expose getConsoleWindow so that automated tests can check the DOM

-			this.getConsoleWindow = getConsoleWindow;

-		};

-

-		ConsoleAppender.addGlobalCommandLineFunction = function(functionName, commandLineFunction) {

-			defaultCommandLineFunctions.push([functionName, commandLineFunction]);

-		};

-

-		/* ------------------------------------------------------------------ */

-

-		function PopUpAppender(lazyInit, initiallyMinimized, useDocumentWrite,

-							   width, height) {

-			this.create(false, null, lazyInit, initiallyMinimized,

-					useDocumentWrite, width, height, this.defaults.focusPopUp);

-		}

-

-		PopUpAppender.prototype = new ConsoleAppender();

-

-		PopUpAppender.prototype.defaults = {

-			layout: new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),

-			initiallyMinimized: false,

-			focusPopUp: false,

-			lazyInit: true,

-			useOldPopUp: true,

-			complainAboutPopUpBlocking: true,

-			newestMessageAtTop: false,

-			scrollToLatestMessage: true,

-			width: "600",

-			height: "400",

-			reopenWhenClosed: false,

-			maxMessages: null,

-			showCommandLine: true,

-			commandLineObjectExpansionDepth: 1,

-			showHideButton: false,

-			showCloseButton: true,

-            showLogEntryDeleteButtons: true,

-            useDocumentWrite: true

-		};

-

-		PopUpAppender.prototype.toString = function() {

-			return "PopUpAppender";

-		};

-

-		log4javascript.PopUpAppender = PopUpAppender;

-

-		/* ------------------------------------------------------------------ */

-

-		function InPageAppender(container, lazyInit, initiallyMinimized,

-								useDocumentWrite, width, height) {

-			this.create(true, container, lazyInit, initiallyMinimized,

-					useDocumentWrite, width, height, false);

-		}

-

-		InPageAppender.prototype = new ConsoleAppender();

-

-		InPageAppender.prototype.defaults = {

-			layout: new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),

-			initiallyMinimized: false,

-			lazyInit: true,

-			newestMessageAtTop: false,

-			scrollToLatestMessage: true,

-			width: "100%",

-			height: "220px",

-			maxMessages: null,

-			showCommandLine: true,

-			commandLineObjectExpansionDepth: 1,

-			showHideButton: false,

-			showCloseButton: false,

-            showLogEntryDeleteButtons: true,

-            useDocumentWrite: true

-		};

-

-		InPageAppender.prototype.toString = function() {

-			return "InPageAppender";

-		};

-

-		log4javascript.InPageAppender = InPageAppender;

-

-		// Next line for backwards compatibility

-		log4javascript.InlineAppender = InPageAppender;

-	})();

-	/* ---------------------------------------------------------------------- */

-	// Console extension functions

-

-	function padWithSpaces(str, len) {

-		if (str.length < len) {

-			var spaces = [];

-			var numberOfSpaces = Math.max(0, len - str.length);

-			for (var i = 0; i < numberOfSpaces; i++) {

-				spaces[i] = " ";

-			}

-			str += spaces.join("");

-		}

-		return str;

-	}

-

-	(function() {

-		function dir(obj) {

-			var maxLen = 0;

-			// Obtain the length of the longest property name

-			for (var p in obj) {

-				maxLen = Math.max(toStr(p).length, maxLen);

-			}

-			// Create the nicely formatted property list

-			var propList = [];

-			for (p in obj) {

-				var propNameStr = "  " + padWithSpaces(toStr(p), maxLen + 2);

-				var propVal;

-				try {

-					propVal = splitIntoLines(toStr(obj[p])).join(padWithSpaces(newLine, maxLen + 6));

-				} catch (ex) {

-					propVal = "[Error obtaining property. Details: " + getExceptionMessage(ex) + "]";

-				}

-				propList.push(propNameStr + propVal);

-			}

-			return propList.join(newLine);

-		}

-

-		var nodeTypes = {

-			ELEMENT_NODE: 1,

-			ATTRIBUTE_NODE: 2,

-			TEXT_NODE: 3,

-			CDATA_SECTION_NODE: 4,

-			ENTITY_REFERENCE_NODE: 5,

-			ENTITY_NODE: 6,

-			PROCESSING_INSTRUCTION_NODE: 7,

-			COMMENT_NODE: 8,

-			DOCUMENT_NODE: 9,

-			DOCUMENT_TYPE_NODE: 10,

-			DOCUMENT_FRAGMENT_NODE: 11,

-			NOTATION_NODE: 12

-		};

-

-		var preFormattedElements = ["script", "pre"];

-

-		// This should be the definitive list, as specified by the XHTML 1.0 Transitional DTD

-		var emptyElements = ["br", "img", "hr", "param", "link", "area", "input", "col", "base", "meta"];

-		var indentationUnit = "  ";

-

-		// Create and return an XHTML string from the node specified

-		function getXhtml(rootNode, includeRootNode, indentation, startNewLine, preformatted) {

-			includeRootNode = (typeof includeRootNode == "undefined") ? true : !!includeRootNode;

-			if (typeof indentation != "string") {

-				indentation = "";

-			}

-			startNewLine = !!startNewLine;

-			preformatted = !!preformatted;

-			var xhtml;

-

-			function isWhitespace(node) {

-				return ((node.nodeType == nodeTypes.TEXT_NODE) && /^[ \t\r\n]*$/.test(node.nodeValue));

-			}

-

-			function fixAttributeValue(attrValue) {

-				return attrValue.toString().replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/"/g, "&quot;");

-			}

-

-			function getStyleAttributeValue(el) {

-				var stylePairs = el.style.cssText.split(";");

-				var styleValue = "";

-				var isFirst = true;

-				for (var j = 0, len = stylePairs.length; j < len; j++) {

-					var nameValueBits = stylePairs[j].split(":");

-					var props = [];

-					if (!/^\s*$/.test(nameValueBits[0])) {

-						props.push(trim(nameValueBits[0]).toLowerCase() + ":" + trim(nameValueBits[1]));

-					}

-					styleValue = props.join(";");

-				}

-				return styleValue;

-			}

-

-			function getNamespace(el) {

-				if (el.prefix) {

-					return el.prefix;

-				} else if (el.outerHTML) {

-					var regex = new RegExp("<([^:]+):" + el.tagName + "[^>]*>", "i");

-					if (regex.test(el.outerHTML)) {

-						return RegExp.$1.toLowerCase();

-					}

-				}

-                return "";

-			}

-

-			var lt = "<";

-			var gt = ">";

-

-			if (includeRootNode && rootNode.nodeType != nodeTypes.DOCUMENT_FRAGMENT_NODE) {

-				switch (rootNode.nodeType) {

-					case nodeTypes.ELEMENT_NODE:

-						var tagName = rootNode.tagName.toLowerCase();

-						xhtml = startNewLine ? newLine + indentation : "";

-						xhtml += lt;

-						// Allow for namespaces, where present

-						var prefix = getNamespace(rootNode);

-						var hasPrefix = !!prefix;

-						if (hasPrefix) {

-							xhtml += prefix + ":";

-						}

-						xhtml += tagName;

-						for (i = 0, len = rootNode.attributes.length; i < len; i++) {

-							var currentAttr = rootNode.attributes[i];

-							// Check the attribute is valid.

-							if (!	currentAttr.specified ||

-									currentAttr.nodeValue === null ||

-									currentAttr.nodeName.toLowerCase() === "style" ||

-									typeof currentAttr.nodeValue !== "string" ||

-									currentAttr.nodeName.indexOf("_moz") === 0) {

-								continue;

-							}

-							xhtml += " " + currentAttr.nodeName.toLowerCase() + "=\"";

-							xhtml += fixAttributeValue(currentAttr.nodeValue);

-							xhtml += "\"";

-						}

-						// Style needs to be done separately as it is not reported as an

-						// attribute in IE

-						if (rootNode.style.cssText) {

-							var styleValue = getStyleAttributeValue(rootNode);

-							if (styleValue !== "") {

-								xhtml += " style=\"" + getStyleAttributeValue(rootNode) + "\"";

-							}

-						}

-						if (array_contains(emptyElements, tagName) ||

-								(hasPrefix && !rootNode.hasChildNodes())) {

-							xhtml += "/" + gt;

-						} else {

-							xhtml += gt;

-							// Add output for childNodes collection (which doesn't include attribute nodes)

-							var childStartNewLine = !(rootNode.childNodes.length === 1 &&

-								rootNode.childNodes[0].nodeType === nodeTypes.TEXT_NODE);

-							var childPreformatted = array_contains(preFormattedElements, tagName);

-							for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {

-								xhtml += getXhtml(rootNode.childNodes[i], true, indentation + indentationUnit,

-									childStartNewLine, childPreformatted);

-							}

-							// Add the end tag

-							var endTag = lt + "/" + tagName + gt;

-							xhtml += childStartNewLine ? newLine + indentation + endTag : endTag;

-						}

-						return xhtml;

-					case nodeTypes.TEXT_NODE:

-						if (isWhitespace(rootNode)) {

-							xhtml = "";

-						} else {

-							if (preformatted) {

-								xhtml = rootNode.nodeValue;

-							} else {

-								// Trim whitespace from each line of the text node

-								var lines = splitIntoLines(trim(rootNode.nodeValue));

-								var trimmedLines = [];

-								for (var i = 0, len = lines.length; i < len; i++) {

-									trimmedLines[i] = trim(lines[i]);

-								}

-								xhtml = trimmedLines.join(newLine + indentation);

-							}

-							if (startNewLine) {

-								xhtml = newLine + indentation + xhtml;

-							}

-						}

-						return xhtml;

-					case nodeTypes.CDATA_SECTION_NODE:

-						return "<![CDA" + "TA[" + rootNode.nodeValue + "]" + "]>" + newLine;

-					case nodeTypes.DOCUMENT_NODE:

-						xhtml = "";

-						// Add output for childNodes collection (which doesn't include attribute nodes)

-						for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {

-							xhtml += getXhtml(rootNode.childNodes[i], true, indentation);

-						}

-						return xhtml;

-					default:

-						return "";

-				}

-			} else {

-				xhtml = "";

-				// Add output for childNodes collection (which doesn't include attribute nodes)

-				for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {

-					xhtml += getXhtml(rootNode.childNodes[i], true, indentation + indentationUnit);

-				}

-				return xhtml;

-			}

-		}

-

-		function createCommandLineFunctions() {

-			ConsoleAppender.addGlobalCommandLineFunction("$", function(appender, args, returnValue) {

-				return document.getElementById(args[0]);

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("dir", function(appender, args, returnValue) {

-				var lines = [];

-				for (var i = 0, len = args.length; i < len; i++) {

-					lines[i] = dir(args[i]);

-				}

-				return lines.join(newLine + newLine);

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("dirxml", function(appender, args, returnValue) {

-				var lines = [];

-				for (var i = 0, len = args.length; i < len; i++) {

-					var win = appender.getCommandWindow();

-					lines[i] = getXhtml(args[i]);

-				}

-				return lines.join(newLine + newLine);

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("cd", function(appender, args, returnValue) {

-				var win, message;

-				if (args.length === 0 || args[0] === "") {

-					win = window;

-					message = "Command line set to run in main window";

-				} else {

-					if (args[0].window == args[0]) {

-						win = args[0];

-						message = "Command line set to run in frame '" + args[0].name + "'";

-					} else {

-						win = window.frames[args[0]];

-						if (win) {

-							message = "Command line set to run in frame '" + args[0] + "'";

-						} else {

-							returnValue.isError = true;

-							message = "Frame '" + args[0] + "' does not exist";

-							win = appender.getCommandWindow();

-						}

-					}

-				}

-				appender.setCommandWindow(win);

-				return message;

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("clear", function(appender, args, returnValue) {

-				returnValue.appendResult = false;

-				appender.clear();

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("keys", function(appender, args, returnValue) {

-				var keys = [];

-				for (var k in args[0]) {

-					keys.push(k);

-				}

-				return keys;

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("values", function(appender, args, returnValue) {

-				var values = [];

-				for (var k in args[0]) {

-					try {

-						values.push(args[0][k]);

-					} catch (ex) {

-						logLog.warn("values(): Unable to obtain value for key " + k + ". Details: " + getExceptionMessage(ex));

-					}

-				}

-				return values;

-			});

-

-			ConsoleAppender.addGlobalCommandLineFunction("expansionDepth", function(appender, args, returnValue) {

-				var expansionDepth = parseInt(args[0], 10);

-				if (isNaN(expansionDepth) || expansionDepth < 0) {

-					returnValue.isError = true;

-					return "" + args[0] + " is not a valid expansion depth";

-				} else {

-					appender.setCommandLineObjectExpansionDepth(expansionDepth);

-					return "Object expansion depth set to " + expansionDepth;

-				}

-			});

-		}

-

-		function init() {

-			// Add command line functions

-			createCommandLineFunctions();

-		}

-

-		/* ------------------------------------------------------------------ */

-

-		init();

-	})();

-

-	/* ---------------------------------------------------------------------- */

-	// Main load

-

-   log4javascript.setDocumentReady = function() {

-       pageLoaded = true;

-       log4javascript.dispatchEvent("load", {});

-   };

-

-    if (window.addEventListener) {

-        window.addEventListener("load", log4javascript.setDocumentReady, false);

-    } else if (window.attachEvent) {

-        window.attachEvent("onload", log4javascript.setDocumentReady);

-    } else {

-        var oldOnload = window.onload;

-        if (typeof window.onload != "function") {

-            window.onload = log4javascript.setDocumentReady;

-        } else {

-            window.onload = function(evt) {

-                if (oldOnload) {

-                    oldOnload(evt);

-                }

-                log4javascript.setDocumentReady();

-            };

-        }

-    }

-

-    // Ensure that the log4javascript object is available in the window. This

-    // is necessary for log4javascript to be available in IE if loaded using

-    // Dojo's module system

-    window.log4javascript = log4javascript;

-

-    return log4javascript;

-})();
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/main.css b/xos/core/static/log4javascript-1.4.6/main.css
deleted file mode 100644
index c309c6a..0000000
--- a/xos/core/static/log4javascript-1.4.6/main.css
+++ /dev/null
@@ -1,318 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-body {

-	font-family: Verdana, Arial, Helvetica, Sans-serif;

-	font-size: 75%;

-	color: black;

-	background-color: #eeeeee;

-	text-align: center;

-	padding: 0px;

-	margin: 0px;

-}

-

-div#container {

-	width: 770px;

-	text-align: left;

-	line-height: 150%;

-	border-width: 0px 1px 1px 1px;

-	border-color: #cccccc;

-	border-style: solid;

-	background-color: white;

-	color: black;

-	padding: 10px;

-	margin: 0px auto 10px auto;

-}

-

-div#header {

-	margin: 0px;

-}

-

-div#header h1 {

-	font-family: Courier New, Courier, Monospace, Serif;

-	padding: 8px 0 15px 0;

-	margin: 0px;

-	font-size: 200%;

-	font-weight: bold;

-	text-align: right;

-}

-

-div#header h1 a {

-	color: black;

-}

-

-div#nav {

-	font-size: 91.66%;

-	font-weight: bold;

-	padding-top: 5px;

-	padding-bottom: 5px;

-	border-bottom: solid #cccccc 1px;

-	text-align: right;

-	background-color: #f0f0fa;

-}

-

-div#container.nonav div#content {

-	float: none;

-	width: auto;

-}

-

-*.externallinkinfo {

-	float: right;

-	font-style: italic;

-}

-

-div#content h1 {

-	padding: 10px 3px 5px 3px;

-	margin: 5px 0px;

-	font-size: 175%;

-	font-weight: normal;

-}

-

-div#content h2 {

-	background-color: darkgreen;

-	color: white;

-	padding: 0px 3px;

-	font-size: 116.66%;

-	font-weight: bold;

-}

-

-div#content h2 a {

-	color: white;

-}

-

-div#content h3 {

-	padding: 0px 3px;

-	font-size: 116.66%;

-	font-weight: bold;

-	border-style: solid;

-	border-color: #003399;

-	border-width: 1px 0px;

-}

-

-div#content h4 {

-	padding: 0px 3px;

-	font-size: 100%;

-	font-weight: bold;

-	border-top: solid #eeeeee 1px;

-}

-

-div#content h5 {

-	padding: 0px;

-	margin: 3px 0px;

-}

-

-div#footer {

-	margin-top: 20px;

-	padding: 2px;

-	border-top: solid #cccccc 1px;

-	font-size: 91.66%;

-}

-

-a {

-	color: #003399;

-	text-decoration: none;

-}

-

-a:hover {

-	text-decoration: underline;

-}

-

-a.bold {

-	font-weight: bold;

-}

-

-a.underlined {

-	text-decoration: underline;

-}

-

-a img {

-	border-width: 0px;

-}

-

-br.clear {

-	clear: both;

-}

-

-table {

-	font-size: 100%;

-}

-

-/* Code */

-pre, code {

-	font-family: Courier New, Courier;

-	font-size: 108.33%;

-}

-

-pre.code, pre.console {

-	border: solid 1px #cccccc;

-	padding: 3px;

-}

-

-pre.code {

-	background-color: #eeeeee;

-}

-

-*.trace {

-	color: #666666;

-}

-

-*.debug {

-	color: green;

-}

-

-*.info {

-	color: #000099;

-}

-

-*.warn {

-	color: #999900;

-}

-

-*.error {

-	color: red;

-}

-

-*.fatal {

-	color: #660066;

-}

-

-

-div.example, div.panel {

-	border: solid 1px #cccccc;

-	background-color: #f5f5f5;

-	padding: 3px;

-	margin-bottom: 10px;

-}

-

-div.panel h2 {

-	margin: 5px 0px;

-}

-

-div.padded {

-	padding: 10px;

-}

-

-div.hidden {

-	display: none;

-}

-

-div.active {

-	background-color: #fcfffc;

-	border-color: green;

-}

-

-label.rightofinput, input.rightoflabel {

-	margin-right: 20px;

-}

-

-/* 'Back to top' link */

-p.linktotop {

-	text-align: right;

-}

-

-ul.propertieslist li.method, ul.propertieslist li.property {

-	margin: 0;

-	padding: 0px 0px 15px 0px;

-}

-

-ul.propertieslist li *.name {

-	font-size: 116.66%;

-	font-weight: bold;

-}

-

-ul.propertieslist li.method div.methodsignature {

-	margin: 10px 0px;

-	font-size: 116.66%;

-	background-color: #eeeeee;

-}

-

-ul.propertieslist li.method *.paramsheading {

-	font-weight: bold;

-}

-

-ul.propertieslist li.method *.params {

-	padding-top: 5px;

-	padding-bottom: 5px;

-}

-

-ul.propertieslist li.method *.params li.param {

-	padding-bottom: 10px;

-}

-

-ul.propertieslist li.method *.params li.param *.paramname {

-	font-style: italic;

-}

-

-div.serverlog {

-	height: 200px;

-	/*border: solid 1px #cccccc;*/

-}

-

-div#inPageConsole {

-	margin-top: 10px;

-}

-

-div.iframecontainer {

-	background-color: white;

-	border: solid #cccccc 1px;

-	width: 100%;

-}

-

-div.veryprominent {

-	background-color: darkgreen;

-	color: white;

-	font-weight: bold;

-	padding: 10px;

-	font-size: 133.33%;

-	margin-bottom: 10px;

-}

-

-div.veryprominent a {

-	color: white;

-}

-

-*.largetext {

-	font-size: 116.66%;

-}

-

-div#leftcolumn {

-	float: left;

-	width: 160px;

-}

-

-div#rightcolumn {

-	float: right;

-	width: 580px;

-}

-

-td.fullsupport {

-	background-color: lightgreen;

-}

-

-td.partialsupport {

-	background-color: gold;

-}

-

-td.nosupport {

-	background-color: lightcoral;

-}

-

-p.editions {

-	text-align: right;

-	font-style: italic;

-}
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/test/index.html b/xos/core/static/log4javascript-1.4.6/test/index.html
deleted file mode 100644
index 9a28c60..0000000
--- a/xos/core/static/log4javascript-1.4.6/test/index.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript - Tests</title>

-	</head>

-	<body>

-		<ul>

-			<li><a href="log4javascript.html">Standard edition tests</a></li>

-			<li><a href="log4javascript_uncompressed.html">Standard edition uncompressed tests</a></li>

-			<li><a href="log4javascript_production.html">Production edition tests</a></li>

-			<li><a href="log4javascript_production_uncompressed.html">Production edition uncompressed tests</a></li>

-		</ul>

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/test/log4javascript.html b/xos/core/static/log4javascript-1.4.6/test/log4javascript.html
deleted file mode 100644
index 1439a75..0000000
--- a/xos/core/static/log4javascript-1.4.6/test/log4javascript.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript - log4javascript - Tests</title>

-		<script type="text/javascript" src="../js/log4javascript.js"></script>

-		<script type="text/javascript" src="../js/stubs/log4javascript.js"></script>

-		<script type="text/javascript" src="xntest.js"></script>

-		<script type="text/javascript" src="../js/tests/log4javascript.js"></script>

-		<link rel="stylesheet" type="text/css" href="tests.css"/>

-	</head>

-	<body>

-		<div id="messages"></div>

-		<div id="inlineAppenderContainer"></div>

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/test/log4javascript_lite.html b/xos/core/static/log4javascript-1.4.6/test/log4javascript_lite.html
deleted file mode 100644
index 66c174f..0000000
--- a/xos/core/static/log4javascript-1.4.6/test/log4javascript_lite.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript - log4javascript_lite - Tests</title>

-		<script type="text/javascript" src="../js/log4javascript_lite.js"></script>

-		<script type="text/javascript" src="../js/stubs/log4javascript_lite.js"></script>

-		<script type="text/javascript" src="xntest.js"></script>

-		<script type="text/javascript" src="../js/tests/log4javascript_lite.js"></script>

-		<link rel="stylesheet" type="text/css" href="tests.css"/>

-	</head>

-	<body>

-		<div id="messages"></div>

-		<div id="inlineAppenderContainer"></div>

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/test/log4javascript_lite_uncompressed.html b/xos/core/static/log4javascript-1.4.6/test/log4javascript_lite_uncompressed.html
deleted file mode 100644
index 339602d..0000000
--- a/xos/core/static/log4javascript-1.4.6/test/log4javascript_lite_uncompressed.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript - log4javascript_lite_uncompressed - Tests</title>

-		<script type="text/javascript" src="../js/log4javascript_lite_uncompressed.js"></script>

-		<script type="text/javascript" src="../js/stubs/log4javascript_lite_uncompressed.js"></script>

-		<script type="text/javascript" src="xntest.js"></script>

-		<script type="text/javascript" src="../js/tests/log4javascript_lite_uncompressed.js"></script>

-		<link rel="stylesheet" type="text/css" href="tests.css"/>

-	</head>

-	<body>

-		<div id="messages"></div>

-		<div id="inlineAppenderContainer"></div>

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/test/log4javascript_production.html b/xos/core/static/log4javascript-1.4.6/test/log4javascript_production.html
deleted file mode 100644
index ce80a82..0000000
--- a/xos/core/static/log4javascript-1.4.6/test/log4javascript_production.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript - log4javascript_production - Tests</title>

-		<script type="text/javascript" src="../js/log4javascript_production.js"></script>

-		<script type="text/javascript" src="../js/stubs/log4javascript_production.js"></script>

-		<script type="text/javascript" src="xntest.js"></script>

-		<script type="text/javascript" src="../js/tests/log4javascript_production.js"></script>

-		<link rel="stylesheet" type="text/css" href="tests.css"/>

-	</head>

-	<body>

-		<div id="messages"></div>

-		<div id="inlineAppenderContainer"></div>

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/test/log4javascript_production_uncompressed.html b/xos/core/static/log4javascript-1.4.6/test/log4javascript_production_uncompressed.html
deleted file mode 100644
index c53c795..0000000
--- a/xos/core/static/log4javascript-1.4.6/test/log4javascript_production_uncompressed.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript - log4javascript_production_uncompressed - Tests</title>

-		<script type="text/javascript" src="../js/log4javascript_production_uncompressed.js"></script>

-		<script type="text/javascript" src="../js/stubs/log4javascript_production_uncompressed.js"></script>

-		<script type="text/javascript" src="xntest.js"></script>

-		<script type="text/javascript" src="../js/tests/log4javascript_production_uncompressed.js"></script>

-		<link rel="stylesheet" type="text/css" href="tests.css"/>

-	</head>

-	<body>

-		<div id="messages"></div>

-		<div id="inlineAppenderContainer"></div>

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/test/log4javascript_uncompressed.html b/xos/core/static/log4javascript-1.4.6/test/log4javascript_uncompressed.html
deleted file mode 100644
index 2e13ecf..0000000
--- a/xos/core/static/log4javascript-1.4.6/test/log4javascript_uncompressed.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript - log4javascript_uncompressed - Tests</title>

-		<script type="text/javascript" src="../js/log4javascript_uncompressed.js"></script>

-		<script type="text/javascript" src="../js/stubs/log4javascript_uncompressed.js"></script>

-		<script type="text/javascript" src="xntest.js"></script>

-		<script type="text/javascript" src="../js/tests/log4javascript_uncompressed.js"></script>

-		<link rel="stylesheet" type="text/css" href="tests.css"/>

-	</head>

-	<body>

-		<div id="messages"></div>

-		<div id="inlineAppenderContainer"></div>

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/test/main.html b/xos/core/static/log4javascript-1.4.6/test/main.html
deleted file mode 100644
index a2e080f..0000000
--- a/xos/core/static/log4javascript-1.4.6/test/main.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<?xml version="1.0"?>

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

-	<head>

-		<title>log4javascript - %%build:edition%% - Tests</title>

-		<script type="text/javascript" src="../js/%%build:edition%%.js"></script>

-		<script type="text/javascript" src="../js/stubs/%%build:edition%%.js"></script>

-		<script type="text/javascript" src="xntest.js"></script>

-		<script type="text/javascript" src="../js/tests/%%build:edition%%.js"></script>

-		<link rel="stylesheet" type="text/css" href="tests.css"/>

-	</head>

-	<body>

-		<div id="messages"></div>

-		<div id="inlineAppenderContainer"></div>

-	</body>

-</html>

diff --git a/xos/core/static/log4javascript-1.4.6/test/tests.css b/xos/core/static/log4javascript-1.4.6/test/tests.css
deleted file mode 100644
index ef5853a..0000000
--- a/xos/core/static/log4javascript-1.4.6/test/tests.css
+++ /dev/null
@@ -1,106 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-body {

-	font-family: verdana, arial, helvetica, sans-serif;

-	font-size: 81.25%;

-}

-

-h2 {

-	font-size: 100%;

-	padding: 0;

-	margin: 0.1em 0 0.1em 0;

-}

-

-div.xn_test_suite_container {

-	border: solid #cccccc 1px;

-	padding: 2px 5px;

-	margin: 2px 0px;

-}

-

-div.xn_test_progressbar_container {

-	border: solid black 1px;

-}

-

-div.xn_test_progressbar_container *.success {

-	background-color: #00ff00;

-}

-

-div.xn_test_progressbar_container *.failure {

-	background-color: red;

-}

-

-div.xn_test_overallprogressbar_container {

-	position: relative;

-}

-

-div.xn_test_overallprogressbar_container h1 {

-	margin: 0;

-	padding: 2px;

-	font-size: 125%;

-	font-weight: bold;

-	white-space: nowrap;

-}

-

-dl *.success {

-	color: green;

-}

-

-dl *.failure {

-	color: red;

-}

-

-span.xn_test_expander {

-	padding: 0;

-	border: solid black 1px;

-	cursor: pointer;

-	cursor: hand;

-	line-height: 100%; 

-	font-weight: bold;

-	margin-right: 1em;

-	font-size: 11px;

-}

-

-dl.xn_test_expanded {

-	display: block;

-}

-

-dl.xn_test_collapsed {

-	display: none;

-}

-

-div.xn_test_suite_success {

-	border: solid 2px limegreen;

-}

-

-div.xn_test_suite_failure {

-	border: solid 2px red;

-}

-

-pre.xn_test_log_report {

-	background-color: #f5f5f5;

-	padding: 3px;

-	border: solid gray 1px;

-	font-size: 11px;

-	font-family: Courier New, Courier, monospace;

-}

-

-code.xn_test_stacktrace {

-	color: red;

-	overflow: 

-}
\ No newline at end of file
diff --git a/xos/core/static/log4javascript-1.4.6/test/xntest.js b/xos/core/static/log4javascript-1.4.6/test/xntest.js
deleted file mode 100644
index c18ee9f..0000000
--- a/xos/core/static/log4javascript-1.4.6/test/xntest.js
+++ /dev/null
@@ -1,757 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Next three methods are primarily for IE5, which is missing them
-if (!Array.prototype.push) {
-	Array.prototype.push = function() {
-		for (var i = 0; i < arguments.length; i++){
-				this[this.length] = arguments[i];
-		}
-		return this.length;
-	};
-}
-
-if (!Array.prototype.shift) {
-	Array.prototype.shift = function() {
-		if (this.length > 0) {
-			var firstItem = this[0];
-			for (var i = 0; i < this.length - 1; i++) {
-				this[i] = this[i + 1];
-			}
-			this.length = this.length - 1;
-			return firstItem;
-		}
-	};
-}
-
-if (!Function.prototype.apply) {
-	Function.prototype.apply = function(obj, args) {
-		var methodName = "__apply__";
-		if (typeof obj[methodName] != "undefined") {
-			methodName += (String(Math.random())).substr(2);
-		}
-		obj[methodName] = this;
-
-		var argsStrings = new Array(args.length);
-		for (var i = 0; i < args.length; i++) {
-			argsStrings[i] = "args[" + i + "]";
-		}
-		var script = "obj." + methodName + "(" + argsStrings.join(",") + ")";
-		var returnValue = eval(script);
-		delete obj[methodName];
-		return returnValue;
-	};
-}
-
-/* -------------------------------------------------------------------------- */
-
-var xn = new Object();
-
-(function() {
-	// Utility functions
-
-	// Event listeners
-	var getListenersPropertyName = function(eventName) {
-		return "__listeners__" + eventName;
-	};
-
-	var addEventListener = function(node, eventName, listener, useCapture) {
-		useCapture = Boolean(useCapture);
-		if (node.addEventListener) {
-			node.addEventListener(eventName, listener, useCapture);
-		} else if (node.attachEvent) {
-			node.attachEvent("on" + eventName, listener);
-		} else {
-			var propertyName = getListenersPropertyName(eventName);
-			if (!node[propertyName]) {
-				node[propertyName] = new Array();
-
-				// Set event handler
-				node["on" + eventName] = function(evt) {
-					evt = module.getEvent(evt);
-					var listenersPropertyName = getListenersPropertyName(eventName);
-
-					// Clone the array of listeners to leave the original untouched
-					var listeners = cloneArray(this[listenersPropertyName]);
-					var currentListener;
-
-					// Call each listener in turn
-					while (currentListener = listeners.shift()) {
-						currentListener.call(this, evt);
-					}
-				};
-			}
-			node[propertyName].push(listener);
-		}
-	};
-
-	// Clones an array
-	var cloneArray = function(arr) {
-		var clonedArray = [];
-		for (var i = 0; i < arr.length; i++) {
-			clonedArray[i] = arr[i];
-		}
-		return clonedArray;
-	}
-
-	var isFunction = function(f) {
-		if (!f){ return false; }
-		return (f instanceof Function || typeof f == "function");
-	};
-
-	// CSS Utilities
-	
-	function array_contains(arr, val) {
-		for (var i = 0, len = arr.length; i < len; i++) {
-			if (arr[i] === val) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	function addClass(el, cssClass) {
-		if (!hasClass(el, cssClass)) {
-			if (el.className) {
-				el.className += " " + cssClass;
-			} else {
-				el.className = cssClass;
-			}
-		}
-	}
-
-	function hasClass(el, cssClass) {
-		if (el.className) {
-			var classNames = el.className.split(" ");
-			return array_contains(classNames, cssClass);
-		}
-		return false;
-	}
-
-	function removeClass(el, cssClass) {
-		if (hasClass(el, cssClass)) {
-			// Rebuild the className property
-			var existingClasses = el.className.split(" ");
-			var newClasses = [];
-			for (var i = 0; i < existingClasses.length; i++) {
-				if (existingClasses[i] != cssClass) {
-					newClasses[newClasses.length] = existingClasses[i];
-				}
-			}
-			el.className = newClasses.join(" ");
-		}
-	}
-
-	function replaceClass(el, newCssClass, oldCssClass) {
-		removeClass(el, oldCssClass);
-		addClass(el, newCssClass);
-	}
-
-	function getExceptionStringRep(ex) {
-		if (ex) {
-			var exStr = "Exception: ";
-			if (ex.message) {
-				exStr += ex.message;
-			} else if (ex.description) {
-				exStr += ex.description;
-			}
-			if (ex.lineNumber) {
-				exStr += " on line number " + ex.lineNumber;
-			}
-			if (ex.fileName) {
-				exStr += " in file " + ex.fileName;
-			}
-			return exStr;
-		}
-		return null;
-	}
-
-
-	/* ---------------------------------------------------------------------- */
-
-	/* Configure the test logger try to use FireBug */
-	var log, error;
-	if (window["console"] && typeof console.log == "function") {
-		log = function() {
-			if (xn.test.enableTestDebug) {
-				console.log.apply(console, arguments);
-			}
-		};
-		error = function() {
-			if (xn.test.enableTestDebug) {
-				console.error.apply(console, arguments);
-			}
-		};
-	} else {
-		log = function() {};
-	}
-
-	/* Set up something to report to */
-
-	var initialized = false;
-	var container;
-	var progressBarContainer, progressBar, overallSummaryText;
-	var currentTest = null;
-	var suites = [];
-	var totalTestCount = 0;
-	var currentTestIndex = 0;
-	var testFailed = false;
-	var testsPassedCount = 0;
-	var startTime;
-	
-	var log4javascriptEnabled = false;
-	
-	var nextSuiteIndex = 0;
-	
-	function runNextSuite() {
-		if (nextSuiteIndex < suites.length) {
-			suites[nextSuiteIndex++].run();
-		}
-	}
-	
-	var init = function() {
-		if (initialized) { return true; }
-		
-		container = document.createElement("div");
-		
-		// Create the overall progress bar
-		progressBarContainer = container.appendChild(document.createElement("div"));
-		progressBarContainer.className = "xn_test_progressbar_container xn_test_overallprogressbar_container";
-		progressBar = progressBarContainer.appendChild(document.createElement("div"));
-		progressBar.className = "success";
-
-		document.body.appendChild(container);
-
-		var h1 = progressBar.appendChild(document.createElement("h1"));
-		overallSummaryText = h1.appendChild(document.createTextNode(""));
-
-		initialized = true;
-		
-		// Set up logging
-		log4javascriptEnabled = !!log4javascript && xn.test.enable_log4javascript;
-		
-		function TestLogAppender() {}
-		
-		if (log4javascriptEnabled) {
-			TestLogAppender.prototype = new log4javascript.Appender();
-			TestLogAppender.prototype.layout = new log4javascript.PatternLayout("%d{HH:mm:ss,SSS} %-5p %m");
-			TestLogAppender.prototype.append = function(loggingEvent) {
-				var formattedMessage = this.getLayout().format(loggingEvent);
-				if (this.getLayout().ignoresThrowable()) {
-					formattedMessage += loggingEvent.getThrowableStrRep();
-				}
-				currentTest.addLogMessage(formattedMessage);
-			};
-			
-			var appender = new TestLogAppender();
-			appender.setThreshold(log4javascript.Level.ALL);
-			log4javascript.getRootLogger().addAppender(appender);
-			log4javascript.getRootLogger().setLevel(log4javascript.Level.ALL);
-		}
-
-		startTime = new Date();
-
-		// First, build each suite
-		for (var i = 0; i < suites.length; i++) {
-			suites[i].build();
-			totalTestCount += suites[i].tests.length;
-		}
-		
-		// Now run each suite
-		runNextSuite();
-	};
-	
-	function updateProgressBar() {
-		progressBar.style.width = "" + parseInt(100 * (currentTestIndex) / totalTestCount) + "%";
-		var s = (totalTestCount === 1) ? "" : "s";
-		var timeTaken = new Date().getTime() - startTime.getTime();
-		overallSummaryText.nodeValue = "" + testsPassedCount + " of " + totalTestCount + " test" + s + " passed in " + timeTaken + "ms";
-	}
-
-	addEventListener(window, "load", init);
-
-	/* ---------------------------------------------------------------------- */
-
-	/* Test Suite */
-	var Suite = function(name, callback, hideSuccessful) {
-		this.name = name;
-		this.callback = callback;
-		this.hideSuccessful = hideSuccessful;
-		this.tests = [];
-		this.log = log;
-		this.error = error;
-		this.expanded = true;
-		suites.push(this);
-	}
-
-	Suite.prototype.test = function(name, callback, setUp, tearDown) {
-		this.log("adding a test named " + name)
-		var t = new Test(name, callback, this, setUp, tearDown);
-		this.tests.push(t);
-	};
-
-	Suite.prototype.build = function() {
-		// Build the elements used by the suite
-		var suite = this;
-		this.testFailed = false;
-		this.container = document.createElement("div");
-		this.container.className = "xn_test_suite_container";
-
-		var heading = document.createElement("h2");
-		this.expander = document.createElement("span");
-		this.expander.className = "xn_test_expander";
-		this.expander.onclick = function() {
-			if (suite.expanded) {
-				suite.collapse();
-			} else {
-				suite.expand();
-			}
-		};
-		heading.appendChild(this.expander);
-		
-		this.headingTextNode = document.createTextNode(this.name);
-		heading.appendChild(this.headingTextNode);
-		this.container.appendChild(heading);
-
-		this.reportContainer = document.createElement("dl");
-		this.container.appendChild(this.reportContainer);
-
-		this.progressBarContainer = document.createElement("div");
-		this.progressBarContainer.className = "xn_test_progressbar_container";
-		this.progressBar = document.createElement("div");
-		this.progressBar.className = "success";
-		this.progressBar.innerHTML = "&nbsp;";
-		this.progressBarContainer.appendChild(this.progressBar);
-		this.reportContainer.appendChild(this.progressBarContainer);
-
-		this.expand();
-
-		container.appendChild(this.container);
-
-		// invoke callback to build the tests
-		this.callback.apply(this, [this]);
-	};
-
-	Suite.prototype.run = function() {
-		this.log("running suite '%s'", this.name)
-		this.startTime = new Date();
-
-		// now run the first test
-		this._currentIndex = 0;
-		this.runNextTest();
-	};
-
-	Suite.prototype.updateProgressBar = function() {
-		// Update progress bar
-		this.progressBar.style.width = "" + parseInt(100 * (this._currentIndex) / this.tests.length) + "%";
-		//log(this._currentIndex + ", " + this.tests.length + ", " + progressBar.style.width + ", " + progressBar.className);
-	};
-
-	Suite.prototype.expand = function() {
-		this.expander.innerHTML = "-";
-		replaceClass(this.reportContainer, "xn_test_expanded", "xn_test_collapsed");
-		this.expanded = true;
-	};
-
-	Suite.prototype.collapse = function() {
-		this.expander.innerHTML = "+";
-		replaceClass(this.reportContainer, "xn_test_collapsed", "xn_test_expanded");
-		this.expanded = false;
-	};
-
-	Suite.prototype.finish = function(timeTaken) {
-		var newClass = this.testFailed ? "xn_test_suite_failure" : "xn_test_suite_success";
-		var oldClass = this.testFailed ? "xn_test_suite_success" : "xn_test_suite_failure";
-		replaceClass(this.container, newClass, oldClass);
-
-		this.headingTextNode.nodeValue += " (" + timeTaken + "ms)";
-
-		if (this.hideSuccessful && !this.testFailed) {
-			this.collapse();
-		}
-		runNextSuite();
-	};
-
-	/**
-	 * Works recursively with external state (the next index)
-	 * so that we can handle async tests differently
-	 */
-	Suite.prototype.runNextTest = function() {
-		if (this._currentIndex == this.tests.length) {
-			// finished!
-			var timeTaken = new Date().getTime() - this.startTime.getTime();
-
-			this.finish(timeTaken);
-			return;
-		}
-
-		var suite = this;
-		var t = this.tests[this._currentIndex++];
-		currentTestIndex++;
-
-		if (isFunction(suite.setUp)) {
-			suite.setUp.apply(suite, [t]);
-		}
-		if (isFunction(t.setUp)) {
-			t.setUp.apply(t, [t]);
-		}
-
-		t._run();
-		
-		function afterTest() {
-			if (isFunction(suite.tearDown)) {
-				suite.tearDown.apply(suite, [t]);
-			}
-			if (isFunction(t.tearDown)) {
-				t.tearDown.apply(t, [t]);
-			}
-			suite.log("finished test [%s]", t.name);
-			updateProgressBar();
-			suite.updateProgressBar();
-			suite.runNextTest();
-		}
-		
-		if (t.isAsync) {
-			t.whenFinished = afterTest;
-		} else {
-			setTimeout(afterTest, 1);
-		}
-	};
-
-	Suite.prototype.reportSuccess = function() {
-	};
-
-	/* ---------------------------------------------------------------------- */
-	/**
-	 * Create a new test
-	 */
-	var Test = function(name, callback, suite, setUp, tearDown) {
-		this.name = name;
-		this.callback = callback;
-		this.suite = suite;
-		this.setUp = setUp;
-		this.tearDown = tearDown;
-		this.log = log;
-		this.error = error;
-		this.assertCount = 0;
-		this.logMessages = [];
-		this.logExpanded = false;
-	};
-
-	/**
-	 * Default success reporter, please override
-	 */
-	Test.prototype.reportSuccess = function(name, timeTaken) {
-		/* default success reporting handler */
-		this.reportHeading = document.createElement("dt");
-		var text = this.name + " passed in " + timeTaken + "ms";
-		
-		this.reportHeading.appendChild(document.createTextNode(text));
-
-		this.reportHeading.className = "success";
-		var dd = document.createElement("dd");
-		dd.className = "success";
-
-		this.suite.reportContainer.appendChild(this.reportHeading);
-		this.suite.reportContainer.appendChild(dd);
-		this.createLogReport();
-	};
-
-	/**
-	 * Cause the test to immediately fail
-	 */
-	Test.prototype.reportFailure = function(name, msg, ex) {
-		this.suite.testFailed = true;
-		this.suite.progressBar.className = "failure";
-		progressBar.className = "failure";
-		this.reportHeading = document.createElement("dt");
-		this.reportHeading.className = "failure";
-		var text = document.createTextNode(this.name);
-		this.reportHeading.appendChild(text);
-
-		var dd = document.createElement("dd");
-		dd.appendChild(document.createTextNode(msg));
-		dd.className = "failure";
-
-		this.suite.reportContainer.appendChild(this.reportHeading);
-		this.suite.reportContainer.appendChild(dd);
-		if (ex && ex.stack) {
-			var stackTraceContainer = this.suite.reportContainer.appendChild(document.createElement("code"));
-			stackTraceContainer.className = "xn_test_stacktrace";
-			stackTraceContainer.innerHTML = ex.stack.replace(/\r/g, "\n").replace(/\n{1,2}/g, "<br />");
-		}
-		this.createLogReport();
-	};
-	
-	Test.prototype.createLogReport = function() {
-		if (this.logMessages.length > 0) {
-			this.reportHeading.appendChild(document.createTextNode(" ("));
-			var logToggler = this.reportHeading.appendChild(document.createElement("a"));
-			logToggler.href = "#";
-			logToggler.innerHTML = "show log";
-			var test = this;
-			
-			logToggler.onclick = function() {
-				if (test.logExpanded) {
-					test.hideLogReport();
-					this.innerHTML = "show log";
-					test.logExpanded = false;
-				} else {
-					test.showLogReport();
-					this.innerHTML = "hide log";
-					test.logExpanded = true;
-				}
-				return false;
-			};
-
-			this.reportHeading.appendChild(document.createTextNode(")"));
-			
-			// Create log report
-			this.logReport = this.suite.reportContainer.appendChild(document.createElement("pre"));
-			this.logReport.style.display = "none";
-			this.logReport.className = "xn_test_log_report";
-			var logMessageDiv;
-			for (var i = 0, len = this.logMessages.length; i < len; i++) {
-				logMessageDiv = this.logReport.appendChild(document.createElement("div"));
-				logMessageDiv.appendChild(document.createTextNode(this.logMessages[i]));
-			}
-		}
-	};
-
-	Test.prototype.showLogReport = function() {
-		this.logReport.style.display = "inline-block";
-	};
-		
-	Test.prototype.hideLogReport = function() {
-		this.logReport.style.display = "none";
-	};
-
-	Test.prototype.async = function(timeout, callback) {
-		timeout = timeout || 250;
-		var self = this;
-		var timedOutFunc = function() {
-			if (!self.completed) {
-				var message = (typeof callback === "undefined") ?
-							"Asynchronous test timed out" : callback(self);
-				self.fail(message);
-			}
-		}
-		var timer = setTimeout(function () { timedOutFunc.apply(self, []); }, timeout)
-		this.isAsync = true;
-	};
-
-	/**
-	 * Run the test
-	 */
-	Test.prototype._run = function() {
-		this.log("starting test [%s]", this.name);
-		this.startTime = new Date();
-		currentTest = this;
-		try {
-			this.callback(this);
-			if (!this.completed && !this.isAsync) {
-				this.succeed();
-			}
-		} catch (e) {
-			this.log("test [%s] threw exception [%s]", this.name, e);
-			var s = (this.assertCount === 1) ? "" : "s";
-			this.fail("Exception thrown after " + this.assertCount + " successful assertion" + s + ": " + getExceptionStringRep(e), e);
-		}
-	};
-
-	/**
-	 * Cause the test to immediately succeed
-	 */
-	Test.prototype.succeed = function() {
-		if (this.completed) { return false; }
-		// this.log("test [%s] succeeded", this.name);
-		this.completed = true;
-		var timeTaken = new Date().getTime() - this.startTime.getTime();
-		testsPassedCount++;
-		this.reportSuccess(this.name, timeTaken);
-		if (this.whenFinished) {
-			this.whenFinished();
-		}
-	};
-
-	Test.prototype.fail = function(msg, ex)	{
-		if (typeof msg != "string") {
-			msg = getExceptionStringRep(msg);
-		}
-		if (this.completed) { return false; }
-		this.completed = true;
-		// this.log("test [%s] failed", this.name);
-		this.reportFailure(this.name, msg, ex);
-		if (this.whenFinished) {
-			this.whenFinished();
-		}
-	};
-	
-	Test.prototype.addLogMessage = function(logMessage) {
-		this.logMessages.push(logMessage);
-	};
-
-	/* assertions */
-	var displayStringForValue = function(obj) {
-		if (obj === null) {
-			return "null";
-		} else if (typeof obj === "undefined") {
-			return "undefined";
-		}
-		return obj.toString();
-	};
-
-	var assert = function(args, expectedArgsCount, testFunction, defaultComment) {
-		this.assertCount++;
-		var comment = defaultComment;
-		var i;
-		var success;
-		var values = [];
-		if (args.length == expectedArgsCount) {
-			for (i = 0; i < args.length; i++) {
-				values[i] = args[i];
-			}
-		} else if (args.length == expectedArgsCount + 1) {
-			comment = args[0];
-			for (i = 1; i < args.length; i++) {
-				values[i - 1] = args[i];
-			}
-		} else {
-			throw new Error("Invalid number of arguments passed to assert function");
-		}
-		success = testFunction(values);
-		if (!success) {
-			var regex = /\{([0-9]+)\}/;
-			while (regex.test(comment)) {
-				comment = comment.replace(regex, displayStringForValue(values[parseInt(RegExp.$1)]));
-			}
-			this.fail("Test failed on assertion " + this.assertCount + ": " + comment);
-		}
-	};
-
-	var testNull = function(values) {
-		return (values[0] === null);
-	};
-
-	Test.prototype.assertNull = function() {
-		assert.apply(this, [arguments, 1, testNull, "Expected to be null but was {0}"]);
-	}
-
-	var testNotNull = function(values) {
-		return (values[0] !== null);
-	};
-
-	Test.prototype.assertNotNull = function() {
-		assert.apply(this, [arguments, 1, testNotNull, "Expected not to be null but was {0}"]);
-	}
-
-	var testBoolean = function(values) {
-		return (Boolean(values[0]));
-	};
-
-	Test.prototype.assert = function() {
-		assert.apply(this, [arguments, 1, testBoolean, "Expected not to be equivalent to false"]);
-	};
-
-	var testTrue = function(values) {
-		return (values[0] === true);
-	};
-
-	Test.prototype.assertTrue = function() {
-		assert.apply(this, [arguments, 1, testTrue, "Expected to be true but was {0}"]);
-	};
-
-	Test.prototype.assert = function() {
-		assert.apply(this, [arguments, 1, testTrue, "Expected to be true but was {0}"]);
-	};
-
-	var testFalse = function(values) {
-		return (values[0] === false);
-	};
-
-	Test.prototype.assertFalse = function() {
-		assert.apply(this, [arguments, 1, testFalse, "Expected to be false but was {0}"]);
-	}
-
-	var testEquivalent = function(values) {
-		return (values[0] === values[1]);
-	};
-
-	Test.prototype.assertEquivalent = function() {
-		assert.apply(this, [arguments, 2, testEquivalent, "Expected to be equal but values were {0} and {1}"]);
-	}
-
-	var testNotEquivalent = function(values) {
-		return (values[0] !== values[1]);
-	};
-
-	Test.prototype.assertNotEquivalent = function() {
-		assert.apply(this, [arguments, 2, testNotEquivalent, "Expected to be not equal but values were {0} and {1}"]);
-	}
-
-	var testEquals = function(values) {
-		return (values[0] == values[1]);
-	};
-
-	Test.prototype.assertEquals = function() {
-		assert.apply(this, [arguments, 2, testEquals, "Expected to be equal but values were {0} and {1}"]);
-	}
-
-	var testNotEquals = function(values) {
-		return (values[0] != values[1]);
-	};
-
-	Test.prototype.assertNotEquals = function() {
-		assert.apply(this, [arguments, 2, testNotEquals, "Expected to be not equal but values were {0} and {1}"]);
-	}
-
-	var testRegexMatches = function(values) {
-		return (values[0].test(values[1]));
-	};
-
-	Test.prototype.assertRegexMatches = function() {
-		assert.apply(this, [arguments, 2, testRegexMatches, "Expected regex {0} to match value {1} but it didn't"]);
-	}
-
-	Test.prototype.assertError = function(f, errorType) {
-		try {
-			f();
-			this.fail("Expected error to be thrown");
-		} catch (e) {
-			if (errorType && (!(e instanceof errorType))) {
-				this.fail("Expected error of type " + errorType + " to be thrown but error thrown was " + e);
-			}
-		}
-	};
-
-	/**
-	 * Execute a synchronous test
-	 */
-	xn.test = function(name, callback) {
-		xn.test.suite("Anonymous", function(s) {
-			s.test(name, callback);
-		});
-	}
-
-	/**
-	 * Create a test suite with a given name
-	 */
-	xn.test.suite = function(name, callback, hideSuccessful) {
-		var s = new Suite(name, callback, hideSuccessful);
-	}
-})();
\ No newline at end of file
diff --git a/xos/core/static/logo.png b/xos/core/static/logo.png
deleted file mode 100644
index a55f86a..0000000
--- a/xos/core/static/logo.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/logo_opague_circles.png b/xos/core/static/logo_opague_circles.png
deleted file mode 100644
index 306fc46..0000000
--- a/xos/core/static/logo_opague_circles.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/mCordServices/service_cache.png b/xos/core/static/mCordServices/service_cache.png
deleted file mode 100644
index a8b5480..0000000
--- a/xos/core/static/mCordServices/service_cache.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/mCordServices/service_common.png b/xos/core/static/mCordServices/service_common.png
deleted file mode 100644
index 9fda14e..0000000
--- a/xos/core/static/mCordServices/service_common.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/mCordServices/service_firewall.png b/xos/core/static/mCordServices/service_firewall.png
deleted file mode 100644
index 17e87be..0000000
--- a/xos/core/static/mCordServices/service_firewall.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/mCordServices/service_rru.png b/xos/core/static/mCordServices/service_rru.png
deleted file mode 100644
index 8a667c0..0000000
--- a/xos/core/static/mCordServices/service_rru.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/mCordServices/service_server.png b/xos/core/static/mCordServices/service_server.png
deleted file mode 100644
index 17ce83d..0000000
--- a/xos/core/static/mCordServices/service_server.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/mCordServices/service_video.png b/xos/core/static/mCordServices/service_video.png
deleted file mode 100644
index 91ad760..0000000
--- a/xos/core/static/mCordServices/service_video.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/main.js b/xos/core/static/main.js
deleted file mode 100644
index 9262f06..0000000
--- a/xos/core/static/main.js
+++ /dev/null
@@ -1,171 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-$(document).ready(function() {
-
-	
-	function getServerData(url, label, value) {
-		var jqxhr = $.getJSON( url, function(data) {
-			if (value == 'nodesValue') {
-				var unit = '';
-				window.nodesCnt = data;
-			} else if (value == 'cpuValue'){
-				var unit = '%';
-				window.cpuCnt = data;
-			} else if (value == 'bandwidthValue'){
-				var unit = '';
-				window.bandData = data;
-			}
-			var legend = data.legend;
-			var data = data.data;
-			var dataLength = data.length - 1;
-			$('.'+label).text(legend).show();
-			$('.'+value).text(Math.round(data[dataLength][1])+unit).show();
-		})
-		
-	}
-	var selectedNodeTxt = $('.currentOriginalNode').text();
-	selectedNodeTxt = selectedNodeTxt.trim();
-	selectedNodeTxt = selectedNodeTxt.split(' ').join('');//selectedNodeTxt.replace(" ", "")
-	var parentNodeTxt = $('.selectedMainNav').text();
-	parentNodeTxt = parentNodeTxt.replace("/\n","");
- 	parentNodeTxt = parentNodeTxt.replace("»","");
-	parentNodeTxt = parentNodeTxt.trim();
-	
-	baseNodeQuery = 'SELECT Minute(time) as Minute,COUNT(distinct %hostname) FROM [vicci.demoevents]';
-	baseCpuQuery = 'SELECT Minute(time) as Minute,AVG(i0) as Cpu FROM [vicci.demoevents]';
-	baseBwQuery = 'SELECT Minute(time) as Minute,AVG(i1) as Requests FROM [vicci.demoevents]';
-	groupByClause = ' GROUP BY Minute ORDER BY Minute';
-
-	if (selectedNodeTxt ) {
-		if (parentNodeTxt.length > 0 && parentNodeTxt.charAt(parentNodeTxt.length-1)=='s') {
-			parentNodeTxt = parentNodeTxt.substring(0, parentNodeTxt.length-1);
-		}
-		if (parentNodeTxt=='Slice') {
-			whereClause = " WHERE s3='"+selectedNodeTxt+"'";
-		} 
-		else if (parentNodeTxt=='Site') {
-			whereClause = " WHERE s2='"+selectedNodeTxt+"' OR %hostname CONTAINS '"+selectedNodeTxt+"'";
-		} 
-		else if (parentNodeTxt=='Node') {
-			whereClause = " WHERE %hostname='"+selectedNodeTxt+"'";
-			alert(whereClause);
-		} else {
-			console.log('Error: Unkown object type:'+parentNodeTxt);
-		}
-	} else {
-		whereClause = '';
-	}
-	finalNodeQuery = encodeURIComponent(baseNodeQuery + whereClause + groupByClause);
-	finalCpuQuery = encodeURIComponent(baseCpuQuery + whereClause + groupByClause);
-	finalBwQuery = encodeURIComponent(baseBwQuery + whereClause + groupByClause);
-	getServerData('http://cloud-scrutiny.appspot.com/command?action=send_query&legend=Node+Count&tqx=saber&q='+finalNodeQuery,'nodesLabel','nodesValue');
-	getServerData('http://cloud-scrutiny.appspot.com/command?action=send_query&legend=Load&tqx=saber&q='+finalCpuQuery,'cpuLabel','cpuValue');
-	getServerData('http://cloud-scrutiny.appspot.com/command?action=send_query&legend=Bandwidth&tqx=saber&q='+finalBwQuery,'bandwidthLabel','bandwidthValue');
-
-	$('.nodesLabel, .nodesValue').click(function() {
-		var jsonData = window.nodesCnt;
-		renderChart(jsonData);
-	});
-	$('.cpuLabel, .cpuValue').click(function() {
-		var jsonData = window.cpuCnt;
-		renderChart(jsonData);
-	});
-	$('.bandwidthLabel, .bandwidthValue').click(function() {
-		var jsonData = window.bandData;
-		renderChart(jsonData);
-	});
-
-	function renderChart(jsonData) {
-		$('#graph').empty();
-		$('#chartsModal').modal('show');
-		$('.modal-body').scrollTop(0)
-		var margin = {top: 0, right: 100, bottom: 100, left: 175},
-		width = 520 - margin.left - margin.right,
-		height = 300 - margin.top - margin.bottom;
-
-		var parseDate = d3.time.format("%Y-%m-%m-%H-%M").parse;
-
-		var x = d3.time.scale()
-		.range([0, width]);
-
-		var y = d3.scale.linear()
-		.range([height, 0]);
-
-		var xAxis = d3.svg.axis()
-		.scale(x)
-		.ticks(d3.time.minutes, 15)
-		.orient("bottom");
-
-		var yAxis = d3.svg.axis()
-		.scale(y)
-		.ticks(4)
-		.orient("left");
-
-		var line = d3.svg.line()
-		.x(function(d) { return x(d.date); })
-		.y(function(d) { return y(d.value); });
-
-		var svg = d3.select("#graph").append("svg")
-		.attr("width", width + margin.left + margin.right)
-		.attr("height", height + margin.top + margin.bottom)
-		.append("g")
-		.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
-
-		/*var data_path = "http://sabertooth.cs.princeton.edu/graphs/UpNodes";
-		d3.json(data_path, function(error, input) {*/
-			//jsonData = JSON.stringify(eval("(" + jsonData + ")"));
-			data = jsonData.data;//input['data'];
-			legend = jsonData.legend;//input['legend']
-			$('#chartHeading').text(legend);
-			data.forEach(function(d) {
-				d.date = new Date(d[0]*1000);
-				d.value = +d[1];
-				});
-					x.domain(d3.extent(data, function(d) { return d.date; }));
-
-					var e = d3.extent(data, function(d) { return d.value;});
-					e = [e[0]-1,e[1]+1];
-
-					y.domain(e);
-
-					svg.append("g")
-					.attr("class", "x axis")
-					.attr("transform", "translate(0," + height + ")")
-					.attr("x", 5)
-					.call(xAxis);
-
-					svg.append("g")
-					.attr("class", "y axis")
-					.call(yAxis)
-					.append("text")
-					.attr("transform", "rotate(-90)")
-					.attr("y", 6)
-					.attr("dy", ".71em")
-					.style("text-anchor", "end")
-					.text(legend)
-					.attr("class", "legend");
-
-					svg.append("path")
-					.datum(data)
-					.attr("class", "line")
-					.attr("d", line);
-				//});
-	}
-
-})
diff --git a/xos/core/static/mcord-bg.jpg b/xos/core/static/mcord-bg.jpg
deleted file mode 100644
index e378fda..0000000
--- a/xos/core/static/mcord-bg.jpg
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/name.png b/xos/core/static/name.png
deleted file mode 100644
index e8145d6..0000000
--- a/xos/core/static/name.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/name_old.png b/xos/core/static/name_old.png
deleted file mode 100644
index 0ab31a3..0000000
--- a/xos/core/static/name_old.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/onos-logo.png b/xos/core/static/onos-logo.png
deleted file mode 100644
index 8688cd6..0000000
--- a/xos/core/static/onos-logo.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/open-cloud-login-themed-light.png b/xos/core/static/open-cloud-login-themed-light.png
deleted file mode 100644
index f926301..0000000
--- a/xos/core/static/open-cloud-login-themed-light.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/open-cloud-login-themed-light_old.png b/xos/core/static/open-cloud-login-themed-light_old.png
deleted file mode 100644
index af8f582..0000000
--- a/xos/core/static/open-cloud-login-themed-light_old.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/open-cloud-themed.png b/xos/core/static/open-cloud-themed.png
deleted file mode 100644
index 82d0c8d..0000000
--- a/xos/core/static/open-cloud-themed.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/open-cloud-themed1.png b/xos/core/static/open-cloud-themed1.png
deleted file mode 100644
index 2aefd87..0000000
--- a/xos/core/static/open-cloud-themed1.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/open-cloud-themed2.png b/xos/core/static/open-cloud-themed2.png
deleted file mode 100644
index 975146b..0000000
--- a/xos/core/static/open-cloud-themed2.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/open-cloud-themed_old.png b/xos/core/static/open-cloud-themed_old.png
deleted file mode 100644
index 975146b..0000000
--- a/xos/core/static/open-cloud-themed_old.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/opencloudApp.png b/xos/core/static/opencloudApp.png
deleted file mode 100644
index f6b0660..0000000
--- a/xos/core/static/opencloudApp.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/page_analytics.js b/xos/core/static/page_analytics.js
deleted file mode 100644
index ffc6fda..0000000
--- a/xos/core/static/page_analytics.js
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// ----------------------------------------------------------------------------
-// node count and average cpu utilization
-
-function updateMiniDashStatistic(meter, buttonSelector) {
-    var url="/stats/?model_name=" + admin_object_name + "&pk=" + admin_object_id + "&meter=" + meter + "&controller_name=" + admin_object_controller;
-    console.log("fetching stats url " + url);
-    $.ajax({
-    url: url,
-    dataType : 'json',
-    type : 'GET',
-    success: function(newData) {
-        console.log(newData);
-        if (newData.error) {
-            $(buttonSelector).text(newData.error);
-        } else if (newData.stat_list.length > 0) {
-            value = newData.stat_list.slice(-1)[0].value;
-            console.log(value);
-            $(buttonSelector).text(Math.round(value)).show();
-        } else {
-            $(buttonSelector).text("no data").show();
-        }
-        setTimeout(function() { updateMiniDashStatistic(meter, buttonSelector); }, 30000);
-    },
-    error: function() {
-    }
-});
-}
-
-$( document ).ready(function() {
-    if (admin_object_name == "Instance" && admin_object_id != undefined) {
-        updateMiniDashStatistic("cpu", "#miniDashCPU");
-        updateMiniDashStatistic("network.outgoing.bytes", "#miniDashBandwidthIn");
-        updateMiniDashStatistic("network.incoming.bytes", "#miniDashBandwidthOut");
-    }
-});
-
diff --git a/xos/core/static/password.png b/xos/core/static/password.png
deleted file mode 100644
index 131490b..0000000
--- a/xos/core/static/password.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/password_old.png b/xos/core/static/password_old.png
deleted file mode 100644
index 8eccd01..0000000
--- a/xos/core/static/password_old.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/planetstack_graphs_old.js b/xos/core/static/planetstack_graphs_old.js
deleted file mode 100644
index 52bca6f..0000000
--- a/xos/core/static/planetstack_graphs_old.js
+++ /dev/null
@@ -1,107 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-$(document).ready(function() {
-
-function renderChart(jsonData, yField, xField, legend) {
-    $('#graph').empty();
-    $('#chartsModal').modal('show');
-    $('.modal-body').scrollTop(0)
-    var margin = {top: 0, right: 100, bottom: 100, left: 175},
-    width = 520 - margin.left - margin.right,
-    height = 300 - margin.top - margin.bottom;
-
-    var parseDate = d3.time.format("%Y-%m-%m-%H-%M").parse;
-
-    var x = d3.time.scale()
-    .range([0, width]);
-
-    var y = d3.scale.linear()
-    .range([height, 0]);
-
-    var xAxis = d3.svg.axis()
-    .scale(x)
-    .ticks(d3.time.minutes, 15)
-    .orient("bottom");
-
-    var yAxis = d3.svg.axis()
-    .scale(y)
-    .ticks(4)
-    .orient("left");
-
-    var line = d3.svg.line()
-    .x(function(d) { return x(d.date); })
-    .y(function(d) { return y(d.value); });
-
-    var svg = d3.select("#graph").append("svg")
-    .attr("width", width + margin.left + margin.right)
-    .attr("height", height + margin.top + margin.bottom)
-    .append("g")
-    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
-
-    data = jsonData.rows;
-    $('#chartHeading').text(legend);
-    data.forEach(function(d) {
-            d.date = new Date(d[yField]*1000);
-            d.value = +d[xField];
-            });
-
-    x.domain(d3.extent(data, function(d) { return d.date; }));
-
-    var e = d3.extent(data, function(d) { return d.value;});
-    e = [e[0]-1,e[1]+1];
-
-    y.domain(e);
-
-    svg.append("g")
-    .attr("class", "x axis")
-    .attr("transform", "translate(0," + height + ")")
-    .attr("x", 5)
-    .call(xAxis);
-
-    svg.append("g")
-    .attr("class", "y axis")
-    .call(yAxis)
-    .append("text")
-    .attr("transform", "rotate(-90)")
-    .attr("y", 6)
-    .attr("dy", ".71em")
-    .style("text-anchor", "end")
-    .text(legend)
-    .attr("class", "legend");
-
-    svg.append("path")
-    .datum(data)
-    .attr("class", "line")
-    .attr("d", line);
-}
-
-$('.nodesLabel, .nodesValue').click(function() {
-        var jsonData = window.pageAnalyticsData;
-        renderChart(jsonData, "MinuteTime", "count_hostname", "Node Count");
-});
-$('.cpuLabel, .cpuValue').click(function() {
-        var jsonData = window.pageAnalyticsData;
-        renderChart(jsonData, "MinuteTime", "avg_cpu", "Average Cpu");
-});
-$('.bandwidthLabel, .bandwidthValue').click(function() {
-        var jsonData = window.pageBandData;
-        renderChart(jsonData, "MinuteTime", "sum_computed_bytes_sent_div_elapsed", "Bandwidth");
-});
-
-})
diff --git a/xos/core/static/primarycons_blue/License.txt b/xos/core/static/primarycons_blue/License.txt
deleted file mode 100644
index da57598..0000000
--- a/xos/core/static/primarycons_blue/License.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-Thank you for downloading these graphics from MouseRunner.com. 

-

-While I want you to enjoy these free graphics (free as in free of monetary charge, not entirely free usage), I ask that you please abide by the terms that they are licensed under.

-

--------------------------------------------------------------------------

-

-The graphics contained in these files are being released under a Creative Commons

-Attribution-NonCommercial-ShareAlike 3.0 Unported license.

-

-Furthermore;

-You may not claim the works as your own.

-You must provide a link back to www.MouseRunner.com when using on a website, blog, etc. 

-You may not redistribute these as a package as-is.

-You must seek approval for commercial purposes, and for applications.

-

-Visit the address below to learn more about the Creative Commons license.

-http://creativecommons.org/licenses/by-nc-sa/3.0/

-

--------------------------------------------------------------------------

-Questions? Contact:

-KenSaunders@MouseRunner.com

diff --git a/xos/core/static/primarycons_blue/folder_1.png b/xos/core/static/primarycons_blue/folder_1.png
deleted file mode 100644
index 2c7dc1f..0000000
--- a/xos/core/static/primarycons_blue/folder_1.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/primarycons_blue/gear_2.png b/xos/core/static/primarycons_blue/gear_2.png
deleted file mode 100644
index 4a9e9d0..0000000
--- a/xos/core/static/primarycons_blue/gear_2.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/primarycons_blue/internet.png b/xos/core/static/primarycons_blue/internet.png
deleted file mode 100644
index 89e0de4..0000000
--- a/xos/core/static/primarycons_blue/internet.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/primarycons_blue/network.png b/xos/core/static/primarycons_blue/network.png
deleted file mode 100644
index 37d2241..0000000
--- a/xos/core/static/primarycons_blue/network.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/primarycons_blue/plus.png b/xos/core/static/primarycons_blue/plus.png
deleted file mode 100644
index a00ab89..0000000
--- a/xos/core/static/primarycons_blue/plus.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/primarycons_blue/service_graph.png b/xos/core/static/primarycons_blue/service_graph.png
deleted file mode 100644
index e2e8c5b..0000000
--- a/xos/core/static/primarycons_blue/service_graph.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/right_arrow.png b/xos/core/static/right_arrow.png
deleted file mode 100644
index 416828e..0000000
--- a/xos/core/static/right_arrow.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/static/shell/opencloud_shell.css b/xos/core/static/shell/opencloud_shell.css
deleted file mode 100644
index 6115560..0000000
--- a/xos/core/static/shell/opencloud_shell.css
+++ /dev/null
@@ -1,103 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#terminal {
-  width: 960px;
-  margin:50px auto 50px auto;
-  border: 1px solid black;
-  height: 400px;
-  background: #002b36;
-  overflow: scroll;
-}
-
-#terminal div.terminal_line {
-  width: 940px;
-  margin-bottom: 5px;
-}
-
-#terminal input {
-  width: 875px;
-  margin: 1px 0 1px 10px;
-  border: none;
-  display: inline;
-  padding: 2px;
-  background: #002b36;
-  color: #839496;
-  font-size: 15px;
-  font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;
-  border-radius:0;
-}
-
-#terminal input:focus {
-  box-shadow:none;
-}
-
-#terminal p {
-  margin: 2px;
-  color: #839496;
-  font-size: 15px;
-  font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;
-}
-
-.terminal_help {
-  margin: 2px;
-  color: #839496;
-  font-size: 15px;
-  font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;
-  background: #002b36;
-  padding:0;
-  line-height:normal;
-}
-
-#terminal a {
-  color: #6495ED;
-}
-
-#terminal span.prompt {
-  color: #839496;
-  font-size: 16px;
-  margin-left: 2px;
-}
-
-/* an experiment with syntax hilighting */
-
-.terminal_string {
-    /*color:green; */
-    color:#859900;
-}
-
-.terminal_number {
-    /*color:darkorange;*/
-    color:#d33682;
-}
-
-.terminal_boolean {
-    /*color:blue;*/
-    color:#7777A0;
-}
-
-.terminal_null {
-    /*color:magenta;*/
-    color:#A000A0;
-}
-
-.terminal_key {
-    /*color:red;*/
-    color:#268bd2;
-}
-
diff --git a/xos/core/static/uploadTextarea.js b/xos/core/static/uploadTextarea.js
deleted file mode 100644
index 54e51f4..0000000
--- a/xos/core/static/uploadTextarea.js
+++ /dev/null
@@ -1,37 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-function uploadTextarea(event,textarea_id) {
-    var input = event.target;
-
-    var reader = new FileReader();
-    //reader.onloadstart = function() {
-    //	reader.abort();
-    //};
-
-    reader.onloadend = function() {
-        if (reader.error) {
-   	    alert(reader.error.message);
-        } else {
-            $("#" + textarea_id).val(this.result);
-	    //console.log(this.result);
-        }
-    };
-
-    reader.readAsText(input.files[0]);
-};
diff --git a/xos/core/static/xos.css b/xos/core/static/xos.css
deleted file mode 100644
index 77804ab..0000000
--- a/xos/core/static/xos.css
+++ /dev/null
@@ -1,6962 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-@charset "UTF-8";
-/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
-html {
-  font-family: sans-serif;
-  -ms-text-size-adjust: 100%;
-  -webkit-text-size-adjust: 100%; }
-
-body {
-  margin: 0; }
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-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-color: transparent; }
-
-a:active,
-a:hover {
-  outline: 0; }
-
-abbr[title] {
-  border-bottom: 1px dotted; }
-
-b,
-strong {
-  font-weight: bold; }
-
-dfn {
-  font-style: italic; }
-
-h1 {
-  font-size: 2em;
-  margin: 0.67em 0; }
-
-mark {
-  background: #ff0;
-  color: #000; }
-
-small {
-  font-size: 80%; }
-
-sub,
-sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline; }
-
-sup {
-  top: -0.5em; }
-
-sub {
-  bottom: -0.25em; }
-
-img {
-  border: 0; }
-
-svg:not(:root) {
-  overflow: hidden; }
-
-figure {
-  margin: 1em 40px; }
-
-hr {
-  box-sizing: content-box;
-  height: 0; }
-
-pre {
-  overflow: auto; }
-
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em; }
-
-button,
-input,
-optgroup,
-select,
-textarea {
-  color: inherit;
-  font: inherit;
-  margin: 0; }
-
-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 {
-  border: 0;
-  padding: 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-appearance: textfield;
-  box-sizing: content-box; }
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none; }
-
-fieldset {
-  border: 1px solid #c0c0c0;
-  margin: 0 2px;
-  padding: 0.35em 0.625em 0.75em; }
-
-legend {
-  border: 0;
-  padding: 0; }
-
-textarea {
-  overflow: auto; }
-
-optgroup {
-  font-weight: bold; }
-
-table {
-  border-collapse: collapse;
-  border-spacing: 0; }
-
-td,
-th {
-  padding: 0; }
-
-/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
-@media print {
-  *,
-  *:before,
-  *:after {
-    background: transparent !important;
-    color: #000 !important;
-    box-shadow: none !important;
-    text-shadow: none !important; }
-  a,
-  a:visited {
-    text-decoration: underline; }
-  a[href]:after {
-    content: " (" attr(href) ")"; }
-  abbr[title]:after {
-    content: " (" attr(title) ")"; }
-  a[href^="#"]:after,
-  a[href^="javascript:"]: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; }
-  .navbar {
-    display: none; }
-  .btn > .caret,
-  .dropup > .btn > .caret {
-    border-top-color: #000 !important; }
-  .label {
-    border: 1px solid #000; }
-  .table {
-    border-collapse: collapse !important; }
-    .table td,
-    .table th {
-      background-color: #fff !important; }
-  .table-bordered th,
-  .table-bordered td {
-    border: 1px solid #ddd !important; } }
-
-@font-face {
-  font-family: 'Glyphicons Halflings';
-  src: url("/static/suit/bootstrap/fonts/glyphicons-halflings-regular.eot");
-  src: url("/static/suit/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("/static/suit/bootstrap/fonts/glyphicons-halflings-regular.woff2") format("woff2"), url("/static/suit/bootstrap/fonts/glyphicons-halflings-regular.woff") format("woff"), url("/static/suit/bootstrap/fonts/glyphicons-halflings-regular.ttf") format("truetype"), url("/static/suit/bootstrap/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: "\002a"; }
-
-.glyphicon-plus:before {
-  content: "\002b"; }
-
-.glyphicon-euro:before,
-.glyphicon-eur: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"; }
-
-.glyphicon-cd:before {
-  content: "\e201"; }
-
-.glyphicon-save-file:before {
-  content: "\e202"; }
-
-.glyphicon-open-file:before {
-  content: "\e203"; }
-
-.glyphicon-level-up:before {
-  content: "\e204"; }
-
-.glyphicon-copy:before {
-  content: "\e205"; }
-
-.glyphicon-paste:before {
-  content: "\e206"; }
-
-.glyphicon-alert:before {
-  content: "\e209"; }
-
-.glyphicon-equalizer:before {
-  content: "\e210"; }
-
-.glyphicon-king:before {
-  content: "\e211"; }
-
-.glyphicon-queen:before {
-  content: "\e212"; }
-
-.glyphicon-pawn:before {
-  content: "\e213"; }
-
-.glyphicon-bishop:before {
-  content: "\e214"; }
-
-.glyphicon-knight:before {
-  content: "\e215"; }
-
-.glyphicon-baby-formula:before {
-  content: "\e216"; }
-
-.glyphicon-tent:before {
-  content: "\26fa"; }
-
-.glyphicon-blackboard:before {
-  content: "\e218"; }
-
-.glyphicon-bed:before {
-  content: "\e219"; }
-
-.glyphicon-apple:before {
-  content: "\f8ff"; }
-
-.glyphicon-erase:before {
-  content: "\e221"; }
-
-.glyphicon-hourglass:before {
-  content: "\231b"; }
-
-.glyphicon-lamp:before {
-  content: "\e223"; }
-
-.glyphicon-duplicate:before {
-  content: "\e224"; }
-
-.glyphicon-piggy-bank:before {
-  content: "\e225"; }
-
-.glyphicon-scissors:before {
-  content: "\e226"; }
-
-.glyphicon-bitcoin:before {
-  content: "\e227"; }
-
-.glyphicon-btc:before {
-  content: "\e227"; }
-
-.glyphicon-xbt:before {
-  content: "\e227"; }
-
-.glyphicon-yen:before {
-  content: "\00a5"; }
-
-.glyphicon-jpy:before {
-  content: "\00a5"; }
-
-.glyphicon-ruble:before {
-  content: "\20bd"; }
-
-.glyphicon-rub:before {
-  content: "\20bd"; }
-
-.glyphicon-scale:before {
-  content: "\e230"; }
-
-.glyphicon-ice-lolly:before {
-  content: "\e231"; }
-
-.glyphicon-ice-lolly-tasted:before {
-  content: "\e232"; }
-
-.glyphicon-education:before {
-  content: "\e233"; }
-
-.glyphicon-option-horizontal:before {
-  content: "\e234"; }
-
-.glyphicon-option-vertical:before {
-  content: "\e235"; }
-
-.glyphicon-menu-hamburger:before {
-  content: "\e236"; }
-
-.glyphicon-modal-window:before {
-  content: "\e237"; }
-
-.glyphicon-oil:before {
-  content: "\e238"; }
-
-.glyphicon-grain:before {
-  content: "\e239"; }
-
-.glyphicon-sunglasses:before {
-  content: "\e240"; }
-
-.glyphicon-text-size:before {
-  content: "\e241"; }
-
-.glyphicon-text-color:before {
-  content: "\e242"; }
-
-.glyphicon-text-background:before {
-  content: "\e243"; }
-
-.glyphicon-object-align-top:before {
-  content: "\e244"; }
-
-.glyphicon-object-align-bottom:before {
-  content: "\e245"; }
-
-.glyphicon-object-align-horizontal:before {
-  content: "\e246"; }
-
-.glyphicon-object-align-left:before {
-  content: "\e247"; }
-
-.glyphicon-object-align-vertical:before {
-  content: "\e248"; }
-
-.glyphicon-object-align-right:before {
-  content: "\e249"; }
-
-.glyphicon-triangle-right:before {
-  content: "\e250"; }
-
-.glyphicon-triangle-left:before {
-  content: "\e251"; }
-
-.glyphicon-triangle-bottom:before {
-  content: "\e252"; }
-
-.glyphicon-triangle-top:before {
-  content: "\e253"; }
-
-.glyphicon-console:before {
-  content: "\e254"; }
-
-.glyphicon-superscript:before {
-  content: "\e255"; }
-
-.glyphicon-subscript:before {
-  content: "\e256"; }
-
-.glyphicon-menu-left:before {
-  content: "\e257"; }
-
-.glyphicon-menu-right:before {
-  content: "\e258"; }
-
-.glyphicon-menu-down:before {
-  content: "\e259"; }
-
-.glyphicon-menu-up:before {
-  content: "\e260"; }
-
-* {
-  -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: 10px;
-  -webkit-tap-highlight-color: transparent; }
-
-body {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 14px;
-  line-height: 1.42857;
-  color: #333333;
-  background-color: #fff; }
-
-input,
-button,
-select,
-textarea {
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit; }
-
-a {
-  color: #337ab7;
-  text-decoration: none; }
-  a:hover, a:focus {
-    color: #23527c;
-    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 {
-  display: block;
-  max-width: 100%;
-  height: auto; }
-
-.img-rounded {
-  border-radius: 6px; }
-
-.img-thumbnail {
-  padding: 4px;
-  line-height: 1.42857;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  -webkit-transition: all 0.2s ease-in-out;
-  -o-transition: all 0.2s ease-in-out;
-  transition: all 0.2s ease-in-out;
-  display: inline-block;
-  max-width: 100%;
-  height: auto; }
-
-.img-circle {
-  border-radius: 50%; }
-
-hr {
-  margin-top: 20px;
-  margin-bottom: 20px;
-  border: 0;
-  border-top: 1px solid #eeeeee; }
-
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  margin: -1px;
-  padding: 0;
-  overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0; }
-
-.sr-only-focusable:active, .sr-only-focusable:focus {
-  position: static;
-  width: auto;
-  height: auto;
-  margin: 0;
-  overflow: visible;
-  clip: auto; }
-
-[role="button"] {
-  cursor: pointer; }
-
-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,
-  h1 .small, h2 small,
-  h2 .small, h3 small,
-  h3 .small, h4 small,
-  h4 .small, h5 small,
-  h5 .small, h6 small,
-  h6 .small,
-  .h1 small,
-  .h1 .small, .h2 small,
-  .h2 .small, .h3 small,
-  .h3 .small, .h4 small,
-  .h4 .small, .h5 small,
-  .h5 .small, .h6 small,
-  .h6 .small {
-    font-weight: normal;
-    line-height: 1;
-    color: #777777; }
-
-h1, .h1,
-h2, .h2,
-h3, .h3 {
-  margin-top: 20px;
-  margin-bottom: 10px; }
-  h1 small,
-  h1 .small, .h1 small,
-  .h1 .small,
-  h2 small,
-  h2 .small, .h2 small,
-  .h2 .small,
-  h3 small,
-  h3 .small, .h3 small,
-  .h3 .small {
-    font-size: 65%; }
-
-h4, .h4,
-h5, .h5,
-h6, .h6 {
-  margin-top: 10px;
-  margin-bottom: 10px; }
-  h4 small,
-  h4 .small, .h4 small,
-  .h4 .small,
-  h5 small,
-  h5 .small, .h5 small,
-  .h5 .small,
-  h6 small,
-  h6 .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: 300;
-  line-height: 1.4; }
-  @media (min-width: 768px) {
-    .lead {
-      font-size: 21px; } }
-
-small,
-.small {
-  font-size: 85%; }
-
-mark,
-.mark {
-  background-color: #fcf8e3;
-  padding: .2em; }
-
-.text-left {
-  text-align: left; }
-
-.text-right {
-  text-align: right; }
-
-.text-center {
-  text-align: center; }
-
-.text-justify {
-  text-align: justify; }
-
-.text-nowrap {
-  white-space: nowrap; }
-
-.text-lowercase {
-  text-transform: lowercase; }
-
-.text-uppercase, .initialism {
-  text-transform: uppercase; }
-
-.text-capitalize {
-  text-transform: capitalize; }
-
-.text-muted {
-  color: #777777; }
-
-.text-primary {
-  color: #337ab7; }
-
-a.text-primary:hover,
-a.text-primary:focus {
-  color: #286090; }
-
-.text-success {
-  color: #3c763d; }
-
-a.text-success:hover,
-a.text-success:focus {
-  color: #2b542c; }
-
-.text-info {
-  color: #31708f; }
-
-a.text-info:hover,
-a.text-info:focus {
-  color: #245269; }
-
-.text-warning {
-  color: #8a6d3b; }
-
-a.text-warning:hover,
-a.text-warning:focus {
-  color: #66512c; }
-
-.text-danger {
-  color: #a94442; }
-
-a.text-danger:hover,
-a.text-danger:focus {
-  color: #843534; }
-
-.bg-primary {
-  color: #fff; }
-
-.bg-primary {
-  background-color: #337ab7; }
-
-a.bg-primary:hover,
-a.bg-primary:focus {
-  background-color: #286090; }
-
-.bg-success {
-  background-color: #dff0d8; }
-
-a.bg-success:hover,
-a.bg-success:focus {
-  background-color: #c1e2b3; }
-
-.bg-info {
-  background-color: #d9edf7; }
-
-a.bg-info:hover,
-a.bg-info:focus {
-  background-color: #afd9ee; }
-
-.bg-warning {
-  background-color: #fcf8e3; }
-
-a.bg-warning:hover,
-a.bg-warning:focus {
-  background-color: #f7ecb5; }
-
-.bg-danger {
-  background-color: #f2dede; }
-
-a.bg-danger:hover,
-a.bg-danger:focus {
-  background-color: #e4b9b9; }
-
-.page-header {
-  padding-bottom: 9px;
-  margin: 40px 0 20px;
-  border-bottom: 1px solid #eeeeee; }
-
-ul,
-ol {
-  margin-top: 0;
-  margin-bottom: 10px; }
-  ul ul,
-  ul ol,
-  ol ul,
-  ol ol {
-    margin-bottom: 0; }
-
-.list-unstyled {
-  padding-left: 0;
-  list-style: none; }
-
-.list-inline {
-  padding-left: 0;
-  list-style: none;
-  margin-left: -5px; }
-  .list-inline > li {
-    display: inline-block;
-    padding-left: 5px;
-    padding-right: 5px; }
-
-dl {
-  margin-top: 0;
-  margin-bottom: 20px; }
-
-dt,
-dd {
-  line-height: 1.42857; }
-
-dt {
-  font-weight: bold; }
-
-dd {
-  margin-left: 0; }
-
-.dl-horizontal dd:before, .dl-horizontal dd:after {
-  content: " ";
-  display: table; }
-
-.dl-horizontal dd:after {
-  clear: both; }
-
-@media (min-width: 768px) {
-  .dl-horizontal dt {
-    float: left;
-    width: 160px;
-    clear: left;
-    text-align: right;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap; }
-  .dl-horizontal dd {
-    margin-left: 180px; } }
-
-abbr[title],
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted #777777; }
-
-.initialism {
-  font-size: 90%; }
-
-blockquote {
-  padding: 10px 20px;
-  margin: 0 0 20px;
-  font-size: 17.5px;
-  border-left: 5px solid #eeeeee; }
-  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.42857;
-    color: #777777; }
-    blockquote footer:before,
-    blockquote small:before,
-    blockquote .small:before {
-      content: '\2014 \00A0'; }
-
-.blockquote-reverse,
-blockquote.pull-right {
-  padding-right: 15px;
-  padding-left: 0;
-  border-right: 5px solid #eeeeee;
-  border-left: 0;
-  text-align: right; }
-  .blockquote-reverse footer:before,
-  .blockquote-reverse small:before,
-  .blockquote-reverse .small:before,
-  blockquote.pull-right footer:before,
-  blockquote.pull-right small:before,
-  blockquote.pull-right .small:before {
-    content: ''; }
-  .blockquote-reverse footer:after,
-  .blockquote-reverse small:after,
-  .blockquote-reverse .small:after,
-  blockquote.pull-right footer:after,
-  blockquote.pull-right small:after,
-  blockquote.pull-right .small:after {
-    content: '\00A0 \2014'; }
-
-address {
-  margin-bottom: 20px;
-  font-style: normal;
-  line-height: 1.42857; }
-
-code,
-kbd,
-pre,
-samp {
-  font-family: Menlo, Monaco, Consolas, "Courier New", monospace; }
-
-code {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #c7254e;
-  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, 0.25); }
-  kbd kbd {
-    padding: 0;
-    font-size: 100%;
-    font-weight: bold;
-    box-shadow: none; }
-
-pre {
-  display: block;
-  padding: 9.5px;
-  margin: 0 0 10px;
-  font-size: 13px;
-  line-height: 1.42857;
-  word-break: break-all;
-  word-wrap: break-word;
-  color: #333333;
-  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 {
-  margin-right: auto;
-  margin-left: auto;
-  padding-left: 15px;
-  padding-right: 15px; }
-  .container:before, .container:after {
-    content: " ";
-    display: table; }
-  .container:after {
-    clear: both; }
-  @media (min-width: 768px) {
-    .container {
-      width: 750px; } }
-  @media (min-width: 992px) {
-    .container {
-      width: 970px; } }
-  @media (min-width: 1200px) {
-    .container {
-      width: 1170px; } }
-
-.container-fluid {
-  margin-right: auto;
-  margin-left: auto;
-  padding-left: 15px;
-  padding-right: 15px; }
-  .container-fluid:before, .container-fluid:after {
-    content: " ";
-    display: table; }
-  .container-fluid:after {
-    clear: both; }
-
-.row {
-  margin-left: -15px;
-  margin-right: -15px; }
-  .row:before, .row:after {
-    content: " ";
-    display: table; }
-  .row:after {
-    clear: both; }
-
-.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-left: 15px;
-  padding-right: 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-1 {
-  width: 8.33333%; }
-
-.col-xs-2 {
-  width: 16.66667%; }
-
-.col-xs-3 {
-  width: 25%; }
-
-.col-xs-4 {
-  width: 33.33333%; }
-
-.col-xs-5 {
-  width: 41.66667%; }
-
-.col-xs-6 {
-  width: 50%; }
-
-.col-xs-7 {
-  width: 58.33333%; }
-
-.col-xs-8 {
-  width: 66.66667%; }
-
-.col-xs-9 {
-  width: 75%; }
-
-.col-xs-10 {
-  width: 83.33333%; }
-
-.col-xs-11 {
-  width: 91.66667%; }
-
-.col-xs-12 {
-  width: 100%; }
-
-.col-xs-pull-0 {
-  right: auto; }
-
-.col-xs-pull-1 {
-  right: 8.33333%; }
-
-.col-xs-pull-2 {
-  right: 16.66667%; }
-
-.col-xs-pull-3 {
-  right: 25%; }
-
-.col-xs-pull-4 {
-  right: 33.33333%; }
-
-.col-xs-pull-5 {
-  right: 41.66667%; }
-
-.col-xs-pull-6 {
-  right: 50%; }
-
-.col-xs-pull-7 {
-  right: 58.33333%; }
-
-.col-xs-pull-8 {
-  right: 66.66667%; }
-
-.col-xs-pull-9 {
-  right: 75%; }
-
-.col-xs-pull-10 {
-  right: 83.33333%; }
-
-.col-xs-pull-11 {
-  right: 91.66667%; }
-
-.col-xs-pull-12 {
-  right: 100%; }
-
-.col-xs-push-0 {
-  left: auto; }
-
-.col-xs-push-1 {
-  left: 8.33333%; }
-
-.col-xs-push-2 {
-  left: 16.66667%; }
-
-.col-xs-push-3 {
-  left: 25%; }
-
-.col-xs-push-4 {
-  left: 33.33333%; }
-
-.col-xs-push-5 {
-  left: 41.66667%; }
-
-.col-xs-push-6 {
-  left: 50%; }
-
-.col-xs-push-7 {
-  left: 58.33333%; }
-
-.col-xs-push-8 {
-  left: 66.66667%; }
-
-.col-xs-push-9 {
-  left: 75%; }
-
-.col-xs-push-10 {
-  left: 83.33333%; }
-
-.col-xs-push-11 {
-  left: 91.66667%; }
-
-.col-xs-push-12 {
-  left: 100%; }
-
-.col-xs-offset-0 {
-  margin-left: 0%; }
-
-.col-xs-offset-1 {
-  margin-left: 8.33333%; }
-
-.col-xs-offset-2 {
-  margin-left: 16.66667%; }
-
-.col-xs-offset-3 {
-  margin-left: 25%; }
-
-.col-xs-offset-4 {
-  margin-left: 33.33333%; }
-
-.col-xs-offset-5 {
-  margin-left: 41.66667%; }
-
-.col-xs-offset-6 {
-  margin-left: 50%; }
-
-.col-xs-offset-7 {
-  margin-left: 58.33333%; }
-
-.col-xs-offset-8 {
-  margin-left: 66.66667%; }
-
-.col-xs-offset-9 {
-  margin-left: 75%; }
-
-.col-xs-offset-10 {
-  margin-left: 83.33333%; }
-
-.col-xs-offset-11 {
-  margin-left: 91.66667%; }
-
-.col-xs-offset-12 {
-  margin-left: 100%; }
-
-@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-1 {
-    width: 8.33333%; }
-  .col-sm-2 {
-    width: 16.66667%; }
-  .col-sm-3 {
-    width: 25%; }
-  .col-sm-4 {
-    width: 33.33333%; }
-  .col-sm-5 {
-    width: 41.66667%; }
-  .col-sm-6 {
-    width: 50%; }
-  .col-sm-7 {
-    width: 58.33333%; }
-  .col-sm-8 {
-    width: 66.66667%; }
-  .col-sm-9 {
-    width: 75%; }
-  .col-sm-10 {
-    width: 83.33333%; }
-  .col-sm-11 {
-    width: 91.66667%; }
-  .col-sm-12 {
-    width: 100%; }
-  .col-sm-pull-0 {
-    right: auto; }
-  .col-sm-pull-1 {
-    right: 8.33333%; }
-  .col-sm-pull-2 {
-    right: 16.66667%; }
-  .col-sm-pull-3 {
-    right: 25%; }
-  .col-sm-pull-4 {
-    right: 33.33333%; }
-  .col-sm-pull-5 {
-    right: 41.66667%; }
-  .col-sm-pull-6 {
-    right: 50%; }
-  .col-sm-pull-7 {
-    right: 58.33333%; }
-  .col-sm-pull-8 {
-    right: 66.66667%; }
-  .col-sm-pull-9 {
-    right: 75%; }
-  .col-sm-pull-10 {
-    right: 83.33333%; }
-  .col-sm-pull-11 {
-    right: 91.66667%; }
-  .col-sm-pull-12 {
-    right: 100%; }
-  .col-sm-push-0 {
-    left: auto; }
-  .col-sm-push-1 {
-    left: 8.33333%; }
-  .col-sm-push-2 {
-    left: 16.66667%; }
-  .col-sm-push-3 {
-    left: 25%; }
-  .col-sm-push-4 {
-    left: 33.33333%; }
-  .col-sm-push-5 {
-    left: 41.66667%; }
-  .col-sm-push-6 {
-    left: 50%; }
-  .col-sm-push-7 {
-    left: 58.33333%; }
-  .col-sm-push-8 {
-    left: 66.66667%; }
-  .col-sm-push-9 {
-    left: 75%; }
-  .col-sm-push-10 {
-    left: 83.33333%; }
-  .col-sm-push-11 {
-    left: 91.66667%; }
-  .col-sm-push-12 {
-    left: 100%; }
-  .col-sm-offset-0 {
-    margin-left: 0%; }
-  .col-sm-offset-1 {
-    margin-left: 8.33333%; }
-  .col-sm-offset-2 {
-    margin-left: 16.66667%; }
-  .col-sm-offset-3 {
-    margin-left: 25%; }
-  .col-sm-offset-4 {
-    margin-left: 33.33333%; }
-  .col-sm-offset-5 {
-    margin-left: 41.66667%; }
-  .col-sm-offset-6 {
-    margin-left: 50%; }
-  .col-sm-offset-7 {
-    margin-left: 58.33333%; }
-  .col-sm-offset-8 {
-    margin-left: 66.66667%; }
-  .col-sm-offset-9 {
-    margin-left: 75%; }
-  .col-sm-offset-10 {
-    margin-left: 83.33333%; }
-  .col-sm-offset-11 {
-    margin-left: 91.66667%; }
-  .col-sm-offset-12 {
-    margin-left: 100%; } }
-
-@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-1 {
-    width: 8.33333%; }
-  .col-md-2 {
-    width: 16.66667%; }
-  .col-md-3 {
-    width: 25%; }
-  .col-md-4 {
-    width: 33.33333%; }
-  .col-md-5 {
-    width: 41.66667%; }
-  .col-md-6 {
-    width: 50%; }
-  .col-md-7 {
-    width: 58.33333%; }
-  .col-md-8 {
-    width: 66.66667%; }
-  .col-md-9 {
-    width: 75%; }
-  .col-md-10 {
-    width: 83.33333%; }
-  .col-md-11 {
-    width: 91.66667%; }
-  .col-md-12 {
-    width: 100%; }
-  .col-md-pull-0 {
-    right: auto; }
-  .col-md-pull-1 {
-    right: 8.33333%; }
-  .col-md-pull-2 {
-    right: 16.66667%; }
-  .col-md-pull-3 {
-    right: 25%; }
-  .col-md-pull-4 {
-    right: 33.33333%; }
-  .col-md-pull-5 {
-    right: 41.66667%; }
-  .col-md-pull-6 {
-    right: 50%; }
-  .col-md-pull-7 {
-    right: 58.33333%; }
-  .col-md-pull-8 {
-    right: 66.66667%; }
-  .col-md-pull-9 {
-    right: 75%; }
-  .col-md-pull-10 {
-    right: 83.33333%; }
-  .col-md-pull-11 {
-    right: 91.66667%; }
-  .col-md-pull-12 {
-    right: 100%; }
-  .col-md-push-0 {
-    left: auto; }
-  .col-md-push-1 {
-    left: 8.33333%; }
-  .col-md-push-2 {
-    left: 16.66667%; }
-  .col-md-push-3 {
-    left: 25%; }
-  .col-md-push-4 {
-    left: 33.33333%; }
-  .col-md-push-5 {
-    left: 41.66667%; }
-  .col-md-push-6 {
-    left: 50%; }
-  .col-md-push-7 {
-    left: 58.33333%; }
-  .col-md-push-8 {
-    left: 66.66667%; }
-  .col-md-push-9 {
-    left: 75%; }
-  .col-md-push-10 {
-    left: 83.33333%; }
-  .col-md-push-11 {
-    left: 91.66667%; }
-  .col-md-push-12 {
-    left: 100%; }
-  .col-md-offset-0 {
-    margin-left: 0%; }
-  .col-md-offset-1 {
-    margin-left: 8.33333%; }
-  .col-md-offset-2 {
-    margin-left: 16.66667%; }
-  .col-md-offset-3 {
-    margin-left: 25%; }
-  .col-md-offset-4 {
-    margin-left: 33.33333%; }
-  .col-md-offset-5 {
-    margin-left: 41.66667%; }
-  .col-md-offset-6 {
-    margin-left: 50%; }
-  .col-md-offset-7 {
-    margin-left: 58.33333%; }
-  .col-md-offset-8 {
-    margin-left: 66.66667%; }
-  .col-md-offset-9 {
-    margin-left: 75%; }
-  .col-md-offset-10 {
-    margin-left: 83.33333%; }
-  .col-md-offset-11 {
-    margin-left: 91.66667%; }
-  .col-md-offset-12 {
-    margin-left: 100%; } }
-
-@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-1 {
-    width: 8.33333%; }
-  .col-lg-2 {
-    width: 16.66667%; }
-  .col-lg-3 {
-    width: 25%; }
-  .col-lg-4 {
-    width: 33.33333%; }
-  .col-lg-5 {
-    width: 41.66667%; }
-  .col-lg-6 {
-    width: 50%; }
-  .col-lg-7 {
-    width: 58.33333%; }
-  .col-lg-8 {
-    width: 66.66667%; }
-  .col-lg-9 {
-    width: 75%; }
-  .col-lg-10 {
-    width: 83.33333%; }
-  .col-lg-11 {
-    width: 91.66667%; }
-  .col-lg-12 {
-    width: 100%; }
-  .col-lg-pull-0 {
-    right: auto; }
-  .col-lg-pull-1 {
-    right: 8.33333%; }
-  .col-lg-pull-2 {
-    right: 16.66667%; }
-  .col-lg-pull-3 {
-    right: 25%; }
-  .col-lg-pull-4 {
-    right: 33.33333%; }
-  .col-lg-pull-5 {
-    right: 41.66667%; }
-  .col-lg-pull-6 {
-    right: 50%; }
-  .col-lg-pull-7 {
-    right: 58.33333%; }
-  .col-lg-pull-8 {
-    right: 66.66667%; }
-  .col-lg-pull-9 {
-    right: 75%; }
-  .col-lg-pull-10 {
-    right: 83.33333%; }
-  .col-lg-pull-11 {
-    right: 91.66667%; }
-  .col-lg-pull-12 {
-    right: 100%; }
-  .col-lg-push-0 {
-    left: auto; }
-  .col-lg-push-1 {
-    left: 8.33333%; }
-  .col-lg-push-2 {
-    left: 16.66667%; }
-  .col-lg-push-3 {
-    left: 25%; }
-  .col-lg-push-4 {
-    left: 33.33333%; }
-  .col-lg-push-5 {
-    left: 41.66667%; }
-  .col-lg-push-6 {
-    left: 50%; }
-  .col-lg-push-7 {
-    left: 58.33333%; }
-  .col-lg-push-8 {
-    left: 66.66667%; }
-  .col-lg-push-9 {
-    left: 75%; }
-  .col-lg-push-10 {
-    left: 83.33333%; }
-  .col-lg-push-11 {
-    left: 91.66667%; }
-  .col-lg-push-12 {
-    left: 100%; }
-  .col-lg-offset-0 {
-    margin-left: 0%; }
-  .col-lg-offset-1 {
-    margin-left: 8.33333%; }
-  .col-lg-offset-2 {
-    margin-left: 16.66667%; }
-  .col-lg-offset-3 {
-    margin-left: 25%; }
-  .col-lg-offset-4 {
-    margin-left: 33.33333%; }
-  .col-lg-offset-5 {
-    margin-left: 41.66667%; }
-  .col-lg-offset-6 {
-    margin-left: 50%; }
-  .col-lg-offset-7 {
-    margin-left: 58.33333%; }
-  .col-lg-offset-8 {
-    margin-left: 66.66667%; }
-  .col-lg-offset-9 {
-    margin-left: 75%; }
-  .col-lg-offset-10 {
-    margin-left: 83.33333%; }
-  .col-lg-offset-11 {
-    margin-left: 91.66667%; }
-  .col-lg-offset-12 {
-    margin-left: 100%; } }
-
-table {
-  background-color: transparent; }
-
-caption {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  color: #777777;
-  text-align: left; }
-
-th {
-  text-align: left; }
-
-.table {
-  width: 100%;
-  max-width: 100%;
-  margin-bottom: 20px; }
-  .table > thead > tr > th,
-  .table > thead > tr > td,
-  .table > tbody > tr > th,
-  .table > tbody > tr > td,
-  .table > tfoot > tr > th,
-  .table > tfoot > tr > td {
-    padding: 8px;
-    line-height: 1.42857;
-    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 > caption + thead > tr:first-child > td,
-  .table > colgroup + thead > tr:first-child > th,
-  .table > colgroup + thead > tr:first-child > td,
-  .table > thead:first-child > tr:first-child > th,
-  .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 > thead > tr > td,
-.table-condensed > tbody > tr > th,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > th,
-.table-condensed > tfoot > tr > td {
-  padding: 5px; }
-
-.table-bordered {
-  border: 1px solid #ddd; }
-  .table-bordered > thead > tr > th,
-  .table-bordered > thead > tr > td,
-  .table-bordered > tbody > tr > th,
-  .table-bordered > tbody > tr > td,
-  .table-bordered > tfoot > tr > th,
-  .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-of-type(odd) {
-  background-color: #f9f9f9; }
-
-.table-hover > tbody > tr:hover {
-  background-color: #f5f5f5; }
-
-table col[class*="col-"] {
-  position: static;
-  float: none;
-  display: table-column; }
-
-table td[class*="col-"],
-table th[class*="col-"] {
-  position: static;
-  float: none;
-  display: table-cell; }
-
-.table > thead > tr > td.active,
-.table > thead > tr > th.active,
-.table > thead > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr > td.active,
-.table > tbody > tr > th.active,
-.table > tbody > tr.active > td,
-.table > tbody > tr.active > th,
-.table > tfoot > tr > td.active,
-.table > tfoot > tr > th.active,
-.table > tfoot > tr.active > td,
-.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:hover > .active,
-.table-hover > tbody > tr.active:hover > th {
-  background-color: #e8e8e8; }
-
-.table > thead > tr > td.success,
-.table > thead > tr > th.success,
-.table > thead > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr > td.success,
-.table > tbody > tr > th.success,
-.table > tbody > tr.success > td,
-.table > tbody > tr.success > th,
-.table > tfoot > tr > td.success,
-.table > tfoot > tr > th.success,
-.table > tfoot > tr.success > td,
-.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:hover > .success,
-.table-hover > tbody > tr.success:hover > th {
-  background-color: #d0e9c6; }
-
-.table > thead > tr > td.info,
-.table > thead > tr > th.info,
-.table > thead > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr > td.info,
-.table > tbody > tr > th.info,
-.table > tbody > tr.info > td,
-.table > tbody > tr.info > th,
-.table > tfoot > tr > td.info,
-.table > tfoot > tr > th.info,
-.table > tfoot > tr.info > td,
-.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:hover > .info,
-.table-hover > tbody > tr.info:hover > th {
-  background-color: #c4e3f3; }
-
-.table > thead > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr > td.warning,
-.table > tbody > tr > th.warning,
-.table > tbody > tr.warning > td,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr > td.warning,
-.table > tfoot > tr > th.warning,
-.table > tfoot > tr.warning > td,
-.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:hover > .warning,
-.table-hover > tbody > tr.warning:hover > th {
-  background-color: #faf2cc; }
-
-.table > thead > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr > td.danger,
-.table > tbody > tr > th.danger,
-.table > tbody > tr.danger > td,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr > td.danger,
-.table > tfoot > tr > th.danger,
-.table > tfoot > tr.danger > td,
-.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:hover > .danger,
-.table-hover > tbody > tr.danger:hover > th {
-  background-color: #ebcccc; }
-
-.table-responsive {
-  overflow-x: auto;
-  min-height: 0.01%; }
-  @media screen and (max-width: 767px) {
-    .table-responsive {
-      width: 100%;
-      margin-bottom: 15px;
-      overflow-y: hidden;
-      -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 > thead > tr > td,
-        .table-responsive > .table > tbody > tr > th,
-        .table-responsive > .table > tbody > tr > td,
-        .table-responsive > .table > tfoot > tr > th,
-        .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 > thead > tr > td:first-child,
-        .table-responsive > .table-bordered > tbody > tr > th:first-child,
-        .table-responsive > .table-bordered > tbody > tr > td:first-child,
-        .table-responsive > .table-bordered > tfoot > tr > th: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 > thead > tr > td:last-child,
-        .table-responsive > .table-bordered > tbody > tr > th:last-child,
-        .table-responsive > .table-bordered > tbody > tr > td:last-child,
-        .table-responsive > .table-bordered > tfoot > tr > th: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 > tbody > tr:last-child > td,
-        .table-responsive > .table-bordered > tfoot > tr:last-child > th,
-        .table-responsive > .table-bordered > tfoot > tr:last-child > td {
-          border-bottom: 0; } }
-
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-  min-width: 0; }
-
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 20px;
-  font-size: 21px;
-  line-height: inherit;
-  color: #333333;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5; }
-
-label {
-  display: inline-block;
-  max-width: 100%;
-  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;
-  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.42857;
-  color: #555555; }
-
-.form-control {
-  display: block;
-  width: 100%;
-  height: 34px;
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.42857;
-  color: #555555;
-  background-color: #fff;
-  background-image: none;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
-  -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
-  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }
-  .form-control:focus {
-    border-color: #66afe9;
-    outline: 0;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.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::-ms-expand {
-    border: 0;
-    background-color: transparent; }
-  .form-control[disabled], .form-control[readonly],
-  fieldset[disabled] .form-control {
-    background-color: #eeeeee;
-    opacity: 1; }
-  .form-control[disabled],
-  fieldset[disabled] .form-control {
-    cursor: not-allowed; }
-
-textarea.form-control {
-  height: auto; }
-
-input[type="search"] {
-  -webkit-appearance: none; }
-
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
-  input[type="date"].form-control,
-  input[type="time"].form-control,
-  input[type="datetime-local"].form-control,
-  input[type="month"].form-control {
-    line-height: 34px; }
-  input[type="date"].input-sm, .input-group-sm > input[type="date"].form-control,
-  .input-group-sm > input[type="date"].input-group-addon,
-  .input-group-sm > .input-group-btn > input[type="date"].btn,
-  .input-group-sm input[type="date"],
-  input[type="time"].input-sm,
-  .input-group-sm > input[type="time"].form-control,
-  .input-group-sm > input[type="time"].input-group-addon,
-  .input-group-sm > .input-group-btn > input[type="time"].btn,
-  .input-group-sm
-  input[type="time"],
-  input[type="datetime-local"].input-sm,
-  .input-group-sm > input[type="datetime-local"].form-control,
-  .input-group-sm > input[type="datetime-local"].input-group-addon,
-  .input-group-sm > .input-group-btn > input[type="datetime-local"].btn,
-  .input-group-sm
-  input[type="datetime-local"],
-  input[type="month"].input-sm,
-  .input-group-sm > input[type="month"].form-control,
-  .input-group-sm > input[type="month"].input-group-addon,
-  .input-group-sm > .input-group-btn > input[type="month"].btn,
-  .input-group-sm
-  input[type="month"] {
-    line-height: 30px; }
-  input[type="date"].input-lg, .input-group-lg > input[type="date"].form-control,
-  .input-group-lg > input[type="date"].input-group-addon,
-  .input-group-lg > .input-group-btn > input[type="date"].btn,
-  .input-group-lg input[type="date"],
-  input[type="time"].input-lg,
-  .input-group-lg > input[type="time"].form-control,
-  .input-group-lg > input[type="time"].input-group-addon,
-  .input-group-lg > .input-group-btn > input[type="time"].btn,
-  .input-group-lg
-  input[type="time"],
-  input[type="datetime-local"].input-lg,
-  .input-group-lg > input[type="datetime-local"].form-control,
-  .input-group-lg > input[type="datetime-local"].input-group-addon,
-  .input-group-lg > .input-group-btn > input[type="datetime-local"].btn,
-  .input-group-lg
-  input[type="datetime-local"],
-  input[type="month"].input-lg,
-  .input-group-lg > input[type="month"].form-control,
-  .input-group-lg > input[type="month"].input-group-addon,
-  .input-group-lg > .input-group-btn > input[type="month"].btn,
-  .input-group-lg
-  input[type="month"] {
-    line-height: 46px; } }
-
-.form-group {
-  margin-bottom: 15px; }
-
-.radio,
-.checkbox {
-  position: relative;
-  display: block;
-  margin-top: 10px;
-  margin-bottom: 10px; }
-  .radio label,
-  .checkbox label {
-    min-height: 20px;
-    padding-left: 20px;
-    margin-bottom: 0;
-    font-weight: normal;
-    cursor: pointer; }
-
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
-  position: absolute;
-  margin-left: -20px;
-  margin-top: 4px \9; }
-
-.radio + .radio,
-.checkbox + .checkbox {
-  margin-top: -5px; }
-
-.radio-inline,
-.checkbox-inline {
-  position: relative;
-  display: inline-block;
-  padding-left: 20px;
-  margin-bottom: 0;
-  vertical-align: middle;
-  font-weight: normal;
-  cursor: pointer; }
-
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
-  margin-top: 0;
-  margin-left: 10px; }
-
-input[type="radio"][disabled], input[type="radio"].disabled,
-fieldset[disabled] input[type="radio"],
-input[type="checkbox"][disabled],
-input[type="checkbox"].disabled,
-fieldset[disabled]
-input[type="checkbox"] {
-  cursor: not-allowed; }
-
-.radio-inline.disabled,
-fieldset[disabled] .radio-inline,
-.checkbox-inline.disabled,
-fieldset[disabled]
-.checkbox-inline {
-  cursor: not-allowed; }
-
-.radio.disabled label,
-fieldset[disabled] .radio label,
-.checkbox.disabled label,
-fieldset[disabled]
-.checkbox label {
-  cursor: not-allowed; }
-
-.form-control-static {
-  padding-top: 7px;
-  padding-bottom: 7px;
-  margin-bottom: 0;
-  min-height: 34px; }
-  .form-control-static.input-lg, .input-group-lg > .form-control-static.form-control,
-  .input-group-lg > .form-control-static.input-group-addon,
-  .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control,
-  .input-group-sm > .form-control-static.input-group-addon,
-  .input-group-sm > .input-group-btn > .form-control-static.btn {
-    padding-left: 0;
-    padding-right: 0; }
-
-.input-sm, .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-sm, .input-group-sm > select.form-control,
-.input-group-sm > select.input-group-addon,
-.input-group-sm > .input-group-btn > select.btn {
-  height: 30px;
-  line-height: 30px; }
-
-textarea.input-sm, .input-group-sm > textarea.form-control,
-.input-group-sm > textarea.input-group-addon,
-.input-group-sm > .input-group-btn > textarea.btn,
-select[multiple].input-sm,
-.input-group-sm > select[multiple].form-control,
-.input-group-sm > select[multiple].input-group-addon,
-.input-group-sm > .input-group-btn > select[multiple].btn {
-  height: auto; }
-
-.form-group-sm .form-control {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px; }
-
-.form-group-sm select.form-control {
-  height: 30px;
-  line-height: 30px; }
-
-.form-group-sm textarea.form-control,
-.form-group-sm select[multiple].form-control {
-  height: auto; }
-
-.form-group-sm .form-control-static {
-  height: 30px;
-  min-height: 32px;
-  padding: 6px 10px;
-  font-size: 12px;
-  line-height: 1.5; }
-
-.input-lg, .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.33333;
-  border-radius: 6px; }
-
-select.input-lg, .input-group-lg > select.form-control,
-.input-group-lg > select.input-group-addon,
-.input-group-lg > .input-group-btn > select.btn {
-  height: 46px;
-  line-height: 46px; }
-
-textarea.input-lg, .input-group-lg > textarea.form-control,
-.input-group-lg > textarea.input-group-addon,
-.input-group-lg > .input-group-btn > textarea.btn,
-select[multiple].input-lg,
-.input-group-lg > select[multiple].form-control,
-.input-group-lg > select[multiple].input-group-addon,
-.input-group-lg > .input-group-btn > select[multiple].btn {
-  height: auto; }
-
-.form-group-lg .form-control {
-  height: 46px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33333;
-  border-radius: 6px; }
-
-.form-group-lg select.form-control {
-  height: 46px;
-  line-height: 46px; }
-
-.form-group-lg textarea.form-control,
-.form-group-lg select[multiple].form-control {
-  height: auto; }
-
-.form-group-lg .form-control-static {
-  height: 46px;
-  min-height: 38px;
-  padding: 11px 16px;
-  font-size: 18px;
-  line-height: 1.33333; }
-
-.has-feedback {
-  position: relative; }
-  .has-feedback .form-control {
-    padding-right: 42.5px; }
-
-.form-control-feedback {
-  position: absolute;
-  top: 0;
-  right: 0;
-  z-index: 2;
-  display: block;
-  width: 34px;
-  height: 34px;
-  line-height: 34px;
-  text-align: center;
-  pointer-events: none; }
-
-.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback,
-.input-group-lg > .input-group-addon + .form-control-feedback,
-.input-group-lg > .input-group-btn > .btn + .form-control-feedback,
-.input-group-lg + .form-control-feedback,
-.form-group-lg .form-control + .form-control-feedback {
-  width: 46px;
-  height: 46px;
-  line-height: 46px; }
-
-.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback,
-.input-group-sm > .input-group-addon + .form-control-feedback,
-.input-group-sm > .input-group-btn > .btn + .form-control-feedback,
-.input-group-sm + .form-control-feedback,
-.form-group-sm .form-control + .form-control-feedback {
-  width: 30px;
-  height: 30px;
-  line-height: 30px; }
-
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline,
-.has-success.radio label,
-.has-success.checkbox label,
-.has-success.radio-inline label,
-.has-success.checkbox-inline label {
-  color: #3c763d; }
-
-.has-success .form-control {
-  border-color: #3c763d;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
-  .has-success .form-control:focus {
-    border-color: #2b542c;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }
-
-.has-success .input-group-addon {
-  color: #3c763d;
-  border-color: #3c763d;
-  background-color: #dff0d8; }
-
-.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,
-.has-warning.radio label,
-.has-warning.checkbox label,
-.has-warning.radio-inline label,
-.has-warning.checkbox-inline label {
-  color: #8a6d3b; }
-
-.has-warning .form-control {
-  border-color: #8a6d3b;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
-  .has-warning .form-control:focus {
-    border-color: #66512c;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }
-
-.has-warning .input-group-addon {
-  color: #8a6d3b;
-  border-color: #8a6d3b;
-  background-color: #fcf8e3; }
-
-.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,
-.has-error.radio label,
-.has-error.checkbox label,
-.has-error.radio-inline label,
-.has-error.checkbox-inline label {
-  color: #a94442; }
-
-.has-error .form-control {
-  border-color: #a94442;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }
-  .has-error .form-control:focus {
-    border-color: #843534;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
-    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }
-
-.has-error .input-group-addon {
-  color: #a94442;
-  border-color: #a94442;
-  background-color: #f2dede; }
-
-.has-error .form-control-feedback {
-  color: #a94442; }
-
-.has-feedback label ~ .form-control-feedback {
-  top: 25px; }
-
-.has-feedback label.sr-only ~ .form-control-feedback {
-  top: 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 .form-control-static {
-    display: inline-block; }
-  .form-inline .input-group {
-    display: inline-table;
-    vertical-align: middle; }
-    .form-inline .input-group .input-group-addon,
-    .form-inline .input-group .input-group-btn,
-    .form-inline .input-group .form-control {
-      width: auto; }
-  .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;
-    margin-top: 0;
-    margin-bottom: 0;
-    vertical-align: middle; }
-    .form-inline .radio label,
-    .form-inline .checkbox label {
-      padding-left: 0; }
-  .form-inline .radio input[type="radio"],
-  .form-inline .checkbox input[type="checkbox"] {
-    position: relative;
-    margin-left: 0; }
-  .form-inline .has-feedback .form-control-feedback {
-    top: 0; } }
-
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
-  margin-top: 0;
-  margin-bottom: 0;
-  padding-top: 7px; }
-
-.form-horizontal .radio,
-.form-horizontal .checkbox {
-  min-height: 27px; }
-
-.form-horizontal .form-group {
-  margin-left: -15px;
-  margin-right: -15px; }
-  .form-horizontal .form-group:before, .form-horizontal .form-group:after {
-    content: " ";
-    display: table; }
-  .form-horizontal .form-group:after {
-    clear: both; }
-
-@media (min-width: 768px) {
-  .form-horizontal .control-label {
-    text-align: right;
-    margin-bottom: 0;
-    padding-top: 7px; } }
-
-.form-horizontal .has-feedback .form-control-feedback {
-  right: 15px; }
-
-@media (min-width: 768px) {
-  .form-horizontal .form-group-lg .control-label {
-    padding-top: 11px;
-    font-size: 18px; } }
-
-@media (min-width: 768px) {
-  .form-horizontal .form-group-sm .control-label {
-    padding-top: 6px;
-    font-size: 12px; } }
-
-.btn {
-  display: inline-block;
-  margin-bottom: 0;
-  font-weight: normal;
-  text-align: center;
-  vertical-align: middle;
-  touch-action: manipulation;
-  cursor: pointer;
-  background-image: none;
-  border: 1px solid transparent;
-  white-space: nowrap;
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.42857;
-  border-radius: 4px;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none; }
-  .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {
-    outline: thin dotted;
-    outline: 5px auto -webkit-focus-ring-color;
-    outline-offset: -2px; }
-  .btn:hover, .btn:focus, .btn.focus {
-    color: #333;
-    text-decoration: none; }
-  .btn:active, .btn.active {
-    outline: 0;
-    background-image: none;
-    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-    box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }
-  .btn.disabled, .btn[disabled],
-  fieldset[disabled] .btn {
-    cursor: not-allowed;
-    opacity: 0.65;
-    filter: alpha(opacity=65);
-    -webkit-box-shadow: none;
-    box-shadow: none; }
-
-a.btn.disabled,
-fieldset[disabled] a.btn {
-  pointer-events: none; }
-
-.btn-default {
-  color: #333;
-  background-color: #fff;
-  border-color: #ccc; }
-  .btn-default:focus, .btn-default.focus {
-    color: #333;
-    background-color: #e6e6e6;
-    border-color: #8c8c8c; }
-  .btn-default:hover {
-    color: #333;
-    background-color: #e6e6e6;
-    border-color: #adadad; }
-  .btn-default:active, .btn-default.active,
-  .open > .btn-default.dropdown-toggle {
-    color: #333;
-    background-color: #e6e6e6;
-    border-color: #adadad; }
-    .btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus,
-    .open > .btn-default.dropdown-toggle:hover,
-    .open > .btn-default.dropdown-toggle:focus,
-    .open > .btn-default.dropdown-toggle.focus {
-      color: #333;
-      background-color: #d4d4d4;
-      border-color: #8c8c8c; }
-  .btn-default:active, .btn-default.active,
-  .open > .btn-default.dropdown-toggle {
-    background-image: none; }
-  .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus,
-  fieldset[disabled] .btn-default:hover,
-  fieldset[disabled] .btn-default:focus,
-  fieldset[disabled] .btn-default.focus {
-    background-color: #fff;
-    border-color: #ccc; }
-  .btn-default .badge {
-    color: #fff;
-    background-color: #333; }
-
-.btn-primary {
-  color: #fff;
-  background-color: #337ab7;
-  border-color: #2e6da4; }
-  .btn-primary:focus, .btn-primary.focus {
-    color: #fff;
-    background-color: #286090;
-    border-color: #122b40; }
-  .btn-primary:hover {
-    color: #fff;
-    background-color: #286090;
-    border-color: #204d74; }
-  .btn-primary:active, .btn-primary.active,
-  .open > .btn-primary.dropdown-toggle {
-    color: #fff;
-    background-color: #286090;
-    border-color: #204d74; }
-    .btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus,
-    .open > .btn-primary.dropdown-toggle:hover,
-    .open > .btn-primary.dropdown-toggle:focus,
-    .open > .btn-primary.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #204d74;
-      border-color: #122b40; }
-  .btn-primary:active, .btn-primary.active,
-  .open > .btn-primary.dropdown-toggle {
-    background-image: none; }
-  .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus,
-  fieldset[disabled] .btn-primary:hover,
-  fieldset[disabled] .btn-primary:focus,
-  fieldset[disabled] .btn-primary.focus {
-    background-color: #337ab7;
-    border-color: #2e6da4; }
-  .btn-primary .badge {
-    color: #337ab7;
-    background-color: #fff; }
-
-.btn-success {
-  color: #fff;
-  background-color: #5cb85c;
-  border-color: #4cae4c; }
-  .btn-success:focus, .btn-success.focus {
-    color: #fff;
-    background-color: #449d44;
-    border-color: #255625; }
-  .btn-success:hover {
-    color: #fff;
-    background-color: #449d44;
-    border-color: #398439; }
-  .btn-success:active, .btn-success.active,
-  .open > .btn-success.dropdown-toggle {
-    color: #fff;
-    background-color: #449d44;
-    border-color: #398439; }
-    .btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus,
-    .open > .btn-success.dropdown-toggle:hover,
-    .open > .btn-success.dropdown-toggle:focus,
-    .open > .btn-success.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #398439;
-      border-color: #255625; }
-  .btn-success:active, .btn-success.active,
-  .open > .btn-success.dropdown-toggle {
-    background-image: none; }
-  .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus,
-  fieldset[disabled] .btn-success:hover,
-  fieldset[disabled] .btn-success:focus,
-  fieldset[disabled] .btn-success.focus {
-    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:focus, .btn-info.focus {
-    color: #fff;
-    background-color: #31b0d5;
-    border-color: #1b6d85; }
-  .btn-info:hover {
-    color: #fff;
-    background-color: #31b0d5;
-    border-color: #269abc; }
-  .btn-info:active, .btn-info.active,
-  .open > .btn-info.dropdown-toggle {
-    color: #fff;
-    background-color: #31b0d5;
-    border-color: #269abc; }
-    .btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus,
-    .open > .btn-info.dropdown-toggle:hover,
-    .open > .btn-info.dropdown-toggle:focus,
-    .open > .btn-info.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #269abc;
-      border-color: #1b6d85; }
-  .btn-info:active, .btn-info.active,
-  .open > .btn-info.dropdown-toggle {
-    background-image: none; }
-  .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus,
-  fieldset[disabled] .btn-info:hover,
-  fieldset[disabled] .btn-info:focus,
-  fieldset[disabled] .btn-info.focus {
-    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:focus, .btn-warning.focus {
-    color: #fff;
-    background-color: #ec971f;
-    border-color: #985f0d; }
-  .btn-warning:hover {
-    color: #fff;
-    background-color: #ec971f;
-    border-color: #d58512; }
-  .btn-warning:active, .btn-warning.active,
-  .open > .btn-warning.dropdown-toggle {
-    color: #fff;
-    background-color: #ec971f;
-    border-color: #d58512; }
-    .btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus,
-    .open > .btn-warning.dropdown-toggle:hover,
-    .open > .btn-warning.dropdown-toggle:focus,
-    .open > .btn-warning.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #d58512;
-      border-color: #985f0d; }
-  .btn-warning:active, .btn-warning.active,
-  .open > .btn-warning.dropdown-toggle {
-    background-image: none; }
-  .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus,
-  fieldset[disabled] .btn-warning:hover,
-  fieldset[disabled] .btn-warning:focus,
-  fieldset[disabled] .btn-warning.focus {
-    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:focus, .btn-danger.focus {
-    color: #fff;
-    background-color: #c9302c;
-    border-color: #761c19; }
-  .btn-danger:hover {
-    color: #fff;
-    background-color: #c9302c;
-    border-color: #ac2925; }
-  .btn-danger:active, .btn-danger.active,
-  .open > .btn-danger.dropdown-toggle {
-    color: #fff;
-    background-color: #c9302c;
-    border-color: #ac2925; }
-    .btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus,
-    .open > .btn-danger.dropdown-toggle:hover,
-    .open > .btn-danger.dropdown-toggle:focus,
-    .open > .btn-danger.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #ac2925;
-      border-color: #761c19; }
-  .btn-danger:active, .btn-danger.active,
-  .open > .btn-danger.dropdown-toggle {
-    background-image: none; }
-  .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus,
-  fieldset[disabled] .btn-danger:hover,
-  fieldset[disabled] .btn-danger:focus,
-  fieldset[disabled] .btn-danger.focus {
-    background-color: #d9534f;
-    border-color: #d43f3a; }
-  .btn-danger .badge {
-    color: #d9534f;
-    background-color: #fff; }
-
-.btn-link {
-  color: #337ab7;
-  font-weight: normal;
-  border-radius: 0; }
-  .btn-link, .btn-link:active, .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: #23527c;
-    text-decoration: underline;
-    background-color: transparent; }
-  .btn-link[disabled]:hover, .btn-link[disabled]:focus,
-  fieldset[disabled] .btn-link:hover,
-  fieldset[disabled] .btn-link:focus {
-    color: #777777;
-    text-decoration: none; }
-
-.btn-lg, .btn-group-lg > .btn {
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33333;
-  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%; }
-
-.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 0.15s linear;
-  -o-transition: opacity 0.15s linear;
-  transition: opacity 0.15s linear; }
-  .fade.in {
-    opacity: 1; }
-
-.collapse {
-  display: none; }
-  .collapse.in {
-    display: block; }
-
-tr.collapse.in {
-  display: table-row; }
-
-tbody.collapse.in {
-  display: table-row-group; }
-
-.collapsing {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -webkit-transition-property: height, visibility;
-  transition-property: height, visibility;
-  -webkit-transition-duration: 0.35s;
-  transition-duration: 0.35s;
-  -webkit-transition-timing-function: ease;
-  transition-timing-function: ease; }
-
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  margin-left: 2px;
-  vertical-align: middle;
-  border-top: 4px dashed;
-  border-top: 4px solid \9;
-  border-right: 4px solid transparent;
-  border-left: 4px solid transparent; }
-
-.dropup,
-.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;
-  list-style: none;
-  font-size: 14px;
-  text-align: left;
-  background-color: #fff;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  border-radius: 4px;
-  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-  background-clip: padding-box; }
-  .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.42857;
-    color: #333333;
-    white-space: nowrap; }
-
-.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
-  text-decoration: none;
-  color: #262626;
-  background-color: #f5f5f5; }
-
-.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
-  color: #fff;
-  text-decoration: none;
-  outline: 0;
-  background-color: #337ab7; }
-
-.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
-  color: #777777; }
-
-.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  background-color: transparent;
-  background-image: none;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  cursor: not-allowed; }
-
-.open > .dropdown-menu {
-  display: block; }
-
-.open > a {
-  outline: 0; }
-
-.dropdown-menu-right {
-  left: auto;
-  right: 0; }
-
-.dropdown-menu-left {
-  left: 0;
-  right: auto; }
-
-.dropdown-header {
-  display: block;
-  padding: 3px 20px;
-  font-size: 12px;
-  line-height: 1.42857;
-  color: #777777;
-  white-space: nowrap; }
-
-.dropdown-backdrop {
-  position: fixed;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  top: 0;
-  z-index: 990; }
-
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto; }
-
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  border-top: 0;
-  border-bottom: 4px dashed;
-  border-bottom: 4px solid \9;
-  content: ""; }
-
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 2px; }
-
-@media (min-width: 768px) {
-  .navbar-right .dropdown-menu {
-    right: 0;
-    left: auto; }
-  .navbar-right .dropdown-menu-left {
-    left: 0;
-    right: auto; } }
-
-.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 > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,
-    .btn-group-vertical > .btn:hover,
-    .btn-group-vertical > .btn:focus,
-    .btn-group-vertical > .btn:active,
-    .btn-group-vertical > .btn.active {
-      z-index: 2; }
-
-.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:before, .btn-toolbar:after {
-    content: " ";
-    display: table; }
-  .btn-toolbar:after {
-    clear: both; }
-  .btn-toolbar .btn,
-  .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-bottom-right-radius: 0;
-    border-top-right-radius: 0; }
-
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
-  border-bottom-left-radius: 0;
-  border-top-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:not(:last-child) > .btn:last-child,
-.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
-  border-bottom-right-radius: 0;
-  border-top-right-radius: 0; }
-
-.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  border-bottom-left-radius: 0;
-  border-top-left-radius: 0; }
-
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0; }
-
-.btn-group > .btn + .dropdown-toggle {
-  padding-left: 8px;
-  padding-right: 8px; }
-
-.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle {
-  padding-left: 12px;
-  padding-right: 12px; }
-
-.btn-group.open .dropdown-toggle {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-  box-shadow: inset 0 3px 5px rgba(0, 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, .btn-group-lg > .btn .caret {
-  border-width: 5px 5px 0;
-  border-bottom-width: 0; }
-
-.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .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:before, .btn-group-vertical > .btn-group:after {
-  content: " ";
-  display: table; }
-
-.btn-group-vertical > .btn-group:after {
-  clear: both; }
-
-.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-top-left-radius: 4px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0; }
-
-.btn-group-vertical > .btn:last-child:not(:first-child) {
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-  border-bottom-right-radius: 4px;
-  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-right-radius: 0;
-  border-top-left-radius: 0; }
-
-.btn-group-justified {
-  display: table;
-  width: 100%;
-  table-layout: fixed;
-  border-collapse: separate; }
-  .btn-group-justified > .btn,
-  .btn-group-justified > .btn-group {
-    float: none;
-    display: table-cell;
-    width: 1%; }
-  .btn-group-justified > .btn-group .btn {
-    width: 100%; }
-  .btn-group-justified > .btn-group .dropdown-menu {
-    left: auto; }
-
-[data-toggle="buttons"] > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn input[type="checkbox"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
-  position: absolute;
-  clip: rect(0, 0, 0, 0);
-  pointer-events: none; }
-
-.input-group {
-  position: relative;
-  display: table;
-  border-collapse: separate; }
-  .input-group[class*="col-"] {
-    float: none;
-    padding-left: 0;
-    padding-right: 0; }
-  .input-group .form-control {
-    position: relative;
-    z-index: 2;
-    float: left;
-    width: 100%;
-    margin-bottom: 0; }
-    .input-group .form-control:focus {
-      z-index: 3; }
-
-.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: #555555;
-  text-align: center;
-  background-color: #eeeeee;
-  border: 1px solid #ccc;
-  border-radius: 4px; }
-  .input-group-addon.input-sm,
-  .input-group-sm > .input-group-addon,
-  .input-group-sm > .input-group-btn > .input-group-addon.btn {
-    padding: 5px 10px;
-    font-size: 12px;
-    border-radius: 3px; }
-  .input-group-addon.input-lg,
-  .input-group-lg > .input-group-addon,
-  .input-group-lg > .input-group-btn > .input-group-addon.btn {
-    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-bottom-right-radius: 0;
-  border-top-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-bottom-left-radius: 0;
-  border-top-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 {
-    z-index: 2;
-    margin-left: -1px; }
-
-.nav {
-  margin-bottom: 0;
-  padding-left: 0;
-  list-style: none; }
-  .nav:before, .nav:after {
-    content: " ";
-    display: table; }
-  .nav:after {
-    clear: both; }
-  .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: #eeeeee; }
-    .nav > li.disabled > a {
-      color: #777777; }
-      .nav > li.disabled > a:hover, .nav > li.disabled > a:focus {
-        color: #777777;
-        text-decoration: none;
-        background-color: transparent;
-        cursor: not-allowed; }
-  .nav .open > a, .nav .open > a:hover, .nav .open > a:focus {
-    background-color: #eeeeee;
-    border-color: #337ab7; }
-  .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.42857;
-      border: 1px solid transparent;
-      border-radius: 4px 4px 0 0; }
-      .nav-tabs > li > a:hover {
-        border-color: #eeeeee #eeeeee #ddd; }
-    .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
-      color: #555555;
-      background-color: #fff;
-      border: 1px solid #ddd;
-      border-bottom-color: transparent;
-      cursor: default; }
-
-.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: #337ab7; }
-
-.nav-stacked > li {
-  float: none; }
-  .nav-stacked > li + li {
-    margin-top: 2px;
-    margin-left: 0; }
-
-.nav-justified, .nav-tabs.nav-justified {
-  width: 100%; }
-  .nav-justified > li, .nav-tabs.nav-justified > li {
-    float: none; }
-    .nav-justified > li > a, .nav-tabs.nav-justified > li > a {
-      text-align: center;
-      margin-bottom: 5px; }
-  .nav-justified > .dropdown .dropdown-menu {
-    top: auto;
-    left: auto; }
-  @media (min-width: 768px) {
-    .nav-justified > li, .nav-tabs.nav-justified > li {
-      display: table-cell;
-      width: 1%; }
-      .nav-justified > li > a, .nav-tabs.nav-justified > li > a {
-        margin-bottom: 0; } }
-
-.nav-tabs-justified, .nav-tabs.nav-justified {
-  border-bottom: 0; }
-  .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {
-    margin-right: 0;
-    border-radius: 4px; }
-  .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,
-  .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,
-  .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {
-    border: 1px solid #ddd; }
-  @media (min-width: 768px) {
-    .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {
-      border-bottom: 1px solid #ddd;
-      border-radius: 4px 4px 0 0; }
-    .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,
-    .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,
-    .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-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-right-radius: 0;
-  border-top-left-radius: 0; }
-
-.navbar {
-  position: relative;
-  min-height: 50px;
-  margin-bottom: 20px;
-  border: 1px solid transparent; }
-  .navbar:before, .navbar:after {
-    content: " ";
-    display: table; }
-  .navbar:after {
-    clear: both; }
-  @media (min-width: 768px) {
-    .navbar {
-      border-radius: 4px; } }
-
-.navbar-header:before, .navbar-header:after {
-  content: " ";
-  display: table; }
-
-.navbar-header:after {
-  clear: both; }
-
-@media (min-width: 768px) {
-  .navbar-header {
-    float: left; } }
-
-.navbar-collapse {
-  overflow-x: visible;
-  padding-right: 15px;
-  padding-left: 15px;
-  border-top: 1px solid transparent;
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
-  -webkit-overflow-scrolling: touch; }
-  .navbar-collapse:before, .navbar-collapse:after {
-    content: " ";
-    display: table; }
-  .navbar-collapse:after {
-    clear: both; }
-  .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-left: 0;
-        padding-right: 0; } }
-
-.navbar-fixed-top .navbar-collapse,
-.navbar-fixed-bottom .navbar-collapse {
-  max-height: 340px; }
-  @media (max-device-width: 480px) and (orientation: landscape) {
-    .navbar-fixed-top .navbar-collapse,
-    .navbar-fixed-bottom .navbar-collapse {
-      max-height: 200px; } }
-
-.container > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-header,
-.container-fluid > .navbar-collapse {
-  margin-right: -15px;
-  margin-left: -15px; }
-  @media (min-width: 768px) {
-    .container > .navbar-header,
-    .container > .navbar-collapse,
-    .container-fluid > .navbar-header,
-    .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;
-  padding: 15px 15px;
-  font-size: 18px;
-  line-height: 20px;
-  height: 50px; }
-  .navbar-brand:hover, .navbar-brand:focus {
-    text-decoration: none; }
-  .navbar-brand > img {
-    display: block; }
-  @media (min-width: 768px) {
-    .navbar > .container .navbar-brand,
-    .navbar > .container-fluid .navbar-brand {
-      margin-left: -15px; } }
-
-.navbar-toggle {
-  position: relative;
-  float: right;
-  margin-right: 15px;
-  padding: 9px 10px;
-  margin-top: 8px;
-  margin-bottom: 8px;
-  background-color: transparent;
-  background-image: none;
-  border: 1px solid transparent;
-  border-radius: 4px; }
-  .navbar-toggle:focus {
-    outline: 0; }
-  .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-form {
-  margin-left: -15px;
-  margin-right: -15px;
-  padding: 10px 15px;
-  border-top: 1px solid transparent;
-  border-bottom: 1px solid transparent;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-  margin-top: 8px;
-  margin-bottom: 8px; }
-  @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 .form-control-static {
-      display: inline-block; }
-    .navbar-form .input-group {
-      display: inline-table;
-      vertical-align: middle; }
-      .navbar-form .input-group .input-group-addon,
-      .navbar-form .input-group .input-group-btn,
-      .navbar-form .input-group .form-control {
-        width: auto; }
-    .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;
-      margin-top: 0;
-      margin-bottom: 0;
-      vertical-align: middle; }
-      .navbar-form .radio label,
-      .navbar-form .checkbox label {
-        padding-left: 0; }
-    .navbar-form .radio input[type="radio"],
-    .navbar-form .checkbox input[type="checkbox"] {
-      position: relative;
-      margin-left: 0; }
-    .navbar-form .has-feedback .form-control-feedback {
-      top: 0; } }
-  @media (max-width: 767px) {
-    .navbar-form .form-group {
-      margin-bottom: 5px; }
-      .navbar-form .form-group:last-child {
-        margin-bottom: 0; } }
-  @media (min-width: 768px) {
-    .navbar-form {
-      width: auto;
-      border: 0;
-      margin-left: 0;
-      margin-right: 0;
-      padding-top: 0;
-      padding-bottom: 0;
-      -webkit-box-shadow: none;
-      box-shadow: none; } }
-
-.navbar-nav > li > .dropdown-menu {
-  margin-top: 0;
-  border-top-right-radius: 0;
-  border-top-left-radius: 0; }
-
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
-  margin-bottom: 0;
-  border-top-right-radius: 4px;
-  border-top-left-radius: 4px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0; }
-
-.navbar-btn {
-  margin-top: 8px;
-  margin-bottom: 8px; }
-  .navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn {
-    margin-top: 10px;
-    margin-bottom: 10px; }
-  .navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn {
-    margin-top: 14px;
-    margin-bottom: 14px; }
-
-.navbar-text {
-  margin-top: 15px;
-  margin-bottom: 15px; }
-  @media (min-width: 768px) {
-    .navbar-text {
-      float: left;
-      margin-left: 15px;
-      margin-right: 15px; } }
-
-@media (min-width: 768px) {
-  .navbar-left {
-    float: left !important; }
-  .navbar-right {
-    float: right !important;
-    margin-right: -15px; }
-    .navbar-right ~ .navbar-right {
-      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 {
-    background-color: #e7e7e7;
-    color: #555; }
-  @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-default .btn-link {
-    color: #777; }
-    .navbar-default .btn-link:hover, .navbar-default .btn-link:focus {
-      color: #333; }
-    .navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus,
-    fieldset[disabled] .navbar-default .btn-link:hover,
-    fieldset[disabled] .navbar-default .btn-link:focus {
-      color: #ccc; }
-
-.navbar-inverse {
-  background-color: #222;
-  border-color: #090909; }
-  .navbar-inverse .navbar-brand {
-    color: #9d9d9d; }
-    .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {
-      color: #fff;
-      background-color: transparent; }
-  .navbar-inverse .navbar-text {
-    color: #9d9d9d; }
-  .navbar-inverse .navbar-nav > li > a {
-    color: #9d9d9d; }
-    .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: #090909; }
-  .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 {
-    background-color: #090909;
-    color: #fff; }
-  @media (max-width: 767px) {
-    .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
-      border-color: #090909; }
-    .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
-      background-color: #090909; }
-    .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
-      color: #9d9d9d; }
-      .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
-        color: #fff;
-        background-color: transparent; }
-    .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
-      color: #fff;
-      background-color: #090909; }
-    .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-      color: #444;
-      background-color: transparent; } }
-  .navbar-inverse .navbar-link {
-    color: #9d9d9d; }
-    .navbar-inverse .navbar-link:hover {
-      color: #fff; }
-  .navbar-inverse .btn-link {
-    color: #9d9d9d; }
-    .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {
-      color: #fff; }
-    .navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus,
-    fieldset[disabled] .navbar-inverse .btn-link:hover,
-    fieldset[disabled] .navbar-inverse .btn-link:focus {
-      color: #444; }
-
-.breadcrumb {
-  padding: 8px 15px;
-  margin-bottom: 20px;
-  list-style: none;
-  background-color: #f5f5f5;
-  border-radius: 4px; }
-  .breadcrumb > li {
-    display: inline-block; }
-    .breadcrumb > li + li:before {
-      content: "/ ";
-      padding: 0 5px;
-      color: #ccc; }
-  .breadcrumb > .active {
-    color: #777777; }
-
-.pagination {
-  display: inline-block;
-  padding-left: 0;
-  margin: 20px 0;
-  border-radius: 4px; }
-  .pagination > li {
-    display: inline; }
-    .pagination > li > a,
-    .pagination > li > span {
-      position: relative;
-      float: left;
-      padding: 6px 12px;
-      line-height: 1.42857;
-      text-decoration: none;
-      color: #337ab7;
-      background-color: #fff;
-      border: 1px solid #ddd;
-      margin-left: -1px; }
-    .pagination > li:first-child > a,
-    .pagination > li:first-child > span {
-      margin-left: 0;
-      border-bottom-left-radius: 4px;
-      border-top-left-radius: 4px; }
-    .pagination > li:last-child > a,
-    .pagination > li:last-child > span {
-      border-bottom-right-radius: 4px;
-      border-top-right-radius: 4px; }
-  .pagination > li > a:hover, .pagination > li > a:focus,
-  .pagination > li > span:hover,
-  .pagination > li > span:focus {
-    z-index: 2;
-    color: #23527c;
-    background-color: #eeeeee;
-    border-color: #ddd; }
-  .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,
-  .pagination > .active > span,
-  .pagination > .active > span:hover,
-  .pagination > .active > span:focus {
-    z-index: 3;
-    color: #fff;
-    background-color: #337ab7;
-    border-color: #337ab7;
-    cursor: default; }
-  .pagination > .disabled > span,
-  .pagination > .disabled > span:hover,
-  .pagination > .disabled > span:focus,
-  .pagination > .disabled > a,
-  .pagination > .disabled > a:hover,
-  .pagination > .disabled > a:focus {
-    color: #777777;
-    background-color: #fff;
-    border-color: #ddd;
-    cursor: not-allowed; }
-
-.pagination-lg > li > a,
-.pagination-lg > li > span {
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33333; }
-
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
-  border-bottom-left-radius: 6px;
-  border-top-left-radius: 6px; }
-
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
-  border-bottom-right-radius: 6px;
-  border-top-right-radius: 6px; }
-
-.pagination-sm > li > a,
-.pagination-sm > li > span {
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5; }
-
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
-  border-bottom-left-radius: 3px;
-  border-top-left-radius: 3px; }
-
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
-  border-bottom-right-radius: 3px;
-  border-top-right-radius: 3px; }
-
-.pager {
-  padding-left: 0;
-  margin: 20px 0;
-  list-style: none;
-  text-align: center; }
-  .pager:before, .pager:after {
-    content: " ";
-    display: table; }
-  .pager:after {
-    clear: both; }
-  .pager li {
-    display: inline; }
-    .pager li > a,
-    .pager li > span {
-      display: inline-block;
-      padding: 5px 14px;
-      background-color: #fff;
-      border: 1px solid #ddd;
-      border-radius: 15px; }
-    .pager li > a:hover,
-    .pager li > a:focus {
-      text-decoration: none;
-      background-color: #eeeeee; }
-  .pager .next > a,
-  .pager .next > span {
-    float: right; }
-  .pager .previous > a,
-  .pager .previous > span {
-    float: left; }
-  .pager .disabled > a,
-  .pager .disabled > a:hover,
-  .pager .disabled > a:focus,
-  .pager .disabled > span {
-    color: #777777;
-    background-color: #fff;
-    cursor: not-allowed; }
-
-.label {
-  display: inline;
-  padding: .2em .6em .3em;
-  font-size: 75%;
-  font-weight: bold;
-  line-height: 1;
-  color: #fff;
-  text-align: center;
-  white-space: nowrap;
-  vertical-align: baseline;
-  border-radius: .25em; }
-  .label:empty {
-    display: none; }
-  .btn .label {
-    position: relative;
-    top: -1px; }
-
-a.label:hover, a.label:focus {
-  color: #fff;
-  text-decoration: none;
-  cursor: pointer; }
-
-.label-default {
-  background-color: #777777; }
-  .label-default[href]:hover, .label-default[href]:focus {
-    background-color: #5e5e5e; }
-
-.label-primary {
-  background-color: #337ab7; }
-  .label-primary[href]:hover, .label-primary[href]:focus {
-    background-color: #286090; }
-
-.label-success {
-  background-color: #5cb85c; }
-  .label-success[href]:hover, .label-success[href]:focus {
-    background-color: #449d44; }
-
-.label-info {
-  background-color: #5bc0de; }
-  .label-info[href]:hover, .label-info[href]:focus {
-    background-color: #31b0d5; }
-
-.label-warning {
-  background-color: #f0ad4e; }
-  .label-warning[href]:hover, .label-warning[href]:focus {
-    background-color: #ec971f; }
-
-.label-danger {
-  background-color: #d9534f; }
-  .label-danger[href]:hover, .label-danger[href]:focus {
-    background-color: #c9302c; }
-
-.badge {
-  display: inline-block;
-  min-width: 10px;
-  padding: 3px 7px;
-  font-size: 12px;
-  font-weight: bold;
-  color: #fff;
-  line-height: 1;
-  vertical-align: middle;
-  white-space: nowrap;
-  text-align: center;
-  background-color: #777777;
-  border-radius: 10px; }
-  .badge:empty {
-    display: none; }
-  .btn .badge {
-    position: relative;
-    top: -1px; }
-  .btn-xs .badge, .btn-group-xs > .btn .badge,
-  .btn-group-xs > .btn .badge {
-    top: 0;
-    padding: 1px 5px; }
-  .list-group-item.active > .badge,
-  .nav-pills > .active > a > .badge {
-    color: #337ab7;
-    background-color: #fff; }
-  .list-group-item > .badge {
-    float: right; }
-  .list-group-item > .badge + .badge {
-    margin-right: 5px; }
-  .nav-pills > li > a > .badge {
-    margin-left: 3px; }
-
-a.badge:hover, a.badge:focus {
-  color: #fff;
-  text-decoration: none;
-  cursor: pointer; }
-
-.jumbotron {
-  padding-top: 30px;
-  padding-bottom: 30px;
-  margin-bottom: 30px;
-  color: inherit;
-  background-color: #eeeeee; }
-  .jumbotron h1,
-  .jumbotron .h1 {
-    color: inherit; }
-  .jumbotron p {
-    margin-bottom: 15px;
-    font-size: 21px;
-    font-weight: 200; }
-  .jumbotron > hr {
-    border-top-color: #d5d5d5; }
-  .container .jumbotron,
-  .container-fluid .jumbotron {
-    border-radius: 6px;
-    padding-left: 15px;
-    padding-right: 15px; }
-  .jumbotron .container {
-    max-width: 100%; }
-  @media screen and (min-width: 768px) {
-    .jumbotron {
-      padding-top: 48px;
-      padding-bottom: 48px; }
-      .container .jumbotron,
-      .container-fluid .jumbotron {
-        padding-left: 60px;
-        padding-right: 60px; }
-      .jumbotron h1,
-      .jumbotron .h1 {
-        font-size: 63px; } }
-
-.thumbnail {
-  display: block;
-  padding: 4px;
-  margin-bottom: 20px;
-  line-height: 1.42857;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  -webkit-transition: border 0.2s ease-in-out;
-  -o-transition: border 0.2s ease-in-out;
-  transition: border 0.2s ease-in-out; }
-  .thumbnail > img,
-  .thumbnail a > img {
-    display: block;
-    max-width: 100%;
-    height: auto;
-    margin-left: auto;
-    margin-right: auto; }
-  .thumbnail .caption {
-    padding: 9px;
-    color: #333333; }
-
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
-  border-color: #337ab7; }
-
-.alert {
-  padding: 15px;
-  margin-bottom: 20px;
-  border: 1px solid transparent;
-  border-radius: 4px; }
-  .alert h4 {
-    margin-top: 0;
-    color: inherit; }
-  .alert .alert-link {
-    font-weight: bold; }
-  .alert > p,
-  .alert > ul {
-    margin-bottom: 0; }
-  .alert > p + p {
-    margin-top: 5px; }
-
-.alert-dismissable,
-.alert-dismissible {
-  padding-right: 35px; }
-  .alert-dismissable .close,
-  .alert-dismissible .close {
-    position: relative;
-    top: -2px;
-    right: -21px;
-    color: inherit; }
-
-.alert-success {
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-  color: #3c763d; }
-  .alert-success hr {
-    border-top-color: #c9e2b3; }
-  .alert-success .alert-link {
-    color: #2b542c; }
-
-.alert-info {
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-  color: #31708f; }
-  .alert-info hr {
-    border-top-color: #a6e1ec; }
-  .alert-info .alert-link {
-    color: #245269; }
-
-.alert-warning {
-  background-color: #fcf8e3;
-  border-color: #faebcc;
-  color: #8a6d3b; }
-  .alert-warning hr {
-    border-top-color: #f7e1b5; }
-  .alert-warning .alert-link {
-    color: #66512c; }
-
-.alert-danger {
-  background-color: #f2dede;
-  border-color: #ebccd1;
-  color: #a94442; }
-  .alert-danger hr {
-    border-top-color: #e4b9c0; }
-  .alert-danger .alert-link {
-    color: #843534; }
-
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0; }
-  to {
-    background-position: 0 0; } }
-
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0; }
-  to {
-    background-position: 0 0; } }
-
-.progress {
-  overflow: hidden;
-  height: 20px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); }
-
-.progress-bar {
-  float: left;
-  width: 0%;
-  height: 100%;
-  font-size: 12px;
-  line-height: 20px;
-  color: #fff;
-  text-align: center;
-  background-color: #337ab7;
-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  -webkit-transition: width 0.6s ease;
-  -o-transition: width 0.6s ease;
-  transition: width 0.6s ease; }
-
-.progress-striped .progress-bar,
-.progress-bar-striped {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-size: 40px 40px; }
-
-.progress.active .progress-bar,
-.progress-bar.active {
-  -webkit-animation: progress-bar-stripes 2s linear infinite;
-  -o-animation: progress-bar-stripes 2s linear infinite;
-  animation: progress-bar-stripes 2s linear infinite; }
-
-.progress-bar-success {
-  background-color: #5cb85c; }
-  .progress-striped .progress-bar-success {
-    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }
-
-.progress-bar-info {
-  background-color: #5bc0de; }
-  .progress-striped .progress-bar-info {
-    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }
-
-.progress-bar-warning {
-  background-color: #f0ad4e; }
-  .progress-striped .progress-bar-warning {
-    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }
-
-.progress-bar-danger {
-  background-color: #d9534f; }
-  .progress-striped .progress-bar-danger {
-    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }
-
-.media {
-  margin-top: 15px; }
-  .media:first-child {
-    margin-top: 0; }
-
-.media,
-.media-body {
-  zoom: 1;
-  overflow: hidden; }
-
-.media-body {
-  width: 10000px; }
-
-.media-object {
-  display: block; }
-  .media-object.img-thumbnail {
-    max-width: none; }
-
-.media-right,
-.media > .pull-right {
-  padding-left: 10px; }
-
-.media-left,
-.media > .pull-left {
-  padding-right: 10px; }
-
-.media-left,
-.media-right,
-.media-body {
-  display: table-cell;
-  vertical-align: top; }
-
-.media-middle {
-  vertical-align: middle; }
-
-.media-bottom {
-  vertical-align: bottom; }
-
-.media-heading {
-  margin-top: 0;
-  margin-bottom: 5px; }
-
-.media-list {
-  padding-left: 0;
-  list-style: none; }
-
-.list-group {
-  margin-bottom: 20px;
-  padding-left: 0; }
-
-.list-group-item {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-  margin-bottom: -1px;
-  background-color: #fff;
-  border: 1px solid #ddd; }
-  .list-group-item:first-child {
-    border-top-right-radius: 4px;
-    border-top-left-radius: 4px; }
-  .list-group-item:last-child {
-    margin-bottom: 0;
-    border-bottom-right-radius: 4px;
-    border-bottom-left-radius: 4px; }
-
-a.list-group-item,
-button.list-group-item {
-  color: #555; }
-  a.list-group-item .list-group-item-heading,
-  button.list-group-item .list-group-item-heading {
-    color: #333; }
-  a.list-group-item:hover, a.list-group-item:focus,
-  button.list-group-item:hover,
-  button.list-group-item:focus {
-    text-decoration: none;
-    color: #555;
-    background-color: #f5f5f5; }
-
-button.list-group-item {
-  width: 100%;
-  text-align: left; }
-
-.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus {
-  background-color: #eeeeee;
-  color: #777777;
-  cursor: not-allowed; }
-  .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading {
-    color: inherit; }
-  .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text {
-    color: #777777; }
-
-.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {
-  z-index: 2;
-  color: #fff;
-  background-color: #337ab7;
-  border-color: #337ab7; }
-  .list-group-item.active .list-group-item-heading,
-  .list-group-item.active .list-group-item-heading > small,
-  .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading,
-  .list-group-item.active:hover .list-group-item-heading > small,
-  .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading,
-  .list-group-item.active:focus .list-group-item-heading > small,
-  .list-group-item.active:focus .list-group-item-heading > .small {
-    color: inherit; }
-  .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text {
-    color: #c7ddef; }
-
-.list-group-item-success {
-  color: #3c763d;
-  background-color: #dff0d8; }
-
-a.list-group-item-success,
-button.list-group-item-success {
-  color: #3c763d; }
-  a.list-group-item-success .list-group-item-heading,
-  button.list-group-item-success .list-group-item-heading {
-    color: inherit; }
-  a.list-group-item-success:hover, a.list-group-item-success:focus,
-  button.list-group-item-success:hover,
-  button.list-group-item-success:focus {
-    color: #3c763d;
-    background-color: #d0e9c6; }
-  a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus,
-  button.list-group-item-success.active,
-  button.list-group-item-success.active:hover,
-  button.list-group-item-success.active:focus {
-    color: #fff;
-    background-color: #3c763d;
-    border-color: #3c763d; }
-
-.list-group-item-info {
-  color: #31708f;
-  background-color: #d9edf7; }
-
-a.list-group-item-info,
-button.list-group-item-info {
-  color: #31708f; }
-  a.list-group-item-info .list-group-item-heading,
-  button.list-group-item-info .list-group-item-heading {
-    color: inherit; }
-  a.list-group-item-info:hover, a.list-group-item-info:focus,
-  button.list-group-item-info:hover,
-  button.list-group-item-info:focus {
-    color: #31708f;
-    background-color: #c4e3f3; }
-  a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus,
-  button.list-group-item-info.active,
-  button.list-group-item-info.active:hover,
-  button.list-group-item-info.active:focus {
-    color: #fff;
-    background-color: #31708f;
-    border-color: #31708f; }
-
-.list-group-item-warning {
-  color: #8a6d3b;
-  background-color: #fcf8e3; }
-
-a.list-group-item-warning,
-button.list-group-item-warning {
-  color: #8a6d3b; }
-  a.list-group-item-warning .list-group-item-heading,
-  button.list-group-item-warning .list-group-item-heading {
-    color: inherit; }
-  a.list-group-item-warning:hover, a.list-group-item-warning:focus,
-  button.list-group-item-warning:hover,
-  button.list-group-item-warning:focus {
-    color: #8a6d3b;
-    background-color: #faf2cc; }
-  a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus,
-  button.list-group-item-warning.active,
-  button.list-group-item-warning.active:hover,
-  button.list-group-item-warning.active:focus {
-    color: #fff;
-    background-color: #8a6d3b;
-    border-color: #8a6d3b; }
-
-.list-group-item-danger {
-  color: #a94442;
-  background-color: #f2dede; }
-
-a.list-group-item-danger,
-button.list-group-item-danger {
-  color: #a94442; }
-  a.list-group-item-danger .list-group-item-heading,
-  button.list-group-item-danger .list-group-item-heading {
-    color: inherit; }
-  a.list-group-item-danger:hover, a.list-group-item-danger:focus,
-  button.list-group-item-danger:hover,
-  button.list-group-item-danger:focus {
-    color: #a94442;
-    background-color: #ebcccc; }
-  a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus,
-  button.list-group-item-danger.active,
-  button.list-group-item-danger.active:hover,
-  button.list-group-item-danger.active:focus {
-    color: #fff;
-    background-color: #a94442;
-    border-color: #a94442; }
-
-.list-group-item-heading {
-  margin-top: 0;
-  margin-bottom: 5px; }
-
-.list-group-item-text {
-  margin-bottom: 0;
-  line-height: 1.3; }
-
-.panel {
-  margin-bottom: 20px;
-  background-color: #fff;
-  border: 1px solid transparent;
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); }
-
-.panel-body {
-  padding: 15px; }
-  .panel-body:before, .panel-body:after {
-    content: " ";
-    display: table; }
-  .panel-body:after {
-    clear: both; }
-
-.panel-heading {
-  padding: 10px 15px;
-  border-bottom: 1px solid transparent;
-  border-top-right-radius: 3px;
-  border-top-left-radius: 3px; }
-  .panel-heading > .dropdown .dropdown-toggle {
-    color: inherit; }
-
-.panel-title {
-  margin-top: 0;
-  margin-bottom: 0;
-  font-size: 16px;
-  color: inherit; }
-  .panel-title > a,
-  .panel-title > small,
-  .panel-title > .small,
-  .panel-title > small > a,
-  .panel-title > .small > a {
-    color: inherit; }
-
-.panel-footer {
-  padding: 10px 15px;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px; }
-
-.panel > .list-group,
-.panel > .panel-collapse > .list-group {
-  margin-bottom: 0; }
-  .panel > .list-group .list-group-item,
-  .panel > .panel-collapse > .list-group .list-group-item {
-    border-width: 1px 0;
-    border-radius: 0; }
-  .panel > .list-group:first-child .list-group-item:first-child,
-  .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
-    border-top: 0;
-    border-top-right-radius: 3px;
-    border-top-left-radius: 3px; }
-  .panel > .list-group:last-child .list-group-item:last-child,
-  .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
-    border-bottom: 0;
-    border-bottom-right-radius: 3px;
-    border-bottom-left-radius: 3px; }
-
-.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
-  border-top-right-radius: 0;
-  border-top-left-radius: 0; }
-
-.panel-heading + .list-group .list-group-item:first-child {
-  border-top-width: 0; }
-
-.list-group + .panel-footer {
-  border-top-width: 0; }
-
-.panel > .table,
-.panel > .table-responsive > .table,
-.panel > .panel-collapse > .table {
-  margin-bottom: 0; }
-  .panel > .table caption,
-  .panel > .table-responsive > .table caption,
-  .panel > .panel-collapse > .table caption {
-    padding-left: 15px;
-    padding-right: 15px; }
-
-.panel > .table:first-child,
-.panel > .table-responsive:first-child > .table:first-child {
-  border-top-right-radius: 3px;
-  border-top-left-radius: 3px; }
-  .panel > .table:first-child > thead:first-child > tr:first-child,
-  .panel > .table:first-child > tbody:first-child > tr:first-child,
-  .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
-  .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
-    border-top-left-radius: 3px;
-    border-top-right-radius: 3px; }
-    .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
-    .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
-    .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-    .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
-    .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
-    .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
-    .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-    .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
-      border-top-left-radius: 3px; }
-    .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
-    .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
-    .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-    .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
-    .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
-    .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
-    .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-    .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
-      border-top-right-radius: 3px; }
-
-.panel > .table:last-child,
-.panel > .table-responsive:last-child > .table:last-child {
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px; }
-  .panel > .table:last-child > tbody:last-child > tr:last-child,
-  .panel > .table:last-child > tfoot:last-child > tr:last-child,
-  .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
-  .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
-    border-bottom-left-radius: 3px;
-    border-bottom-right-radius: 3px; }
-    .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-    .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-    .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-    .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
-    .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-    .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-    .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-    .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
-      border-bottom-left-radius: 3px; }
-    .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-    .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-    .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-    .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
-    .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-    .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-    .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-    .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
-      border-bottom-right-radius: 3px; }
-
-.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive,
-.panel > .table + .panel-body,
-.panel > .table-responsive + .panel-body {
-  border-top: 1px solid #ddd; }
-
-.panel > .table > tbody:first-child > tr:first-child th,
-.panel > .table > tbody:first-child > tr:first-child td {
-  border-top: 0; }
-
-.panel > .table-bordered,
-.panel > .table-responsive > .table-bordered {
-  border: 0; }
-  .panel > .table-bordered > thead > tr > th:first-child,
-  .panel > .table-bordered > thead > tr > td:first-child,
-  .panel > .table-bordered > tbody > tr > th:first-child,
-  .panel > .table-bordered > tbody > tr > td:first-child,
-  .panel > .table-bordered > tfoot > tr > th:first-child,
-  .panel > .table-bordered > tfoot > tr > td:first-child,
-  .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
-  .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
-  .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
-  .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
-  .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-  .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-    border-left: 0; }
-  .panel > .table-bordered > thead > tr > th:last-child,
-  .panel > .table-bordered > thead > tr > td:last-child,
-  .panel > .table-bordered > tbody > tr > th:last-child,
-  .panel > .table-bordered > tbody > tr > td:last-child,
-  .panel > .table-bordered > tfoot > tr > th:last-child,
-  .panel > .table-bordered > tfoot > tr > td:last-child,
-  .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
-  .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
-  .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
-  .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
-  .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-  .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-    border-right: 0; }
-  .panel > .table-bordered > thead > tr:first-child > td,
-  .panel > .table-bordered > thead > tr:first-child > th,
-  .panel > .table-bordered > tbody > tr:first-child > td,
-  .panel > .table-bordered > tbody > tr:first-child > th,
-  .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
-  .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
-  .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
-  .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
-    border-bottom: 0; }
-  .panel > .table-bordered > tbody > tr:last-child > td,
-  .panel > .table-bordered > tbody > tr:last-child > th,
-  .panel > .table-bordered > tfoot > tr:last-child > td,
-  .panel > .table-bordered > tfoot > tr:last-child > th,
-  .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
-  .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
-  .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
-  .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
-    border-bottom: 0; }
-
-.panel > .table-responsive {
-  border: 0;
-  margin-bottom: 0; }
-
-.panel-group {
-  margin-bottom: 20px; }
-  .panel-group .panel {
-    margin-bottom: 0;
-    border-radius: 4px; }
-    .panel-group .panel + .panel {
-      margin-top: 5px; }
-  .panel-group .panel-heading {
-    border-bottom: 0; }
-    .panel-group .panel-heading + .panel-collapse > .panel-body,
-    .panel-group .panel-heading + .panel-collapse > .list-group {
-      border-top: 1px solid #ddd; }
-  .panel-group .panel-footer {
-    border-top: 0; }
-    .panel-group .panel-footer + .panel-collapse .panel-body {
-      border-bottom: 1px solid #ddd; }
-
-.panel-default {
-  border-color: #ddd; }
-  .panel-default > .panel-heading {
-    color: #333333;
-    background-color: #f5f5f5;
-    border-color: #ddd; }
-    .panel-default > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #ddd; }
-    .panel-default > .panel-heading .badge {
-      color: #f5f5f5;
-      background-color: #333333; }
-  .panel-default > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #ddd; }
-
-.panel-primary {
-  border-color: #337ab7; }
-  .panel-primary > .panel-heading {
-    color: #fff;
-    background-color: #337ab7;
-    border-color: #337ab7; }
-    .panel-primary > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #337ab7; }
-    .panel-primary > .panel-heading .badge {
-      color: #337ab7;
-      background-color: #fff; }
-  .panel-primary > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #337ab7; }
-
-.panel-success {
-  border-color: #d6e9c6; }
-  .panel-success > .panel-heading {
-    color: #3c763d;
-    background-color: #dff0d8;
-    border-color: #d6e9c6; }
-    .panel-success > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #d6e9c6; }
-    .panel-success > .panel-heading .badge {
-      color: #dff0d8;
-      background-color: #3c763d; }
-  .panel-success > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #d6e9c6; }
-
-.panel-info {
-  border-color: #bce8f1; }
-  .panel-info > .panel-heading {
-    color: #31708f;
-    background-color: #d9edf7;
-    border-color: #bce8f1; }
-    .panel-info > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #bce8f1; }
-    .panel-info > .panel-heading .badge {
-      color: #d9edf7;
-      background-color: #31708f; }
-  .panel-info > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #bce8f1; }
-
-.panel-warning {
-  border-color: #faebcc; }
-  .panel-warning > .panel-heading {
-    color: #8a6d3b;
-    background-color: #fcf8e3;
-    border-color: #faebcc; }
-    .panel-warning > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #faebcc; }
-    .panel-warning > .panel-heading .badge {
-      color: #fcf8e3;
-      background-color: #8a6d3b; }
-  .panel-warning > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #faebcc; }
-
-.panel-danger {
-  border-color: #ebccd1; }
-  .panel-danger > .panel-heading {
-    color: #a94442;
-    background-color: #f2dede;
-    border-color: #ebccd1; }
-    .panel-danger > .panel-heading + .panel-collapse > .panel-body {
-      border-top-color: #ebccd1; }
-    .panel-danger > .panel-heading .badge {
-      color: #f2dede;
-      background-color: #a94442; }
-  .panel-danger > .panel-footer + .panel-collapse > .panel-body {
-    border-bottom-color: #ebccd1; }
-
-.embed-responsive {
-  position: relative;
-  display: block;
-  height: 0;
-  padding: 0;
-  overflow: hidden; }
-  .embed-responsive .embed-responsive-item,
-  .embed-responsive iframe,
-  .embed-responsive embed,
-  .embed-responsive object,
-  .embed-responsive video {
-    position: absolute;
-    top: 0;
-    left: 0;
-    bottom: 0;
-    height: 100%;
-    width: 100%;
-    border: 0; }
-
-.embed-responsive-16by9 {
-  padding-bottom: 56.25%; }
-
-.embed-responsive-4by3 {
-  padding-bottom: 75%; }
-
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border: 1px solid #e3e3e3;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); }
-  .well blockquote {
-    border-color: #ddd;
-    border-color: rgba(0, 0, 0, 0.15); }
-
-.well-lg {
-  padding: 24px;
-  border-radius: 6px; }
-
-.well-sm {
-  padding: 9px;
-  border-radius: 3px; }
-
-.close {
-  float: right;
-  font-size: 21px;
-  font-weight: bold;
-  line-height: 1;
-  color: #000;
-  text-shadow: 0 1px 0 #fff;
-  opacity: 0.2;
-  filter: alpha(opacity=20); }
-  .close:hover, .close:focus {
-    color: #000;
-    text-decoration: none;
-    cursor: pointer;
-    opacity: 0.5;
-    filter: alpha(opacity=50); }
-
-button.close {
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none; }
-
-.modal-open {
-  overflow: hidden; }
-
-.modal {
-  display: none;
-  overflow: hidden;
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1050;
-  -webkit-overflow-scrolling: touch;
-  outline: 0; }
-  .modal.fade .modal-dialog {
-    -webkit-transform: translate(0, -25%);
-    -ms-transform: translate(0, -25%);
-    -o-transform: translate(0, -25%);
-    transform: translate(0, -25%);
-    -webkit-transition: -webkit-transform 0.3s ease-out;
-    -moz-transition: -moz-transform 0.3s ease-out;
-    -o-transition: -o-transform 0.3s ease-out;
-    transition: transform 0.3s ease-out; }
-  .modal.in .modal-dialog {
-    -webkit-transform: translate(0, 0);
-    -ms-transform: translate(0, 0);
-    -o-transform: translate(0, 0);
-    transform: translate(0, 0); }
-
-.modal-open .modal {
-  overflow-x: hidden;
-  overflow-y: auto; }
-
-.modal-dialog {
-  position: relative;
-  width: auto;
-  margin: 10px; }
-
-.modal-content {
-  position: relative;
-  background-color: #fff;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  border-radius: 6px;
-  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
-  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
-  background-clip: padding-box;
-  outline: 0; }
-
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1040;
-  background-color: #000; }
-  .modal-backdrop.fade {
-    opacity: 0;
-    filter: alpha(opacity=0); }
-  .modal-backdrop.in {
-    opacity: 0.5;
-    filter: alpha(opacity=50); }
-
-.modal-header {
-  padding: 15px;
-  border-bottom: 1px solid #e5e5e5; }
-  .modal-header:before, .modal-header:after {
-    content: " ";
-    display: table; }
-  .modal-header:after {
-    clear: both; }
-
-.modal-header .close {
-  margin-top: -2px; }
-
-.modal-title {
-  margin: 0;
-  line-height: 1.42857; }
-
-.modal-body {
-  position: relative;
-  padding: 15px; }
-
-.modal-footer {
-  padding: 15px;
-  text-align: right;
-  border-top: 1px solid #e5e5e5; }
-  .modal-footer:before, .modal-footer:after {
-    content: " ";
-    display: table; }
-  .modal-footer:after {
-    clear: both; }
-  .modal-footer .btn + .btn {
-    margin-left: 5px;
-    margin-bottom: 0; }
-  .modal-footer .btn-group .btn + .btn {
-    margin-left: -1px; }
-  .modal-footer .btn-block + .btn-block {
-    margin-left: 0; }
-
-.modal-scrollbar-measure {
-  position: absolute;
-  top: -9999px;
-  width: 50px;
-  height: 50px;
-  overflow: scroll; }
-
-@media (min-width: 768px) {
-  .modal-dialog {
-    width: 600px;
-    margin: 30px auto; }
-  .modal-content {
-    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
-    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }
-  .modal-sm {
-    width: 300px; } }
-
-@media (min-width: 992px) {
-  .modal-lg {
-    width: 900px; } }
-
-.tooltip {
-  position: absolute;
-  z-index: 1070;
-  display: block;
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-style: normal;
-  font-weight: normal;
-  letter-spacing: normal;
-  line-break: auto;
-  line-height: 1.42857;
-  text-align: left;
-  text-align: start;
-  text-decoration: none;
-  text-shadow: none;
-  text-transform: none;
-  white-space: normal;
-  word-break: normal;
-  word-spacing: normal;
-  word-wrap: normal;
-  font-size: 12px;
-  opacity: 0;
-  filter: alpha(opacity=0); }
-  .tooltip.in {
-    opacity: 0.9;
-    filter: alpha(opacity=90); }
-  .tooltip.top {
-    margin-top: -3px;
-    padding: 5px 0; }
-  .tooltip.right {
-    margin-left: 3px;
-    padding: 0 5px; }
-  .tooltip.bottom {
-    margin-top: 3px;
-    padding: 5px 0; }
-  .tooltip.left {
-    margin-left: -3px;
-    padding: 0 5px; }
-
-.tooltip-inner {
-  max-width: 200px;
-  padding: 3px 8px;
-  color: #fff;
-  text-align: center;
-  background-color: #000;
-  border-radius: 4px; }
-
-.tooltip-arrow {
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid; }
-
-.tooltip.top .tooltip-arrow {
-  bottom: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-width: 5px 5px 0;
-  border-top-color: #000; }
-
-.tooltip.top-left .tooltip-arrow {
-  bottom: 0;
-  right: 5px;
-  margin-bottom: -5px;
-  border-width: 5px 5px 0;
-  border-top-color: #000; }
-
-.tooltip.top-right .tooltip-arrow {
-  bottom: 0;
-  left: 5px;
-  margin-bottom: -5px;
-  border-width: 5px 5px 0;
-  border-top-color: #000; }
-
-.tooltip.right .tooltip-arrow {
-  top: 50%;
-  left: 0;
-  margin-top: -5px;
-  border-width: 5px 5px 5px 0;
-  border-right-color: #000; }
-
-.tooltip.left .tooltip-arrow {
-  top: 50%;
-  right: 0;
-  margin-top: -5px;
-  border-width: 5px 0 5px 5px;
-  border-left-color: #000; }
-
-.tooltip.bottom .tooltip-arrow {
-  top: 0;
-  left: 50%;
-  margin-left: -5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000; }
-
-.tooltip.bottom-left .tooltip-arrow {
-  top: 0;
-  right: 5px;
-  margin-top: -5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000; }
-
-.tooltip.bottom-right .tooltip-arrow {
-  top: 0;
-  left: 5px;
-  margin-top: -5px;
-  border-width: 0 5px 5px;
-  border-bottom-color: #000; }
-
-.popover {
-  position: absolute;
-  top: 0;
-  left: 0;
-  z-index: 1060;
-  display: none;
-  max-width: 276px;
-  padding: 1px;
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-style: normal;
-  font-weight: normal;
-  letter-spacing: normal;
-  line-break: auto;
-  line-height: 1.42857;
-  text-align: left;
-  text-align: start;
-  text-decoration: none;
-  text-shadow: none;
-  text-transform: none;
-  white-space: normal;
-  word-break: normal;
-  word-spacing: normal;
-  word-wrap: normal;
-  font-size: 14px;
-  background-color: #fff;
-  background-clip: padding-box;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  border-radius: 6px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); }
-  .popover.top {
-    margin-top: -10px; }
-  .popover.right {
-    margin-left: 10px; }
-  .popover.bottom {
-    margin-top: 10px; }
-  .popover.left {
-    margin-left: -10px; }
-
-.popover-title {
-  margin: 0;
-  padding: 8px 14px;
-  font-size: 14px;
-  background-color: #f7f7f7;
-  border-bottom: 1px solid #ebebeb;
-  border-radius: 5px 5px 0 0; }
-
-.popover-content {
-  padding: 9px 14px; }
-
-.popover > .arrow, .popover > .arrow:after {
-  position: absolute;
-  display: block;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid; }
-
-.popover > .arrow {
-  border-width: 11px; }
-
-.popover > .arrow:after {
-  border-width: 10px;
-  content: ""; }
-
-.popover.top > .arrow {
-  left: 50%;
-  margin-left: -11px;
-  border-bottom-width: 0;
-  border-top-color: #999999;
-  border-top-color: rgba(0, 0, 0, 0.25);
-  bottom: -11px; }
-  .popover.top > .arrow:after {
-    content: " ";
-    bottom: 1px;
-    margin-left: -10px;
-    border-bottom-width: 0;
-    border-top-color: #fff; }
-
-.popover.right > .arrow {
-  top: 50%;
-  left: -11px;
-  margin-top: -11px;
-  border-left-width: 0;
-  border-right-color: #999999;
-  border-right-color: rgba(0, 0, 0, 0.25); }
-  .popover.right > .arrow:after {
-    content: " ";
-    left: 1px;
-    bottom: -10px;
-    border-left-width: 0;
-    border-right-color: #fff; }
-
-.popover.bottom > .arrow {
-  left: 50%;
-  margin-left: -11px;
-  border-top-width: 0;
-  border-bottom-color: #999999;
-  border-bottom-color: rgba(0, 0, 0, 0.25);
-  top: -11px; }
-  .popover.bottom > .arrow:after {
-    content: " ";
-    top: 1px;
-    margin-left: -10px;
-    border-top-width: 0;
-    border-bottom-color: #fff; }
-
-.popover.left > .arrow {
-  top: 50%;
-  right: -11px;
-  margin-top: -11px;
-  border-right-width: 0;
-  border-left-color: #999999;
-  border-left-color: rgba(0, 0, 0, 0.25); }
-  .popover.left > .arrow:after {
-    content: " ";
-    right: 1px;
-    border-right-width: 0;
-    border-left-color: #fff;
-    bottom: -10px; }
-
-.carousel {
-  position: relative; }
-
-.carousel-inner {
-  position: relative;
-  overflow: hidden;
-  width: 100%; }
-  .carousel-inner > .item {
-    display: none;
-    position: relative;
-    -webkit-transition: 0.6s ease-in-out left;
-    -o-transition: 0.6s ease-in-out left;
-    transition: 0.6s ease-in-out left; }
-    .carousel-inner > .item > img,
-    .carousel-inner > .item > a > img {
-      display: block;
-      max-width: 100%;
-      height: auto;
-      line-height: 1; }
-    @media all and (transform-3d), (-webkit-transform-3d) {
-      .carousel-inner > .item {
-        -webkit-transition: -webkit-transform 0.6s ease-in-out;
-        -moz-transition: -moz-transform 0.6s ease-in-out;
-        -o-transition: -o-transform 0.6s ease-in-out;
-        transition: transform 0.6s ease-in-out;
-        -webkit-backface-visibility: hidden;
-        -moz-backface-visibility: hidden;
-        backface-visibility: hidden;
-        -webkit-perspective: 1000px;
-        -moz-perspective: 1000px;
-        perspective: 1000px; }
-        .carousel-inner > .item.next, .carousel-inner > .item.active.right {
-          -webkit-transform: translate3d(100%, 0, 0);
-          transform: translate3d(100%, 0, 0);
-          left: 0; }
-        .carousel-inner > .item.prev, .carousel-inner > .item.active.left {
-          -webkit-transform: translate3d(-100%, 0, 0);
-          transform: translate3d(-100%, 0, 0);
-          left: 0; }
-        .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active {
-          -webkit-transform: translate3d(0, 0, 0);
-          transform: translate3d(0, 0, 0);
-          left: 0; } }
-  .carousel-inner > .active,
-  .carousel-inner > .next,
-  .carousel-inner > .prev {
-    display: block; }
-  .carousel-inner > .active {
-    left: 0; }
-  .carousel-inner > .next,
-  .carousel-inner > .prev {
-    position: absolute;
-    top: 0;
-    width: 100%; }
-  .carousel-inner > .next {
-    left: 100%; }
-  .carousel-inner > .prev {
-    left: -100%; }
-  .carousel-inner > .next.left,
-  .carousel-inner > .prev.right {
-    left: 0; }
-  .carousel-inner > .active.left {
-    left: -100%; }
-  .carousel-inner > .active.right {
-    left: 100%; }
-
-.carousel-control {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  width: 15%;
-  opacity: 0.5;
-  filter: alpha(opacity=50);
-  font-size: 20px;
-  color: #fff;
-  text-align: center;
-  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
-  background-color: transparent; }
-  .carousel-control.left {
-    background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
-    background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
-    background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
-    background-repeat: repeat-x;
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); }
-  .carousel-control.right {
-    left: auto;
-    right: 0;
-    background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
-    background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
-    background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
-    background-repeat: repeat-x;
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); }
-  .carousel-control:hover, .carousel-control:focus {
-    outline: 0;
-    color: #fff;
-    text-decoration: none;
-    opacity: 0.9;
-    filter: alpha(opacity=90); }
-  .carousel-control .icon-prev,
-  .carousel-control .icon-next,
-  .carousel-control .glyphicon-chevron-left,
-  .carousel-control .glyphicon-chevron-right {
-    position: absolute;
-    top: 50%;
-    margin-top: -10px;
-    z-index: 5;
-    display: inline-block; }
-  .carousel-control .icon-prev,
-  .carousel-control .glyphicon-chevron-left {
-    left: 50%;
-    margin-left: -10px; }
-  .carousel-control .icon-next,
-  .carousel-control .glyphicon-chevron-right {
-    right: 50%;
-    margin-right: -10px; }
-  .carousel-control .icon-prev,
-  .carousel-control .icon-next {
-    width: 20px;
-    height: 20px;
-    line-height: 1;
-    font-family: serif; }
-  .carousel-control .icon-prev:before {
-    content: '\2039'; }
-  .carousel-control .icon-next:before {
-    content: '\203a'; }
-
-.carousel-indicators {
-  position: absolute;
-  bottom: 10px;
-  left: 50%;
-  z-index: 15;
-  width: 60%;
-  margin-left: -30%;
-  padding-left: 0;
-  list-style: none;
-  text-align: center; }
-  .carousel-indicators li {
-    display: inline-block;
-    width: 10px;
-    height: 10px;
-    margin: 1px;
-    text-indent: -999px;
-    border: 1px solid #fff;
-    border-radius: 10px;
-    cursor: pointer;
-    background-color: #000 \9;
-    background-color: transparent; }
-  .carousel-indicators .active {
-    margin: 0;
-    width: 12px;
-    height: 12px;
-    background-color: #fff; }
-
-.carousel-caption {
-  position: absolute;
-  left: 15%;
-  right: 15%;
-  bottom: 20px;
-  z-index: 10;
-  padding-top: 20px;
-  padding-bottom: 20px;
-  color: #fff;
-  text-align: center;
-  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }
-  .carousel-caption .btn {
-    text-shadow: none; }
-
-@media screen and (min-width: 768px) {
-  .carousel-control .glyphicon-chevron-left,
-  .carousel-control .glyphicon-chevron-right,
-  .carousel-control .icon-prev,
-  .carousel-control .icon-next {
-    width: 30px;
-    height: 30px;
-    margin-top: -10px;
-    font-size: 30px; }
-  .carousel-control .glyphicon-chevron-left,
-  .carousel-control .icon-prev {
-    margin-left: -10px; }
-  .carousel-control .glyphicon-chevron-right,
-  .carousel-control .icon-next {
-    margin-right: -10px; }
-  .carousel-caption {
-    left: 20%;
-    right: 20%;
-    padding-bottom: 30px; }
-  .carousel-indicators {
-    bottom: 20px; } }
-
-.clearfix:before, .clearfix:after {
-  content: " ";
-  display: table; }
-
-.clearfix:after {
-  clear: both; }
-
-.center-block {
-  display: block;
-  margin-left: auto;
-  margin-right: auto; }
-
-.pull-right {
-  float: right !important; }
-
-.pull-left {
-  float: left !important; }
-
-.hide {
-  display: none !important; }
-
-.show {
-  display: block !important; }
-
-.invisible {
-  visibility: hidden; }
-
-.text-hide {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0; }
-
-.hidden {
-  display: none !important; }
-
-.affix {
-  position: fixed; }
-
-@-ms-viewport {
-  width: device-width; }
-
-.visible-xs {
-  display: none !important; }
-
-.visible-sm {
-  display: none !important; }
-
-.visible-md {
-  display: none !important; }
-
-.visible-lg {
-  display: none !important; }
-
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
-  display: none !important; }
-
-@media (max-width: 767px) {
-  .visible-xs {
-    display: block !important; }
-  table.visible-xs {
-    display: table !important; }
-  tr.visible-xs {
-    display: table-row !important; }
-  th.visible-xs,
-  td.visible-xs {
-    display: table-cell !important; } }
-
-@media (max-width: 767px) {
-  .visible-xs-block {
-    display: block !important; } }
-
-@media (max-width: 767px) {
-  .visible-xs-inline {
-    display: inline !important; } }
-
-@media (max-width: 767px) {
-  .visible-xs-inline-block {
-    display: inline-block !important; } }
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm {
-    display: block !important; }
-  table.visible-sm {
-    display: table !important; }
-  tr.visible-sm {
-    display: table-row !important; }
-  th.visible-sm,
-  td.visible-sm {
-    display: table-cell !important; } }
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-block {
-    display: block !important; } }
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-inline {
-    display: inline !important; } }
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-inline-block {
-    display: inline-block !important; } }
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md {
-    display: block !important; }
-  table.visible-md {
-    display: table !important; }
-  tr.visible-md {
-    display: table-row !important; }
-  th.visible-md,
-  td.visible-md {
-    display: table-cell !important; } }
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-block {
-    display: block !important; } }
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-inline {
-    display: inline !important; } }
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-inline-block {
-    display: inline-block !important; } }
-
-@media (min-width: 1200px) {
-  .visible-lg {
-    display: block !important; }
-  table.visible-lg {
-    display: table !important; }
-  tr.visible-lg {
-    display: table-row !important; }
-  th.visible-lg,
-  td.visible-lg {
-    display: table-cell !important; } }
-
-@media (min-width: 1200px) {
-  .visible-lg-block {
-    display: block !important; } }
-
-@media (min-width: 1200px) {
-  .visible-lg-inline {
-    display: inline !important; } }
-
-@media (min-width: 1200px) {
-  .visible-lg-inline-block {
-    display: inline-block !important; } }
-
-@media (max-width: 767px) {
-  .hidden-xs {
-    display: none !important; } }
-
-@media (min-width: 768px) and (max-width: 991px) {
-  .hidden-sm {
-    display: none !important; } }
-
-@media (min-width: 992px) and (max-width: 1199px) {
-  .hidden-md {
-    display: none !important; } }
-
-@media (min-width: 1200px) {
-  .hidden-lg {
-    display: none !important; } }
-
-.visible-print {
-  display: none !important; }
-
-@media print {
-  .visible-print {
-    display: block !important; }
-  table.visible-print {
-    display: table !important; }
-  tr.visible-print {
-    display: table-row !important; }
-  th.visible-print,
-  td.visible-print {
-    display: table-cell !important; } }
-
-.visible-print-block {
-  display: none !important; }
-  @media print {
-    .visible-print-block {
-      display: block !important; } }
-
-.visible-print-inline {
-  display: none !important; }
-  @media print {
-    .visible-print-inline {
-      display: inline !important; } }
-
-.visible-print-inline-block {
-  display: none !important; }
-  @media print {
-    .visible-print-inline-block {
-      display: inline-block !important; } }
-
-@media print {
-  .hidden-print {
-    display: none !important; } }
-
-/* ************************* HEADER STYLE ************************* */
-.header {
-  background-color: #ffffff !important;
-  border-bottom: 3px solid #C5CCD4;
-  margin-bottom: 14px;
-  height: 85px; }
-  .header .logo {
-    max-height: 80px; }
-  .header a {
-    font-weight: bold; }
-  .header #user-tools {
-    padding: 12px 20px 0px 0px;
-    float: right;
-    margin-top: -5px; }
-    @media (max-width: 991px) {
-      .header #user-tools .user-links *:not(:last-child) {
-        display: none; } }
-
-/************************* END HEADER *************************/
-/************************* NAV *************************/
-#sidebar-wrapper {
-  -webkit-box-shadow: 3px 0px 5px 0px rgba(50, 50, 50, 0.75);
-  -moz-box-shadow: 3px 0px 5px 0px rgba(50, 50, 50, 0.75);
-  box-shadow: 3px 0px 5px 0px rgba(50, 50, 50, 0.75); }
-  #sidebar-wrapper .logo {
-    max-width: 100%;
-    margin: 20px auto; }
-  #sidebar-wrapper a {
-    font-weight: bold; }
-  #sidebar-wrapper .icon-app {
-    background-image: url("opencloudApp.png"); }
-  #sidebar-wrapper .icon-home {
-    /*  Going with darker standard color nav -- so using over png's background-image: url("Home.png"); */
-    background-image: url("Home.png"); }
-  #sidebar-wrapper .icon-deployment {
-    background-image: url("Deployments.png"); }
-  #sidebar-wrapper .icon-site {
-    background-image: url("Sites.png"); }
-  #sidebar-wrapper .icon-slice {
-    background-image: url("Slices.png"); }
-  #sidebar-wrapper .icon-user {
-    background-image: url("Users.png"); }
-  #sidebar-wrapper .icon-reservation {
-    background-image: url("Reservations.png"); }
-  #sidebar-wrapper .icon-cog {
-    background-image: url("Services.png"); }
-  #sidebar-wrapper li.active a .icon-home,
-  #sidebar-wrapper li.focus a .icon-home {
-    background-image: url("Home_over.png"); }
-  #sidebar-wrapper li.active a .icon-deployment,
-  #sidebar-wrapper li.focus a .icon-deployment {
-    background-image: url("Deployments_over.png"); }
-  #sidebar-wrapper li.active a .icon-site,
-  #sidebar-wrapper li.focus a .icon-site {
-    background-image: url("Sites_over.png"); }
-  #sidebar-wrapper li.active a .icon-slice,
-  #sidebar-wrapper li.focus a .icon-slice {
-    background-image: url("Slices_over.png"); }
-  #sidebar-wrapper li.active a .icon-user,
-  #sidebar-wrapper li.focus a .icon-user {
-    background-image: url("Users_over.png"); }
-  #sidebar-wrapper li.active a .icon-reservation,
-  #sidebar-wrapper li.focus a .icon-reservation {
-    background-image: url("Reservations_over.png"); }
-  #sidebar-wrapper li.active a .icon-cog,
-  #sidebar-wrapper li.focus a .icon-cog {
-    background-image: url("Services_over.png"); }
-  #sidebar-wrapper li a {
-    transition: all .5s ease-in-out; }
-  #sidebar-wrapper li ul.dashboard-list {
-    padding-left: 20px; }
-    #sidebar-wrapper li ul.dashboard-list li {
-      list-style: none;
-      position: relative;
-      margin-top: 5px;
-      margin-bottom: 5px;
-      margin-left: 20px; }
-      #sidebar-wrapper li ul.dashboard-list li:before {
-        display: inline-block;
-        font-size: 2em;
-        font-weight: 200;
-        position: absolute;
-        top: 15px;
-        left: -15px;
-        line-height: 0;
-        content: '-';
-        background-color: #337ab7; }
-      #sidebar-wrapper li ul.dashboard-list li > a {
-        cursor: pointer;
-        display: block;
-        padding: 5px 0px;
-        margin-right: 0;
-        border-radius: 4px; }
-        #sidebar-wrapper li ul.dashboard-list li > a > img {
-          width: 20px; }
-        #sidebar-wrapper li ul.dashboard-list li > a:hover, #sidebar-wrapper li ul.dashboard-list li > a:focus {
-          padding-left: 15px;
-          text-decoration: none;
-          background-color: #eeeeee; }
-      #sidebar-wrapper li ul.dashboard-list li.active > a {
-        padding-left: 15px;
-        color: #fff;
-        background-color: #3c87c8; }
-  #sidebar-wrapper [class^="icon-"] {
-    background-position: left center;
-    width: 22px;
-    height: 22px;
-    display: inline-block;
-    margin-right: 10px;
-    position: relative;
-    top: 5px; }
-  #sidebar-wrapper .glyphicon-arrow-right {
-    display: none; }
-
-#wrapper.collapsed {
-  padding-left: 60px; }
-  #wrapper.collapsed #sidebar-wrapper {
-    width: 60px; }
-    #wrapper.collapsed #sidebar-wrapper a > span, #wrapper.collapsed #sidebar-wrapper .logo, #wrapper.collapsed #sidebar-wrapper .dashboard-list {
-      display: none; }
-    #wrapper.collapsed #sidebar-wrapper a {
-      padding: 10px; }
-    #wrapper.collapsed #sidebar-wrapper .glyphicon-arrow-left {
-      display: none; }
-    #wrapper.collapsed #sidebar-wrapper .glyphicon-arrow-right {
-      display: block; }
-
-/************************* END NAV *************************/
-/************************* FOOTER *************************/
-.footer {
-  z-index: 99;
-  position: fixed; }
-
-/* FIXME */
-@media (max-width: 768px) {
-  .footer {
-    display: none; }
-  #page-content-wrapper {
-    padding-bottom: 60px; } }
-
-.footer .content .statusMsg {
-  float: right;
-  padding: 15px 20px 0 0;
-  display: block; }
-
-/************************* END FOOTER *************************/
-table th a {
-  color: #000; }
-
-.nav-tabs-suit li.active a,
-.nav-tabs-suit li.active a:hover,
-.nav-tabs-suit li a:hover,
-.nav-tabs-suit > li.active > a:focus {
-  background-color: #337ab7;
-  color: #fff;
-  outline: none; }
-
-.nav-tabs > li {
-  margin-bottom: 0px; }
-
-.nav-tabs-suit li a {
-  letter-spacing: 1px; }
-
-#suit_form_tabs {
-  border-bottom-width: 5px !important;
-  border-bottom-style: solid;
-  border-bottom-color: #337ab7; }
-
-.ui-widget-header {
-  background: none !important;
-  border: none !important; }
-
-body.login img.logo {
-  width: 250px;
-  display: block;
-  margin: 20px auto;
-  padding-top: 20px; }
-
-.login {
-  background-image: url("bg.jpg");
-  background-size: cover;
-  background-position: center;
-  background-repeat: no-repeat; }
-
-.login #content-main {
-  float: none;
-  height: 330px;
-  margin: 100px auto 0;
-  width: 265px; }
-
-.login {
-  /*#forgot_pwd{
-    font-size: 11px;
-    font-style: normal;
-    text-decoration: none;
-  }
-  
-  #create_acct{
-    font-size: 11px;
-    font-style: normal;
-    text-decoration: none;
-    padding-left: 45px;
-  }*/ }
-  .login #content-main {
-    background: rgba(255, 255, 255, 0.82); }
-  .login #content-main form input[type=text],
-  .login #content-main form input[type=password],
-  .login .requestDialog.ui-widget input {
-    background-color: #faffbd; }
-  .login .row + .row {
-    margin-top: 10px; }
-  .login #content-main form {
-    margin: 5px 15px 0; }
-  .login .btn-primary {
-    color: #fff;
-    background-color: #337ab7;
-    border-color: #2e6da4;
-    background: #337ab7; }
-    .login .btn-primary:focus, .login .btn-primary.focus {
-      color: #fff;
-      background-color: #286090;
-      border-color: #122b40; }
-    .login .btn-primary:hover {
-      color: #fff;
-      background-color: #286090;
-      border-color: #204d74; }
-    .login .btn-primary:active, .login .btn-primary.active,
-    .open > .login .btn-primary.dropdown-toggle {
-      color: #fff;
-      background-color: #286090;
-      border-color: #204d74; }
-      .login .btn-primary:active:hover, .login .btn-primary:active:focus, .login .btn-primary:active.focus, .login .btn-primary.active:hover, .login .btn-primary.active:focus, .login .btn-primary.active.focus,
-      .open > .login .btn-primary.dropdown-toggle:hover,
-      .open > .login .btn-primary.dropdown-toggle:focus,
-      .open > .login .btn-primary.dropdown-toggle.focus {
-        color: #fff;
-        background-color: #204d74;
-        border-color: #122b40; }
-    .login .btn-primary:active, .login .btn-primary.active,
-    .open > .login .btn-primary.dropdown-toggle {
-      background-image: none; }
-    .login .btn-primary.disabled:hover, .login .btn-primary.disabled:focus, .login .btn-primary.disabled.focus, .login .btn-primary[disabled]:hover, .login .btn-primary[disabled]:focus, .login .btn-primary[disabled].focus,
-    fieldset[disabled] .login .btn-primary:hover,
-    fieldset[disabled] .login .btn-primary:focus,
-    fieldset[disabled] .login .btn-primary.focus {
-      background-color: #337ab7;
-      border-color: #2e6da4; }
-    .login .btn-primary .badge {
-      color: #337ab7;
-      background-color: #fff; }
-  .login .forgotLink {
-    width: 45%;
-    text-align: left;
-    float: left; }
-  .login #request-account-form {
-    display: none; }
-  .login #requestAccountLink {
-    margin-top: 10px;
-    cursor: pointer;
-    color: #337ab7;
-    text-decoration: underline; }
-
-.breadcrumb li a {
-  font-weight: bold; }
-
-.form-control {
-  width: auto;
-  min-width: 100%; }
-
-body.logout img.logo {
-  width: 250px;
-  display: block;
-  margin: 20px auto;
-  padding-top: 20px; }
-
-h1.logouth1tag {
-  text-align: center; }
-
-.logout #content-main {
-  float: none;
-  width: 300px;
-  overflow-x: hidden; }
-
-.logout {
-  background: rgba(255, 255, 255, 0.82);
-  float: none;
-  height: 330px;
-  margin: 100px auto 0;
-  width: 316px;
-  overflow-x: hidden;
-  overflow-y: hidden;
-  padding: 10px 0px 0px 10px; }
-  .logout .requestDialog.ui-widget input {
-    background-color: #faffbd; }
-  .logout .row + .row {
-    margin-top: 10px; }
-  .logout .btn-primary {
-    color: #fff;
-    background-color: #337ab7;
-    border-color: #2e6da4;
-    background: #337ab7; }
-    .logout .btn-primary:focus, .logout .btn-primary.focus {
-      color: #fff;
-      background-color: #286090;
-      border-color: #122b40; }
-    .logout .btn-primary:hover {
-      color: #fff;
-      background-color: #286090;
-      border-color: #204d74; }
-    .logout .btn-primary:active, .logout .btn-primary.active,
-    .open > .logout .btn-primary.dropdown-toggle {
-      color: #fff;
-      background-color: #286090;
-      border-color: #204d74; }
-      .logout .btn-primary:active:hover, .logout .btn-primary:active:focus, .logout .btn-primary:active.focus, .logout .btn-primary.active:hover, .logout .btn-primary.active:focus, .logout .btn-primary.active.focus,
-      .open > .logout .btn-primary.dropdown-toggle:hover,
-      .open > .logout .btn-primary.dropdown-toggle:focus,
-      .open > .logout .btn-primary.dropdown-toggle.focus {
-        color: #fff;
-        background-color: #204d74;
-        border-color: #122b40; }
-    .logout .btn-primary:active, .logout .btn-primary.active,
-    .open > .logout .btn-primary.dropdown-toggle {
-      background-image: none; }
-    .logout .btn-primary.disabled:hover, .logout .btn-primary.disabled:focus, .logout .btn-primary.disabled.focus, .logout .btn-primary[disabled]:hover, .logout .btn-primary[disabled]:focus, .logout .btn-primary[disabled].focus,
-    fieldset[disabled] .logout .btn-primary:hover,
-    fieldset[disabled] .logout .btn-primary:focus,
-    fieldset[disabled] .logout .btn-primary.focus {
-      background-color: #337ab7;
-      border-color: #2e6da4; }
-    .logout .btn-primary .badge {
-      color: #337ab7;
-      background-color: #fff; }
-  .logout p.logoutptag {
-    margin: 20px 10px 20px;
-    font-size: 16px;
-    text-align: center; }
-
-/************************
-colors:
-    tab - active/focus color
-    background-color: #105E9E !important;
-
-ONLab darker blue select :: background-color: #004775;
-#0170BB
-    left-nav
-    background-color: #448CCA;
-    background-color // normal: #B4CADF
-91BFE4
-
-*************************/
-html, body, body.login {
-  height: 100%;
-  min-height: 100%;
-  margin: 0; }
-
-body {
-  max-width: 100%;
-  overflow-x: hidden; }
-
-#wrap {
-  height: 100%;
-  min-height: 100%;
-  padding-bottom: 60px; }
-
-/* ************************* SIDENAV TOGGLE ************************* */
-#wrapper {
-  padding-left: 0;
-  transition: all 0.5s ease;
-  min-height: 100%;
-  height: 100%; }
-
-#wrapper.toggled {
-  padding-left: 250px; }
-
-#sidebar-wrapper {
-  z-index: 99;
-  position: fixed;
-  left: 250px;
-  width: 0;
-  height: 100%;
-  margin-left: -250px;
-  overflow-y: auto;
-  transition: all 0.5s ease;
-  background: white; }
-
-#wrapper.toggled #sidebar-wrapper {
-  width: 250px;
-  padding: 10px; }
-
-#page-content-wrapper {
-  width: 100%;
-  position: absolute;
-  padding: 15px;
-  min-height: 100%;
-  height: 100%; }
-  #page-content-wrapper .container-fluid,
-  #page-content-wrapper .content-wrapper,
-  #page-content-wrapper .content-wrapper .col-lg-12,
-  #page-content-wrapper .suit-columns,
-  #page-content-wrapper #content {
-    min-height: 100%;
-    height: 100%; }
-  #page-content-wrapper #content {
-    padding-left: 15px;
-    padding-right: 15px; }
-  #page-content-wrapper #content-main {
-    /*padding: ($grid-gutter-width / 2);*/
-    padding-bottom: 60px; }
-
-.ui-tabs-panel {
-  min-height: 700px; }
-
-#wrapper.toggled #page-content-wrapper {
-  position: absolute;
-  margin-right: -250px; }
-
-@media (min-width: 768px) {
-  #wrapper {
-    padding-left: 250px; }
-  #wrapper.toggled {
-    padding-left: 0; }
-  #sidebar-wrapper {
-    width: 250px;
-    padding: 10px; }
-  #wrapper.toggled #sidebar-wrapper {
-    width: 0; }
-  #page-content-wrapper {
-    padding: 20px;
-    position: relative; }
-  #wrapper.toggled #page-content-wrapper {
-    position: relative;
-    margin-right: 0; } }
-
-.navbar-toggle {
-  border: 1px solid #337ab7; }
-
-.navbar-toggle .icon-bar {
-  background: #337ab7; }
-
-/* ************************* END SIDENAV TOGGLE ************************* */
-
-[ui-view] {
-  margin-bottom: 100px; }
-
-/************************* FORM TWEAKS *************************/
-@media (min-width: 992px) {
-  .form-column.col-lg-4 {
-    width: 66.66666667%; } }
-
-/************************* END FORM TWEAKS *************************/
-/*   CSS for jquery Tabs */
-.alignCenter {
-  text-align: center !important;
-  align: center !important; }
-
-.ui-widget-overlay {
-  background: black !important; }
-
-.ui-corner-all {
-  border-bottom-left-radius: 0px !important;
-  border-bottom-right-radius: 0px !important; }
-
-#openCloudTopPage {
-  margin-top: -25px;
-  margin-right: -90;
-  float: right; }
-
-#minDashboard {
-  /*min-width:625px; */
-  display: inline;
-  float: right;
-  border: 2px darkGrey; }
-
-.save-box {
-  background-color: #ffffff;
-  margin: 2px; }
-
-.save-box .btn-info {
-  font-size: 14px;
-  padding: 10px 20px 10px 20px; }
-
-.required:after {
-  color: red !important;
-  font-size: 18px; }
-
-/*.btn-success {color:black}*/
-#suit-center {
-  padding: 20px;
-  width: 100%;
-  /*min-width:650px;*/ }
-
-.inner-two-columns .inner-center-column .tab-content {
-  overflow-x: auto;
-  margin-bottom: 15px;
-  /*min-width: auto;*/
-  width: 100%; }
-
-/*.inner-two-columns .inner-center-column {
-  margin-right: 200px;
-  background-color: rgb(158, 163, 159);
-}*/
-label {
-  display: block;
-  font-weight: bold;
-  margin-bottom: 5px; }
-
-/*For changing background color of suit center*/
-#suit-center {
-  background-color: #ffffff; }
-
-/** Leave room for scroll bar now that contents can be appropriately scrolled **/
-.form-horizontal .inline-group .add-row {
-  margin: -1px -1px 15px 0px; }
-
-/** Setting overflow and 1kpx to deal with inlines/forms overlapping on 
-    browser resizes **/
-#content-main {
-  /*overflow-x:auto;*/
-  /*min-width: 1000px;*/ }
-
-.tab-content tab-content-main {
-  overflow-x: auto !important; }
-
-#wrap {
-  background: none; }
-
-.noclearfix {
-  display: block;
-  clear: left;
-  width: 0px;
-  height: 0px; }
-
-body {
-  background-color: #ffffff; }
-
-.suit-column {
-  background-color: #ffffff; }
-
-.nav-tabs > .active > a, .nav-tabs > .active > a:hover, .nav-tabs > .active > a:focus {
-  /*background-color: #448CCA;*/
-  background-color: #105E9E;
-  color: #FFF;
-  border: none; }
-
-/*Added by Beena for adding the three components in dashboard*/
-.breadcrumb {
-  display: inline-block;
-  background-color: #fff; }
-
-.nodetextbox {
-  /*background-color: #ededed;*/
-  line-height: 25px;
-  width: 150px;
-  text-align: center;
-  font-weight: bold;
-  margin-left: 0px;
-  display: inline-block;
-  border: none;
-  font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
-  font-size: 8px; }
-
-.nodelabel {
-  width: 20px;
-  display: inline-block;
-  border-radius: 0px;
-  border: 1px solid #000;
-  /*line-height: 23px;*/
-  text-align: center;
-  font-weight: normal; }
-
-#user-tools {
-  font-weight: bold; }
-
-.header-content .header-column {
-  display: none; }
-
-.header .input-icon {
-  background-image: url("Search.png");
-  background-repeat: no-repeat;
-  background-position: left center;
-  opacity: 1;
-  background-size: 100%;
-  vertical-align: middle;
-  margin-right: -30px;
-  /*margin-top: 5px;*/
-  position: relative;
-  height: 22px;
-  width: 22px; }
-
-.header .icon-search {
-  /*background-image: url("search.png") !important;
-    background-repeat: no-repeat !important;
-    background-size: 120% auto !important;
-    background-position: 0;*/ }
-
-#dashboardHPC {
-  padding-bottom: 10px; }
-
-.summary-attr {
-  padding-right: 20px; }
-
-.summary-attr-util {
-  padding-right: 20px;
-  color: green; }
-
-.SiteDetail {
-  color: darkBlue;
-  font-size: 1.5em; }
-
-#addInstances {
-  color: green;
-  text-decoration: underline;
-  padding-right: 20px; }
-
-#remInstances {
-  color: red;
-  text-decoration: underline; }
-
-#map-us {
-  padding-top: 10px;
-  width: 700px;
-  height: 400px; }
-
-.minidashbutton {
-  -moz-box-shadow: inset 0px 1px 0px 0px #ffffff;
-  -webkit-box-shadow: inset 0px 1px 0px 0px #ffffff;
-  box-shadow: inset 0px 1px 0px 0px #ffffff;
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0.05, #ffffff), color-stop(1, #f6f6f6));
-  background: -moz-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
-  background: -webkit-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
-  background: -o-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
-  background: -ms-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
-  background: linear-gradient(to bottom, #ffffff 5%, #f6f6f6 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f6f6f6',GradientType=0);
-  background-color: #ffffff;
-  -moz-border-radius: 6px;
-  -webkit-border-radius: 6px;
-  border-radius: 6px;
-  border: 1px solid #dcdcdc;
-  display: inline-block;
-  cursor: pointer;
-  color: #666666;
-  font-family: arial;
-  font-size: 15px;
-  font-weight: bold;
-  padding: 6px 24px;
-  text-decoration: none;
-  text-shadow: 0px 1px 0px #ffffff; }
-
-.minidashbutton:hover {
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0.05, #f6f6f6), color-stop(1, #ffffff));
-  background: -moz-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
-  background: -webkit-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
-  background: -o-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
-  background: -ms-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
-  background: linear-gradient(to bottom, #f6f6f6 5%, #ffffff 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6f6f6', endColorstr='#ffffff',GradientType=0);
-  background-color: #f6f6f6; }
-
-.newMiniDashboard {
-  border: 1px solid green;
-  width: auto; }
-
-.endDashPair {
-  clear: left; }
-
-.miniDashPair {
-  float: left;
-  width: auto;
-  margin-left: 20px; }
-
-.miniDashPair label {
-  text-align: center; }
-
-/* Charts CSS */
-p.numeral {
-  font-size: 32pt;
-  color: #ffffff;
-  opacity: 0.7;
-  font-family: Helvetica Neue;
-  font-weight: 100;
-  text-align: center;
-  line-height: 75%; }
-
-.helper-text {
-  border: 1px solid #fff;
-  padding: 7px;
-  border-radius: 18px;
-  font-size: 13pt;
-  color: #ffffff;
-  opacity: 0.7;
-  font-family: Helvetica Neue;
-  font-weight: 200;
-  text-align: center;
-  line-height: 100%; }
-
-p.osobject {
-  font-size: 12pt;
-  color: #ffffff;
-  opacity: 0.7;
-  font-family: Helvetica Neue;
-  font-weight: 200;
-  text-align: center;
-  line-height: 100%; }
-
-p.heading {
-  font-size: 20px;
-  letter-spacing: 1px;
-  color: black;
-  font-family: Arial;
-  font-weight: bold;
-  text-align: center; }
-
-/*p.heading
-{
-	font-size:32pt;
-	color:#ffffff;
-	opacity: 0.7;
-	font-family:Helvetica Neue;
-	font-weight:200;
-	text-align:center;
-}*/
-div.graph {
-  height: 340px; }
-
-div.numeral {
-  height: 120px; }
-
-div.heading {
-  height: 10px; }
-
-div.padding {
-  height: 20px; }
-
-div.chartContainer {
-  /*background-image:url('chartsBg.jpg');*/
-  width: 527px;
-  height: 400px;
-  border: 1px; }
-
-/* D3 */
-.axis path,
-.axis line {
-  fill: none;
-  stroke: #ffffff;
-  opacity: 0.7;
-  shape-rendering: crispEdges; }
-
-.x.axis path {
-  display: none; }
-
-.x.axis text {
-  fill: white;
-  opacity: 0.5; }
-
-.y.axis text {
-  opacity: 0.5;
-  fill: white; }
-
-.y.axis text.legend {
-  opacity: 1.0;
-  fill: white;
-  font-size: 8pt; }
-
-.line {
-  fill: none;
-  stroke: white;
-  stroke-width: 3px;
-  opacity: 0.6; }
-
-/******  Added in so that we can have a loader show as charts get ready to render ***/
-.loading {
-  background-image: url(spinner.gif) no-repeat center middle;
-  text-align: center;
-  font-size: 20px;
-  height: 100%;
-  /*    width: auto;*/
-  float: left;
-  padding: 10px; }
-
-/* Charts CSS */
-#tabs-4 {
-  margin: 40px;
-  font-size: 24px;
-  font-weight: bold; }
-
-.tenant-row {
-  padding-bottom: 0.7%; }
-
-/***********TENANT VIEW*************/
-#image-dropdown, #slice-image-value, #adv-slice-image-value {
-  margin-left: 5%; }
-
-#adv-slice-image-value {
-  margin-right: 0.5%; }
-
-#adv-network-value {
-  margin-right: 0.3%; }
-
-#network-dropdown, #adv-network-dropdown, #adv-network-value {
-  margin-left: 3.7%; }
-
-#service-level-dropdown, #service-level-value, #adv-service-level-dropdown, #adv-service-level-value {
-  margin-left: 0.2% !important; }
-
-#slice-name-value, #adv-slice-name-value {
-  margin-left: 2%; }
-
-#adv-dataset-dropdown {
-  margin-left: 3.7%; }
-
-#advanced-tenant, #basic-tenant, #instance-btn, #save-btn {
-  float: right; }
-
-#delete-slice-btn, #download-details, #add-user-btn {
-  margin-left: 1%; }
-
-#instance-btn, #save-btn, #create-slice-btn, #delete-slice-btn, #add-user-btn, #download-details {
-  margin-top: 1%; }
-
-.tenantDialog.ui-widget input {
-  border-radius: 0px !important;
-  height: 12px !important;
-  width: 180px !important;
-  margin-right: 10% !important;
-  float: right; }
-
-.tenantDialog .ui-dialog-buttonset .ui-button {
-  border-radius: 0 !important;
-  background-color: grey !important;
-  font-weight: bold !important;
-  font-size: 0.9em !important; }
-
-.tenantDialog .ui-dialog-titlebar {
-  border-radius: 0 !important;
-  background-color: grey !important; }
-
-.create-slice-row {
-  margin-bottom: 4%;
-  clear: both;
-  height: 25px; }
-
-.create-slice-row label, .tenantDialog label {
-  margin-right: 1%;
-  float: left; }
-
-.create-slice-row select {
-  height: 24px;
-  width: 196px;
-  font-size: 0.9em !important; }
-
-.tenant-create-slice {
-  float: right;
-  margin-right: 10% !important; }
-
-#delete-slice {
-  float: right; }
-
-#tooltip, #adv-tooltip, #basic-tooltip {
-  font-size: 0.7em;
-  color: red;
-  display: none; }
-
-#tenantSliceDataWrapper {
-  padding: 1% 0; }
-
-#advancedTenantSliceDataWrapper .help-inline {
-  font-size: 11px;
-  color: #999;
-  padding-bottom: 1%; }
-
-.create-slice-row label {
-  clear: both;
-  margin-right: 1%; }
-
-#advNumOfInstances {
-  margin-right: 1% !important; }
-
-#private-vol-checkbox {
-  margin: 0 0 1% 1%; }
-
-.public-key-warning {
-  text-align: center;
-  display: none; }
-
-#private-vol {
-  margin-right: 15% !important; }
-
-.customize_row {
-  display: table; }
-
-.customize_column {
-  display: table-cell;
-  padding: 10px; }
-
-.request-form-row {
-  padding: 1% 8%; }
-
-.requestDialog {
-  background-color: white;
-  border-radius: 8px;
-  width: 30% !important;
-  height: 40% !important;
-  margin-top: -16%;
-  top: -103.703125px !important; }
-
-.request-form-row label {
-  float: left; }
-
-.requestDialog .ui-dialog-buttonset .ui-button {
-  border-radius: 0 !important;
-  background-color: grey !important;
-  font-weight: bold !important;
-  font-size: 0.9em !important; }
-
-.requestDialog .ui-dialog-titlebar-close {
-  float: right; }
-
-#request-signup {
-  height: 40px !important;
-  margin: 0 14%;
-  float: left;
-  background-color: #448CCA;
-  background-image: none;
-  width: 70% !important; }
-
-.requestDialog .ui-dialog-titlebar {
-  border-radius: 0 !important;
-  height: 25px;
-  padding-top: 2%; }
-
-.requestDialog #ui-id-1 {
-  padding-left: 28%;
-  font-size: medium; }
-
-#request-site-name {
-  width: 98%; }
-
-/* SUIT CHANGES */
-.form-buttons {
-  margin-top: 20px;
-  padding: 10px;
-  border-top: 1px solid #cccccc; }
-
-.form-horizontal .selector .selector-chooser li .selector-remove,
-.form-horizontal .selector .selector-chooser li .selector-remove:hover {
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.42857;
-  border-radius: 4px;
-  color: #fff;
-  background-color: #d9534f;
-  border-color: #d43f3a; }
-  .form-horizontal .selector .selector-chooser li .selector-remove:focus, .form-horizontal .selector .selector-chooser li .selector-remove.focus,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover:focus,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover.focus {
-    color: #fff;
-    background-color: #c9302c;
-    border-color: #761c19; }
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover:hover {
-    color: #fff;
-    background-color: #c9302c;
-    border-color: #ac2925; }
-  .form-horizontal .selector .selector-chooser li .selector-remove:active, .form-horizontal .selector .selector-chooser li .selector-remove.active,
-  .open > .form-horizontal .selector .selector-chooser li .selector-remove.dropdown-toggle,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover:active,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover.active,
-  .open >
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover.dropdown-toggle {
-    color: #fff;
-    background-color: #c9302c;
-    border-color: #ac2925; }
-    .form-horizontal .selector .selector-chooser li .selector-remove:active:hover, .form-horizontal .selector .selector-chooser li .selector-remove:active:focus, .form-horizontal .selector .selector-chooser li .selector-remove:active.focus, .form-horizontal .selector .selector-chooser li .selector-remove.active:hover, .form-horizontal .selector .selector-chooser li .selector-remove.active:focus, .form-horizontal .selector .selector-chooser li .selector-remove.active.focus,
-    .open > .form-horizontal .selector .selector-chooser li .selector-remove.dropdown-toggle:hover,
-    .open > .form-horizontal .selector .selector-chooser li .selector-remove.dropdown-toggle:focus,
-    .open > .form-horizontal .selector .selector-chooser li .selector-remove.dropdown-toggle.focus,
-    .form-horizontal .selector .selector-chooser li .selector-remove:hover:active:hover,
-    .form-horizontal .selector .selector-chooser li .selector-remove:hover:active:focus,
-    .form-horizontal .selector .selector-chooser li .selector-remove:hover:active.focus,
-    .form-horizontal .selector .selector-chooser li .selector-remove:hover.active:hover,
-    .form-horizontal .selector .selector-chooser li .selector-remove:hover.active:focus,
-    .form-horizontal .selector .selector-chooser li .selector-remove:hover.active.focus,
-    .open >
-    .form-horizontal .selector .selector-chooser li .selector-remove:hover.dropdown-toggle:hover,
-    .open >
-    .form-horizontal .selector .selector-chooser li .selector-remove:hover.dropdown-toggle:focus,
-    .open >
-    .form-horizontal .selector .selector-chooser li .selector-remove:hover.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #ac2925;
-      border-color: #761c19; }
-  .form-horizontal .selector .selector-chooser li .selector-remove:active, .form-horizontal .selector .selector-chooser li .selector-remove.active,
-  .open > .form-horizontal .selector .selector-chooser li .selector-remove.dropdown-toggle,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover:active,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover.active,
-  .open >
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover.dropdown-toggle {
-    background-image: none; }
-  .form-horizontal .selector .selector-chooser li .selector-remove.disabled:hover, .form-horizontal .selector .selector-chooser li .selector-remove.disabled:focus, .form-horizontal .selector .selector-chooser li .selector-remove.disabled.focus, .form-horizontal .selector .selector-chooser li .selector-remove[disabled]:hover, .form-horizontal .selector .selector-chooser li .selector-remove[disabled]:focus, .form-horizontal .selector .selector-chooser li .selector-remove[disabled].focus,
-  fieldset[disabled] .form-horizontal .selector .selector-chooser li .selector-remove:hover,
-  fieldset[disabled] .form-horizontal .selector .selector-chooser li .selector-remove:focus,
-  fieldset[disabled] .form-horizontal .selector .selector-chooser li .selector-remove.focus,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover.disabled:hover,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover.disabled:focus,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover.disabled.focus,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover[disabled]:hover,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover[disabled]:focus,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover[disabled].focus,
-  fieldset[disabled]
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover:hover,
-  fieldset[disabled]
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover:focus,
-  fieldset[disabled]
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover.focus {
-    background-color: #d9534f;
-    border-color: #d43f3a; }
-  .form-horizontal .selector .selector-chooser li .selector-remove .badge,
-  .form-horizontal .selector .selector-chooser li .selector-remove:hover .badge {
-    color: #d9534f;
-    background-color: #fff; }
-
-.form-horizontal .selector .selector-chooser li .selector-add,
-.form-horizontal .selector .selector-chooser li .selector-add:hover {
-  margin-bottom: 15px;
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.42857;
-  border-radius: 4px;
-  color: #fff;
-  background-color: #5cb85c;
-  border-color: #4cae4c; }
-  .form-horizontal .selector .selector-chooser li .selector-add:focus, .form-horizontal .selector .selector-chooser li .selector-add.focus,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover:focus,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover.focus {
-    color: #fff;
-    background-color: #449d44;
-    border-color: #255625; }
-  .form-horizontal .selector .selector-chooser li .selector-add:hover,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover:hover {
-    color: #fff;
-    background-color: #449d44;
-    border-color: #398439; }
-  .form-horizontal .selector .selector-chooser li .selector-add:active, .form-horizontal .selector .selector-chooser li .selector-add.active,
-  .open > .form-horizontal .selector .selector-chooser li .selector-add.dropdown-toggle,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover:active,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover.active,
-  .open >
-  .form-horizontal .selector .selector-chooser li .selector-add:hover.dropdown-toggle {
-    color: #fff;
-    background-color: #449d44;
-    border-color: #398439; }
-    .form-horizontal .selector .selector-chooser li .selector-add:active:hover, .form-horizontal .selector .selector-chooser li .selector-add:active:focus, .form-horizontal .selector .selector-chooser li .selector-add:active.focus, .form-horizontal .selector .selector-chooser li .selector-add.active:hover, .form-horizontal .selector .selector-chooser li .selector-add.active:focus, .form-horizontal .selector .selector-chooser li .selector-add.active.focus,
-    .open > .form-horizontal .selector .selector-chooser li .selector-add.dropdown-toggle:hover,
-    .open > .form-horizontal .selector .selector-chooser li .selector-add.dropdown-toggle:focus,
-    .open > .form-horizontal .selector .selector-chooser li .selector-add.dropdown-toggle.focus,
-    .form-horizontal .selector .selector-chooser li .selector-add:hover:active:hover,
-    .form-horizontal .selector .selector-chooser li .selector-add:hover:active:focus,
-    .form-horizontal .selector .selector-chooser li .selector-add:hover:active.focus,
-    .form-horizontal .selector .selector-chooser li .selector-add:hover.active:hover,
-    .form-horizontal .selector .selector-chooser li .selector-add:hover.active:focus,
-    .form-horizontal .selector .selector-chooser li .selector-add:hover.active.focus,
-    .open >
-    .form-horizontal .selector .selector-chooser li .selector-add:hover.dropdown-toggle:hover,
-    .open >
-    .form-horizontal .selector .selector-chooser li .selector-add:hover.dropdown-toggle:focus,
-    .open >
-    .form-horizontal .selector .selector-chooser li .selector-add:hover.dropdown-toggle.focus {
-      color: #fff;
-      background-color: #398439;
-      border-color: #255625; }
-  .form-horizontal .selector .selector-chooser li .selector-add:active, .form-horizontal .selector .selector-chooser li .selector-add.active,
-  .open > .form-horizontal .selector .selector-chooser li .selector-add.dropdown-toggle,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover:active,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover.active,
-  .open >
-  .form-horizontal .selector .selector-chooser li .selector-add:hover.dropdown-toggle {
-    background-image: none; }
-  .form-horizontal .selector .selector-chooser li .selector-add.disabled:hover, .form-horizontal .selector .selector-chooser li .selector-add.disabled:focus, .form-horizontal .selector .selector-chooser li .selector-add.disabled.focus, .form-horizontal .selector .selector-chooser li .selector-add[disabled]:hover, .form-horizontal .selector .selector-chooser li .selector-add[disabled]:focus, .form-horizontal .selector .selector-chooser li .selector-add[disabled].focus,
-  fieldset[disabled] .form-horizontal .selector .selector-chooser li .selector-add:hover,
-  fieldset[disabled] .form-horizontal .selector .selector-chooser li .selector-add:focus,
-  fieldset[disabled] .form-horizontal .selector .selector-chooser li .selector-add.focus,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover.disabled:hover,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover.disabled:focus,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover.disabled.focus,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover[disabled]:hover,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover[disabled]:focus,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover[disabled].focus,
-  fieldset[disabled]
-  .form-horizontal .selector .selector-chooser li .selector-add:hover:hover,
-  fieldset[disabled]
-  .form-horizontal .selector .selector-chooser li .selector-add:hover:focus,
-  fieldset[disabled]
-  .form-horizontal .selector .selector-chooser li .selector-add:hover.focus {
-    background-color: #5cb85c;
-    border-color: #4cae4c; }
-  .form-horizontal .selector .selector-chooser li .selector-add .badge,
-  .form-horizontal .selector .selector-chooser li .selector-add:hover .badge {
-    color: #5cb85c;
-    background-color: #fff; }
-
-/* MODAL */
-.ui-dialog {
-  z-index: 4000 !important; }
-
-button.ui-dialog-titlebar-close {
-  font-family: 'Glyphicons Halflings' !important;
-  display: inline-block; }
-
-button.ui-dialog-titlebar-close:after {
-  content: "\e014"; }
-
-/* VCPe ADMIN FIX
-form#vcpeservice_form ul li {
-    display: inline-block;
-    background: red;
-    margin-top: 10px;
-    width: auto;
-    padding: 10px;
-    border-radius: 5px;
-}
-*/
-
-/*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAiLi4vLi4veG9zL2NvcmUvc3RhdGljL3hvcy5jc3MiLAoJInNvdXJjZXMiOiBbCgkJInNhc3MveG9zLnNjc3MiLAoJCSJzYXNzL2xpYi9fdmFyaWFibGVzLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvX3ZhcmlhYmxlcy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvX2Jvb3RzdHJhcC5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL19taXhpbnMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9taXhpbnMvX2hpZGUtdGV4dC5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9fb3BhY2l0eS5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9faW1hZ2Uuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9taXhpbnMvX2xhYmVscy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9fcmVzZXQtZmlsdGVyLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvbWl4aW5zL19yZXNpemUuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9taXhpbnMvX3Jlc3BvbnNpdmUtdmlzaWJpbGl0eS5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9fc2l6ZS5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9fdGFiLWZvY3VzLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvbWl4aW5zL19yZXNldC10ZXh0LnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvbWl4aW5zL190ZXh0LWVtcGhhc2lzLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvbWl4aW5zL190ZXh0LW92ZXJmbG93LnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvbWl4aW5zL192ZW5kb3ItcHJlZml4ZXMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9taXhpbnMvX2FsZXJ0cy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9fYnV0dG9ucy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9fcGFuZWxzLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvbWl4aW5zL19wYWdpbmF0aW9uLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvbWl4aW5zL19saXN0LWdyb3VwLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvbWl4aW5zL19uYXYtZGl2aWRlci5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9fZm9ybXMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9taXhpbnMvX3Byb2dyZXNzLWJhci5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9fdGFibGUtcm93LnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvbWl4aW5zL19iYWNrZ3JvdW5kLXZhcmlhbnQuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9taXhpbnMvX2JvcmRlci1yYWRpdXMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9taXhpbnMvX2dyYWRpZW50cy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9fY2xlYXJmaXguc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9taXhpbnMvX2NlbnRlci1ibG9jay5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9fbmF2LXZlcnRpY2FsLWFsaWduLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvbWl4aW5zL19ncmlkLWZyYW1ld29yay5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL21peGlucy9fZ3JpZC5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL19ub3JtYWxpemUuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fcHJpbnQuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fZ2x5cGhpY29ucy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL19zY2FmZm9sZGluZy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL190eXBlLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvX2NvZGUuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fZ3JpZC5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL190YWJsZXMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fZm9ybXMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fYnV0dG9ucy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL19jb21wb25lbnQtYW5pbWF0aW9ucy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL19kcm9wZG93bnMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fYnV0dG9uLWdyb3Vwcy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL19pbnB1dC1ncm91cHMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fbmF2cy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL19uYXZiYXIuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fYnJlYWRjcnVtYnMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fcGFnaW5hdGlvbi5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL19wYWdlci5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL19sYWJlbHMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fYmFkZ2VzLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvX2p1bWJvdHJvbi5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL190aHVtYm5haWxzLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvX2FsZXJ0cy5zY3NzIiwKCQkic2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL19wcm9ncmVzcy1iYXJzLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvX21lZGlhLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvX2xpc3QtZ3JvdXAuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fcGFuZWxzLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvX3Jlc3BvbnNpdmUtZW1iZWQuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fd2VsbHMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fY2xvc2Uuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fbW9kYWxzLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvX3Rvb2x0aXAuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fcG9wb3ZlcnMuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fY2Fyb3VzZWwuc2NzcyIsCgkJInNhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fdXRpbGl0aWVzLnNjc3MiLAoJCSJzYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvX3Jlc3BvbnNpdmUtdXRpbGl0aWVzLnNjc3MiLAoJCSJzYXNzL2xpYi9oZWFkZXIuc2NzcyIsCgkJInNhc3MvbGliL25hdi5zY3NzIiwKCQkic2Fzcy9saWIvZm9vdGVyLnNjc3MiLAoJCSJzYXNzL2xpYi90YWJsZS5zY3NzIiwKCQkic2Fzcy9saWIvdGFicy5zY3NzIiwKCQkic2Fzcy9saWIvbG9naW4uc2NzcyIsCgkJInNhc3MvbGliL2JyZWFkY3J1bWIuc2NzcyIsCgkJInNhc3MvbGliL2Zvcm0uc2NzcyIsCgkJInNhc3MvbGliL2xvZ291dC5zY3NzIgoJXSwKCSJtYXBwaW5ncyI6ICI7QUdBQTs7OztHQUlHO0FnQ0pILDRFQUE0RTtBQVE1RSxBQUFBLElBQUksQ0FBQztFQUNILFdBQVcsRUFBRSxVQUFXO0VBQ3hCLG9CQUFvQixFQUFFLElBQUs7RUFDM0Isd0JBQXdCLEVBQUUsSUFBSyxHQUNoQzs7QUFNRCxBQUFBLElBQUksQ0FBQztFQUNILE1BQU0sRUFBRSxDQUFFLEdBQ1g7O0FBWUQsQUFBQSxPQUFPO0FBQ1AsQUFBQSxLQUFLO0FBQ0wsQUFBQSxPQUFPO0FBQ1AsQUFBQSxVQUFVO0FBQ1YsQUFBQSxNQUFNO0FBQ04sQUFBQSxNQUFNO0FBQ04sQUFBQSxNQUFNO0FBQ04sQUFBQSxNQUFNO0FBQ04sQUFBQSxJQUFJO0FBQ0osQUFBQSxJQUFJO0FBQ0osQUFBQSxHQUFHO0FBQ0gsQUFBQSxPQUFPO0FBQ1AsQUFBQSxPQUFPLENBQUM7RUFDTixPQUFPLEVBQUUsS0FBTSxHQUNoQjs7QUFPRCxBQUFBLEtBQUs7QUFDTCxBQUFBLE1BQU07QUFDTixBQUFBLFFBQVE7QUFDUixBQUFBLEtBQUssQ0FBQztFQUNKLE9BQU8sRUFBRSxZQUFhO0VBQ3RCLGNBQWMsRUFBRSxRQUFTLEdBQzFCOztBQU9ELEFBQW9CLEtBQWYsQUFBQSxJQUFLLEVBQUEsQUFBQSxBQUFTLFFBQVIsQUFBQSxHQUFXO0VBQ3BCLE9BQU8sRUFBRSxJQUFLO0VBQ2QsTUFBTSxFQUFFLENBQUUsR0FDWDs7Q0FPRCxBQUFBLEFBQU8sTUFBTixBQUFBO0FBQ0QsQUFBQSxRQUFRLENBQUM7RUFDUCxPQUFPLEVBQUUsSUFBSyxHQUNmOztBQVNELEFBQUEsQ0FBQyxDQUFDO0VBQ0EsZ0JBQWdCLEVBQUUsV0FBWSxHQUMvQjs7QUFPRCxBQUFDLENBQUEsQUFBQSxPQUFPO0FBQ1IsQUFBQyxDQUFBLEFBQUEsTUFBTSxDQUFDO0VBQ04sT0FBTyxFQUFFLENBQUUsR0FDWjs7QUFTRCxBQUFVLElBQU4sQ0FBQSxBQUFBLEtBQUMsQUFBQSxFQUFPO0VBQ1YsYUFBYSxFQUFFLFVBQVcsR0FDM0I7O0FBTUQsQUFBQSxDQUFDO0FBQ0QsQUFBQSxNQUFNLENBQUM7RUFDTCxXQUFXLEVBQUUsSUFBSyxHQUNuQjs7QUFNRCxBQUFBLEdBQUcsQ0FBQztFQUNGLFVBQVUsRUFBRSxNQUFPLEdBQ3BCOztBQU9ELEFBQUEsRUFBRSxDQUFDO0VBQ0QsU0FBUyxFQUFFLEdBQUk7RUFDZixNQUFNLEVBQUUsUUFBUyxHQUNsQjs7QUFNRCxBQUFBLElBQUksQ0FBQztFQUNILFVBQVUsRUFBRSxJQUFLO0VBQ2pCLEtBQUssRUFBRSxJQUFLLEdBQ2I7O0FBTUQsQUFBQSxLQUFLLENBQUM7RUFDSixTQUFTLEVBQUUsR0FBSSxHQUNoQjs7QUFNRCxBQUFBLEdBQUc7QUFDSCxBQUFBLEdBQUcsQ0FBQztFQUNGLFNBQVMsRUFBRSxHQUFJO0VBQ2YsV0FBVyxFQUFFLENBQUU7RUFDZixRQUFRLEVBQUUsUUFBUztFQUNuQixjQUFjLEVBQUUsUUFBUyxHQUMxQjs7QUFFRCxBQUFBLEdBQUcsQ0FBQztFQUNGLEdBQUcsRUFBRSxNQUFPLEdBQ2I7O0FBRUQsQUFBQSxHQUFHLENBQUM7RUFDRixNQUFNLEVBQUUsT0FBUSxHQUNqQjs7QUFTRCxBQUFBLEdBQUcsQ0FBQztFQUNGLE1BQU0sRUFBRSxDQUFFLEdBQ1g7O0FBTUQsQUFBYSxHQUFWLEFBQUEsSUFBSyxDQUFBLEFBQUEsS0FBSyxFQUFFO0VBQ2IsUUFBUSxFQUFFLE1BQU8sR0FDbEI7O0FBU0QsQUFBQSxNQUFNLENBQUM7RUFDTCxNQUFNLEVBQUUsUUFBUyxHQUNsQjs7QUFNRCxBQUFBLEVBQUUsQ0FBQztFQUNELFVBQVUsRUFBRSxXQUFZO0VBQ3hCLE1BQU0sRUFBRSxDQUFFLEdBQ1g7O0FBTUQsQUFBQSxHQUFHLENBQUM7RUFDRixRQUFRLEVBQUUsSUFBSyxHQUNoQjs7QUFNRCxBQUFBLElBQUk7QUFDSixBQUFBLEdBQUc7QUFDSCxBQUFBLEdBQUc7QUFDSCxBQUFBLElBQUksQ0FBQztFQUNILFdBQVcsRUFBRSxvQkFBcUI7RUFDbEMsU0FBUyxFQUFFLEdBQUksR0FDaEI7O0FBaUJELEFBQUEsTUFBTTtBQUNOLEFBQUEsS0FBSztBQUNMLEFBQUEsUUFBUTtBQUNSLEFBQUEsTUFBTTtBQUNOLEFBQUEsUUFBUSxDQUFDO0VBQ1AsS0FBSyxFQUFFLE9BQVE7RUFDZixJQUFJLEVBQUUsT0FBUTtFQUNkLE1BQU0sRUFBRSxDQUFFLEdBQ1g7O0FBTUQsQUFBQSxNQUFNLENBQUM7RUFDTCxRQUFRLEVBQUUsT0FBUSxHQUNuQjs7QUFTRCxBQUFBLE1BQU07QUFDTixBQUFBLE1BQU0sQ0FBQztFQUNMLGNBQWMsRUFBRSxJQUFLLEdBQ3RCOztBQVVELEFBQUEsTUFBTTtBQUNOLEFBQXdCLElBQXBCLENBQUMsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLFFBQVEsQUFBYjtBQUNYLEFBQWtCLEtBQWIsQ0FBQSxBQUFBLElBQUMsQ0FBSyxPQUFPLEFBQVo7QUFDTixBQUFtQixLQUFkLENBQUEsQUFBQSxJQUFDLENBQUssUUFBUSxBQUFiLEVBQWU7RUFDbkIsa0JBQWtCLEVBQUUsTUFBTztFQUMzQixNQUFNLEVBQUUsT0FBUSxHQUNqQjs7QUFNRCxBQUFlLE1BQVQsQ0FBQSxBQUFBLFFBQUMsQUFBQTtBQUNQLEFBQW1CLElBQWYsQ0FBQyxLQUFLLENBQUEsQUFBQSxRQUFDLEFBQUEsRUFBVTtFQUNuQixNQUFNLEVBQUUsT0FBUSxHQUNqQjs7QUFNRCxBQUFNLE1BQUEsQUFBQSxrQkFBa0I7QUFDeEIsQUFBSyxLQUFBLEFBQUEsa0JBQWtCLENBQUM7RUFDdEIsTUFBTSxFQUFFLENBQUU7RUFDVixPQUFPLEVBQUUsQ0FBRSxHQUNaOztBQU9ELEFBQUEsS0FBSyxDQUFDO0VBQ0osV0FBVyxFQUFFLE1BQU8sR0FDckI7O0FBVUQsQUFBcUIsS0FBaEIsQ0FBQSxBQUFBLElBQUMsQ0FBSyxVQUFVLEFBQWY7QUFDTixBQUFrQixLQUFiLENBQUEsQUFBQSxJQUFDLENBQUssT0FBTyxBQUFaLEVBQWM7RUFDbEIsVUFBVSxFQUFFLFVBQVc7RUFDdkIsT0FBTyxFQUFFLENBQUUsR0FDWjs7QUFRRCxBQUFvQixLQUFmLENBQUEsQUFBQSxJQUFDLENBQUssUUFBUSxBQUFiLENBQWMsMkJBQTJCO0FBQy9DLEFBQW9CLEtBQWYsQ0FBQSxBQUFBLElBQUMsQ0FBSyxRQUFRLEFBQWIsQ0FBYywyQkFBMkIsQ0FBQztFQUM5QyxNQUFNLEVBQUUsSUFBSyxHQUNkOztBQU9ELEFBQW1CLEtBQWQsQ0FBQSxBQUFBLElBQUMsQ0FBSyxRQUFRLEFBQWIsRUFBZTtFQUNuQixrQkFBa0IsRUFBRSxTQUFVO0VBQzlCLFVBQVUsRUFBRSxXQUFZLEdBQ3pCOztBQVFELEFBQW9CLEtBQWYsQ0FBQSxBQUFBLElBQUMsQ0FBSyxRQUFRLEFBQWIsQ0FBYyw4QkFBOEI7QUFDbEQsQUFBb0IsS0FBZixDQUFBLEFBQUEsSUFBQyxDQUFLLFFBQVEsQUFBYixDQUFjLDJCQUEyQixDQUFDO0VBQzlDLGtCQUFrQixFQUFFLElBQUssR0FDMUI7O0FBTUQsQUFBQSxRQUFRLENBQUM7RUFDUCxNQUFNLEVBQUUsaUJBQWtCO0VBQzFCLE1BQU0sRUFBRSxLQUFNO0VBQ2QsT0FBTyxFQUFFLHFCQUFzQixHQUNoQzs7QUFPRCxBQUFBLE1BQU0sQ0FBQztFQUNMLE1BQU0sRUFBRSxDQUFFO0VBQ1YsT0FBTyxFQUFFLENBQUUsR0FDWjs7QUFNRCxBQUFBLFFBQVEsQ0FBQztFQUNQLFFBQVEsRUFBRSxJQUFLLEdBQ2hCOztBQU9ELEFBQUEsUUFBUSxDQUFDO0VBQ1AsV0FBVyxFQUFFLElBQUssR0FDbkI7O0FBU0QsQUFBQSxLQUFLLENBQUM7RUFDSixlQUFlLEVBQUUsUUFBUztFQUMxQixjQUFjLEVBQUUsQ0FBRSxHQUNuQjs7QUFFRCxBQUFBLEVBQUU7QUFDRixBQUFBLEVBQUUsQ0FBQztFQUNELE9BQU8sRUFBRSxDQUFFLEdBQ1o7O0FDdmFELHFGQUFxRjtBQU9yRixNQUFNLENBQU4sS0FBSztFQUNELEFBQUEsQ0FBQztFQUNELEFBQUMsQ0FBQSxBQUFBLE9BQU87RUFDUixBQUFDLENBQUEsQUFBQSxNQUFNLENBQUM7SUFDSixVQUFVLEVBQUUsc0JBQXVCO0lBQ25DLEtBQUssRUFBRSxlQUFnQjtJQUN2QixVQUFVLEVBQUUsZUFBZ0I7SUFDNUIsV0FBVyxFQUFFLGVBQWdCLEdBQ2hDO0VBRUQsQUFBQSxDQUFDO0VBQ0QsQUFBQyxDQUFBLEFBQUEsUUFBUSxDQUFDO0lBQ04sZUFBZSxFQUFFLFNBQVUsR0FDOUI7RUFFRCxBQUFPLENBQU4sQ0FBQSxBQUFBLElBQUMsQUFBQSxDQUFLLE1BQU0sQ0FBQztJQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBSSxDQUFPLEdBQUcsR0FDL0I7RUFFRCxBQUFXLElBQVAsQ0FBQSxBQUFBLEtBQUMsQUFBQSxDQUFNLE1BQU0sQ0FBQztJQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBSSxDQUFRLEdBQUcsR0FDaEM7RUFJRCxBQUFZLENBQVgsQ0FBQSxBQUFBLElBQUMsRUFBTSxHQUFHLEFBQVQsQ0FBVSxNQUFNO0VBQ2xCLEFBQXNCLENBQXJCLENBQUEsQUFBQSxJQUFDLEVBQU0sYUFBYSxBQUFuQixDQUFvQixNQUFNLENBQUM7SUFDekIsT0FBTyxFQUFFLEVBQUcsR0FDZjtFQUVELEFBQUEsR0FBRztFQUNILEFBQUEsVUFBVSxDQUFDO0lBQ1AsTUFBTSxFQUFFLGNBQWU7SUFDdkIsaUJBQWlCLEVBQUUsS0FBTSxHQUM1QjtFQUVELEFBQUEsS0FBSyxDQUFDO0lBQ0YsT0FBTyxFQUFFLGtCQUFtQixHQUMvQjtFQUVELEFBQUEsRUFBRTtFQUNGLEFBQUEsR0FBRyxDQUFDO0lBQ0EsaUJBQWlCLEVBQUUsS0FBTSxHQUM1QjtFQUVELEFBQUEsR0FBRyxDQUFDO0lBQ0EsU0FBUyxFQUFFLGVBQWdCLEdBQzlCO0VBRUQsQUFBQSxDQUFDO0VBQ0QsQUFBQSxFQUFFO0VBQ0YsQUFBQSxFQUFFLENBQUM7SUFDQyxPQUFPLEVBQUUsQ0FBRTtJQUNYLE1BQU0sRUFBRSxDQUFFLEdBQ2I7RUFFRCxBQUFBLEVBQUU7RUFDRixBQUFBLEVBQUUsQ0FBQztJQUNDLGdCQUFnQixFQUFFLEtBQU0sR0FDM0I7RUFLRCxBQUFBLE9BQU8sQ0FBQztJQUNKLE9BQU8sRUFBRSxJQUFLLEdBQ2pCO0VBQ0QsQUFFTSxJQUZGLEdBRUUsTUFBTTtFQURaLEFBQ00sT0FEQyxHQUFHLElBQUksR0FDUixNQUFNLENBQUM7SUFDTCxnQkFBZ0IsRUFBRSxlQUFnQixHQUNyQztFQUVMLEFBQUEsTUFBTSxDQUFDO0lBQ0gsTUFBTSxFQUFFLGNBQWUsR0FDMUI7RUFFRCxBQUFBLE1BQU0sQ0FBQztJQUNILGVBQWUsRUFBRSxtQkFBb0IsR0FNeEM7SUFQRCxBQUdJLE1BSEUsQ0FHRixFQUFFO0lBSE4sQUFJSSxNQUpFLENBSUYsRUFBRSxDQUFDO01BQ0MsZ0JBQWdCLEVBQUUsZUFBZ0IsR0FDckM7RUFFTCxBQUNJLGVBRFcsQ0FDWCxFQUFFO0VBRE4sQUFFSSxlQUZXLENBRVgsRUFBRSxDQUFDO0lBQ0MsTUFBTSxFQUFFLHlCQUEwQixHQUNyQzs7QUNyRlAsVUFBVTtFQUNSLFdBQVcsRUFBRSxzQkFBdUI7RUFDcEMsR0FBRyxFQUFFLG9FQUFHO0VBQ1IsR0FBRyxFQUFFLDJFQUFHLENBQXlKLDJCQUFNLEVBQ2xLLHNFQUFHLENBQStJLGVBQU0sRUFDeEoscUVBQUcsQ0FBNkksY0FBTSxFQUN0SixvRUFBRyxDQUEySSxrQkFBTSxFQUNwSixnR0FBRyxDQUFxTCxhQUFNOztBQUt2TSxBQUFBLFVBQVUsQ0FBQztFQUNULFFBQVEsRUFBRSxRQUFTO0VBQ25CLEdBQUcsRUFBRSxHQUFJO0VBQ1QsT0FBTyxFQUFFLFlBQWE7RUFDdEIsV0FBVyxFQUFFLHNCQUF1QjtFQUNwQyxVQUFVLEVBQUUsTUFBTztFQUNuQixXQUFXLEVBQUUsTUFBTztFQUNwQixXQUFXLEVBQUUsQ0FBRTtFQUNmLHNCQUFzQixFQUFFLFdBQVk7RUFDcEMsdUJBQXVCLEVBQUUsU0FBVSxHQUNwQzs7QUFHRCxBQUFBLG1CQUFtQixBQUFrQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxlQUFlLEFBQ3NCLE9BQU87QUFBNUMsQUFBQSxjQUFjLEFBQXVCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsbUJBQW1CLEFBQWtCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUJBQWlCLEFBQW9CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUJBQWlCLEFBQW9CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZUFBZSxBQUFzQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHFCQUFxQixBQUFnQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxlQUFlLEFBQXNCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsbUJBQW1CLEFBQWtCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsYUFBYSxBQUF3QixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGtCQUFrQixBQUFtQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGFBQWEsQUFBd0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxpQkFBaUIsQUFBb0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxrQkFBa0IsQUFBbUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxtQkFBbUIsQUFBa0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxjQUFjLEFBQXVCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUJBQWlCLEFBQW9CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsY0FBYyxBQUF1QixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGdCQUFnQixBQUFxQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxlQUFlLEFBQXNCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZUFBZSxBQUFzQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx1QkFBdUIsQUFBYyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG1CQUFtQixBQUFrQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGlCQUFpQixBQUFvQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGdCQUFnQixBQUFxQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHNCQUFzQixBQUFlLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUJBQWlCLEFBQW9CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsa0JBQWtCLEFBQW1CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsbUJBQW1CLEFBQWtCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZUFBZSxBQUFzQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxzQkFBc0IsQUFBZSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG9CQUFvQixBQUFpQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGlCQUFpQixBQUFvQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGtCQUFrQixBQUFtQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGNBQWMsQUFBdUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxlQUFlLEFBQXNCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZUFBZSxBQUFzQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG1CQUFtQixBQUFrQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGdCQUFnQixBQUFxQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGlCQUFpQixBQUFvQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxlQUFlLEFBQXNCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUJBQWlCLEFBQW9CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsc0JBQXNCLEFBQWUsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx1QkFBdUIsQUFBYyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHNCQUFzQixBQUFlLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsd0JBQXdCLEFBQWEsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxlQUFlLEFBQXNCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsc0JBQXNCLEFBQWUsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx1QkFBdUIsQUFBYyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHlCQUF5QixBQUFZLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsa0JBQWtCLEFBQW1CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEscUJBQXFCLEFBQWdCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUJBQWlCLEFBQW9CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZUFBZSxBQUFzQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxnQkFBZ0IsQUFBcUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxnQkFBZ0IsQUFBcUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxlQUFlLEFBQXNCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsd0JBQXdCLEFBQWEsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx3QkFBd0IsQUFBYSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG1CQUFtQixBQUFrQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxnQkFBZ0IsQUFBcUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxlQUFlLEFBQXNCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsa0JBQWtCLEFBQW1CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsdUJBQXVCLEFBQWMsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx1QkFBdUIsQUFBYyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGdCQUFnQixBQUFxQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHVCQUF1QixBQUFjLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsd0JBQXdCLEFBQWEsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxzQkFBc0IsQUFBZSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGtCQUFrQixBQUFtQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHdCQUF3QixBQUFhLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsb0JBQW9CLEFBQWlCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEscUJBQXFCLEFBQWdCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsd0JBQXdCLEFBQWEsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxzQkFBc0IsQUFBZSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG1CQUFtQixBQUFrQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHFCQUFxQixBQUFnQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG9CQUFvQixBQUFpQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHNCQUFzQixBQUFlLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsdUJBQXVCLEFBQWMsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSwyQkFBMkIsQUFBVSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxlQUFlLEFBQXNCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZUFBZSxBQUFzQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG1CQUFtQixBQUFrQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG9CQUFvQixBQUFpQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHVCQUF1QixBQUFjLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsbUJBQW1CLEFBQWtCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUJBQWlCLEFBQW9CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsa0JBQWtCLEFBQW1CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUJBQWlCLEFBQW9CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEscUJBQXFCLEFBQWdCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsdUJBQXVCLEFBQWMsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxrQkFBa0IsQUFBbUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx3QkFBd0IsQUFBYSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHVCQUF1QixBQUFjLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsc0JBQXNCLEFBQWUsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSwwQkFBMEIsQUFBVyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLDRCQUE0QixBQUFTLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsY0FBYyxBQUF1QixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG1CQUFtQixBQUFrQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxzQkFBc0IsQUFBZSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG9CQUFvQixBQUFpQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHNCQUFzQixBQUFlLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEscUJBQXFCLEFBQWdCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsb0JBQW9CLEFBQWlCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsa0JBQWtCLEFBQW1CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsb0JBQW9CLEFBQWlCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsNkJBQTZCLEFBQVEsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSw0QkFBNEIsQUFBUyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLDBCQUEwQixBQUFXLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsNEJBQTRCLEFBQVMsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxnQkFBZ0IsQUFBcUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxpQkFBaUIsQUFBb0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxnQkFBZ0IsQUFBcUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxpQkFBaUIsQUFBb0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxzQkFBc0IsQUFBZSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxnQkFBZ0IsQUFBcUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxrQkFBa0IsQUFBbUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxjQUFjLEFBQXVCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsY0FBYyxBQUF1QixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSwyQkFBMkIsQUFBVSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLCtCQUErQixBQUFNLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsd0JBQXdCLEFBQWEsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSw0QkFBNEIsQUFBUyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLDZCQUE2QixBQUFRLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUNBQWlDLEFBQUksT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxpQkFBaUIsQUFBb0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx3QkFBd0IsQUFBYSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHNCQUFzQixBQUFlLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUJBQWlCLEFBQW9CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsa0JBQWtCLEFBQW1CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEscUJBQXFCLEFBQWdCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUJBQWlCLEFBQW9CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZUFBZSxBQUFzQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxnQkFBZ0IsQUFBcUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxpQkFBaUIsQUFBb0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxpQkFBaUIsQUFBb0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxlQUFlLEFBQXNCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsc0JBQXNCLEFBQWUsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx1QkFBdUIsQUFBYyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHdCQUF3QixBQUFhLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsc0JBQXNCLEFBQWUsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxzQkFBc0IsQUFBZSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHNCQUFzQixBQUFlLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsbUJBQW1CLEFBQWtCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsa0JBQWtCLEFBQW1CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsaUJBQWlCLEFBQW9CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEscUJBQXFCLEFBQWdCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsbUJBQW1CLEFBQWtCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsb0JBQW9CLEFBQWlCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsbUJBQW1CLEFBQWtCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsbUJBQW1CLEFBQWtCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsb0JBQW9CLEFBQWlCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsdUJBQXVCLEFBQWMsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxzQkFBc0IsQUFBZSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG9CQUFvQixBQUFpQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG9CQUFvQixBQUFpQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG9CQUFvQixBQUFpQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHlCQUF5QixBQUFZLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsNEJBQTRCLEFBQVMsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx5QkFBeUIsQUFBWSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHVCQUF1QixBQUFjLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsdUJBQXVCLEFBQWMsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx5QkFBeUIsQUFBWSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGFBQWEsQUFBd0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxtQkFBbUIsQUFBa0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxlQUFlLEFBQXNCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBU3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsb0JBQW9CLEFBQWlCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZUFBZSxBQUFzQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGdCQUFnQixBQUFxQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxpQkFBaUIsQUFBb0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxpQkFBaUIsQUFBb0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx1QkFBdUIsQUFBYyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGVBQWUsQUFBc0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxjQUFjLEFBQXVCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsb0JBQW9CLEFBQWlCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZUFBZSxBQUFzQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG9CQUFvQixBQUFpQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHFCQUFxQixBQUFnQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLG1CQUFtQixBQUFrQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGtCQUFrQixBQUFtQixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGNBQWMsQUFBdUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxjQUFjLEFBQXVCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsY0FBYyxBQUF1QixPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGNBQWMsQUFBdUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxnQkFBZ0IsQUFBcUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxjQUFjLEFBQXVCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0JBQWdCLEFBQXFCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsb0JBQW9CLEFBQWlCLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsMkJBQTJCLEFBQVUsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSw0QkFBNEIsQUFBUyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLDBCQUEwQixBQUFXLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEseUJBQXlCLEFBQVksT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSx1QkFBdUIsQUFBYyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLGNBQWMsQUFBdUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxnQkFBZ0IsQUFBcUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSwwQkFBMEIsQUFBVyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLDJCQUEyQixBQUFVLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsOEJBQThCLEFBQU8sT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxrQ0FBa0MsQUFBRyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLDRCQUE0QixBQUFTLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsZ0NBQWdDLEFBQUssT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSw2QkFBNkIsQUFBUSxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHlCQUF5QixBQUFZLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsd0JBQXdCLEFBQWEsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSwwQkFBMEIsQUFBVyxPQUFPLENBQUM7RUFBRSxPQUFPLEVBQUUsT0FBUSxHQUFJOztBQUNwRSxBQUFBLHVCQUF1QixBQUFjLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsa0JBQWtCLEFBQW1CLE9BQU8sQ0FBQztFQUFFLE9BQU8sRUFBRSxPQUFRLEdBQUk7O0FBQ3BFLEFBQUEsc0JBQXNCLEFBQWUsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxxQkFBcUIsQUFBZ0IsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxvQkFBb0IsQUFBaUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUFDcEUsQUFBQSxrQkFBa0IsQUFBbUIsT0FBTyxDQUFDO0VBQUUsT0FBTyxFQUFFLE9BQVEsR0FBSTs7QUN4U3BFLEFBQUEsQ0FBQyxDQUFDO0VyQmdFQSxrQkFBa0IsRXFCL0RFLFVBQVU7RXJCZ0UzQixlQUFlLEVxQmhFRSxVQUFVO0VyQmlFdEIsVUFBVSxFcUJqRUUsVUFBVSxHQUMvQjs7QUFDRCxBQUFDLENBQUEsQUFBQSxPQUFPO0FBQ1IsQUFBQyxDQUFBLEFBQUEsTUFBTSxDQUFDO0VyQjRETixrQkFBa0IsRXFCM0RFLFVBQVU7RXJCNEQzQixlQUFlLEVxQjVERSxVQUFVO0VyQjZEdEIsVUFBVSxFcUI3REUsVUFBVSxHQUMvQjs7QUFLRCxBQUFBLElBQUksQ0FBQztFQUNILFNBQVMsRUFBRSxJQUFLO0VBQ2hCLDJCQUEyQixFQUFFLFdBQUksR0FDbEM7O0FBRUQsQUFBQSxJQUFJLENBQUM7RUFDSCxXQUFXLEVwQ2tCYSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVU7RW9DakJ0RSxTQUFTLEVwQ3VCZSxJQUFJO0VvQ3RCNUIsV0FBVyxFcENrQ2EsT0FBVztFb0NqQ25DLEtBQUssRXBDbEJrQixPQUFPO0VvQ21COUIsZ0JBQWdCLEVwQ0ZNLElBQUksR29DRzNCOztBQUdELEFBQUEsS0FBSztBQUNMLEFBQUEsTUFBTTtBQUNOLEFBQUEsTUFBTTtBQUNOLEFBQUEsUUFBUSxDQUFDO0VBQ1AsV0FBVyxFQUFFLE9BQVE7RUFDckIsU0FBUyxFQUFFLE9BQVE7RUFDbkIsV0FBVyxFQUFFLE9BQVEsR0FDdEI7O0FBS0QsQUFBQSxDQUFDLENBQUM7RUFDQSxLQUFLLEVwQy9CaUIsT0FBTTtFb0NnQzVCLGVBQWUsRUFBRSxJQUFLLEdBV3ZCO0VBYkQsQUFBQSxDQUFDLEFBSUUsTUFBTSxFQUpULEFBQUEsQ0FBQyxBQUtFLE1BQU0sQ0FBQztJQUNOLEtBQUssRXBDakJlLE9BQU07SW9Da0IxQixlQUFlLEVwQ2hCSyxTQUFTLEdvQ2lCOUI7RUFSSCxBQUFBLENBQUMsQUFVRSxNQUFNLENBQUM7SXpCckRSLE9BQU8sRUFBRSxXQUFZO0lBRXJCLE9BQU8sRUFBRSxpQ0FBa0M7SUFDM0MsY0FBYyxFQUFFLElBQUssR3lCb0RwQjs7QUFTSCxBQUFBLE1BQU0sQ0FBQztFQUNMLE1BQU0sRUFBRSxDQUFFLEdBQ1g7O0FBS0QsQUFBQSxHQUFHLENBQUM7RUFDRixjQUFjLEVBQUUsTUFBTyxHQUN4Qjs7QUFHRCxBQUFBLGVBQWUsQ0FBQztFL0J2RWQsT0FBTyxFQUR1QixLQUFLO0VBRW5DLFNBQVMsRUFBRSxJQUFLO0VBQ2hCLE1BQU0sRUFBRSxJQUFLLEcrQnVFZDs7QUFHRCxBQUFBLFlBQVksQ0FBQztFQUNYLGFBQWEsRXBDd0JhLEdBQUcsR29DdkI5Qjs7QUFLRCxBQUFBLGNBQWMsQ0FBQztFQUNiLE9BQU8sRXBDZ3BCcUIsR0FBRztFb0Mvb0IvQixXQUFXLEVwQy9CYSxPQUFXO0VvQ2dDbkMsZ0JBQWdCLEVwQ2xFTSxJQUFJO0VvQ21FMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENwQ2lwQlcsSUFBSTtFb0NocEJoQyxhQUFhLEVwQ1lhLEdBQUc7RWU0RTdCLGtCQUFrQixFcUJ2RkUsR0FBRyxDQUFDLElBQUcsQ0FBQyxXQUFXO0VyQndGbEMsYUFBYSxFcUJ4RkUsR0FBRyxDQUFDLElBQUcsQ0FBQyxXQUFXO0VyQnlGL0IsVUFBVSxFcUJ6RkUsR0FBRyxDQUFDLElBQUcsQ0FBQyxXQUFXO0UvQnpGdkMsT0FBTyxFK0I0RmlCLFlBQVk7RS9CM0ZwQyxTQUFTLEVBQUUsSUFBSztFQUNoQixNQUFNLEVBQUUsSUFBSyxHK0IyRmQ7O0FBR0QsQUFBQSxXQUFXLENBQUM7RUFDVixhQUFhLEVBQUUsR0FBSSxHQUNwQjs7QUFLRCxBQUFBLEVBQUUsQ0FBQztFQUNELFVBQVUsRXBDaERjLElBQUs7RW9DaUQ3QixhQUFhLEVwQ2pEVyxJQUFLO0VvQ2tEN0IsTUFBTSxFQUFFLENBQUU7RUFDVixVQUFVLEVBQUUsR0FBRyxDQUFDLEtBQUssQ3BDckdFLE9BQU8sR29Dc0cvQjs7QUFPRCxBQUFBLFFBQVEsQ0FBQztFQUNQLFFBQVEsRUFBRSxRQUFTO0VBQ25CLEtBQUssRUFBRSxHQUFJO0VBQ1gsTUFBTSxFQUFFLEdBQUk7RUFDWixNQUFNLEVBQUUsSUFBSztFQUNiLE9BQU8sRUFBRSxDQUFFO0VBQ1gsUUFBUSxFQUFFLE1BQU87RUFDakIsSUFBSSxFQUFFLGdCQUFJO0VBQ1YsTUFBTSxFQUFFLENBQUUsR0FDWDs7QUFNRCxBQUFBLGtCQUFrQixBQUNmLE9BQU8sRUFEVixBQUFBLGtCQUFrQixBQUVmLE1BQU0sQ0FBQztFQUNOLFFBQVEsRUFBRSxNQUFPO0VBQ2pCLEtBQUssRUFBRSxJQUFLO0VBQ1osTUFBTSxFQUFFLElBQUs7RUFDYixNQUFNLEVBQUUsQ0FBRTtFQUNWLFFBQVEsRUFBRSxPQUFRO0VBQ2xCLElBQUksRUFBRSxJQUFLLEdBQ1o7O0NBVUgsQUFBQSxBQUFjLElBQWIsQ0FBSyxRQUFRLEFBQWIsRUFBZTtFQUNkLE1BQU0sRUFBRSxPQUFRLEdBQ2pCOztBQ3hKRCxBQUFBLEVBQUUsRUFBRSxBQUFBLEVBQUUsRUFBRSxBQUFBLEVBQUUsRUFBRSxBQUFBLEVBQUUsRUFBRSxBQUFBLEVBQUUsRUFBRSxBQUFBLEVBQUU7QUFDdEIsQUFBQSxHQUFHLEVBQUUsQUFBQSxHQUFHLEVBQUUsQUFBQSxHQUFHLEVBQUUsQUFBQSxHQUFHLEVBQUUsQUFBQSxHQUFHLEVBQUUsQUFBQSxHQUFHLENBQUM7RUFDM0IsV0FBVyxFckMwRGEsT0FBTztFcUN6RC9CLFdBQVcsRXJDMERhLEdBQUc7RXFDekQzQixXQUFXLEVyQzBEYSxHQUFHO0VxQ3pEM0IsS0FBSyxFckMwRG1CLE9BQU8sR3FDbERoQztFQWJELEFBT0UsRUFQQSxDQU9BLEtBQUs7RUFQUCxBQVFFLEVBUkEsQ0FRQSxNQUFNLEVBUkosQUFPRixFQVBJLENBT0osS0FBSztFQVBILEFBUUYsRUFSSSxDQVFKLE1BQU0sRUFSQSxBQU9OLEVBUFEsQ0FPUixLQUFLO0VBUEMsQUFRTixFQVJRLENBUVIsTUFBTSxFQVJJLEFBT1YsRUFQWSxDQU9aLEtBQUs7RUFQSyxBQVFWLEVBUlksQ0FRWixNQUFNLEVBUlEsQUFPZCxFQVBnQixDQU9oQixLQUFLO0VBUFMsQUFRZCxFQVJnQixDQVFoQixNQUFNLEVBUlksQUFPbEIsRUFQb0IsQ0FPcEIsS0FBSztFQVBhLEFBUWxCLEVBUm9CLENBUXBCLE1BQU07RUFQUixBQU1FLEdBTkMsQ0FNRCxLQUFLO0VBTlAsQUFPRSxHQVBDLENBT0QsTUFBTSxFQVBILEFBTUgsR0FOTSxDQU1OLEtBQUs7RUFORixBQU9ILEdBUE0sQ0FPTixNQUFNLEVBUEUsQUFNUixHQU5XLENBTVgsS0FBSztFQU5HLEFBT1IsR0FQVyxDQU9YLE1BQU0sRUFQTyxBQU1iLEdBTmdCLENBTWhCLEtBQUs7RUFOUSxBQU9iLEdBUGdCLENBT2hCLE1BQU0sRUFQWSxBQU1sQixHQU5xQixDQU1yQixLQUFLO0VBTmEsQUFPbEIsR0FQcUIsQ0FPckIsTUFBTSxFQVBpQixBQU12QixHQU4wQixDQU0xQixLQUFLO0VBTmtCLEFBT3ZCLEdBUDBCLENBTzFCLE1BQU0sQ0FBQztJQUNMLFdBQVcsRUFBRSxNQUFPO0lBQ3BCLFdBQVcsRUFBRSxDQUFFO0lBQ2YsS0FBSyxFckNMZ0IsT0FBTyxHcUNNN0I7O0FBR0gsQUFBQSxFQUFFLEVBQUUsQUFBQSxHQUFHO0FBQ1AsQUFBQSxFQUFFLEVBQUUsQUFBQSxHQUFHO0FBQ1AsQUFBQSxFQUFFLEVBQUUsQUFBQSxHQUFHLENBQUM7RUFDTixVQUFVLEVyQ3VDYyxJQUFLO0VxQ3RDN0IsYUFBYSxFQUFHLElBQXFCLEdBTXRDO0VBVkQsQUFNRSxFQU5BLENBTUEsS0FBSztFQU5QLEFBT0UsRUFQQSxDQU9BLE1BQU0sRUFQSixBQU1GLEdBTkssQ0FNTCxLQUFLO0VBTkgsQUFPRixHQVBLLENBT0wsTUFBTTtFQU5SLEFBS0UsRUFMQSxDQUtBLEtBQUs7RUFMUCxBQU1FLEVBTkEsQ0FNQSxNQUFNLEVBTkosQUFLRixHQUxLLENBS0wsS0FBSztFQUxILEFBTUYsR0FOSyxDQU1MLE1BQU07RUFMUixBQUlFLEVBSkEsQ0FJQSxLQUFLO0VBSlAsQUFLRSxFQUxBLENBS0EsTUFBTSxFQUxKLEFBSUYsR0FKSyxDQUlMLEtBQUs7RUFKSCxBQUtGLEdBTEssQ0FLTCxNQUFNLENBQUM7SUFDTCxTQUFTLEVBQUUsR0FBSSxHQUNoQjs7QUFFSCxBQUFBLEVBQUUsRUFBRSxBQUFBLEdBQUc7QUFDUCxBQUFBLEVBQUUsRUFBRSxBQUFBLEdBQUc7QUFDUCxBQUFBLEVBQUUsRUFBRSxBQUFBLEdBQUcsQ0FBQztFQUNOLFVBQVUsRUFBRyxJQUFxQjtFQUNsQyxhQUFhLEVBQUcsSUFBcUIsR0FNdEM7RUFWRCxBQU1FLEVBTkEsQ0FNQSxLQUFLO0VBTlAsQUFPRSxFQVBBLENBT0EsTUFBTSxFQVBKLEFBTUYsR0FOSyxDQU1MLEtBQUs7RUFOSCxBQU9GLEdBUEssQ0FPTCxNQUFNO0VBTlIsQUFLRSxFQUxBLENBS0EsS0FBSztFQUxQLEFBTUUsRUFOQSxDQU1BLE1BQU0sRUFOSixBQUtGLEdBTEssQ0FLTCxLQUFLO0VBTEgsQUFNRixHQU5LLENBTUwsTUFBTTtFQUxSLEFBSUUsRUFKQSxDQUlBLEtBQUs7RUFKUCxBQUtFLEVBTEEsQ0FLQSxNQUFNLEVBTEosQUFJRixHQUpLLENBSUwsS0FBSztFQUpILEFBS0YsR0FMSyxDQUtMLE1BQU0sQ0FBQztJQUNMLFNBQVMsRUFBRSxHQUFJLEdBQ2hCOztBQUdILEFBQUEsRUFBRSxFQUFFLEFBQUEsR0FBRyxDQUFDO0VBQUUsU0FBUyxFckNTTyxJQUFLLEdxQ1RPOztBQUN0QyxBQUFBLEVBQUUsRUFBRSxBQUFBLEdBQUcsQ0FBQztFQUFFLFNBQVMsRXJDU08sSUFBSyxHcUNUTzs7QUFDdEMsQUFBQSxFQUFFLEVBQUUsQUFBQSxHQUFHLENBQUM7RUFBRSxTQUFTLEVyQ1NPLElBQUksR3FDVFE7O0FBQ3RDLEFBQUEsRUFBRSxFQUFFLEFBQUEsR0FBRyxDQUFDO0VBQUUsU0FBUyxFckNTTyxJQUFJLEdxQ1RROztBQUN0QyxBQUFBLEVBQUUsRUFBRSxBQUFBLEdBQUcsQ0FBQztFQUFFLFNBQVMsRXJDQ08sSUFBSSxHcUNEUTs7QUFDdEMsQUFBQSxFQUFFLEVBQUUsQUFBQSxHQUFHLENBQUM7RUFBRSxTQUFTLEVyQ1NPLElBQUksR3FDVFE7O0FBTXRDLEFBQUEsQ0FBQyxDQUFDO0VBQ0EsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUUsSUFBcUIsR0FDbkM7O0FBRUQsQUFBQSxLQUFLLENBQUM7RUFDSixhQUFhLEVyQ0dXLElBQUs7RXFDRjdCLFNBQVMsRUFBRSxJQUFLO0VBQ2hCLFdBQVcsRUFBRSxHQUFJO0VBQ2pCLFdBQVcsRUFBRSxHQUFJLEdBS2xCO0VBSEMsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0lBTm5CLEFBQUEsS0FBSyxDQUFDO01BT0YsU0FBUyxFQUFHLElBQWUsR0FFOUI7O0FBT0QsQUFBQSxLQUFLO0FBQ0wsQUFBQSxNQUFNLENBQUM7RUFDTCxTQUFTLEVBQUUsR0FBSyxHQUNqQjs7QUFFRCxBQUFBLElBQUk7QUFDSixBQUFBLEtBQUssQ0FBQztFQUNKLGdCQUFnQixFckM0YWUsT0FBTztFcUMzYXRDLE9BQU8sRUFBRSxJQUFLLEdBQ2Y7O0FBR0QsQUFBQSxVQUFVLENBQVc7RUFBRSxVQUFVLEVBQUUsSUFBSyxHQUFJOztBQUM1QyxBQUFBLFdBQVcsQ0FBVTtFQUFFLFVBQVUsRUFBRSxLQUFNLEdBQUk7O0FBQzdDLEFBQUEsWUFBWSxDQUFTO0VBQUUsVUFBVSxFQUFFLE1BQU8sR0FBSTs7QUFDOUMsQUFBQSxhQUFhLENBQVE7RUFBRSxVQUFVLEVBQUUsT0FBUSxHQUFJOztBQUMvQyxBQUFBLFlBQVksQ0FBUztFQUFFLFdBQVcsRUFBRSxNQUFPLEdBQUk7O0FBRy9DLEFBQUEsZUFBZSxDQUFNO0VBQUUsY0FBYyxFQUFFLFNBQVUsR0FBSTs7QUFDckQsQUFBQSxlQUFlLEVBeUlmLEFBeklBLFdBeUlXLENBeklVO0VBQUUsY0FBYyxFQUFFLFNBQVUsR0FBSTs7QUFDckQsQUFBQSxnQkFBZ0IsQ0FBSztFQUFFLGNBQWMsRUFBRSxVQUFXLEdBQUk7O0FBR3RELEFBQUEsV0FBVyxDQUFDO0VBQ1YsS0FBSyxFckN4RmtCLE9BQU8sR3FDeUYvQjs7QXhCbkdDLEFBQUEsYUFBYSxDQUFiO0VBQ0UsS0FBSyxFYlllLE9BQU0sR2FYM0I7O0FBQ0QsQUFBYyxDQUFiLEFBQUEsYUFBYSxBQUFBLE1BQU07QUFDcEIsQUFBYyxDQUFiLEFBQUEsYUFBYSxBQUFBLE1BQU0sQ0FEcEI7RUFDRSxLQUFLLEVBQUUsT0FBTSxHQUNkOztBQUxELEFBQUEsYUFBYSxDQUFiO0VBQ0UsS0FBSyxFYmtmd0IsT0FBTyxHYWpmckM7O0FBQ0QsQUFBYyxDQUFiLEFBQUEsYUFBYSxBQUFBLE1BQU07QUFDcEIsQUFBYyxDQUFiLEFBQUEsYUFBYSxBQUFBLE1BQU0sQ0FEcEI7RUFDRSxLQUFLLEVBQUUsT0FBTSxHQUNkOztBQUxELEFBQUEsVUFBVSxDQUFWO0VBQ0UsS0FBSyxFYnNmd0IsT0FBTyxHYXJmckM7O0FBQ0QsQUFBVyxDQUFWLEFBQUEsVUFBVSxBQUFBLE1BQU07QUFDakIsQUFBVyxDQUFWLEFBQUEsVUFBVSxBQUFBLE1BQU0sQ0FEakI7RUFDRSxLQUFLLEVBQUUsT0FBTSxHQUNkOztBQUxELEFBQUEsYUFBYSxDQUFiO0VBQ0UsS0FBSyxFYjBmd0IsT0FBTyxHYXpmckM7O0FBQ0QsQUFBYyxDQUFiLEFBQUEsYUFBYSxBQUFBLE1BQU07QUFDcEIsQUFBYyxDQUFiLEFBQUEsYUFBYSxBQUFBLE1BQU0sQ0FEcEI7RUFDRSxLQUFLLEVBQUUsT0FBTSxHQUNkOztBQUxELEFBQUEsWUFBWSxDQUFaO0VBQ0UsS0FBSyxFYjhmd0IsT0FBTyxHYTdmckM7O0FBQ0QsQUFBYSxDQUFaLEFBQUEsWUFBWSxBQUFBLE1BQU07QUFDbkIsQUFBYSxDQUFaLEFBQUEsWUFBWSxBQUFBLE1BQU0sQ0FEbkI7RUFDRSxLQUFLLEVBQUUsT0FBTSxHQUNkOztBd0I2R0gsQUFBQSxXQUFXLENBQUM7RUFHVixLQUFLLEVBQUUsSUFBSyxHQUNiOztBWnRIQyxBQUFBLFdBQVcsQ0FBWDtFQUNFLGdCQUFnQixFekJZSSxPQUFNLEd5QlgzQjs7QUFDRCxBQUFZLENBQVgsQUFBQSxXQUFXLEFBQUEsTUFBTTtBQUNsQixBQUFZLENBQVgsQUFBQSxXQUFXLEFBQUEsTUFBTSxDQURsQjtFQUNFLGdCQUFnQixFQUFFLE9BQU0sR0FDekI7O0FBTEQsQUFBQSxXQUFXLENBQVg7RUFDRSxnQkFBZ0IsRXpCbWZhLE9BQU8sR3lCbGZyQzs7QUFDRCxBQUFZLENBQVgsQUFBQSxXQUFXLEFBQUEsTUFBTTtBQUNsQixBQUFZLENBQVgsQUFBQSxXQUFXLEFBQUEsTUFBTSxDQURsQjtFQUNFLGdCQUFnQixFQUFFLE9BQU0sR0FDekI7O0FBTEQsQUFBQSxRQUFRLENBQVI7RUFDRSxnQkFBZ0IsRXpCdWZhLE9BQU8sR3lCdGZyQzs7QUFDRCxBQUFTLENBQVIsQUFBQSxRQUFRLEFBQUEsTUFBTTtBQUNmLEFBQVMsQ0FBUixBQUFBLFFBQVEsQUFBQSxNQUFNLENBRGY7RUFDRSxnQkFBZ0IsRUFBRSxPQUFNLEdBQ3pCOztBQUxELEFBQUEsV0FBVyxDQUFYO0VBQ0UsZ0JBQWdCLEV6QjJmYSxPQUFPLEd5QjFmckM7O0FBQ0QsQUFBWSxDQUFYLEFBQUEsV0FBVyxBQUFBLE1BQU07QUFDbEIsQUFBWSxDQUFYLEFBQUEsV0FBVyxBQUFBLE1BQU0sQ0FEbEI7RUFDRSxnQkFBZ0IsRUFBRSxPQUFNLEdBQ3pCOztBQUxELEFBQUEsVUFBVSxDQUFWO0VBQ0UsZ0JBQWdCLEV6QitmYSxPQUFPLEd5QjlmckM7O0FBQ0QsQUFBVyxDQUFWLEFBQUEsVUFBVSxBQUFBLE1BQU07QUFDakIsQUFBVyxDQUFWLEFBQUEsVUFBVSxBQUFBLE1BQU0sQ0FEakI7RUFDRSxnQkFBZ0IsRUFBRSxPQUFNLEdBQ3pCOztBWWdJSCxBQUFBLFlBQVksQ0FBQztFQUNYLGNBQWMsRUFBSSxHQUFxQjtFQUN2QyxNQUFNLEVBQUcsSUFBcUIsQ0FBTSxDQUFDLENyQzFFYixJQUFLO0VxQzJFN0IsYUFBYSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENyQzdIRCxPQUFPLEdxQzhIL0I7O0FBT0QsQUFBQSxFQUFFO0FBQ0YsQUFBQSxFQUFFLENBQUM7RUFDRCxVQUFVLEVBQUUsQ0FBRTtFQUNkLGFBQWEsRUFBRyxJQUFxQixHQUt0QztFQVJELEFBSUUsRUFKQSxDQUlBLEVBQUU7RUFKSixBQUtFLEVBTEEsQ0FLQSxFQUFFO0VBSkosQUFHRSxFQUhBLENBR0EsRUFBRTtFQUhKLEFBSUUsRUFKQSxDQUlBLEVBQUUsQ0FBQztJQUNELGFBQWEsRUFBRSxDQUFFLEdBQ2xCOztBQVdILEFBQUEsY0FBYyxDQUFDO0VBSmIsWUFBWSxFQUFFLENBQUU7RUFDaEIsVUFBVSxFQUFFLElBQUssR0FLbEI7O0FBSUQsQUFBQSxZQUFZLENBQUM7RUFWWCxZQUFZLEVBQUUsQ0FBRTtFQUNoQixVQUFVLEVBQUUsSUFBSztFQVdqQixXQUFXLEVBQUUsSUFBSyxHQU9uQjtFQVRELEFBSUksWUFKUSxHQUlSLEVBQUUsQ0FBQztJQUNILE9BQU8sRUFBRSxZQUFhO0lBQ3RCLFlBQVksRUFBRSxHQUFJO0lBQ2xCLGFBQWEsRUFBRSxHQUFJLEdBQ3BCOztBQUlILEFBQUEsRUFBRSxDQUFDO0VBQ0QsVUFBVSxFQUFFLENBQUU7RUFDZCxhQUFhLEVyQ3pIVyxJQUFLLEdxQzBIOUI7O0FBQ0QsQUFBQSxFQUFFO0FBQ0YsQUFBQSxFQUFFLENBQUM7RUFDRCxXQUFXLEVyQy9IYSxPQUFXLEdxQ2dJcEM7O0FBQ0QsQUFBQSxFQUFFLENBQUM7RUFDRCxXQUFXLEVBQUUsSUFBSyxHQUNuQjs7QUFDRCxBQUFBLEVBQUUsQ0FBQztFQUNELFdBQVcsRUFBRSxDQUFFLEdBQ2hCOztBQU9ELEFBQ0UsY0FEWSxDQUNaLEVBQUUsQVRoTUQsT0FBTyxFUytMVixBQUNFLGNBRFksQ0FDWixFQUFFLEFUL0xELE1BQU0sQ0FBQztFQUNOLE9BQU8sRUFBRSxHQUFJO0VBQ2IsT0FBTyxFQUFFLEtBQU0sR0FDaEI7O0FTMkxILEFBQ0UsY0FEWSxDQUNaLEVBQUUsQVQzTEQsTUFBTSxDQUFDO0VBQ04sS0FBSyxFQUFFLElBQUssR0FDYjs7QVM2TEQsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0VBTG5CLEFBTUksY0FOVSxDQU1WLEVBQUUsQ0FBQztJQUNELEtBQUssRUFBRSxJQUFLO0lBQ1osS0FBSyxFQUFHLEtBQXFCO0lBQzdCLEtBQUssRUFBRSxJQUFLO0lBQ1osVUFBVSxFQUFFLEtBQU07SXZCbE50QixRQUFRLEVBQUUsTUFBTztJQUNqQixhQUFhLEVBQUUsUUFBUztJQUN4QixXQUFXLEVBQUUsTUFBTyxHdUJrTmpCO0VBWkwsQUFhSSxjQWJVLENBYVYsRUFBRSxDQUFDO0lBQ0QsV0FBVyxFckMybkJhLEtBQUssR3FDMW5COUI7O0FBU0wsQUFBVSxJQUFOLENBQUEsQUFBQSxLQUFDLEFBQUE7QUFFTCxBQUF3QixJQUFwQixDQUFBLEFBQUEsbUJBQUMsQUFBQSxFQUFxQjtFQUN4QixNQUFNLEVBQUUsSUFBSztFQUNiLGFBQWEsRUFBRSxHQUFHLENBQUMsTUFBTSxDckMxTkYsT0FBTyxHcUMyTi9COztBQUNELEFBQUEsV0FBVyxDQUFDO0VBQ1YsU0FBUyxFQUFFLEdBQUksR0FFaEI7O0FBR0QsQUFBQSxVQUFVLENBQUM7RUFDVCxPQUFPLEVBQUcsSUFBcUIsQ3JDaExQLElBQUs7RXFDaUw3QixNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ3JDakxhLElBQUs7RXFDa0w3QixTQUFTLEVyQzRtQm9CLE1BQWU7RXFDM21CNUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENyQ3JPQyxPQUFPLEdxQzZQL0I7RUE1QkQsQUFNRSxVQU5RLENBTVIsQ0FBQyxBQUdFLFdBQVc7RUFUaEIsQUFPRSxVQVBRLENBT1IsRUFBRSxBQUVDLFdBQVc7RUFUaEIsQUFRRSxVQVJRLENBUVIsRUFBRSxBQUNDLFdBQVcsQ0FBQztJQUNYLGFBQWEsRUFBRSxDQUFFLEdBQ2xCO0VBWEwsQUFnQkUsVUFoQlEsQ0FnQlIsTUFBTTtFQWhCUixBQWlCRSxVQWpCUSxDQWlCUixLQUFLO0VBakJQLEFBa0JFLFVBbEJRLENBa0JSLE1BQU0sQ0FBQztJQUNMLE9BQU8sRUFBRSxLQUFNO0lBQ2YsU0FBUyxFQUFFLEdBQUk7SUFDZixXQUFXLEVyQ3RNVyxPQUFXO0lxQ3VNakMsS0FBSyxFckN4UGdCLE9BQU8sR3FDNlA3QjtJQTNCSCxBQWdCRSxVQWhCUSxDQWdCUixNQUFNLEFBUUgsT0FBTztJQXhCWixBQWlCRSxVQWpCUSxDQWlCUixLQUFLLEFBT0YsT0FBTztJQXhCWixBQWtCRSxVQWxCUSxDQWtCUixNQUFNLEFBTUgsT0FBTyxDQUFDO01BQ1AsT0FBTyxFQUFFLGFBQWMsR0FDeEI7O0FBT0wsQUFBQSxtQkFBbUI7QUFDbkIsQUFBVSxVQUFBLEFBQUEsV0FBVyxDQUFDO0VBQ3BCLGFBQWEsRUFBRSxJQUFLO0VBQ3BCLFlBQVksRUFBRSxDQUFFO0VBQ2hCLFlBQVksRUFBRSxHQUFHLENBQUMsS0FBSyxDckN0UUEsT0FBTztFcUN1UTlCLFdBQVcsRUFBRSxDQUFFO0VBQ2YsVUFBVSxFQUFFLEtBQU0sR0FXbkI7RUFqQkQsQUFTRSxtQkFUaUIsQ0FTakIsTUFBTSxBQUdILE9BQU87RUFaWixBQVVFLG1CQVZpQixDQVVqQixLQUFLLEFBRUYsT0FBTztFQVpaLEFBV0UsbUJBWGlCLENBV2pCLE1BQU0sQUFDSCxPQUFPO0VBWFosQUFRRSxVQVJRLEFBQUEsV0FBVyxDQVFuQixNQUFNLEFBR0gsT0FBTztFQVhaLEFBU0UsVUFUUSxBQUFBLFdBQVcsQ0FTbkIsS0FBSyxBQUVGLE9BQU87RUFYWixBQVVFLFVBVlEsQUFBQSxXQUFXLENBVW5CLE1BQU0sQUFDSCxPQUFPLENBQUM7SUFBRSxPQUFPLEVBQUUsRUFBRyxHQUFJO0VBWi9CLEFBU0UsbUJBVGlCLENBU2pCLE1BQU0sQUFJSCxNQUFNO0VBYlgsQUFVRSxtQkFWaUIsQ0FVakIsS0FBSyxBQUdGLE1BQU07RUFiWCxBQVdFLG1CQVhpQixDQVdqQixNQUFNLEFBRUgsTUFBTTtFQVpYLEFBUUUsVUFSUSxBQUFBLFdBQVcsQ0FRbkIsTUFBTSxBQUlILE1BQU07RUFaWCxBQVNFLFVBVFEsQUFBQSxXQUFXLENBU25CLEtBQUssQUFHRixNQUFNO0VBWlgsQUFVRSxVQVZRLEFBQUEsV0FBVyxDQVVuQixNQUFNLEFBRUgsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLGFBQWMsR0FDeEI7O0FBS0wsQUFBQSxPQUFPLENBQUM7RUFDTixhQUFhLEVyQ3JPVyxJQUFLO0VxQ3NPN0IsVUFBVSxFQUFFLE1BQU87RUFDbkIsV0FBVyxFckN6T2EsT0FBVyxHcUMwT3BDOztBQ25TRCxBQUFBLElBQUk7QUFDSixBQUFBLEdBQUc7QUFDSCxBQUFBLEdBQUc7QUFDSCxBQUFBLElBQUksQ0FBQztFQUNILFdBQVcsRXRDc0NhLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxTQUFTLEdzQ3JDMUU7O0FBR0QsQUFBQSxJQUFJLENBQUM7RUFDSCxPQUFPLEVBQUUsT0FBUTtFQUNqQixTQUFTLEVBQUUsR0FBSTtFQUNmLEtBQUssRXRDbXpCdUIsT0FBTztFc0NsekJuQyxnQkFBZ0IsRXRDbXpCWSxPQUFPO0VzQ2x6Qm5DLGFBQWEsRXRDMEZhLEdBQUcsR3NDekY5Qjs7QUFHRCxBQUFBLEdBQUcsQ0FBQztFQUNGLE9BQU8sRUFBRSxPQUFRO0VBQ2pCLFNBQVMsRUFBRSxHQUFJO0VBQ2YsS0FBSyxFdEM2eUJ1QixJQUFJO0VzQzV5QmhDLGdCQUFnQixFdEM2eUJZLElBQUk7RXNDNXlCaEMsYUFBYSxFdENtRmEsR0FBRztFc0NsRjdCLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFFLElBQUcsQ0FBQyxDQUFDLENBQUMsbUJBQUksR0FRaEM7RUFkRCxBQVFFLEdBUkMsQ0FRRCxHQUFHLENBQUM7SUFDRixPQUFPLEVBQUUsQ0FBRTtJQUNYLFNBQVMsRUFBRSxJQUFLO0lBQ2hCLFdBQVcsRUFBRSxJQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUFLLEdBQ2xCOztBQUlILEFBQUEsR0FBRyxDQUFDO0VBQ0YsT0FBTyxFQUFFLEtBQU07RUFDZixPQUFPLEVBQUksS0FBcUI7RUFDaEMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUUsSUFBcUI7RUFDbEMsU0FBUyxFQUFHLElBQWU7RUFDM0IsV0FBVyxFdENrQmEsT0FBVztFc0NqQm5DLFVBQVUsRUFBRSxTQUFVO0VBQ3RCLFNBQVMsRUFBRSxVQUFXO0VBQ3RCLEtBQUssRXRDcENrQixPQUFPO0VzQ3FDOUIsZ0JBQWdCLEV0Q3l4QlksT0FBTztFc0N4eEJuQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ3RDMHhCVyxJQUFJO0VzQ3p4QmhDLGFBQWEsRXRDMERhLEdBQUcsR3NDL0M5QjtFQXRCRCxBQWNFLEdBZEMsQ0FjRCxJQUFJLENBQUM7SUFDSCxPQUFPLEVBQUUsQ0FBRTtJQUNYLFNBQVMsRUFBRSxPQUFRO0lBQ25CLEtBQUssRUFBRSxPQUFRO0lBQ2YsV0FBVyxFQUFFLFFBQVM7SUFDdEIsZ0JBQWdCLEVBQUUsV0FBWTtJQUM5QixhQUFhLEVBQUUsQ0FBRSxHQUNsQjs7QUFJSCxBQUFBLGVBQWUsQ0FBQztFQUNkLFVBQVUsRXRDMndCa0IsS0FBSztFc0Mxd0JqQyxVQUFVLEVBQUUsTUFBTyxHQUNwQjs7QUMzREQsQUFBQSxVQUFVLENBQUM7RVBIVCxZQUFZLEVBQUUsSUFBSztFQUNuQixXQUFXLEVBQUUsSUFBSztFQUNsQixZQUFZLEVBQUcsSUFBSztFQUNwQixhQUFhLEVBQUUsSUFBSSxHT1lwQjtFQVpELEFBQUEsVUFBVSxBWElQLE9BQU8sRVdKVixBQUFBLFVBQVUsQVhLUCxNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsR0FBSTtJQUNiLE9BQU8sRUFBRSxLQUFNLEdBQ2hCO0VXUkgsQUFBQSxVQUFVLEFYU1AsTUFBTSxDQUFDO0lBQ04sS0FBSyxFQUFFLElBQUssR0FDYjtFV1JELE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztJQUhuQixBQUFBLFVBQVUsQ0FBQztNQUlQLEtBQUssRXZDMlV1QixLQUFLLEd1Q25VcEM7RUFOQyxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7SUFObkIsQUFBQSxVQUFVLENBQUM7TUFPUCxLQUFLLEV2QzZVdUIsS0FBSyxHdUN4VXBDO0VBSEMsTUFBTSxFQUFMLFNBQVMsRUFBRSxNQUFNO0lBVHBCLEFBQUEsVUFBVSxDQUFDO01BVVAsS0FBSyxFdkMrVXVCLE1BQU0sR3VDN1VyQzs7QUFRRCxBQUFBLGdCQUFnQixDQUFDO0VQdkJmLFlBQVksRUFBRSxJQUFLO0VBQ25CLFdBQVcsRUFBRSxJQUFLO0VBQ2xCLFlBQVksRUFBRyxJQUFLO0VBQ3BCLGFBQWEsRUFBRSxJQUFJLEdPc0JwQjtFQUZELEFBQUEsZ0JBQWdCLEFYaEJiLE9BQU8sRVdnQlYsQUFBQSxnQkFBZ0IsQVhmYixNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsR0FBSTtJQUNiLE9BQU8sRUFBRSxLQUFNLEdBQ2hCO0VXWUgsQUFBQSxnQkFBZ0IsQVhYYixNQUFNLENBQUM7SUFDTixLQUFLLEVBQUUsSUFBSyxHQUNiOztBV2tCSCxBQUFBLElBQUksQ0FBQztFUHZCSCxXQUFXLEVBQUcsS0FBSTtFQUNsQixZQUFZLEVBQUUsS0FBSyxHT3dCcEI7RUFGRCxBQUFBLElBQUksQVh6QkQsT0FBTyxFV3lCVixBQUFBLElBQUksQVh4QkQsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLEdBQUk7SUFDYixPQUFPLEVBQUUsS0FBTSxHQUNoQjtFV3FCSCxBQUFBLElBQUksQVhwQkQsTUFBTSxDQUFDO0lBQ04sS0FBSyxFQUFFLElBQUssR0FDYjs7QUdWRCxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsQ0FBMWhCO0VBQ0UsUUFBUSxFQUFFLFFBQVM7RUFFbkIsVUFBVSxFQUFFLEdBQUk7RUFFaEIsWUFBWSxFQUFHLElBQUk7RUFDbkIsYUFBYSxFQUFFLElBQUssR0FDckI7O0FBU0QsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxVQUFVLEVBQUUsQUFBQSxVQUFVLEVBQUUsQUFBQSxVQUFVLENBQXJJO0VBQ0UsS0FBSyxFQUFFLElBQUssR0FDYjs7QUFNQyxBQUFBLFNBQVMsQ0FBVDtFQUNFLEtBQUssRUFBRSxRQUFVLEdBQ2xCOztBQUZELEFBQUEsU0FBUyxDQUFUO0VBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7O0FBRkQsQUFBQSxTQUFTLENBQVQ7RUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjs7QUFGRCxBQUFBLFNBQVMsQ0FBVDtFQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCOztBQUZELEFBQUEsU0FBUyxDQUFUO0VBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7O0FBRkQsQUFBQSxTQUFTLENBQVQ7RUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjs7QUFGRCxBQUFBLFNBQVMsQ0FBVDtFQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCOztBQUZELEFBQUEsU0FBUyxDQUFUO0VBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7O0FBRkQsQUFBQSxTQUFTLENBQVQ7RUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjs7QUFGRCxBQUFBLFVBQVUsQ0FBVjtFQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCOztBQUZELEFBQUEsVUFBVSxDQUFWO0VBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7O0FBRkQsQUFBQSxVQUFVLENBQVY7RUFDRSxLQUFLLEVBQUUsSUFBVSxHQUNsQjs7QUFrQkQsQUFBQSxjQUFjLENBQWQ7RUFDRSxLQUFLLEVBQUUsSUFBSyxHQUNiOztBQVBELEFBQUEsY0FBYyxDQUFkO0VBQ0UsS0FBSyxFQUFFLFFBQVUsR0FDbEI7O0FBRkQsQUFBQSxjQUFjLENBQWQ7RUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjs7QUFGRCxBQUFBLGNBQWMsQ0FBZDtFQUNFLEtBQUssRUFBRSxHQUFVLEdBQ2xCOztBQUZELEFBQUEsY0FBYyxDQUFkO0VBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7O0FBRkQsQUFBQSxjQUFjLENBQWQ7RUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjs7QUFGRCxBQUFBLGNBQWMsQ0FBZDtFQUNFLEtBQUssRUFBRSxHQUFVLEdBQ2xCOztBQUZELEFBQUEsY0FBYyxDQUFkO0VBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7O0FBRkQsQUFBQSxjQUFjLENBQWQ7RUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjs7QUFGRCxBQUFBLGNBQWMsQ0FBZDtFQUNFLEtBQUssRUFBRSxHQUFVLEdBQ2xCOztBQUZELEFBQUEsZUFBZSxDQUFmO0VBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7O0FBRkQsQUFBQSxlQUFlLENBQWY7RUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjs7QUFGRCxBQUFBLGVBQWUsQ0FBZjtFQUNFLEtBQUssRUFBRSxJQUFVLEdBQ2xCOztBQVBELEFBQUEsY0FBYyxDQUFkO0VBQ0UsSUFBSSxFQUFFLElBQUssR0FDWjs7QUFQRCxBQUFBLGNBQWMsQ0FBZDtFQUNFLElBQUksRUFBRSxRQUFVLEdBQ2pCOztBQUZELEFBQUEsY0FBYyxDQUFkO0VBQ0UsSUFBSSxFQUFFLFNBQVUsR0FDakI7O0FBRkQsQUFBQSxjQUFjLENBQWQ7RUFDRSxJQUFJLEVBQUUsR0FBVSxHQUNqQjs7QUFGRCxBQUFBLGNBQWMsQ0FBZDtFQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCOztBQUZELEFBQUEsY0FBYyxDQUFkO0VBQ0UsSUFBSSxFQUFFLFNBQVUsR0FDakI7O0FBRkQsQUFBQSxjQUFjLENBQWQ7RUFDRSxJQUFJLEVBQUUsR0FBVSxHQUNqQjs7QUFGRCxBQUFBLGNBQWMsQ0FBZDtFQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCOztBQUZELEFBQUEsY0FBYyxDQUFkO0VBQ0UsSUFBSSxFQUFFLFNBQVUsR0FDakI7O0FBRkQsQUFBQSxjQUFjLENBQWQ7RUFDRSxJQUFJLEVBQUUsR0FBVSxHQUNqQjs7QUFGRCxBQUFBLGVBQWUsQ0FBZjtFQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCOztBQUZELEFBQUEsZUFBZSxDQUFmO0VBQ0UsSUFBSSxFQUFFLFNBQVUsR0FDakI7O0FBRkQsQUFBQSxlQUFlLENBQWY7RUFDRSxJQUFJLEVBQUUsSUFBVSxHQUNqQjs7QUFrQkQsQUFBQSxnQkFBZ0IsQ0FBaEI7RUFDRSxXQUFXLEVBQUUsRUFBVSxHQUN4Qjs7QUFGRCxBQUFBLGdCQUFnQixDQUFoQjtFQUNFLFdBQVcsRUFBRSxRQUFVLEdBQ3hCOztBQUZELEFBQUEsZ0JBQWdCLENBQWhCO0VBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7O0FBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7RUFDRSxXQUFXLEVBQUUsR0FBVSxHQUN4Qjs7QUFGRCxBQUFBLGdCQUFnQixDQUFoQjtFQUNFLFdBQVcsRUFBRSxTQUFVLEdBQ3hCOztBQUZELEFBQUEsZ0JBQWdCLENBQWhCO0VBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7O0FBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7RUFDRSxXQUFXLEVBQUUsR0FBVSxHQUN4Qjs7QUFGRCxBQUFBLGdCQUFnQixDQUFoQjtFQUNFLFdBQVcsRUFBRSxTQUFVLEdBQ3hCOztBQUZELEFBQUEsZ0JBQWdCLENBQWhCO0VBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7O0FBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7RUFDRSxXQUFXLEVBQUUsR0FBVSxHQUN4Qjs7QUFGRCxBQUFBLGlCQUFpQixDQUFqQjtFQUNFLFdBQVcsRUFBRSxTQUFVLEdBQ3hCOztBQUZELEFBQUEsaUJBQWlCLENBQWpCO0VBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7O0FBRkQsQUFBQSxpQkFBaUIsQ0FBakI7RUFDRSxXQUFXLEVBQUUsSUFBVSxHQUN4Qjs7QVFFTCxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7RVJyQ2YsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxVQUFVLEVBQUUsQUFBQSxVQUFVLEVBQUUsQUFBQSxVQUFVLENBQXJJO0lBQ0UsS0FBSyxFQUFFLElBQUssR0FDYjtFQU1DLEFBQUEsU0FBUyxDQUFUO0lBQ0UsS0FBSyxFQUFFLFFBQVUsR0FDbEI7RUFGRCxBQUFBLFNBQVMsQ0FBVDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxTQUFTLENBQVQ7SUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjtFQUZELEFBQUEsU0FBUyxDQUFUO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLFNBQVMsQ0FBVDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxTQUFTLENBQVQ7SUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjtFQUZELEFBQUEsU0FBUyxDQUFUO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLFNBQVMsQ0FBVDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxTQUFTLENBQVQ7SUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjtFQUZELEFBQUEsVUFBVSxDQUFWO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLFVBQVUsQ0FBVjtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxVQUFVLENBQVY7SUFDRSxLQUFLLEVBQUUsSUFBVSxHQUNsQjtFQWtCRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLEtBQUssRUFBRSxJQUFLLEdBQ2I7RUFQRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLEtBQUssRUFBRSxRQUFVLEdBQ2xCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsS0FBSyxFQUFFLEdBQVUsR0FDbEI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsS0FBSyxFQUFFLEdBQVUsR0FDbEI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsS0FBSyxFQUFFLEdBQVUsR0FDbEI7RUFGRCxBQUFBLGVBQWUsQ0FBZjtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxlQUFlLENBQWY7SUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjtFQUZELEFBQUEsZUFBZSxDQUFmO0lBQ0UsS0FBSyxFQUFFLElBQVUsR0FDbEI7RUFQRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLElBQUksRUFBRSxJQUFLLEdBQ1o7RUFQRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLElBQUksRUFBRSxRQUFVLEdBQ2pCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxJQUFJLEVBQUUsU0FBVSxHQUNqQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsSUFBSSxFQUFFLEdBQVUsR0FDakI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxJQUFJLEVBQUUsU0FBVSxHQUNqQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsSUFBSSxFQUFFLEdBQVUsR0FDakI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxJQUFJLEVBQUUsU0FBVSxHQUNqQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsSUFBSSxFQUFFLEdBQVUsR0FDakI7RUFGRCxBQUFBLGVBQWUsQ0FBZjtJQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCO0VBRkQsQUFBQSxlQUFlLENBQWY7SUFDRSxJQUFJLEVBQUUsU0FBVSxHQUNqQjtFQUZELEFBQUEsZUFBZSxDQUFmO0lBQ0UsSUFBSSxFQUFFLElBQVUsR0FDakI7RUFrQkQsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFDRSxXQUFXLEVBQUUsRUFBVSxHQUN4QjtFQUZELEFBQUEsZ0JBQWdCLENBQWhCO0lBQ0UsV0FBVyxFQUFFLFFBQVUsR0FDeEI7RUFGRCxBQUFBLGdCQUFnQixDQUFoQjtJQUNFLFdBQVcsRUFBRSxTQUFVLEdBQ3hCO0VBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFDRSxXQUFXLEVBQUUsR0FBVSxHQUN4QjtFQUZELEFBQUEsZ0JBQWdCLENBQWhCO0lBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7RUFGRCxBQUFBLGdCQUFnQixDQUFoQjtJQUNFLFdBQVcsRUFBRSxTQUFVLEdBQ3hCO0VBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFDRSxXQUFXLEVBQUUsR0FBVSxHQUN4QjtFQUZELEFBQUEsZ0JBQWdCLENBQWhCO0lBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7RUFGRCxBQUFBLGdCQUFnQixDQUFoQjtJQUNFLFdBQVcsRUFBRSxTQUFVLEdBQ3hCO0VBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFDRSxXQUFXLEVBQUUsR0FBVSxHQUN4QjtFQUZELEFBQUEsaUJBQWlCLENBQWpCO0lBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7RUFGRCxBQUFBLGlCQUFpQixDQUFqQjtJQUNFLFdBQVcsRUFBRSxTQUFVLEdBQ3hCO0VBRkQsQUFBQSxpQkFBaUIsQ0FBakI7SUFDRSxXQUFXLEVBQUUsSUFBVSxHQUN4Qjs7QVFXTCxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7RVI5Q2YsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxTQUFTLEVBQUUsQUFBQSxVQUFVLEVBQUUsQUFBQSxVQUFVLEVBQUUsQUFBQSxVQUFVLENBQXJJO0lBQ0UsS0FBSyxFQUFFLElBQUssR0FDYjtFQU1DLEFBQUEsU0FBUyxDQUFUO0lBQ0UsS0FBSyxFQUFFLFFBQVUsR0FDbEI7RUFGRCxBQUFBLFNBQVMsQ0FBVDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxTQUFTLENBQVQ7SUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjtFQUZELEFBQUEsU0FBUyxDQUFUO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLFNBQVMsQ0FBVDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxTQUFTLENBQVQ7SUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjtFQUZELEFBQUEsU0FBUyxDQUFUO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLFNBQVMsQ0FBVDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxTQUFTLENBQVQ7SUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjtFQUZELEFBQUEsVUFBVSxDQUFWO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLFVBQVUsQ0FBVjtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxVQUFVLENBQVY7SUFDRSxLQUFLLEVBQUUsSUFBVSxHQUNsQjtFQWtCRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLEtBQUssRUFBRSxJQUFLLEdBQ2I7RUFQRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLEtBQUssRUFBRSxRQUFVLEdBQ2xCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsS0FBSyxFQUFFLEdBQVUsR0FDbEI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsS0FBSyxFQUFFLEdBQVUsR0FDbEI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsS0FBSyxFQUFFLEdBQVUsR0FDbEI7RUFGRCxBQUFBLGVBQWUsQ0FBZjtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxlQUFlLENBQWY7SUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjtFQUZELEFBQUEsZUFBZSxDQUFmO0lBQ0UsS0FBSyxFQUFFLElBQVUsR0FDbEI7RUFQRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLElBQUksRUFBRSxJQUFLLEdBQ1o7RUFQRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLElBQUksRUFBRSxRQUFVLEdBQ2pCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxJQUFJLEVBQUUsU0FBVSxHQUNqQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsSUFBSSxFQUFFLEdBQVUsR0FDakI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxJQUFJLEVBQUUsU0FBVSxHQUNqQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsSUFBSSxFQUFFLEdBQVUsR0FDakI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxJQUFJLEVBQUUsU0FBVSxHQUNqQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsSUFBSSxFQUFFLEdBQVUsR0FDakI7RUFGRCxBQUFBLGVBQWUsQ0FBZjtJQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCO0VBRkQsQUFBQSxlQUFlLENBQWY7SUFDRSxJQUFJLEVBQUUsU0FBVSxHQUNqQjtFQUZELEFBQUEsZUFBZSxDQUFmO0lBQ0UsSUFBSSxFQUFFLElBQVUsR0FDakI7RUFrQkQsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFDRSxXQUFXLEVBQUUsRUFBVSxHQUN4QjtFQUZELEFBQUEsZ0JBQWdCLENBQWhCO0lBQ0UsV0FBVyxFQUFFLFFBQVUsR0FDeEI7RUFGRCxBQUFBLGdCQUFnQixDQUFoQjtJQUNFLFdBQVcsRUFBRSxTQUFVLEdBQ3hCO0VBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFDRSxXQUFXLEVBQUUsR0FBVSxHQUN4QjtFQUZELEFBQUEsZ0JBQWdCLENBQWhCO0lBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7RUFGRCxBQUFBLGdCQUFnQixDQUFoQjtJQUNFLFdBQVcsRUFBRSxTQUFVLEdBQ3hCO0VBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFDRSxXQUFXLEVBQUUsR0FBVSxHQUN4QjtFQUZELEFBQUEsZ0JBQWdCLENBQWhCO0lBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7RUFGRCxBQUFBLGdCQUFnQixDQUFoQjtJQUNFLFdBQVcsRUFBRSxTQUFVLEdBQ3hCO0VBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFDRSxXQUFXLEVBQUUsR0FBVSxHQUN4QjtFQUZELEFBQUEsaUJBQWlCLENBQWpCO0lBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7RUFGRCxBQUFBLGlCQUFpQixDQUFqQjtJQUNFLFdBQVcsRUFBRSxTQUFVLEdBQ3hCO0VBRkQsQUFBQSxpQkFBaUIsQ0FBakI7SUFDRSxXQUFXLEVBQUUsSUFBVSxHQUN4Qjs7QVFvQkwsTUFBTSxFQUFMLFNBQVMsRUFBRSxNQUFNO0VSdkRoQixBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFNBQVMsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsRUFBRSxBQUFBLFVBQVUsQ0FBckk7SUFDRSxLQUFLLEVBQUUsSUFBSyxHQUNiO0VBTUMsQUFBQSxTQUFTLENBQVQ7SUFDRSxLQUFLLEVBQUUsUUFBVSxHQUNsQjtFQUZELEFBQUEsU0FBUyxDQUFUO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLFNBQVMsQ0FBVDtJQUNFLEtBQUssRUFBRSxHQUFVLEdBQ2xCO0VBRkQsQUFBQSxTQUFTLENBQVQ7SUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjtFQUZELEFBQUEsU0FBUyxDQUFUO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLFNBQVMsQ0FBVDtJQUNFLEtBQUssRUFBRSxHQUFVLEdBQ2xCO0VBRkQsQUFBQSxTQUFTLENBQVQ7SUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjtFQUZELEFBQUEsU0FBUyxDQUFUO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLFNBQVMsQ0FBVDtJQUNFLEtBQUssRUFBRSxHQUFVLEdBQ2xCO0VBRkQsQUFBQSxVQUFVLENBQVY7SUFDRSxLQUFLLEVBQUUsU0FBVSxHQUNsQjtFQUZELEFBQUEsVUFBVSxDQUFWO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLFVBQVUsQ0FBVjtJQUNFLEtBQUssRUFBRSxJQUFVLEdBQ2xCO0VBa0JELEFBQUEsY0FBYyxDQUFkO0lBQ0UsS0FBSyxFQUFFLElBQUssR0FDYjtFQVBELEFBQUEsY0FBYyxDQUFkO0lBQ0UsS0FBSyxFQUFFLFFBQVUsR0FDbEI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxLQUFLLEVBQUUsR0FBVSxHQUNsQjtFQUZELEFBQUEsZUFBZSxDQUFmO0lBQ0UsS0FBSyxFQUFFLFNBQVUsR0FDbEI7RUFGRCxBQUFBLGVBQWUsQ0FBZjtJQUNFLEtBQUssRUFBRSxTQUFVLEdBQ2xCO0VBRkQsQUFBQSxlQUFlLENBQWY7SUFDRSxLQUFLLEVBQUUsSUFBVSxHQUNsQjtFQVBELEFBQUEsY0FBYyxDQUFkO0lBQ0UsSUFBSSxFQUFFLElBQUssR0FDWjtFQVBELEFBQUEsY0FBYyxDQUFkO0lBQ0UsSUFBSSxFQUFFLFFBQVUsR0FDakI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxJQUFJLEVBQUUsR0FBVSxHQUNqQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsSUFBSSxFQUFFLFNBQVUsR0FDakI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxJQUFJLEVBQUUsR0FBVSxHQUNqQjtFQUZELEFBQUEsY0FBYyxDQUFkO0lBQ0UsSUFBSSxFQUFFLFNBQVUsR0FDakI7RUFGRCxBQUFBLGNBQWMsQ0FBZDtJQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCO0VBRkQsQUFBQSxjQUFjLENBQWQ7SUFDRSxJQUFJLEVBQUUsR0FBVSxHQUNqQjtFQUZELEFBQUEsZUFBZSxDQUFmO0lBQ0UsSUFBSSxFQUFFLFNBQVUsR0FDakI7RUFGRCxBQUFBLGVBQWUsQ0FBZjtJQUNFLElBQUksRUFBRSxTQUFVLEdBQ2pCO0VBRkQsQUFBQSxlQUFlLENBQWY7SUFDRSxJQUFJLEVBQUUsSUFBVSxHQUNqQjtFQWtCRCxBQUFBLGdCQUFnQixDQUFoQjtJQUNFLFdBQVcsRUFBRSxFQUFVLEdBQ3hCO0VBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFDRSxXQUFXLEVBQUUsUUFBVSxHQUN4QjtFQUZELEFBQUEsZ0JBQWdCLENBQWhCO0lBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7RUFGRCxBQUFBLGdCQUFnQixDQUFoQjtJQUNFLFdBQVcsRUFBRSxHQUFVLEdBQ3hCO0VBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFDRSxXQUFXLEVBQUUsU0FBVSxHQUN4QjtFQUZELEFBQUEsZ0JBQWdCLENBQWhCO0lBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7RUFGRCxBQUFBLGdCQUFnQixDQUFoQjtJQUNFLFdBQVcsRUFBRSxHQUFVLEdBQ3hCO0VBRkQsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFDRSxXQUFXLEVBQUUsU0FBVSxHQUN4QjtFQUZELEFBQUEsZ0JBQWdCLENBQWhCO0lBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7RUFGRCxBQUFBLGdCQUFnQixDQUFoQjtJQUNFLFdBQVcsRUFBRSxHQUFVLEdBQ3hCO0VBRkQsQUFBQSxpQkFBaUIsQ0FBakI7SUFDRSxXQUFXLEVBQUUsU0FBVSxHQUN4QjtFQUZELEFBQUEsaUJBQWlCLENBQWpCO0lBQ0UsV0FBVyxFQUFFLFNBQVUsR0FDeEI7RUFGRCxBQUFBLGlCQUFpQixDQUFqQjtJQUNFLFdBQVcsRUFBRSxJQUFVLEdBQ3hCOztBU3hETCxBQUFBLEtBQUssQ0FBQztFQUNKLGdCQUFnQixFeENnSWMsV0FBVyxHd0MvSDFDOztBQUNELEFBQUEsT0FBTyxDQUFDO0VBQ04sV0FBVyxFeEN3SG1CLEdBQUc7RXdDdkhqQyxjQUFjLEV4Q3VIZ0IsR0FBRztFd0N0SGpDLEtBQUssRXhDR2tCLE9BQU87RXdDRjlCLFVBQVUsRUFBRSxJQUFLLEdBQ2xCOztBQUNELEFBQUEsRUFBRSxDQUFDO0VBQ0QsVUFBVSxFQUFFLElBQUssR0FDbEI7O0FBS0QsQUFBQSxNQUFNLENBQUM7RUFDTCxLQUFLLEVBQUUsSUFBSztFQUNaLFNBQVMsRUFBRSxJQUFLO0VBQ2hCLGFBQWEsRXhDeUNXLElBQUssR3dDRDlCO0VBM0NELEFBU1EsTUFURixHQUtGLEtBQUssR0FHSCxFQUFFLEdBQ0EsRUFBRTtFQVRWLEFBVVEsTUFWRixHQUtGLEtBQUssR0FHSCxFQUFFLEdBRUEsRUFBRTtFQVZWLEFBU1EsTUFURixHQU1GLEtBQUssR0FFSCxFQUFFLEdBQ0EsRUFBRTtFQVRWLEFBVVEsTUFWRixHQU1GLEtBQUssR0FFSCxFQUFFLEdBRUEsRUFBRTtFQVZWLEFBU1EsTUFURixHQU9GLEtBQUssR0FDSCxFQUFFLEdBQ0EsRUFBRTtFQVRWLEFBVVEsTUFWRixHQU9GLEtBQUssR0FDSCxFQUFFLEdBRUEsRUFBRSxDQUFDO0lBQ0gsT0FBTyxFeENpR2lCLEdBQUc7SXdDaEczQixXQUFXLEV4QzhCTyxPQUFXO0l3QzdCN0IsY0FBYyxFQUFFLEdBQUk7SUFDcEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEN4QzJHRyxJQUFJLEd3QzFHN0I7RUFmUCxBQW1CaUIsTUFuQlgsR0FtQkYsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEIsY0FBYyxFQUFFLE1BQU87SUFDdkIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEN4Q29HSSxJQUFJLEd3Q25HakM7RUF0QkgsQUE0QlEsTUE1QkYsR0F3QkYsT0FBTyxHQUFHLEtBQUssR0FHYixFQUFFLEFBQUEsWUFBWSxHQUNaLEVBQUU7RUE1QlYsQUE2QlEsTUE3QkYsR0F3QkYsT0FBTyxHQUFHLEtBQUssR0FHYixFQUFFLEFBQUEsWUFBWSxHQUVaLEVBQUU7RUE3QlYsQUE0QlEsTUE1QkYsR0F5QkYsUUFBUSxHQUFHLEtBQUssR0FFZCxFQUFFLEFBQUEsWUFBWSxHQUNaLEVBQUU7RUE1QlYsQUE2QlEsTUE3QkYsR0F5QkYsUUFBUSxHQUFHLEtBQUssR0FFZCxFQUFFLEFBQUEsWUFBWSxHQUVaLEVBQUU7RUE3QlYsQUE0QlEsTUE1QkYsR0EwQkYsS0FBSyxBQUFBLFlBQVksR0FDZixFQUFFLEFBQUEsWUFBWSxHQUNaLEVBQUU7RUE1QlYsQUE2QlEsTUE3QkYsR0EwQkYsS0FBSyxBQUFBLFlBQVksR0FDZixFQUFFLEFBQUEsWUFBWSxHQUVaLEVBQUUsQ0FBQztJQUNILFVBQVUsRUFBRSxDQUFFLEdBQ2Y7RUEvQlAsQUFtQ1ksTUFuQ04sR0FtQ0YsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSyxDeENxRk8sSUFBSSxHd0NwRmpDO0VBckNILEFBd0NFLE1BeENJLENBd0NKLE1BQU0sQ0FBQztJQUNMLGdCQUFnQixFeENqQ0ksSUFBSSxHd0NrQ3pCOztBQU1ILEFBS1EsZ0JBTFEsR0FDWixLQUFLLEdBR0gsRUFBRSxHQUNBLEVBQUU7QUFMVixBQU1RLGdCQU5RLEdBQ1osS0FBSyxHQUdILEVBQUUsR0FFQSxFQUFFO0FBTlYsQUFLUSxnQkFMUSxHQUVaLEtBQUssR0FFSCxFQUFFLEdBQ0EsRUFBRTtBQUxWLEFBTVEsZ0JBTlEsR0FFWixLQUFLLEdBRUgsRUFBRSxHQUVBLEVBQUU7QUFOVixBQUtRLGdCQUxRLEdBR1osS0FBSyxHQUNILEVBQUUsR0FDQSxFQUFFO0FBTFYsQUFNUSxnQkFOUSxHQUdaLEtBQUssR0FDSCxFQUFFLEdBRUEsRUFBRSxDQUFDO0VBQ0gsT0FBTyxFeEN1RGlCLEdBQUcsR3dDdEQ1Qjs7QUFVUCxBQUFBLGVBQWUsQ0FBQztFQUNkLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDeENzRGEsSUFBSSxHd0NyQ25DO0VBbEJELEFBTVEsZUFOTyxHQUVYLEtBQUssR0FHSCxFQUFFLEdBQ0EsRUFBRTtFQU5WLEFBT1EsZUFQTyxHQUVYLEtBQUssR0FHSCxFQUFFLEdBRUEsRUFBRTtFQVBWLEFBTVEsZUFOTyxHQUdYLEtBQUssR0FFSCxFQUFFLEdBQ0EsRUFBRTtFQU5WLEFBT1EsZUFQTyxHQUdYLEtBQUssR0FFSCxFQUFFLEdBRUEsRUFBRTtFQVBWLEFBTVEsZUFOTyxHQUlYLEtBQUssR0FDSCxFQUFFLEdBQ0EsRUFBRTtFQU5WLEFBT1EsZUFQTyxHQUlYLEtBQUssR0FDSCxFQUFFLEdBRUEsRUFBRSxDQUFDO0lBQ0gsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEN4QytDTyxJQUFJLEd3QzlDN0I7RUFUUCxBQWFNLGVBYlMsR0FZWCxLQUFLLEdBQUcsRUFBRSxHQUNSLEVBQUU7RUFiUixBQWNNLGVBZFMsR0FZWCxLQUFLLEdBQUcsRUFBRSxHQUVSLEVBQUUsQ0FBQztJQUNILG1CQUFtQixFQUFFLEdBQUksR0FDMUI7O0FBU0wsQUFDOEIsY0FEaEIsR0FDVixLQUFLLEdBQUcsRUFBRSxBQUFBLFlBQWEsQ0FBQSxBQUFBLEdBQUcsRUFBRTtFQUM1QixnQkFBZ0IsRXhDc0JZLE9BQU8sR3dDckJwQzs7QUFRSCxBQUNjLFlBREYsR0FDUixLQUFLLEdBQUcsRUFBRSxBQUFBLE1BQU0sQ0FBQztFQUNqQixnQkFBZ0IsRXhDYVksT0FBTyxHd0NacEM7O0FBUUgsQUFBdUIsS0FBbEIsQ0FBQyxHQUFHLENBQUEsQUFBQSxLQUFDLEVBQU8sTUFBTSxBQUFiLEVBQWU7RUFDdkIsUUFBUSxFQUFFLE1BQU87RUFDakIsS0FBSyxFQUFFLElBQUs7RUFDWixPQUFPLEVBQUUsWUFBYSxHQUN2Qjs7QUFDRCxBQUNFLEtBREcsQ0FDSCxFQUFFLENBRUMsQUFBQSxLQUFDLEVBQU8sTUFBTSxBQUFiO0FBSE4sQUFFRSxLQUZHLENBRUgsRUFBRSxDQUNDLEFBQUEsS0FBQyxFQUFPLE1BQU0sQUFBYixFQUFlO0VBQ2YsUUFBUSxFQUFFLE1BQU87RUFDakIsS0FBSyxFQUFFLElBQUs7RUFDWixPQUFPLEVBQUUsVUFBVyxHQUNyQjs7QWhCN0lILEFBR00sTUFIQSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBR2YsRUFBRSxBQUFBLE9BQU87QUFIYixBQUlNLE1BSkEsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUlmLEVBQUUsQUFBQSxPQUFPO0FBSmIsQUFLYSxNQUxQLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFLaEIsT0FBTyxHQUFHLEVBQUU7QUFMZixBQU1hLE1BTlAsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQU1oQixPQUFPLEdBQUcsRUFBRTtBQUxmLEFBRU0sTUFGQSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBRWYsRUFBRSxBQUFBLE9BQU87QUFGYixBQUdNLE1BSEEsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUdmLEVBQUUsQUFBQSxPQUFPO0FBSGIsQUFJYSxNQUpQLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFJaEIsT0FBTyxHQUFHLEVBQUU7QUFKZixBQUthLE1BTFAsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUtoQixPQUFPLEdBQUcsRUFBRTtBQUpmLEFBQ00sTUFEQSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQ2YsRUFBRSxBQUFBLE9BQU87QUFEYixBQUVNLE1BRkEsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUVmLEVBQUUsQUFBQSxPQUFPO0FBRmIsQUFHYSxNQUhQLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFHaEIsT0FBTyxHQUFHLEVBQUU7QUFIZixBQUlhLE1BSlAsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUloQixPQUFPLEdBQUcsRUFBRSxDQUhiO0VBQ0UsZ0JBQWdCLEV4QmlJVSxPQUFPLEd3QmhJbEM7O0FBS0gsQUFDYSxZQURELEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FDckIsRUFBRSxBQUFBLE9BQU8sQUFBQSxNQUFNO0FBRG5CLEFBRWEsWUFGRCxHQUFHLEtBQUssR0FBRyxFQUFFLEdBRXJCLEVBQUUsQUFBQSxPQUFPLEFBQUEsTUFBTTtBQUZuQixBQUdtQixZQUhQLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFHdEIsT0FBTyxBQUFBLE1BQU0sR0FBRyxFQUFFO0FBSHJCLEFBSVksWUFKQSxHQUFHLEtBQUssR0FBRyxFQUFFLEFBSXRCLE1BQU0sR0FBRyxPQUFPO0FBSm5CLEFBS21CLFlBTFAsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUt0QixPQUFPLEFBQUEsTUFBTSxHQUFHLEVBQUUsQ0FKbkI7RUFDRSxnQkFBZ0IsRUFBRSxPQUFNLEdBQ3pCOztBQWJILEFBR00sTUFIQSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBR2YsRUFBRSxBQUFBLFFBQVE7QUFIZCxBQUlNLE1BSkEsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUlmLEVBQUUsQUFBQSxRQUFRO0FBSmQsQUFLYyxNQUxSLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFLaEIsUUFBUSxHQUFHLEVBQUU7QUFMaEIsQUFNYyxNQU5SLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFNaEIsUUFBUSxHQUFHLEVBQUU7QUFMaEIsQUFFTSxNQUZBLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FFZixFQUFFLEFBQUEsUUFBUTtBQUZkLEFBR00sTUFIQSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBR2YsRUFBRSxBQUFBLFFBQVE7QUFIZCxBQUljLE1BSlIsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUloQixRQUFRLEdBQUcsRUFBRTtBQUpoQixBQUtjLE1BTFIsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUtoQixRQUFRLEdBQUcsRUFBRTtBQUpoQixBQUNNLE1BREEsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUNmLEVBQUUsQUFBQSxRQUFRO0FBRGQsQUFFTSxNQUZBLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FFZixFQUFFLEFBQUEsUUFBUTtBQUZkLEFBR2MsTUFIUixHQUFHLEtBQUssR0FBRyxFQUFFLEFBR2hCLFFBQVEsR0FBRyxFQUFFO0FBSGhCLEFBSWMsTUFKUixHQUFHLEtBQUssR0FBRyxFQUFFLEFBSWhCLFFBQVEsR0FBRyxFQUFFLENBSGQ7RUFDRSxnQkFBZ0IsRXhCK2VXLE9BQU8sR3dCOWVuQzs7QUFLSCxBQUNjLFlBREYsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUNyQixFQUFFLEFBQUEsUUFBUSxBQUFBLE1BQU07QUFEcEIsQUFFYyxZQUZGLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FFckIsRUFBRSxBQUFBLFFBQVEsQUFBQSxNQUFNO0FBRnBCLEFBR29CLFlBSFIsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUd0QixRQUFRLEFBQUEsTUFBTSxHQUFHLEVBQUU7QUFIdEIsQUFJWSxZQUpBLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFJdEIsTUFBTSxHQUFHLFFBQVE7QUFKcEIsQUFLb0IsWUFMUixHQUFHLEtBQUssR0FBRyxFQUFFLEFBS3RCLFFBQVEsQUFBQSxNQUFNLEdBQUcsRUFBRSxDQUpwQjtFQUNFLGdCQUFnQixFQUFFLE9BQU0sR0FDekI7O0FBYkgsQUFHTSxNQUhBLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FHZixFQUFFLEFBQUEsS0FBSztBQUhYLEFBSU0sTUFKQSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBSWYsRUFBRSxBQUFBLEtBQUs7QUFKWCxBQUtXLE1BTEwsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUtoQixLQUFLLEdBQUcsRUFBRTtBQUxiLEFBTVcsTUFOTCxHQUFHLEtBQUssR0FBRyxFQUFFLEFBTWhCLEtBQUssR0FBRyxFQUFFO0FBTGIsQUFFTSxNQUZBLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FFZixFQUFFLEFBQUEsS0FBSztBQUZYLEFBR00sTUFIQSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBR2YsRUFBRSxBQUFBLEtBQUs7QUFIWCxBQUlXLE1BSkwsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUloQixLQUFLLEdBQUcsRUFBRTtBQUpiLEFBS1csTUFMTCxHQUFHLEtBQUssR0FBRyxFQUFFLEFBS2hCLEtBQUssR0FBRyxFQUFFO0FBSmIsQUFDTSxNQURBLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FDZixFQUFFLEFBQUEsS0FBSztBQURYLEFBRU0sTUFGQSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBRWYsRUFBRSxBQUFBLEtBQUs7QUFGWCxBQUdXLE1BSEwsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUdoQixLQUFLLEdBQUcsRUFBRTtBQUhiLEFBSVcsTUFKTCxHQUFHLEtBQUssR0FBRyxFQUFFLEFBSWhCLEtBQUssR0FBRyxFQUFFLENBSFg7RUFDRSxnQkFBZ0IsRXhCbWZXLE9BQU8sR3dCbGZuQzs7QUFLSCxBQUNXLFlBREMsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUNyQixFQUFFLEFBQUEsS0FBSyxBQUFBLE1BQU07QUFEakIsQUFFVyxZQUZDLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FFckIsRUFBRSxBQUFBLEtBQUssQUFBQSxNQUFNO0FBRmpCLEFBR2lCLFlBSEwsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUd0QixLQUFLLEFBQUEsTUFBTSxHQUFHLEVBQUU7QUFIbkIsQUFJWSxZQUpBLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFJdEIsTUFBTSxHQUFHLEtBQUs7QUFKakIsQUFLaUIsWUFMTCxHQUFHLEtBQUssR0FBRyxFQUFFLEFBS3RCLEtBQUssQUFBQSxNQUFNLEdBQUcsRUFBRSxDQUpqQjtFQUNFLGdCQUFnQixFQUFFLE9BQU0sR0FDekI7O0FBYkgsQUFHTSxNQUhBLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FHZixFQUFFLEFBQUEsUUFBUTtBQUhkLEFBSU0sTUFKQSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBSWYsRUFBRSxBQUFBLFFBQVE7QUFKZCxBQUtjLE1BTFIsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUtoQixRQUFRLEdBQUcsRUFBRTtBQUxoQixBQU1jLE1BTlIsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQU1oQixRQUFRLEdBQUcsRUFBRTtBQUxoQixBQUVNLE1BRkEsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUVmLEVBQUUsQUFBQSxRQUFRO0FBRmQsQUFHTSxNQUhBLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FHZixFQUFFLEFBQUEsUUFBUTtBQUhkLEFBSWMsTUFKUixHQUFHLEtBQUssR0FBRyxFQUFFLEFBSWhCLFFBQVEsR0FBRyxFQUFFO0FBSmhCLEFBS2MsTUFMUixHQUFHLEtBQUssR0FBRyxFQUFFLEFBS2hCLFFBQVEsR0FBRyxFQUFFO0FBSmhCLEFBQ00sTUFEQSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQ2YsRUFBRSxBQUFBLFFBQVE7QUFEZCxBQUVNLE1BRkEsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUVmLEVBQUUsQUFBQSxRQUFRO0FBRmQsQUFHYyxNQUhSLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFHaEIsUUFBUSxHQUFHLEVBQUU7QUFIaEIsQUFJYyxNQUpSLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFJaEIsUUFBUSxHQUFHLEVBQUUsQ0FIZDtFQUNFLGdCQUFnQixFeEJ1ZlcsT0FBTyxHd0J0Zm5DOztBQUtILEFBQ2MsWUFERixHQUFHLEtBQUssR0FBRyxFQUFFLEdBQ3JCLEVBQUUsQUFBQSxRQUFRLEFBQUEsTUFBTTtBQURwQixBQUVjLFlBRkYsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUVyQixFQUFFLEFBQUEsUUFBUSxBQUFBLE1BQU07QUFGcEIsQUFHb0IsWUFIUixHQUFHLEtBQUssR0FBRyxFQUFFLEFBR3RCLFFBQVEsQUFBQSxNQUFNLEdBQUcsRUFBRTtBQUh0QixBQUlZLFlBSkEsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUl0QixNQUFNLEdBQUcsUUFBUTtBQUpwQixBQUtvQixZQUxSLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFLdEIsUUFBUSxBQUFBLE1BQU0sR0FBRyxFQUFFLENBSnBCO0VBQ0UsZ0JBQWdCLEVBQUUsT0FBTSxHQUN6Qjs7QUFiSCxBQUdNLE1BSEEsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUdmLEVBQUUsQUFBQSxPQUFPO0FBSGIsQUFJTSxNQUpBLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FJZixFQUFFLEFBQUEsT0FBTztBQUpiLEFBS2EsTUFMUCxHQUFHLEtBQUssR0FBRyxFQUFFLEFBS2hCLE9BQU8sR0FBRyxFQUFFO0FBTGYsQUFNYSxNQU5QLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFNaEIsT0FBTyxHQUFHLEVBQUU7QUFMZixBQUVNLE1BRkEsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUVmLEVBQUUsQUFBQSxPQUFPO0FBRmIsQUFHTSxNQUhBLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FHZixFQUFFLEFBQUEsT0FBTztBQUhiLEFBSWEsTUFKUCxHQUFHLEtBQUssR0FBRyxFQUFFLEFBSWhCLE9BQU8sR0FBRyxFQUFFO0FBSmYsQUFLYSxNQUxQLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFLaEIsT0FBTyxHQUFHLEVBQUU7QUFKZixBQUNNLE1BREEsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUNmLEVBQUUsQUFBQSxPQUFPO0FBRGIsQUFFTSxNQUZBLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FFZixFQUFFLEFBQUEsT0FBTztBQUZiLEFBR2EsTUFIUCxHQUFHLEtBQUssR0FBRyxFQUFFLEFBR2hCLE9BQU8sR0FBRyxFQUFFO0FBSGYsQUFJYSxNQUpQLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFJaEIsT0FBTyxHQUFHLEVBQUUsQ0FIYjtFQUNFLGdCQUFnQixFeEIyZlcsT0FBTyxHd0IxZm5DOztBQUtILEFBQ2EsWUFERCxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQ3JCLEVBQUUsQUFBQSxPQUFPLEFBQUEsTUFBTTtBQURuQixBQUVhLFlBRkQsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUVyQixFQUFFLEFBQUEsT0FBTyxBQUFBLE1BQU07QUFGbkIsQUFHbUIsWUFIUCxHQUFHLEtBQUssR0FBRyxFQUFFLEFBR3RCLE9BQU8sQUFBQSxNQUFNLEdBQUcsRUFBRTtBQUhyQixBQUlZLFlBSkEsR0FBRyxLQUFLLEdBQUcsRUFBRSxBQUl0QixNQUFNLEdBQUcsT0FBTztBQUpuQixBQUttQixZQUxQLEdBQUcsS0FBSyxHQUFHLEVBQUUsQUFLdEIsT0FBTyxBQUFBLE1BQU0sR0FBRyxFQUFFLENBSm5CO0VBQ0UsZ0JBQWdCLEVBQUUsT0FBTSxHQUN6Qjs7QWdCd0pMLEFBQUEsaUJBQWlCLENBQUM7RUFDaEIsVUFBVSxFQUFFLElBQUs7RUFDakIsVUFBVSxFQUFFLEtBQU0sR0E2RG5CO0VBM0RDLE1BQU0sQ0FBTixNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7SUFKOUIsQUFBQSxpQkFBaUIsQ0FBQztNQUtkLEtBQUssRUFBRSxJQUFLO01BQ1osYUFBYSxFQUFHLElBQXFCO01BQ3JDLFVBQVUsRUFBRSxNQUFPO01BQ25CLGtCQUFrQixFQUFFLHdCQUF5QjtNQUM3QyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ3hDckNXLElBQUksR3dDMkZuQztNQS9ERCxBQVlNLGlCQVpXLEdBWVgsTUFBTSxDQUFDO1FBQ1AsYUFBYSxFQUFFLENBQUUsR0FhbEI7UUExQkwsQUFvQlksaUJBcEJLLEdBWVgsTUFBTSxHQUlKLEtBQUssR0FHSCxFQUFFLEdBQ0EsRUFBRTtRQXBCZCxBQXFCWSxpQkFyQkssR0FZWCxNQUFNLEdBSUosS0FBSyxHQUdILEVBQUUsR0FFQSxFQUFFO1FBckJkLEFBb0JZLGlCQXBCSyxHQVlYLE1BQU0sR0FLSixLQUFLLEdBRUgsRUFBRSxHQUNBLEVBQUU7UUFwQmQsQUFxQlksaUJBckJLLEdBWVgsTUFBTSxHQUtKLEtBQUssR0FFSCxFQUFFLEdBRUEsRUFBRTtRQXJCZCxBQW9CWSxpQkFwQkssR0FZWCxNQUFNLEdBTUosS0FBSyxHQUNILEVBQUUsR0FDQSxFQUFFO1FBcEJkLEFBcUJZLGlCQXJCSyxHQVlYLE1BQU0sR0FNSixLQUFLLEdBQ0gsRUFBRSxHQUVBLEVBQUUsQ0FBQztVQUNILFdBQVcsRUFBRSxNQUFPLEdBQ3JCO01BdkJYLEFBNkJNLGlCQTdCVyxHQTZCWCxlQUFlLENBQUM7UUFDaEIsTUFBTSxFQUFFLENBQUUsR0ErQlg7UUE3REwsQUFxQ2MsaUJBckNHLEdBNkJYLGVBQWUsR0FJYixLQUFLLEdBR0gsRUFBRSxHQUNBLEVBQUUsQUFBQSxZQUFZO1FBckMxQixBQXNDYyxpQkF0Q0csR0E2QlgsZUFBZSxHQUliLEtBQUssR0FHSCxFQUFFLEdBRUEsRUFBRSxBQUFBLFlBQVk7UUF0QzFCLEFBcUNjLGlCQXJDRyxHQTZCWCxlQUFlLEdBS2IsS0FBSyxHQUVILEVBQUUsR0FDQSxFQUFFLEFBQUEsWUFBWTtRQXJDMUIsQUFzQ2MsaUJBdENHLEdBNkJYLGVBQWUsR0FLYixLQUFLLEdBRUgsRUFBRSxHQUVBLEVBQUUsQUFBQSxZQUFZO1FBdEMxQixBQXFDYyxpQkFyQ0csR0E2QlgsZUFBZSxHQU1iLEtBQUssR0FDSCxFQUFFLEdBQ0EsRUFBRSxBQUFBLFlBQVk7UUFyQzFCLEFBc0NjLGlCQXRDRyxHQTZCWCxlQUFlLEdBTWIsS0FBSyxHQUNILEVBQUUsR0FFQSxFQUFFLEFBQUEsWUFBWSxDQUFDO1VBQ2YsV0FBVyxFQUFFLENBQUUsR0FDaEI7UUF4Q1gsQUF5Q2MsaUJBekNHLEdBNkJYLGVBQWUsR0FJYixLQUFLLEdBR0gsRUFBRSxHQUtBLEVBQUUsQUFBQSxXQUFXO1FBekN6QixBQTBDYyxpQkExQ0csR0E2QlgsZUFBZSxHQUliLEtBQUssR0FHSCxFQUFFLEdBTUEsRUFBRSxBQUFBLFdBQVc7UUExQ3pCLEFBeUNjLGlCQXpDRyxHQTZCWCxlQUFlLEdBS2IsS0FBSyxHQUVILEVBQUUsR0FLQSxFQUFFLEFBQUEsV0FBVztRQXpDekIsQUEwQ2MsaUJBMUNHLEdBNkJYLGVBQWUsR0FLYixLQUFLLEdBRUgsRUFBRSxHQU1BLEVBQUUsQUFBQSxXQUFXO1FBMUN6QixBQXlDYyxpQkF6Q0csR0E2QlgsZUFBZSxHQU1iLEtBQUssR0FDSCxFQUFFLEdBS0EsRUFBRSxBQUFBLFdBQVc7UUF6Q3pCLEFBMENjLGlCQTFDRyxHQTZCWCxlQUFlLEdBTWIsS0FBSyxHQUNILEVBQUUsR0FNQSxFQUFFLEFBQUEsV0FBVyxDQUFDO1VBQ2QsWUFBWSxFQUFFLENBQUUsR0FDakI7UUE1Q1gsQUFzRFksaUJBdERLLEdBNkJYLGVBQWUsR0FzQmIsS0FBSyxHQUVILEVBQUUsQUFBQSxXQUFXLEdBQ1gsRUFBRTtRQXREZCxBQXVEWSxpQkF2REssR0E2QlgsZUFBZSxHQXNCYixLQUFLLEdBRUgsRUFBRSxBQUFBLFdBQVcsR0FFWCxFQUFFO1FBdkRkLEFBc0RZLGlCQXRESyxHQTZCWCxlQUFlLEdBdUJiLEtBQUssR0FDSCxFQUFFLEFBQUEsV0FBVyxHQUNYLEVBQUU7UUF0RGQsQUF1RFksaUJBdkRLLEdBNkJYLGVBQWUsR0F1QmIsS0FBSyxHQUNILEVBQUUsQUFBQSxXQUFXLEdBRVgsRUFBRSxDQUFDO1VBQ0gsYUFBYSxFQUFFLENBQUUsR0FDbEI7O0FDMU5YLEFBQUEsUUFBUSxDQUFDO0VBQ1AsT0FBTyxFQUFFLENBQUU7RUFDWCxNQUFNLEVBQUUsQ0FBRTtFQUNWLE1BQU0sRUFBRSxDQUFFO0VBSVYsU0FBUyxFQUFFLENBQUUsR0FDZDs7QUFFRCxBQUFBLE1BQU0sQ0FBQztFQUNMLE9BQU8sRUFBRSxLQUFNO0VBQ2YsS0FBSyxFQUFFLElBQUs7RUFDWixPQUFPLEVBQUUsQ0FBRTtFQUNYLGFBQWEsRXpDMENXLElBQUs7RXlDekM3QixTQUFTLEVBQUcsSUFBZTtFQUMzQixXQUFXLEVBQUUsT0FBUTtFQUNyQixLQUFLLEV6Q2RrQixPQUFPO0V5Q2U5QixNQUFNLEVBQUUsQ0FBRTtFQUNWLGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDekNtTU8sT0FBTyxHeUNsTXZDOztBQUVELEFBQUEsS0FBSyxDQUFDO0VBQ0osT0FBTyxFQUFFLFlBQWE7RUFDdEIsU0FBUyxFQUFFLElBQUs7RUFDaEIsYUFBYSxFQUFFLEdBQUk7RUFDbkIsV0FBVyxFQUFFLElBQUssR0FDbkI7O0FBVUQsQUFBbUIsS0FBZCxDQUFBLEFBQUEsSUFBQyxDQUFLLFFBQVEsQUFBYixFQUFlO0UxQjRCbkIsa0JBQWtCLEUwQjNCRSxVQUFVO0UxQjRCM0IsZUFBZSxFMEI1QkUsVUFBVTtFMUI2QnRCLFVBQVUsRTBCN0JFLFVBQVUsR0FDL0I7O0FBR0QsQUFBa0IsS0FBYixDQUFBLEFBQUEsSUFBQyxDQUFLLE9BQU8sQUFBWjtBQUNOLEFBQXFCLEtBQWhCLENBQUEsQUFBQSxJQUFDLENBQUssVUFBVSxBQUFmLEVBQWlCO0VBQ3JCLE1BQU0sRUFBRSxPQUFRO0VBQ2hCLFVBQVUsRUFBRSxNQUFPO0VBQ25CLFdBQVcsRUFBRSxNQUFPLEdBQ3JCOztBQUVELEFBQWlCLEtBQVosQ0FBQSxBQUFBLElBQUMsQ0FBSyxNQUFNLEFBQVgsRUFBYTtFQUNqQixPQUFPLEVBQUUsS0FBTSxHQUNoQjs7QUFHRCxBQUFrQixLQUFiLENBQUEsQUFBQSxJQUFDLENBQUssT0FBTyxBQUFaLEVBQWM7RUFDbEIsT0FBTyxFQUFFLEtBQU07RUFDZixLQUFLLEVBQUUsSUFBSyxHQUNiOztBQUdELEFBQWUsTUFBVCxDQUFBLEFBQUEsUUFBQyxBQUFBO0FBQ1AsQUFBVyxNQUFMLENBQUEsQUFBQSxJQUFDLEFBQUEsRUFBTTtFQUNYLE1BQU0sRUFBRSxJQUFLLEdBQ2Q7O0FBR0QsQUFBa0IsS0FBYixDQUFBLEFBQUEsSUFBQyxDQUFLLE1BQU0sQUFBWCxDQUFZLE1BQU07QUFDeEIsQUFBbUIsS0FBZCxDQUFBLEFBQUEsSUFBQyxDQUFLLE9BQU8sQUFBWixDQUFhLE1BQU07QUFDekIsQUFBc0IsS0FBakIsQ0FBQSxBQUFBLElBQUMsQ0FBSyxVQUFVLEFBQWYsQ0FBZ0IsTUFBTSxDQUFDO0U5QnpFM0IsT0FBTyxFQUFFLFdBQVk7RUFFckIsT0FBTyxFQUFFLGlDQUFrQztFQUMzQyxjQUFjLEVBQUUsSUFBSyxHOEJ3RXRCOztBQUdELEFBQUEsTUFBTSxDQUFDO0VBQ0wsT0FBTyxFQUFFLEtBQU07RUFDZixXQUFXLEVBQUcsR0FBc0I7RUFDcEMsU0FBUyxFekNsQ2UsSUFBSTtFeUNtQzVCLFdBQVcsRXpDdkJhLE9BQVc7RXlDd0JuQyxLQUFLLEV6QzFFa0IsT0FBTyxHeUMyRS9COztBQXlCRCxBQUFBLGFBQWEsQ0FBQztFQUNaLE9BQU8sRUFBRSxLQUFNO0VBQ2YsS0FBSyxFQUFFLElBQUs7RUFDWixNQUFNLEV6Q2lHMEIsSUFBcUI7RXlDaEdyRCxPQUFPLEV6Q3ZCbUIsR0FBRyxDQUNILElBQUk7RXlDdUI5QixTQUFTLEV6Q25FZSxJQUFJO0V5Q29FNUIsV0FBVyxFekN4RGEsT0FBVztFeUN5RG5DLEtBQUssRXpDM0drQixPQUFPO0V5QzRHOUIsZ0JBQWdCLEV6Q21FZSxJQUFJO0V5Q2xFbkMsZ0JBQWdCLEVBQUUsSUFBSztFQUN2QixNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ3pDd0VjLElBQUk7RXlDdkVuQyxhQUFhLEV6Q2ZhLEdBQUc7RWV6QzdCLGtCQUFrQixFMEJ5REUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG9CQUFJO0UxQnhEaEMsVUFBVSxFMEJ3REUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG9CQUFJO0UxQjREeEMsa0JBQWtCLEUwQjNERSxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUksRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUk7RTFCNER6RSxhQUFhLEUwQjVERSxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUksRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUk7RTFCNkR0RSxVQUFVLEUwQjdERSxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUksRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUksR0FnQy9FO0VBN0NELEFBQUEsYUFBYSxBbkJ6RFYsTUFBTSxDQUFDO0lBQ04sWUFBWSxFdEJzSmlCLE9BQU87SXNCckpwQyxPQUFPLEVBQUUsQ0FBRTtJUFViLGtCQUFrQixFT1RJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBSSxFQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUpsRCx3QkFBSTtJUGNULFVBQVUsRU9WSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsb0JBQUksRUFBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FKbEQsd0JBQUksR0FLaEI7RW1CcURILEFBQUEsYUFBYSxBMUJYVixrQkFBa0IsQ0FBQztJQUNsQixLQUFLLEVmMkd3QixJQUFJO0llMUdqQyxPQUFPLEVBQUUsQ0FBRSxHQUNaO0UwQlFILEFBQUEsYUFBYSxBMUJQVixzQkFBc0IsQ0FBQztJQUFFLEtBQUssRWZ3R0EsSUFBSSxHZXhHUTtFMEJPN0MsQUFBQSxhQUFhLEExQk5WLDJCQUEyQixDQUFFO0lBQUUsS0FBSyxFZnVHTixJQUFJLEdldkdjO0UwQk1uRCxBQUFBLGFBQWEsQUFzQlYsWUFBWSxDQUFDO0lBQ1osTUFBTSxFQUFFLENBQUU7SUFDVixnQkFBZ0IsRUFBRSxXQUFZLEdBQy9CO0VBekJILEFBQUEsYUFBYSxDQWdDVixBQUFBLFFBQUMsQUFBQSxHQWhDSixBQUFBLGFBQWEsQ0FpQ1YsQUFBQSxRQUFDLEFBQUE7RUFDRixBQWxDRixRQWtDVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEVBbENYLGFBQWEsQ0FrQ1U7SUFDbkIsZ0JBQWdCLEV6Q3JJSyxPQUFPO0l5Q3NJNUIsT0FBTyxFQUFFLENBQUUsR0FDWjtFQXJDSCxBQUFBLGFBQWEsQ0F1Q1YsQUFBQSxRQUFDLEFBQUE7RUFDRixBQXhDRixRQXdDVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEVBeENYLGFBQWEsQ0F3Q1U7SUFDbkIsTUFBTSxFekM2RXVCLFdBQVcsR3lDNUV6Qzs7QUFNSCxBQUFRLFFBQUEsQUFBQSxhQUFhLENBQUM7RUFDcEIsTUFBTSxFQUFFLElBQUssR0FDZDs7QUFVRCxBQUFtQixLQUFkLENBQUEsQUFBQSxJQUFDLENBQUssUUFBUSxBQUFiLEVBQWU7RUFDbkIsa0JBQWtCLEVBQUUsSUFBSyxHQUMxQjs7QUFZRCxNQUFNLENBQU4sTUFBTSxNQUFNLDhCQUFDLEVBQStCLENBQUM7RUFDM0MsQUFBaUIsS0FBWixDQUFBLEFBQUEsSUFBQyxDQUFLLE1BQU0sQUFBWCxDQUlILGFBQWE7RUFIaEIsQUFBaUIsS0FBWixDQUFBLEFBQUEsSUFBQyxDQUFLLE1BQU0sQUFBWCxDQUdILGFBQWE7RUFGaEIsQUFBMkIsS0FBdEIsQ0FBQSxBQUFBLElBQUMsQ0FBSyxnQkFBZ0IsQUFBckIsQ0FFSCxhQUFhO0VBRGhCLEFBQWtCLEtBQWIsQ0FBQSxBQUFBLElBQUMsQ0FBSyxPQUFPLEFBQVosQ0FDSCxhQUFhLENBQUM7SUFDYixXQUFXLEV6Q29CaUIsSUFBcUIsR3lDbkJsRDtFQU5ILEFBQWlCLEtBQVosQ0FBQSxBQUFBLElBQUMsQ0FBSyxNQUFNLEFBQVgsQ0FRSCxTQUFTLEVLcEpkLEFMNElFLGVLNUlhLEdMNEliLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxNQUFNLEFBQVgsQ0s1SVUsYUFBYTtFQUMvQixBTDJJRSxlSzNJYSxHTDJJYixLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssTUFBTSxBQUFYLENLM0lVLGtCQUFrQjtFQUNwQyxBTDBJRSxlSzFJYSxHQUFHLGdCQUFnQixHTDBJaEMsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLE1BQU0sQUFBWCxDSzFJNkIsSUFBSTtFTG1KckMsQUFUZSxlQVNBLENBVGpCLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxNQUFNLEFBQVg7RUFDTixBQUFpQixLQUFaLENBQUEsQUFBQSxJQUFDLENBQUssTUFBTSxBQUFYLENBT0gsU0FBUztFS3BKZCxBTDRJb0IsZUs1SUwsR0w2SWIsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLE1BQU0sQUFBWCxDSzdJVSxhQUFhO0VBQy9CLEFMMklvQixlSzNJTCxHTDRJYixLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssTUFBTSxBQUFYLENLNUlVLGtCQUFrQjtFQUNwQyxBTDBJb0IsZUsxSUwsR0FBRyxnQkFBZ0IsR0wySWhDLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxNQUFNLEFBQVgsQ0szSTZCLElBQUk7RUxtSnJDLEFBUmUsZUFRQTtFQVJqQixLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssTUFBTSxBQUFYO0VBQ04sQUFBMkIsS0FBdEIsQ0FBQSxBQUFBLElBQUMsQ0FBSyxnQkFBZ0IsQUFBckIsQ0FNSCxTQUFTO0VLcEpkLEFMNklvQixlSzdJTCxHTDhJYixLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssZ0JBQWdCLEFBQXJCLENLOUlVLGFBQWE7RUFDL0IsQUw0SW9CLGVLNUlMLEdMNkliLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxnQkFBZ0IsQUFBckIsQ0s3SVUsa0JBQWtCO0VBQ3BDLEFMMklvQixlSzNJTCxHQUFHLGdCQUFnQixHTDRJaEMsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLGdCQUFnQixBQUFyQixDSzVJNkIsSUFBSTtFTG1KckMsQUFQeUIsZUFPVjtFQVBqQixLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssZ0JBQWdCLEFBQXJCO0VBQ04sQUFBa0IsS0FBYixDQUFBLEFBQUEsSUFBQyxDQUFLLE9BQU8sQUFBWixDQUtILFNBQVM7RUtwSmQsQUw4SThCLGVLOUlmLEdMK0liLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxPQUFPLEFBQVosQ0svSVUsYUFBYTtFQUMvQixBTDZJOEIsZUs3SWYsR0w4SWIsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLE9BQU8sQUFBWixDSzlJVSxrQkFBa0I7RUFDcEMsQUw0SThCLGVLNUlmLEdBQUcsZ0JBQWdCLEdMNkloQyxLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssT0FBTyxBQUFaLENLN0k2QixJQUFJO0VMbUpyQyxBQU5nQixlQU1EO0VBTmpCLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxPQUFPLEFBQVosRUFNYztJQUNoQixXQUFXLEV6Q21CaUIsSUFBSyxHeUNsQmxDO0VBWEgsQUFBaUIsS0FBWixDQUFBLEFBQUEsSUFBQyxDQUFLLE1BQU0sQUFBWCxDQWFILFNBQVMsRUs5SmQsQUxpSkUsZUtqSmEsR0xpSmIsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLE1BQU0sQUFBWCxDS2pKVSxhQUFhO0VBQy9CLEFMZ0pFLGVLaEphLEdMZ0piLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxNQUFNLEFBQVgsQ0toSlUsa0JBQWtCO0VBQ3BDLEFMK0lFLGVLL0lhLEdBQUcsZ0JBQWdCLEdMK0loQyxLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssTUFBTSxBQUFYLENLL0k2QixJQUFJO0VMNkpyQyxBQWRlLGVBY0EsQ0FkakIsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLE1BQU0sQUFBWDtFQUNOLEFBQWlCLEtBQVosQ0FBQSxBQUFBLElBQUMsQ0FBSyxNQUFNLEFBQVgsQ0FZSCxTQUFTO0VLOUpkLEFMaUpvQixlS2pKTCxHTGtKYixLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssTUFBTSxBQUFYLENLbEpVLGFBQWE7RUFDL0IsQUxnSm9CLGVLaEpMLEdMaUpiLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxNQUFNLEFBQVgsQ0tqSlUsa0JBQWtCO0VBQ3BDLEFMK0lvQixlSy9JTCxHQUFHLGdCQUFnQixHTGdKaEMsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLE1BQU0sQUFBWCxDS2hKNkIsSUFBSTtFTDZKckMsQUFiZSxlQWFBO0VBYmpCLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxNQUFNLEFBQVg7RUFDTixBQUEyQixLQUF0QixDQUFBLEFBQUEsSUFBQyxDQUFLLGdCQUFnQixBQUFyQixDQVdILFNBQVM7RUs5SmQsQUxrSm9CLGVLbEpMLEdMbUpiLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxnQkFBZ0IsQUFBckIsQ0tuSlUsYUFBYTtFQUMvQixBTGlKb0IsZUtqSkwsR0xrSmIsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLGdCQUFnQixBQUFyQixDS2xKVSxrQkFBa0I7RUFDcEMsQUxnSm9CLGVLaEpMLEdBQUcsZ0JBQWdCLEdMaUpoQyxLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssZ0JBQWdCLEFBQXJCLENLako2QixJQUFJO0VMNkpyQyxBQVp5QixlQVlWO0VBWmpCLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxnQkFBZ0IsQUFBckI7RUFDTixBQUFrQixLQUFiLENBQUEsQUFBQSxJQUFDLENBQUssT0FBTyxBQUFaLENBVUgsU0FBUztFSzlKZCxBTG1KOEIsZUtuSmYsR0xvSmIsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLE9BQU8sQUFBWixDS3BKVSxhQUFhO0VBQy9CLEFMa0o4QixlS2xKZixHTG1KYixLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssT0FBTyxBQUFaLENLbkpVLGtCQUFrQjtFQUNwQyxBTGlKOEIsZUtqSmYsR0FBRyxnQkFBZ0IsR0xrSmhDLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxPQUFPLEFBQVosQ0tsSjZCLElBQUk7RUw2SnJDLEFBWGdCLGVBV0Q7RUFYakIsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLE9BQU8sQUFBWixFQVdjO0lBQ2hCLFdBQVcsRXpDWWlCLElBQUksR3lDWGpDOztBQVVMLEFBQUEsV0FBVyxDQUFDO0VBQ1YsYUFBYSxFekNLa0IsSUFBSSxHeUNKcEM7O0FBT0QsQUFBQSxNQUFNO0FBQ04sQUFBQSxTQUFTLENBQUM7RUFDUixRQUFRLEVBQUUsUUFBUztFQUNuQixPQUFPLEVBQUUsS0FBTTtFQUNmLFVBQVUsRUFBRSxJQUFLO0VBQ2pCLGFBQWEsRUFBRSxJQUFLLEdBU3JCO0VBZEQsQUFPRSxNQVBJLENBT0osS0FBSztFQU5QLEFBTUUsU0FOTyxDQU1QLEtBQUssQ0FBQztJQUNKLFVBQVUsRXpDdEtZLElBQUs7SXlDdUszQixZQUFZLEVBQUUsSUFBSztJQUNuQixhQUFhLEVBQUUsQ0FBRTtJQUNqQixXQUFXLEVBQUUsTUFBTztJQUNwQixNQUFNLEVBQUUsT0FBUSxHQUNqQjs7QUFFSCxBQUF5QixNQUFuQixDQUFDLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxPQUFPLEFBQVo7QUFDYixBQUFnQyxhQUFuQixDQUFDLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxPQUFPLEFBQVo7QUFDcEIsQUFBK0IsU0FBdEIsQ0FBQyxLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssVUFBVSxBQUFmO0FBQ2hCLEFBQXNDLGdCQUF0QixDQUFDLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxVQUFVLEFBQWYsRUFBaUI7RUFDdEMsUUFBUSxFQUFFLFFBQVM7RUFDbkIsV0FBVyxFQUFFLEtBQU07RUFDbkIsVUFBVSxFQUFFLE1BQU8sR0FDcEI7O0FBRUQsQUFBUyxNQUFILEdBQUcsTUFBTTtBQUNmLEFBQVksU0FBSCxHQUFHLFNBQVMsQ0FBQztFQUNwQixVQUFVLEVBQUUsSUFBSyxHQUNsQjs7QUFHRCxBQUFBLGFBQWE7QUFDYixBQUFBLGdCQUFnQixDQUFDO0VBQ2YsUUFBUSxFQUFFLFFBQVM7RUFDbkIsT0FBTyxFQUFFLFlBQWE7RUFDdEIsWUFBWSxFQUFFLElBQUs7RUFDbkIsYUFBYSxFQUFFLENBQUU7RUFDakIsY0FBYyxFQUFFLE1BQU87RUFDdkIsV0FBVyxFQUFFLE1BQU87RUFDcEIsTUFBTSxFQUFFLE9BQVEsR0FDakI7O0FBQ0QsQUFBZ0IsYUFBSCxHQUFHLGFBQWE7QUFDN0IsQUFBbUIsZ0JBQUgsR0FBRyxnQkFBZ0IsQ0FBQztFQUNsQyxVQUFVLEVBQUUsQ0FBRTtFQUNkLFdBQVcsRUFBRSxJQUFLLEdBQ25COztBQU1ELEFBQWtCLEtBQWIsQ0FBQSxBQUFBLElBQUMsQ0FBSyxPQUFPLEFBQVosRUFFSCxBQUFBLFFBQUMsQUFBQSxHQUZKLEFBQWtCLEtBQWIsQ0FBQSxBQUFBLElBQUMsQ0FBSyxPQUFPLEFBQVosQ0FHSCxTQUFTO0FBQ1YsQUFKZ0IsUUFJUixDQUFBLEFBQUEsUUFBQyxBQUFBLEVBSlgsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLE9BQU8sQUFBWjtBQUNOLEFBQXFCLEtBQWhCLENBQUEsQUFBQSxJQUFDLENBQUssVUFBVSxBQUFmLEVBQ0gsQUFBQSxRQUFDLEFBQUE7QUFESixBQUFxQixLQUFoQixDQUFBLEFBQUEsSUFBQyxDQUFLLFVBQVUsQUFBZixDQUVILFNBQVM7QUFDVixBQUhtQixRQUdYLENBQUEsQUFBQSxRQUFDLEFBQUE7QUFIWCxLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssVUFBVSxBQUFmLEVBR2lCO0VBQ25CLE1BQU0sRXpDL0N1QixXQUFXLEd5Q2dEekM7O0FBR0gsQUFBQSxhQUFhLEFBRVYsU0FBUztBQUNWLEFBSEYsUUFHVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEVBSFgsYUFBYTtBQUNiLEFBQUEsZ0JBQWdCLEFBQ2IsU0FBUztBQUNWLEFBRkYsUUFFVSxDQUFBLEFBQUEsUUFBQyxBQUFBO0FBRlgsZ0JBQWdCLENBRU87RUFDbkIsTUFBTSxFekN2RHVCLFdBQVcsR3lDd0R6Qzs7QUFHSCxBQUlJLE1BSkUsQUFFSCxTQUFTLENBRVIsS0FBSztBQURQLEFBQ0UsUUFETSxDQUFBLEFBQUEsUUFBQyxBQUFBLEVBSFgsTUFBTSxDQUlGLEtBQUs7QUFIVCxBQUdJLFNBSEssQUFDTixTQUFTLENBRVIsS0FBSztBQURQLEFBQ0UsUUFETSxDQUFBLEFBQUEsUUFBQyxBQUFBO0FBRlgsU0FBUyxDQUdMLEtBQUssQ0FBQztFQUNKLE1BQU0sRXpDaEVxQixXQUFXLEd5Q2lFdkM7O0FBVUwsQUFBQSxvQkFBb0IsQ0FBQztFQUVuQixXQUFXLEVBQUcsR0FBc0I7RUFDcEMsY0FBYyxFQUFHLEdBQXNCO0VBRXZDLGFBQWEsRUFBRSxDQUFFO0VBQ2pCLFVBQVUsRUFBRyxJQUFxQixHQU9uQztFQWJELEFBQUEsb0JBQW9CLEFBUWpCLFNBQVMsRUsvUVosQUx1UUEsZUt2UWUsR0x1UWYsb0JBQW9CLEFLdlFGLGFBQWE7RUFDL0IsQUxzUUEsZUt0UWUsR0xzUWYsb0JBQW9CLEFLdFFGLGtCQUFrQjtFQUNwQyxBTHFRQSxlS3JRZSxHQUFHLGdCQUFnQixHTHFRbEMsb0JBQW9CLEFLclFpQixJQUFJLEVMcVF6QyxBQUFBLG9CQUFvQixBQVNqQixTQUFTLEVLM1FaLEFMa1FBLGVLbFFlLEdMa1FmLG9CQUFvQixBS2xRRixhQUFhO0VBQy9CLEFMaVFBLGVLalFlLEdMaVFmLG9CQUFvQixBS2pRRixrQkFBa0I7RUFDcEMsQUxnUUEsZUtoUWUsR0FBRyxnQkFBZ0IsR0xnUWxDLG9CQUFvQixBS2hRaUIsSUFBSSxDTHlRNUI7SUFDVCxZQUFZLEVBQUUsQ0FBRTtJQUNoQixhQUFhLEVBQUUsQ0FBRSxHQUNsQjs7QW5CeFBELEFBQUEsU0FBUyxFd0J0QlgsQXhCc0JFLGV3QnRCYSxHQUFHLGFBQWE7QUFDL0IsQXhCcUJFLGV3QnJCYSxHQUFHLGtCQUFrQjtBQUNwQyxBeEJvQkUsZXdCcEJhLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDeEJvQnZDO0VBQ0UsTUFBTSxFdEJrSndCLElBQUs7RXNCakpuQyxPQUFPLEV0QjRCaUIsR0FBRyxDQUNILElBQUk7RXNCNUI1QixTQUFTLEV0QnBCYSxJQUFJO0VzQnFCMUIsV0FBVyxFdEJpQ2EsR0FBRztFc0JoQzNCLGFBQWEsRXRCb0NXLEdBQUcsR3NCbkM1Qjs7QUFFRCxBQUFNLE1BQUEsQUFBQSxTQUFTLEV3QjlCakIsQXhCOEJFLGV3QjlCYSxHeEI4QmIsTUFBTSxBd0I5QlUsYUFBYTtBQUMvQixBeEI2QkUsZXdCN0JhLEd4QjZCYixNQUFNLEF3QjdCVSxrQkFBa0I7QUFDcEMsQXhCNEJFLGV3QjVCYSxHQUFHLGdCQUFnQixHeEI0QmhDLE1BQU0sQXdCNUI2QixJQUFJLEN4QjRCdkM7RUFDRSxNQUFNLEV0QjBJd0IsSUFBSztFc0J6SW5DLFdBQVcsRXRCeUltQixJQUFLLEdzQnhJcEM7O0FBRUQsQUFBUSxRQUFBLEFBQUEsU0FBUyxFd0JuQ25CLEF4Qm1DRSxld0JuQ2EsR3hCbUNiLFFBQVEsQXdCbkNRLGFBQWE7QUFDL0IsQXhCa0NFLGV3QmxDYSxHeEJrQ2IsUUFBUSxBd0JsQ1Esa0JBQWtCO0FBQ3BDLEF4QmlDRSxld0JqQ2EsR0FBRyxnQkFBZ0IsR3hCaUNoQyxRQUFRLEF3QmpDMkIsSUFBSTtBeEJrQ3ZDLEFBQWdCLE1BQVYsQ0FBQSxBQUFBLFFBQUMsQUFBQSxDQUFTLFNBQVM7QXdCcEMzQixBeEJtQ21CLGV3Qm5DSixHeEJvQ2IsTUFBTSxDQUFBLEFBQUEsUUFBQyxBQUFBLEN3QnBDUyxhQUFhO0FBQy9CLEF4QmtDbUIsZXdCbENKLEd4Qm1DYixNQUFNLENBQUEsQUFBQSxRQUFDLEFBQUEsQ3dCbkNTLGtCQUFrQjtBQUNwQyxBeEJpQ21CLGV3QmpDSixHQUFHLGdCQUFnQixHeEJrQ2hDLE1BQU0sQ0FBQSxBQUFBLFFBQUMsQUFBQSxDd0JsQzRCLElBQUksQ3hCaUN2QztFQUNFLE1BQU0sRUFBRSxJQUFLLEdBQ2Q7O0FtQnNQSCxBQUNFLGNBRFksQ0FDWixhQUFhLENBQUM7RUFDWixNQUFNLEV6Q3BId0IsSUFBSztFeUNxSG5DLE9BQU8sRXpDMU9pQixHQUFHLENBQ0gsSUFBSTtFeUMwTzVCLFNBQVMsRXpDMVJhLElBQUk7RXlDMlIxQixXQUFXLEV6Q3JPYSxHQUFHO0V5Q3NPM0IsYUFBYSxFekNsT1csR0FBRyxHeUNtTzVCOztBQVBILEFBUVEsY0FSTSxDQVFaLE1BQU0sQUFBQSxhQUFhLENBQUM7RUFDbEIsTUFBTSxFekMzSHdCLElBQUs7RXlDNEhuQyxXQUFXLEV6QzVIbUIsSUFBSyxHeUM2SHBDOztBQVhILEFBWVUsY0FaSSxDQVlaLFFBQVEsQUFBQSxhQUFhO0FBWnZCLEFBYWtCLGNBYkosQ0FhWixNQUFNLENBQUEsQUFBQSxRQUFDLEFBQUEsQ0FBUyxhQUFhLENBQUM7RUFDNUIsTUFBTSxFQUFFLElBQUssR0FDZDs7QUFmSCxBQWdCRSxjQWhCWSxDQWdCWixvQkFBb0IsQ0FBQztFQUNuQixNQUFNLEV6Q25Jd0IsSUFBSztFeUNvSW5DLFVBQVUsRUFBRyxJQUFxQjtFQUNsQyxPQUFPLEVBQUcsR0FBdUIsQ3pDelBULElBQUk7RXlDMFA1QixTQUFTLEV6QzFTYSxJQUFJO0V5QzJTMUIsV0FBVyxFekNyUGEsR0FBRyxHeUNzUDVCOztBbkIzUkQsQUFBQSxTQUFTLEV3QjNCWCxBeEIyQkUsZXdCM0JhLEdBQUcsYUFBYTtBQUMvQixBeEIwQkUsZXdCMUJhLEdBQUcsa0JBQWtCO0FBQ3BDLEF4QnlCRSxld0J6QmEsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLEN4QnlCdkM7RUFDRSxNQUFNLEV0QmdKd0IsSUFBSTtFc0IvSWxDLE9BQU8sRXRCeUJpQixJQUFJLENBQ0osSUFBSTtFc0J6QjVCLFNBQVMsRXRCckJhLElBQUk7RXNCc0IxQixXQUFXLEV0QmdDYSxPQUFTO0VzQi9CakMsYUFBYSxFdEJtQ1csR0FBRyxHc0JsQzVCOztBQUVELEFBQU0sTUFBQSxBQUFBLFNBQVMsRXdCbkNqQixBeEJtQ0UsZXdCbkNhLEd4Qm1DYixNQUFNLEF3Qm5DVSxhQUFhO0FBQy9CLEF4QmtDRSxld0JsQ2EsR3hCa0NiLE1BQU0sQXdCbENVLGtCQUFrQjtBQUNwQyxBeEJpQ0UsZXdCakNhLEdBQUcsZ0JBQWdCLEd4QmlDaEMsTUFBTSxBd0JqQzZCLElBQUksQ3hCaUN2QztFQUNFLE1BQU0sRXRCd0l3QixJQUFJO0VzQnZJbEMsV0FBVyxFdEJ1SW1CLElBQUksR3NCdEluQzs7QUFFRCxBQUFRLFFBQUEsQUFBQSxTQUFTLEV3QnhDbkIsQXhCd0NFLGV3QnhDYSxHeEJ3Q2IsUUFBUSxBd0J4Q1EsYUFBYTtBQUMvQixBeEJ1Q0UsZXdCdkNhLEd4QnVDYixRQUFRLEF3QnZDUSxrQkFBa0I7QUFDcEMsQXhCc0NFLGV3QnRDYSxHQUFHLGdCQUFnQixHeEJzQ2hDLFFBQVEsQXdCdEMyQixJQUFJO0F4QnVDdkMsQUFBZ0IsTUFBVixDQUFBLEFBQUEsUUFBQyxBQUFBLENBQVMsU0FBUztBd0J6QzNCLEF4QndDbUIsZXdCeENKLEd4QnlDYixNQUFNLENBQUEsQUFBQSxRQUFDLEFBQUEsQ3dCekNTLGFBQWE7QUFDL0IsQXhCdUNtQixld0J2Q0osR3hCd0NiLE1BQU0sQ0FBQSxBQUFBLFFBQUMsQUFBQSxDd0J4Q1Msa0JBQWtCO0FBQ3BDLEF4QnNDbUIsZXdCdENKLEdBQUcsZ0JBQWdCLEd4QnVDaEMsTUFBTSxDQUFBLEFBQUEsUUFBQyxBQUFBLEN3QnZDNEIsSUFBSSxDeEJzQ3ZDO0VBQ0UsTUFBTSxFQUFFLElBQUssR0FDZDs7QW1CZ1JILEFBQ0UsY0FEWSxDQUNaLGFBQWEsQ0FBQztFQUNaLE1BQU0sRXpDaEp3QixJQUFJO0V5Q2lKbEMsT0FBTyxFekN2UWlCLElBQUksQ0FDSixJQUFJO0V5Q3VRNUIsU0FBUyxFekNyVGEsSUFBSTtFeUNzVDFCLFdBQVcsRXpDaFFhLE9BQVM7RXlDaVFqQyxhQUFhLEV6QzdQVyxHQUFHLEd5QzhQNUI7O0FBUEgsQUFRUSxjQVJNLENBUVosTUFBTSxBQUFBLGFBQWEsQ0FBQztFQUNsQixNQUFNLEV6Q3ZKd0IsSUFBSTtFeUN3SmxDLFdBQVcsRXpDeEptQixJQUFJLEd5Q3lKbkM7O0FBWEgsQUFZVSxjQVpJLENBWVosUUFBUSxBQUFBLGFBQWE7QUFadkIsQUFha0IsY0FiSixDQWFaLE1BQU0sQ0FBQSxBQUFBLFFBQUMsQUFBQSxDQUFTLGFBQWEsQ0FBQztFQUM1QixNQUFNLEVBQUUsSUFBSyxHQUNkOztBQWZILEFBZ0JFLGNBaEJZLENBZ0JaLG9CQUFvQixDQUFDO0VBQ25CLE1BQU0sRXpDL0p3QixJQUFJO0V5Q2dLbEMsVUFBVSxFQUFHLElBQXFCO0VBQ2xDLE9BQU8sRUFBRyxJQUF1QixDekN0UlQsSUFBSTtFeUN1UjVCLFNBQVMsRXpDclVhLElBQUk7RXlDc1UxQixXQUFXLEV6Q2hSYSxPQUFTLEd5Q2lSbEM7O0FBUUgsQUFBQSxhQUFhLENBQUM7RUFFWixRQUFRLEVBQUUsUUFBUyxHQU1wQjtFQVJELEFBS0UsYUFMVyxDQUtYLGFBQWEsQ0FBQztJQUNaLGFBQWEsRUFBRyxNQUFrQixHQUNuQzs7QUFHSCxBQUFBLHNCQUFzQixDQUFDO0VBQ3JCLFFBQVEsRUFBRSxRQUFTO0VBQ25CLEdBQUcsRUFBRSxDQUFFO0VBQ1AsS0FBSyxFQUFFLENBQUU7RUFDVCxPQUFPLEVBQUUsQ0FBRTtFQUNYLE9BQU8sRUFBRSxLQUFNO0VBQ2YsS0FBSyxFekM5TDJCLElBQXFCO0V5QytMckQsTUFBTSxFekMvTDBCLElBQXFCO0V5Q2dNckQsV0FBVyxFekNoTXFCLElBQXFCO0V5Q2lNckQsVUFBVSxFQUFFLE1BQU87RUFDbkIsY0FBYyxFQUFFLElBQUssR0FDdEI7O0FBQ0QsQUFBWSxTQUFILEdBQUcsc0JBQXNCLEVLOVdsQyxBTDhXWSxlSzlXRyxHQUFHLGFBQWEsR0w4V25CLHNCQUFzQjtBSzdXbEMsQUw2V1ksZUs3V0csR0FBRyxrQkFBa0IsR0w2V3hCLHNCQUFzQjtBSzVXbEMsQUw0V1ksZUs1V0csR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLEdMNFc3QixzQkFBc0I7QUFDbEMsQUFBa0IsZUFBSCxHQUFHLHNCQUFzQjtBQUN4QyxBQUErQixjQUFqQixDQUFDLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQztFQUNwRCxLQUFLLEV6Q3JNMkIsSUFBSTtFeUNzTXBDLE1BQU0sRXpDdE0wQixJQUFJO0V5Q3VNcEMsV0FBVyxFekN2TXFCLElBQUksR3lDd01yQzs7QUFDRCxBQUFZLFNBQUgsR0FBRyxzQkFBc0IsRUtoWGxDLEFMZ1hZLGVLaFhHLEdBQUcsYUFBYSxHTGdYbkIsc0JBQXNCO0FLL1dsQyxBTCtXWSxlSy9XRyxHQUFHLGtCQUFrQixHTCtXeEIsc0JBQXNCO0FLOVdsQyxBTDhXWSxlSzlXRyxHQUFHLGdCQUFnQixHQUFHLElBQUksR0w4VzdCLHNCQUFzQjtBQUNsQyxBQUFrQixlQUFILEdBQUcsc0JBQXNCO0FBQ3hDLEFBQStCLGNBQWpCLENBQUMsYUFBYSxHQUFHLHNCQUFzQixDQUFDO0VBQ3BELEtBQUssRXpDMU0yQixJQUFLO0V5QzJNckMsTUFBTSxFekMzTTBCLElBQUs7RXlDNE1yQyxXQUFXLEV6QzVNcUIsSUFBSyxHeUM2TXRDOztBQUdELEFuQmxhRSxZbUJrYVUsQ25CbGFWLFdBQVc7QW1Ca2FiLEFuQmphRSxZbUJpYVUsQ25CamFWLGNBQWM7QW1CaWFoQixBbkJoYUUsWW1CZ2FVLENuQmhhVixNQUFNO0FtQmdhUixBbkIvWkUsWW1CK1pVLENuQi9aVixTQUFTO0FtQitaWCxBbkI5WkUsWW1COFpVLENuQjlaVixhQUFhO0FtQjhaZixBbkI3WkUsWW1CNlpVLENuQjdaVixnQkFBZ0I7QW1CNlpsQixBbkI1WlUsWW1CNFpFLEFuQjVaVCxNQUFNLENBQUMsS0FBSztBbUI0WmYsQW5CM1phLFltQjJaRCxBbkIzWlQsU0FBUyxDQUFDLEtBQUs7QW1CMlpsQixBbkIxWmlCLFltQjBaTCxBbkIxWlQsYUFBYSxDQUFDLEtBQUs7QW1CMFp0QixBbkJ6Wm9CLFltQnlaUixBbkJ6WlQsZ0JBQWdCLENBQUMsS0FBSyxDQUFFO0VBQ3ZCLEtBQUssRXRCc2V3QixPQUFPLEdzQnJlckM7O0FtQnVaSCxBbkJyWkUsWW1CcVpVLENuQnJaVixhQUFhLENBQUM7RUFDWixZQUFZLEV0QmtlaUIsT0FBTztFZW5idEMsa0JBQWtCLEVPOUNJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBSTtFUCtDbEMsVUFBVSxFTy9DSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsb0JBQUksR0FNekM7RW1CNllILEFuQnJaRSxZbUJxWlUsQ25CclpWLGFBQWEsQUFHVixNQUFNLENBQUM7SUFDTixZQUFZLEVBQUUsT0FBTTtJUDRDeEIsa0JBQWtCLEVPM0NMLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBSSxFQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU87SVA0Q3RELFVBQVUsRU81Q0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG9CQUFJLEVBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUUzRDs7QW1COFlMLEFuQjNZRSxZbUIyWVUsQ25CM1lWLGtCQUFrQixDQUFDO0VBQ2pCLEtBQUssRXRCd2R3QixPQUFPO0VzQnZkcEMsWUFBWSxFdEJ1ZGlCLE9BQU87RXNCdGRwQyxnQkFBZ0IsRXRCdWRhLE9BQU8sR3NCdGRyQzs7QW1CdVlILEFuQnJZRSxZbUJxWVUsQ25CcllWLHNCQUFzQixDQUFDO0VBQ3JCLEtBQUssRXRCa2R3QixPQUFPLEdzQmpkckM7O0FtQnNZSCxBbkJyYUUsWW1CcWFVLENuQnJhVixXQUFXO0FtQnFhYixBbkJwYUUsWW1Cb2FVLENuQnBhVixjQUFjO0FtQm9haEIsQW5CbmFFLFltQm1hVSxDbkJuYVYsTUFBTTtBbUJtYVIsQW5CbGFFLFltQmthVSxDbkJsYVYsU0FBUztBbUJrYVgsQW5CamFFLFltQmlhVSxDbkJqYVYsYUFBYTtBbUJpYWYsQW5CaGFFLFltQmdhVSxDbkJoYVYsZ0JBQWdCO0FtQmdhbEIsQW5CL1pVLFltQitaRSxBbkIvWlQsTUFBTSxDQUFDLEtBQUs7QW1CK1pmLEFuQjlaYSxZbUI4WkQsQW5COVpULFNBQVMsQ0FBQyxLQUFLO0FtQjhabEIsQW5CN1ppQixZbUI2WkwsQW5CN1pULGFBQWEsQ0FBQyxLQUFLO0FtQjZadEIsQW5CNVpvQixZbUI0WlIsQW5CNVpULGdCQUFnQixDQUFDLEtBQUssQ0FBRTtFQUN2QixLQUFLLEV0Qjhld0IsT0FBTyxHc0I3ZXJDOztBbUIwWkgsQW5CeFpFLFltQndaVSxDbkJ4WlYsYUFBYSxDQUFDO0VBQ1osWUFBWSxFdEIwZWlCLE9BQU87RWUzYnRDLGtCQUFrQixFTzlDSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsb0JBQUk7RVArQ2xDLFVBQVUsRU8vQ0ksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG9CQUFJLEdBTXpDO0VtQmdaSCxBbkJ4WkUsWW1Cd1pVLENuQnhaVixhQUFhLEFBR1YsTUFBTSxDQUFDO0lBQ04sWUFBWSxFQUFFLE9BQU07SVA0Q3hCLGtCQUFrQixFTzNDTCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsb0JBQUksRUFBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPO0lQNEN0RCxVQUFVLEVPNUNMLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBSSxFQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FFM0Q7O0FtQmlaTCxBbkI5WUUsWW1COFlVLENuQjlZVixrQkFBa0IsQ0FBQztFQUNqQixLQUFLLEV0Qmdld0IsT0FBTztFc0IvZHBDLFlBQVksRXRCK2RpQixPQUFPO0VzQjlkcEMsZ0JBQWdCLEV0QitkYSxPQUFPLEdzQjlkckM7O0FtQjBZSCxBbkJ4WUUsWW1Cd1lVLENuQnhZVixzQkFBc0IsQ0FBQztFQUNyQixLQUFLLEV0QjBkd0IsT0FBTyxHc0J6ZHJDOztBbUJ5WUgsQW5CeGFFLFVtQndhUSxDbkJ4YVIsV0FBVztBbUJ3YWIsQW5CdmFFLFVtQnVhUSxDbkJ2YVIsY0FBYztBbUJ1YWhCLEFuQnRhRSxVbUJzYVEsQ25CdGFSLE1BQU07QW1Cc2FSLEFuQnJhRSxVbUJxYVEsQ25CcmFSLFNBQVM7QW1CcWFYLEFuQnBhRSxVbUJvYVEsQ25CcGFSLGFBQWE7QW1Cb2FmLEFuQm5hRSxVbUJtYVEsQ25CbmFSLGdCQUFnQjtBbUJtYWxCLEFuQmxhVSxVbUJrYUEsQW5CbGFQLE1BQU0sQ0FBQyxLQUFLO0FtQmthZixBbkJqYWEsVW1CaWFILEFuQmphUCxTQUFTLENBQUMsS0FBSztBbUJpYWxCLEFuQmhhaUIsVW1CZ2FQLEFuQmhhUCxhQUFhLENBQUMsS0FBSztBbUJnYXRCLEFuQi9ab0IsVW1CK1pWLEFuQi9aUCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUU7RUFDdkIsS0FBSyxFdEJrZndCLE9BQU8sR3NCamZyQzs7QW1CNlpILEFuQjNaRSxVbUIyWlEsQ25CM1pSLGFBQWEsQ0FBQztFQUNaLFlBQVksRXRCOGVpQixPQUFPO0VlL2J0QyxrQkFBa0IsRU85Q0ksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG9CQUFJO0VQK0NsQyxVQUFVLEVPL0NJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBSSxHQU16QztFbUJtWkgsQW5CM1pFLFVtQjJaUSxDbkIzWlIsYUFBYSxBQUdWLE1BQU0sQ0FBQztJQUNOLFlBQVksRUFBRSxPQUFNO0lQNEN4QixrQkFBa0IsRU8zQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG9CQUFJLEVBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTztJUDRDdEQsVUFBVSxFTzVDTCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsb0JBQUksRUFBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBRTNEOztBbUJvWkwsQW5CalpFLFVtQmlaUSxDbkJqWlIsa0JBQWtCLENBQUM7RUFDakIsS0FBSyxFdEJvZXdCLE9BQU87RXNCbmVwQyxZQUFZLEV0Qm1laUIsT0FBTztFc0JsZXBDLGdCQUFnQixFdEJtZWEsT0FBTyxHc0JsZXJDOztBbUI2WUgsQW5CM1lFLFVtQjJZUSxDbkIzWVIsc0JBQXNCLENBQUM7RUFDckIsS0FBSyxFdEI4ZHdCLE9BQU8sR3NCN2RyQzs7QW1COFlILEFBRU0sYUFGTyxDQUFDLEtBQUssR0FFYixzQkFBc0IsQ0FBQztFQUN6QixHQUFHLEVBQUcsSUFBcUIsR0FDNUI7O0FBSkgsQUFLYyxhQUxELENBQUMsS0FBSyxBQUtoQixRQUFRLEdBQUcsc0JBQXNCLENBQUM7RUFDakMsR0FBRyxFQUFFLENBQUUsR0FDUjs7QUFTSCxBQUFBLFdBQVcsQ0FBQztFQUNWLE9BQU8sRUFBRSxLQUFNO0VBQ2YsVUFBVSxFQUFFLEdBQUk7RUFDaEIsYUFBYSxFQUFFLElBQUs7RUFDcEIsS0FBSyxFQUFFLE9BQU8sR0FDZjs7QUFrQkMsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0VBbUVuQixBQWpFSSxZQWlFUSxDQWpFUixXQUFXLENBQUM7SUFDVixPQUFPLEVBQUUsWUFBYTtJQUN0QixhQUFhLEVBQUUsQ0FBRTtJQUNqQixjQUFjLEVBQUUsTUFBTyxHQUN4QjtFQTZETCxBQTFESSxZQTBEUSxDQTFEUixhQUFhLENBQUM7SUFDWixPQUFPLEVBQUUsWUFBYTtJQUN0QixLQUFLLEVBQUUsSUFBSztJQUNaLGNBQWMsRUFBRSxNQUFPLEdBQ3hCO0VBc0RMLEFBbkRJLFlBbURRLENBbkRSLG9CQUFvQixDQUFDO0lBQ25CLE9BQU8sRUFBRSxZQUFhLEdBQ3ZCO0VBaURMLEFBL0NJLFlBK0NRLENBL0NSLFlBQVksQ0FBQztJQUNYLE9BQU8sRUFBRSxZQUFhO0lBQ3RCLGNBQWMsRUFBRSxNQUFPLEdBT3hCO0lBc0NMLEFBM0NNLFlBMkNNLENBL0NSLFlBQVksQ0FJVixrQkFBa0I7SUEyQ3hCLEFBMUNNLFlBMENNLENBL0NSLFlBQVksQ0FLVixnQkFBZ0I7SUEwQ3RCLEFBekNNLFlBeUNNLENBL0NSLFlBQVksQ0FNVixhQUFhLENBQUM7TUFDWixLQUFLLEVBQUUsSUFBSyxHQUNiO0VBdUNQLEFBbkNtQixZQW1DUCxDQW5DUixZQUFZLEdBQUcsYUFBYSxDQUFDO0lBQzNCLEtBQUssRUFBRSxJQUFLLEdBQ2I7RUFpQ0wsQUEvQkksWUErQlEsQ0EvQlIsY0FBYyxDQUFDO0lBQ2IsYUFBYSxFQUFFLENBQUU7SUFDakIsY0FBYyxFQUFFLE1BQU8sR0FDeEI7RUE0QkwsQUF4QkksWUF3QlEsQ0F4QlIsTUFBTTtFQXdCVixBQXZCSSxZQXVCUSxDQXZCUixTQUFTLENBQUM7SUFDUixPQUFPLEVBQUUsWUFBYTtJQUN0QixVQUFVLEVBQUUsQ0FBRTtJQUNkLGFBQWEsRUFBRSxDQUFFO0lBQ2pCLGNBQWMsRUFBRSxNQUFPLEdBS3hCO0lBY0wsQUFqQk0sWUFpQk0sQ0F4QlIsTUFBTSxDQU9KLEtBQUs7SUFpQlgsQUFqQk0sWUFpQk0sQ0F2QlIsU0FBUyxDQU1QLEtBQUssQ0FBQztNQUNKLFlBQVksRUFBRSxDQUFFLEdBQ2pCO0VBZVAsQUFiNkIsWUFhakIsQ0FiUixNQUFNLENBQUMsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLE9BQU8sQUFBWjtFQWFqQixBQVptQyxZQVl2QixDQVpSLFNBQVMsQ0FBQyxLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssVUFBVSxBQUFmLEVBQWlCO0lBQy9CLFFBQVEsRUFBRSxRQUFTO0lBQ25CLFdBQVcsRUFBRSxDQUFFLEdBQ2hCO0VBU0wsQUFOa0IsWUFNTixDQU5SLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztJQUNuQyxHQUFHLEVBQUUsQ0FBRSxHQUNSOztBQWVMLEFBS0UsZ0JBTGMsQ0FLZCxNQUFNO0FBTFIsQUFNRSxnQkFOYyxDQU1kLFNBQVM7QUFOWCxBQU9FLGdCQVBjLENBT2QsYUFBYTtBQVBmLEFBUUUsZ0JBUmMsQ0FRZCxnQkFBZ0IsQ0FBQztFQUNmLFVBQVUsRUFBRSxDQUFFO0VBQ2QsYUFBYSxFQUFFLENBQUU7RUFDakIsV0FBVyxFQUFHLEdBQXNCLEdBQ3JDOztBQVpILEFBZUUsZ0JBZmMsQ0FlZCxNQUFNO0FBZlIsQUFnQkUsZ0JBaEJjLENBZ0JkLFNBQVMsQ0FBQztFQUNSLFVBQVUsRUFBRyxJQUFxQixHQUNuQzs7QUFsQkgsQUFxQkUsZ0JBckJjLENBcUJkLFdBQVcsQ0FBQztFVC9pQlosV0FBVyxFQUFHLEtBQUk7RUFDbEIsWUFBWSxFQUFFLEtBQUssR1NnakJsQjtFQXZCSCxBQXFCRSxnQkFyQmMsQ0FxQmQsV0FBVyxBYmpqQlYsT0FBTyxFYTRoQlYsQUFxQkUsZ0JBckJjLENBcUJkLFdBQVcsQWJoakJWLE1BQU0sQ0FBQztJQUNOLE9BQU8sRUFBRSxHQUFJO0lBQ2IsT0FBTyxFQUFFLEtBQU0sR0FDaEI7RWF3aEJILEFBcUJFLGdCQXJCYyxDQXFCZCxXQUFXLEFiNWlCVixNQUFNLENBQUM7SUFDTixLQUFLLEVBQUUsSUFBSyxHQUNiOztBYWdqQkQsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0VBM0JuQixBQTRCSSxnQkE1QlksQ0E0QlosY0FBYyxDQUFDO0lBQ2IsVUFBVSxFQUFFLEtBQU07SUFDbEIsYUFBYSxFQUFFLENBQUU7SUFDakIsV0FBVyxFQUFHLEdBQXNCLEdBQ3JDOztBQWhDTCxBQXVDZ0IsZ0JBdkNBLENBdUNkLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztFQUNuQyxLQUFLLEVBQUUsSUFBSyxHQUNiOztBQU9DLE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztFQWhEckIsQUFpRE0sZ0JBakRVLENBK0NkLGNBQWMsQ0FFVixjQUFjLENBQUM7SUFDYixXQUFXLEVBQUcsSUFBdUI7SUFDckMsU0FBUyxFekN4aUJTLElBQUksR3lDeWlCdkI7O0FBSUgsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0VBeERyQixBQXlETSxnQkF6RFUsQ0F1RGQsY0FBYyxDQUVWLGNBQWMsQ0FBQztJQUNiLFdBQVcsRUFBRyxHQUF1QjtJQUNyQyxTQUFTLEV6Qy9pQlMsSUFBSSxHeUNnakJ2Qjs7QUM3bEJQLEFBQUEsSUFBSSxDQUFDO0VBQ0gsT0FBTyxFQUFFLFlBQWE7RUFDdEIsYUFBYSxFQUFFLENBQUU7RUFDakIsV0FBVyxFMUMwSW9CLE1BQU07RTBDeklyQyxVQUFVLEVBQUUsTUFBTztFQUNuQixjQUFjLEVBQUUsTUFBTztFQUN2QixZQUFZLEVBQUUsWUFBYTtFQUMzQixNQUFNLEVBQUUsT0FBUTtFQUNoQixnQkFBZ0IsRUFBRSxJQUFLO0VBQ3ZCLE1BQU0sRUFBRSxxQkFBc0I7RUFDOUIsV0FBVyxFQUFFLE1BQU87RXpCMENwQixPQUFPLEVqQmtDbUIsR0FBRyxDQUNILElBQUk7RWlCbEM5QixTQUFTLEVqQlZlLElBQUk7RWlCVzVCLFdBQVcsRWpCQ2EsT0FBVztFaUJBbkMsYUFBYSxFakI4Q2EsR0FBRztFZTRHN0IsbUJBQW1CLEUyQnJNRSxJQUFJO0UzQnNNdEIsZ0JBQWdCLEUyQnRNRSxJQUFJO0UzQnVNckIsZUFBZSxFMkJ2TUUsSUFBSTtFM0J3TWpCLFdBQVcsRTJCeE1FLElBQUksR0FrQzFCO0VBOUNELEFBQUEsSUFBSSxBQWlCQyxNQUFNLEVBakJYLEFBQUEsSUFBSSxBQWtCQyxNQUFNLEVBbEJYLEFBQUEsSUFBSSxBQWVELE9BQU8sQUFFTCxNQUFNLEVBakJYLEFBQUEsSUFBSSxBQWVELE9BQU8sQUFHTCxNQUFNLEVBbEJYLEFBQUEsSUFBSSxBQWdCRCxPQUFPLEFBQ0wsTUFBTSxFQWpCWCxBQUFBLElBQUksQUFnQkQsT0FBTyxBQUVMLE1BQU0sQ0FBQztJL0J0QlYsT0FBTyxFQUFFLFdBQVk7SUFFckIsT0FBTyxFQUFFLGlDQUFrQztJQUMzQyxjQUFjLEVBQUUsSUFBSyxHK0JxQmxCO0VBcEJMLEFBQUEsSUFBSSxBQXVCRCxNQUFNLEVBdkJULEFBQUEsSUFBSSxBQXdCRCxNQUFNLEVBeEJULEFBQUEsSUFBSSxBQXlCRCxNQUFNLENBQUM7SUFDTixLQUFLLEUxQ3FId0IsSUFBSTtJMENwSGpDLGVBQWUsRUFBRSxJQUFLLEdBQ3ZCO0VBNUJILEFBQUEsSUFBSSxBQThCRCxPQUFPLEVBOUJWLEFBQUEsSUFBSSxBQStCRCxPQUFPLENBQUM7SUFDUCxPQUFPLEVBQUUsQ0FBRTtJQUNYLGdCQUFnQixFQUFFLElBQUs7STNCMkJ6QixrQkFBa0IsRTJCMUJJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBSTtJM0IyQmxDLFVBQVUsRTJCM0JJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBSSxHQUN6QztFQW5DSCxBQUFBLElBQUksQUFxQ0QsU0FBUyxFQXJDWixBQUFBLElBQUksQ0FzQ0QsQUFBQSxRQUFDLEFBQUE7RUFDRixBQXZDRixRQXVDVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEVBdkNYLElBQUksQ0F1Q21CO0lBQ25CLE1BQU0sRTFDdUx1QixXQUFXO0lJcE8xQyxPQUFPLEVzQzhDWSxJQUFHO0l0QzNDdEIsTUFBTSxFQUFFLGlCQUFLO0lXOERiLGtCQUFrQixFMkJsQkksSUFBSTtJM0JtQmxCLFVBQVUsRTJCbkJJLElBQUksR0FDekI7O0FBS0gsQUFBQyxDQUFBLEFBQUEsSUFBSSxBQUNGLFNBQVM7QUFDVixBQUZELFFBRVMsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFQUZYLENBQUMsQUFBQSxJQUFJLENBRWtCO0VBQ25CLGNBQWMsRUFBRSxJQUFLLEdBQ3RCOztBQU9ILEFBQUEsWUFBWSxDQUFDO0V6QjdEWCxLQUFLLEVqQmlKMEIsSUFBSTtFaUJoSm5DLGdCQUFnQixFakJpSmUsSUFBSTtFaUJoSm5DLFlBQVksRWpCaUptQixJQUFJLEcwQ3BGcEM7RUFGRCxBQUFBLFlBQVksQXpCekRULE1BQU0sRXlCeURULEFBQUEsWUFBWSxBekJ4RFQsTUFBTSxDQUFDO0lBQ04sS0FBSyxFakIySXdCLElBQUk7SWlCMUlqQyxnQkFBZ0IsRUFBRSxPQUFNO0lBQ3BCLFlBQVksRUFBRSxPQUFNLEdBQ3pCO0V5Qm9ESCxBQUFBLFlBQVksQXpCbkRULE1BQU0sQ0FBQztJQUNOLEtBQUssRWpCc0l3QixJQUFJO0lpQnJJakMsZ0JBQWdCLEVBQUUsT0FBTTtJQUNwQixZQUFZLEVBQUUsT0FBTSxHQUN6QjtFeUIrQ0gsQUFBQSxZQUFZLEF6QjlDVCxPQUFPLEV5QjhDVixBQUFBLFlBQVksQXpCN0NULE9BQU87RUFDUixBeUI0Q0YsS3pCNUNPLEd5QjRDUCxZQUFZLEF6QjVDRCxnQkFBZ0IsQ0FBQztJQUN4QixLQUFLLEVqQitId0IsSUFBSTtJaUI5SGpDLGdCQUFnQixFQUFFLE9BQU07SUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FTekI7SXlCZ0NILEFBQUEsWUFBWSxBekI5Q1QsT0FBTyxBQU9MLE1BQU0sRXlCdUNYLEFBQUEsWUFBWSxBekI5Q1QsT0FBTyxBQVFMLE1BQU0sRXlCc0NYLEFBQUEsWUFBWSxBekI5Q1QsT0FBTyxBQVNMLE1BQU0sRXlCcUNYLEFBQUEsWUFBWSxBekI3Q1QsT0FBTyxBQU1MLE1BQU0sRXlCdUNYLEFBQUEsWUFBWSxBekI3Q1QsT0FBTyxBQU9MLE1BQU0sRXlCc0NYLEFBQUEsWUFBWSxBekI3Q1QsT0FBTyxBQVFMLE1BQU07SUFQVCxBeUI0Q0YsS3pCNUNPLEd5QjRDUCxZQUFZLEF6QjVDRCxnQkFBZ0IsQUFLdEIsTUFBTTtJQUxULEF5QjRDRixLekI1Q08sR3lCNENQLFlBQVksQXpCNUNELGdCQUFnQixBQU10QixNQUFNO0lBTlQsQXlCNENGLEt6QjVDTyxHeUI0Q1AsWUFBWSxBekI1Q0QsZ0JBQWdCLEFBT3RCLE1BQU0sQ0FBQztNQUNOLEtBQUssRWpCd0hzQixJQUFJO01pQnZIL0IsZ0JBQWdCLEVBQUUsT0FBTTtNQUNwQixZQUFZLEVBQUUsT0FBTSxHQUN6QjtFeUJpQ0wsQUFBQSxZQUFZLEF6Qi9CVCxPQUFPLEV5QitCVixBQUFBLFlBQVksQXpCOUJULE9BQU87RUFDUixBeUI2QkYsS3pCN0JPLEd5QjZCUCxZQUFZLEF6QjdCRCxnQkFBZ0IsQ0FBQztJQUN4QixnQkFBZ0IsRUFBRSxJQUFLLEdBQ3hCO0V5QjJCSCxBQUFBLFlBQVksQXpCMUJULFNBQVMsQUFHUCxNQUFNLEV5QnVCWCxBQUFBLFlBQVksQXpCMUJULFNBQVMsQUFJUCxNQUFNLEV5QnNCWCxBQUFBLFlBQVksQXpCMUJULFNBQVMsQUFLUCxNQUFNLEV5QnFCWCxBQUFBLFlBQVksQ3pCekJULEFBQUEsUUFBQyxBQUFBLENBRUMsTUFBTSxFeUJ1QlgsQUFBQSxZQUFZLEN6QnpCVCxBQUFBLFFBQUMsQUFBQSxDQUdDLE1BQU0sRXlCc0JYLEFBQUEsWUFBWSxDekJ6QlQsQUFBQSxRQUFDLEFBQUEsQ0FJQyxNQUFNO0VBSFQsQXlCd0JGLFF6QnhCVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEV5QndCWCxZQUFZLEF6QnZCUCxNQUFNO0VBRFQsQXlCd0JGLFF6QnhCVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEV5QndCWCxZQUFZLEF6QnRCUCxNQUFNO0VBRlQsQXlCd0JGLFF6QnhCVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEV5QndCWCxZQUFZLEF6QnJCUCxNQUFNLENBQUM7SUFDTixnQkFBZ0IsRWpCeUdXLElBQUk7SWlCeEczQixZQUFZLEVqQnlHVyxJQUFJLEdpQnhHaEM7RXlCa0JMLEF6QmZFLFl5QmVVLEN6QmZWLE1BQU0sQ0FBQztJQUNMLEtBQUssRWpCbUd3QixJQUFJO0lpQmxHakMsZ0JBQWdCLEVqQmlHYSxJQUFJLEdpQmhHbEM7O0F5QmVILEFBQUEsWUFBWSxDQUFDO0V6QmhFWCxLQUFLLEVqQnFKMEIsSUFBSTtFaUJwSm5DLGdCQUFnQixFakJVTSxPQUFNO0VpQlQ1QixZQUFZLEVqQnFKbUIsT0FBTSxHMENyRnRDO0VBRkQsQUFBQSxZQUFZLEF6QjVEVCxNQUFNLEV5QjREVCxBQUFBLFlBQVksQXpCM0RULE1BQU0sQ0FBQztJQUNOLEtBQUssRWpCK0l3QixJQUFJO0lpQjlJakMsZ0JBQWdCLEVBQUUsT0FBTTtJQUNwQixZQUFZLEVBQUUsT0FBTSxHQUN6QjtFeUJ1REgsQUFBQSxZQUFZLEF6QnREVCxNQUFNLENBQUM7SUFDTixLQUFLLEVqQjBJd0IsSUFBSTtJaUJ6SWpDLGdCQUFnQixFQUFFLE9BQU07SUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FDekI7RXlCa0RILEFBQUEsWUFBWSxBekJqRFQsT0FBTyxFeUJpRFYsQUFBQSxZQUFZLEF6QmhEVCxPQUFPO0VBQ1IsQXlCK0NGLEt6Qi9DTyxHeUIrQ1AsWUFBWSxBekIvQ0QsZ0JBQWdCLENBQUM7SUFDeEIsS0FBSyxFakJtSXdCLElBQUk7SWlCbElqQyxnQkFBZ0IsRUFBRSxPQUFNO0lBQ3BCLFlBQVksRUFBRSxPQUFNLEdBU3pCO0l5Qm1DSCxBQUFBLFlBQVksQXpCakRULE9BQU8sQUFPTCxNQUFNLEV5QjBDWCxBQUFBLFlBQVksQXpCakRULE9BQU8sQUFRTCxNQUFNLEV5QnlDWCxBQUFBLFlBQVksQXpCakRULE9BQU8sQUFTTCxNQUFNLEV5QndDWCxBQUFBLFlBQVksQXpCaERULE9BQU8sQUFNTCxNQUFNLEV5QjBDWCxBQUFBLFlBQVksQXpCaERULE9BQU8sQUFPTCxNQUFNLEV5QnlDWCxBQUFBLFlBQVksQXpCaERULE9BQU8sQUFRTCxNQUFNO0lBUFQsQXlCK0NGLEt6Qi9DTyxHeUIrQ1AsWUFBWSxBekIvQ0QsZ0JBQWdCLEFBS3RCLE1BQU07SUFMVCxBeUIrQ0YsS3pCL0NPLEd5QitDUCxZQUFZLEF6Qi9DRCxnQkFBZ0IsQUFNdEIsTUFBTTtJQU5ULEF5QitDRixLekIvQ08sR3lCK0NQLFlBQVksQXpCL0NELGdCQUFnQixBQU90QixNQUFNLENBQUM7TUFDTixLQUFLLEVqQjRIc0IsSUFBSTtNaUIzSC9CLGdCQUFnQixFQUFFLE9BQU07TUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FDekI7RXlCb0NMLEFBQUEsWUFBWSxBekJsQ1QsT0FBTyxFeUJrQ1YsQUFBQSxZQUFZLEF6QmpDVCxPQUFPO0VBQ1IsQXlCZ0NGLEt6QmhDTyxHeUJnQ1AsWUFBWSxBekJoQ0QsZ0JBQWdCLENBQUM7SUFDeEIsZ0JBQWdCLEVBQUUsSUFBSyxHQUN4QjtFeUI4QkgsQUFBQSxZQUFZLEF6QjdCVCxTQUFTLEFBR1AsTUFBTSxFeUIwQlgsQUFBQSxZQUFZLEF6QjdCVCxTQUFTLEFBSVAsTUFBTSxFeUJ5QlgsQUFBQSxZQUFZLEF6QjdCVCxTQUFTLEFBS1AsTUFBTSxFeUJ3QlgsQUFBQSxZQUFZLEN6QjVCVCxBQUFBLFFBQUMsQUFBQSxDQUVDLE1BQU0sRXlCMEJYLEFBQUEsWUFBWSxDekI1QlQsQUFBQSxRQUFDLEFBQUEsQ0FHQyxNQUFNLEV5QnlCWCxBQUFBLFlBQVksQ3pCNUJULEFBQUEsUUFBQyxBQUFBLENBSUMsTUFBTTtFQUhULEF5QjJCRixRekIzQlUsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFeUIyQlgsWUFBWSxBekIxQlAsTUFBTTtFQURULEF5QjJCRixRekIzQlUsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFeUIyQlgsWUFBWSxBekJ6QlAsTUFBTTtFQUZULEF5QjJCRixRekIzQlUsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFeUIyQlgsWUFBWSxBekJ4QlAsTUFBTSxDQUFDO0lBQ04sZ0JBQWdCLEVqQjlCRSxPQUFNO0lpQitCcEIsWUFBWSxFakI2R1csT0FBTSxHaUI1R2xDO0V5QnFCTCxBekJsQkUsWXlCa0JVLEN6QmxCVixNQUFNLENBQUM7SUFDTCxLQUFLLEVqQnBDZSxPQUFNO0lpQnFDMUIsZ0JBQWdCLEVqQnFHYSxJQUFJLEdpQnBHbEM7O0F5Qm1CSCxBQUFBLFlBQVksQ0FBQztFekJwRVgsS0FBSyxFakJ5SjBCLElBQUk7RWlCeEpuQyxnQkFBZ0IsRWpCV00sT0FBTztFaUJWN0IsWUFBWSxFakJ5Sm1CLE9BQU0sRzBDckZ0QztFQUZELEFBQUEsWUFBWSxBekJoRVQsTUFBTSxFeUJnRVQsQUFBQSxZQUFZLEF6Qi9EVCxNQUFNLENBQUM7SUFDTixLQUFLLEVqQm1Kd0IsSUFBSTtJaUJsSmpDLGdCQUFnQixFQUFFLE9BQU07SUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FDekI7RXlCMkRILEFBQUEsWUFBWSxBekIxRFQsTUFBTSxDQUFDO0lBQ04sS0FBSyxFakI4SXdCLElBQUk7SWlCN0lqQyxnQkFBZ0IsRUFBRSxPQUFNO0lBQ3BCLFlBQVksRUFBRSxPQUFNLEdBQ3pCO0V5QnNESCxBQUFBLFlBQVksQXpCckRULE9BQU8sRXlCcURWLEFBQUEsWUFBWSxBekJwRFQsT0FBTztFQUNSLEF5Qm1ERixLekJuRE8sR3lCbURQLFlBQVksQXpCbkRELGdCQUFnQixDQUFDO0lBQ3hCLEtBQUssRWpCdUl3QixJQUFJO0lpQnRJakMsZ0JBQWdCLEVBQUUsT0FBTTtJQUNwQixZQUFZLEVBQUUsT0FBTSxHQVN6QjtJeUJ1Q0gsQUFBQSxZQUFZLEF6QnJEVCxPQUFPLEFBT0wsTUFBTSxFeUI4Q1gsQUFBQSxZQUFZLEF6QnJEVCxPQUFPLEFBUUwsTUFBTSxFeUI2Q1gsQUFBQSxZQUFZLEF6QnJEVCxPQUFPLEFBU0wsTUFBTSxFeUI0Q1gsQUFBQSxZQUFZLEF6QnBEVCxPQUFPLEFBTUwsTUFBTSxFeUI4Q1gsQUFBQSxZQUFZLEF6QnBEVCxPQUFPLEFBT0wsTUFBTSxFeUI2Q1gsQUFBQSxZQUFZLEF6QnBEVCxPQUFPLEFBUUwsTUFBTTtJQVBULEF5Qm1ERixLekJuRE8sR3lCbURQLFlBQVksQXpCbkRELGdCQUFnQixBQUt0QixNQUFNO0lBTFQsQXlCbURGLEt6Qm5ETyxHeUJtRFAsWUFBWSxBekJuREQsZ0JBQWdCLEFBTXRCLE1BQU07SUFOVCxBeUJtREYsS3pCbkRPLEd5Qm1EUCxZQUFZLEF6Qm5ERCxnQkFBZ0IsQUFPdEIsTUFBTSxDQUFDO01BQ04sS0FBSyxFakJnSXNCLElBQUk7TWlCL0gvQixnQkFBZ0IsRUFBRSxPQUFNO01BQ3BCLFlBQVksRUFBRSxPQUFNLEdBQ3pCO0V5QndDTCxBQUFBLFlBQVksQXpCdENULE9BQU8sRXlCc0NWLEFBQUEsWUFBWSxBekJyQ1QsT0FBTztFQUNSLEF5Qm9DRixLekJwQ08sR3lCb0NQLFlBQVksQXpCcENELGdCQUFnQixDQUFDO0lBQ3hCLGdCQUFnQixFQUFFLElBQUssR0FDeEI7RXlCa0NILEFBQUEsWUFBWSxBekJqQ1QsU0FBUyxBQUdQLE1BQU0sRXlCOEJYLEFBQUEsWUFBWSxBekJqQ1QsU0FBUyxBQUlQLE1BQU0sRXlCNkJYLEFBQUEsWUFBWSxBekJqQ1QsU0FBUyxBQUtQLE1BQU0sRXlCNEJYLEFBQUEsWUFBWSxDekJoQ1QsQUFBQSxRQUFDLEFBQUEsQ0FFQyxNQUFNLEV5QjhCWCxBQUFBLFlBQVksQ3pCaENULEFBQUEsUUFBQyxBQUFBLENBR0MsTUFBTSxFeUI2QlgsQUFBQSxZQUFZLEN6QmhDVCxBQUFBLFFBQUMsQUFBQSxDQUlDLE1BQU07RUFIVCxBeUIrQkYsUXpCL0JVLENBQUEsQUFBQSxRQUFDLEFBQUEsRXlCK0JYLFlBQVksQXpCOUJQLE1BQU07RUFEVCxBeUIrQkYsUXpCL0JVLENBQUEsQUFBQSxRQUFDLEFBQUEsRXlCK0JYLFlBQVksQXpCN0JQLE1BQU07RUFGVCxBeUIrQkYsUXpCL0JVLENBQUEsQUFBQSxRQUFDLEFBQUEsRXlCK0JYLFlBQVksQXpCNUJQLE1BQU0sQ0FBQztJQUNOLGdCQUFnQixFakI3QkUsT0FBTztJaUI4QnJCLFlBQVksRWpCaUhXLE9BQU0sR2lCaEhsQztFeUJ5QkwsQXpCdEJFLFl5QnNCVSxDekJ0QlYsTUFBTSxDQUFDO0lBQ0wsS0FBSyxFakJuQ2UsT0FBTztJaUJvQzNCLGdCQUFnQixFakJ5R2EsSUFBSSxHaUJ4R2xDOztBeUJ1QkgsQUFBQSxTQUFTLENBQUM7RXpCeEVSLEtBQUssRWpCNkowQixJQUFJO0VpQjVKbkMsZ0JBQWdCLEVqQllNLE9BQU87RWlCWDdCLFlBQVksRWpCNkptQixPQUFNLEcwQ3JGdEM7RUFGRCxBQUFBLFNBQVMsQXpCcEVOLE1BQU0sRXlCb0VULEFBQUEsU0FBUyxBekJuRU4sTUFBTSxDQUFDO0lBQ04sS0FBSyxFakJ1SndCLElBQUk7SWlCdEpqQyxnQkFBZ0IsRUFBRSxPQUFNO0lBQ3BCLFlBQVksRUFBRSxPQUFNLEdBQ3pCO0V5QitESCxBQUFBLFNBQVMsQXpCOUROLE1BQU0sQ0FBQztJQUNOLEtBQUssRWpCa0p3QixJQUFJO0lpQmpKakMsZ0JBQWdCLEVBQUUsT0FBTTtJQUNwQixZQUFZLEVBQUUsT0FBTSxHQUN6QjtFeUIwREgsQUFBQSxTQUFTLEF6QnpETixPQUFPLEV5QnlEVixBQUFBLFNBQVMsQXpCeEROLE9BQU87RUFDUixBeUJ1REYsS3pCdkRPLEd5QnVEUCxTQUFTLEF6QnZERSxnQkFBZ0IsQ0FBQztJQUN4QixLQUFLLEVqQjJJd0IsSUFBSTtJaUIxSWpDLGdCQUFnQixFQUFFLE9BQU07SUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FTekI7SXlCMkNILEFBQUEsU0FBUyxBekJ6RE4sT0FBTyxBQU9MLE1BQU0sRXlCa0RYLEFBQUEsU0FBUyxBekJ6RE4sT0FBTyxBQVFMLE1BQU0sRXlCaURYLEFBQUEsU0FBUyxBekJ6RE4sT0FBTyxBQVNMLE1BQU0sRXlCZ0RYLEFBQUEsU0FBUyxBekJ4RE4sT0FBTyxBQU1MLE1BQU0sRXlCa0RYLEFBQUEsU0FBUyxBekJ4RE4sT0FBTyxBQU9MLE1BQU0sRXlCaURYLEFBQUEsU0FBUyxBekJ4RE4sT0FBTyxBQVFMLE1BQU07SUFQVCxBeUJ1REYsS3pCdkRPLEd5QnVEUCxTQUFTLEF6QnZERSxnQkFBZ0IsQUFLdEIsTUFBTTtJQUxULEF5QnVERixLekJ2RE8sR3lCdURQLFNBQVMsQXpCdkRFLGdCQUFnQixBQU10QixNQUFNO0lBTlQsQXlCdURGLEt6QnZETyxHeUJ1RFAsU0FBUyxBekJ2REUsZ0JBQWdCLEFBT3RCLE1BQU0sQ0FBQztNQUNOLEtBQUssRWpCb0lzQixJQUFJO01pQm5JL0IsZ0JBQWdCLEVBQUUsT0FBTTtNQUNwQixZQUFZLEVBQUUsT0FBTSxHQUN6QjtFeUI0Q0wsQUFBQSxTQUFTLEF6QjFDTixPQUFPLEV5QjBDVixBQUFBLFNBQVMsQXpCekNOLE9BQU87RUFDUixBeUJ3Q0YsS3pCeENPLEd5QndDUCxTQUFTLEF6QnhDRSxnQkFBZ0IsQ0FBQztJQUN4QixnQkFBZ0IsRUFBRSxJQUFLLEdBQ3hCO0V5QnNDSCxBQUFBLFNBQVMsQXpCckNOLFNBQVMsQUFHUCxNQUFNLEV5QmtDWCxBQUFBLFNBQVMsQXpCckNOLFNBQVMsQUFJUCxNQUFNLEV5QmlDWCxBQUFBLFNBQVMsQXpCckNOLFNBQVMsQUFLUCxNQUFNLEV5QmdDWCxBQUFBLFNBQVMsQ3pCcENOLEFBQUEsUUFBQyxBQUFBLENBRUMsTUFBTSxFeUJrQ1gsQUFBQSxTQUFTLEN6QnBDTixBQUFBLFFBQUMsQUFBQSxDQUdDLE1BQU0sRXlCaUNYLEFBQUEsU0FBUyxDekJwQ04sQUFBQSxRQUFDLEFBQUEsQ0FJQyxNQUFNO0VBSFQsQXlCbUNGLFF6Qm5DVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEV5Qm1DWCxTQUFTLEF6QmxDSixNQUFNO0VBRFQsQXlCbUNGLFF6Qm5DVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEV5Qm1DWCxTQUFTLEF6QmpDSixNQUFNO0VBRlQsQXlCbUNGLFF6Qm5DVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEV5Qm1DWCxTQUFTLEF6QmhDSixNQUFNLENBQUM7SUFDTixnQkFBZ0IsRWpCNUJFLE9BQU87SWlCNkJyQixZQUFZLEVqQnFIVyxPQUFNLEdpQnBIbEM7RXlCNkJMLEF6QjFCRSxTeUIwQk8sQ3pCMUJQLE1BQU0sQ0FBQztJQUNMLEtBQUssRWpCbENlLE9BQU87SWlCbUMzQixnQkFBZ0IsRWpCNkdhLElBQUksR2lCNUdsQzs7QXlCMkJILEFBQUEsWUFBWSxDQUFDO0V6QjVFWCxLQUFLLEVqQmlLMEIsSUFBSTtFaUJoS25DLGdCQUFnQixFakJhTSxPQUFPO0VpQlo3QixZQUFZLEVqQmlLbUIsT0FBTSxHMENyRnRDO0VBRkQsQUFBQSxZQUFZLEF6QnhFVCxNQUFNLEV5QndFVCxBQUFBLFlBQVksQXpCdkVULE1BQU0sQ0FBQztJQUNOLEtBQUssRWpCMkp3QixJQUFJO0lpQjFKakMsZ0JBQWdCLEVBQUUsT0FBTTtJQUNwQixZQUFZLEVBQUUsT0FBTSxHQUN6QjtFeUJtRUgsQUFBQSxZQUFZLEF6QmxFVCxNQUFNLENBQUM7SUFDTixLQUFLLEVqQnNKd0IsSUFBSTtJaUJySmpDLGdCQUFnQixFQUFFLE9BQU07SUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FDekI7RXlCOERILEFBQUEsWUFBWSxBekI3RFQsT0FBTyxFeUI2RFYsQUFBQSxZQUFZLEF6QjVEVCxPQUFPO0VBQ1IsQXlCMkRGLEt6QjNETyxHeUIyRFAsWUFBWSxBekIzREQsZ0JBQWdCLENBQUM7SUFDeEIsS0FBSyxFakIrSXdCLElBQUk7SWlCOUlqQyxnQkFBZ0IsRUFBRSxPQUFNO0lBQ3BCLFlBQVksRUFBRSxPQUFNLEdBU3pCO0l5QitDSCxBQUFBLFlBQVksQXpCN0RULE9BQU8sQUFPTCxNQUFNLEV5QnNEWCxBQUFBLFlBQVksQXpCN0RULE9BQU8sQUFRTCxNQUFNLEV5QnFEWCxBQUFBLFlBQVksQXpCN0RULE9BQU8sQUFTTCxNQUFNLEV5Qm9EWCxBQUFBLFlBQVksQXpCNURULE9BQU8sQUFNTCxNQUFNLEV5QnNEWCxBQUFBLFlBQVksQXpCNURULE9BQU8sQUFPTCxNQUFNLEV5QnFEWCxBQUFBLFlBQVksQXpCNURULE9BQU8sQUFRTCxNQUFNO0lBUFQsQXlCMkRGLEt6QjNETyxHeUIyRFAsWUFBWSxBekIzREQsZ0JBQWdCLEFBS3RCLE1BQU07SUFMVCxBeUIyREYsS3pCM0RPLEd5QjJEUCxZQUFZLEF6QjNERCxnQkFBZ0IsQUFNdEIsTUFBTTtJQU5ULEF5QjJERixLekIzRE8sR3lCMkRQLFlBQVksQXpCM0RELGdCQUFnQixBQU90QixNQUFNLENBQUM7TUFDTixLQUFLLEVqQndJc0IsSUFBSTtNaUJ2SS9CLGdCQUFnQixFQUFFLE9BQU07TUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FDekI7RXlCZ0RMLEFBQUEsWUFBWSxBekI5Q1QsT0FBTyxFeUI4Q1YsQUFBQSxZQUFZLEF6QjdDVCxPQUFPO0VBQ1IsQXlCNENGLEt6QjVDTyxHeUI0Q1AsWUFBWSxBekI1Q0QsZ0JBQWdCLENBQUM7SUFDeEIsZ0JBQWdCLEVBQUUsSUFBSyxHQUN4QjtFeUIwQ0gsQUFBQSxZQUFZLEF6QnpDVCxTQUFTLEFBR1AsTUFBTSxFeUJzQ1gsQUFBQSxZQUFZLEF6QnpDVCxTQUFTLEFBSVAsTUFBTSxFeUJxQ1gsQUFBQSxZQUFZLEF6QnpDVCxTQUFTLEFBS1AsTUFBTSxFeUJvQ1gsQUFBQSxZQUFZLEN6QnhDVCxBQUFBLFFBQUMsQUFBQSxDQUVDLE1BQU0sRXlCc0NYLEFBQUEsWUFBWSxDekJ4Q1QsQUFBQSxRQUFDLEFBQUEsQ0FHQyxNQUFNLEV5QnFDWCxBQUFBLFlBQVksQ3pCeENULEFBQUEsUUFBQyxBQUFBLENBSUMsTUFBTTtFQUhULEF5QnVDRixRekJ2Q1UsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFeUJ1Q1gsWUFBWSxBekJ0Q1AsTUFBTTtFQURULEF5QnVDRixRekJ2Q1UsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFeUJ1Q1gsWUFBWSxBekJyQ1AsTUFBTTtFQUZULEF5QnVDRixRekJ2Q1UsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFeUJ1Q1gsWUFBWSxBekJwQ1AsTUFBTSxDQUFDO0lBQ04sZ0JBQWdCLEVqQjNCRSxPQUFPO0lpQjRCckIsWUFBWSxFakJ5SFcsT0FBTSxHaUJ4SGxDO0V5QmlDTCxBekI5QkUsWXlCOEJVLEN6QjlCVixNQUFNLENBQUM7SUFDTCxLQUFLLEVqQmpDZSxPQUFPO0lpQmtDM0IsZ0JBQWdCLEVqQmlIYSxJQUFJLEdpQmhIbEM7O0F5QitCSCxBQUFBLFdBQVcsQ0FBQztFekJoRlYsS0FBSyxFakJxSzBCLElBQUk7RWlCcEtuQyxnQkFBZ0IsRWpCY00sT0FBTztFaUJiN0IsWUFBWSxFakJxS21CLE9BQU0sRzBDckZ0QztFQUZELEFBQUEsV0FBVyxBekI1RVIsTUFBTSxFeUI0RVQsQUFBQSxXQUFXLEF6QjNFUixNQUFNLENBQUM7SUFDTixLQUFLLEVqQitKd0IsSUFBSTtJaUI5SmpDLGdCQUFnQixFQUFFLE9BQU07SUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FDekI7RXlCdUVILEFBQUEsV0FBVyxBekJ0RVIsTUFBTSxDQUFDO0lBQ04sS0FBSyxFakIwSndCLElBQUk7SWlCekpqQyxnQkFBZ0IsRUFBRSxPQUFNO0lBQ3BCLFlBQVksRUFBRSxPQUFNLEdBQ3pCO0V5QmtFSCxBQUFBLFdBQVcsQXpCakVSLE9BQU8sRXlCaUVWLEFBQUEsV0FBVyxBekJoRVIsT0FBTztFQUNSLEF5QitERixLekIvRE8sR3lCK0RQLFdBQVcsQXpCL0RBLGdCQUFnQixDQUFDO0lBQ3hCLEtBQUssRWpCbUp3QixJQUFJO0lpQmxKakMsZ0JBQWdCLEVBQUUsT0FBTTtJQUNwQixZQUFZLEVBQUUsT0FBTSxHQVN6QjtJeUJtREgsQUFBQSxXQUFXLEF6QmpFUixPQUFPLEFBT0wsTUFBTSxFeUIwRFgsQUFBQSxXQUFXLEF6QmpFUixPQUFPLEFBUUwsTUFBTSxFeUJ5RFgsQUFBQSxXQUFXLEF6QmpFUixPQUFPLEFBU0wsTUFBTSxFeUJ3RFgsQUFBQSxXQUFXLEF6QmhFUixPQUFPLEFBTUwsTUFBTSxFeUIwRFgsQUFBQSxXQUFXLEF6QmhFUixPQUFPLEFBT0wsTUFBTSxFeUJ5RFgsQUFBQSxXQUFXLEF6QmhFUixPQUFPLEFBUUwsTUFBTTtJQVBULEF5QitERixLekIvRE8sR3lCK0RQLFdBQVcsQXpCL0RBLGdCQUFnQixBQUt0QixNQUFNO0lBTFQsQXlCK0RGLEt6Qi9ETyxHeUIrRFAsV0FBVyxBekIvREEsZ0JBQWdCLEFBTXRCLE1BQU07SUFOVCxBeUIrREYsS3pCL0RPLEd5QitEUCxXQUFXLEF6Qi9EQSxnQkFBZ0IsQUFPdEIsTUFBTSxDQUFDO01BQ04sS0FBSyxFakI0SXNCLElBQUk7TWlCM0kvQixnQkFBZ0IsRUFBRSxPQUFNO01BQ3BCLFlBQVksRUFBRSxPQUFNLEdBQ3pCO0V5Qm9ETCxBQUFBLFdBQVcsQXpCbERSLE9BQU8sRXlCa0RWLEFBQUEsV0FBVyxBekJqRFIsT0FBTztFQUNSLEF5QmdERixLekJoRE8sR3lCZ0RQLFdBQVcsQXpCaERBLGdCQUFnQixDQUFDO0lBQ3hCLGdCQUFnQixFQUFFLElBQUssR0FDeEI7RXlCOENILEFBQUEsV0FBVyxBekI3Q1IsU0FBUyxBQUdQLE1BQU0sRXlCMENYLEFBQUEsV0FBVyxBekI3Q1IsU0FBUyxBQUlQLE1BQU0sRXlCeUNYLEFBQUEsV0FBVyxBekI3Q1IsU0FBUyxBQUtQLE1BQU0sRXlCd0NYLEFBQUEsV0FBVyxDekI1Q1IsQUFBQSxRQUFDLEFBQUEsQ0FFQyxNQUFNLEV5QjBDWCxBQUFBLFdBQVcsQ3pCNUNSLEFBQUEsUUFBQyxBQUFBLENBR0MsTUFBTSxFeUJ5Q1gsQUFBQSxXQUFXLEN6QjVDUixBQUFBLFFBQUMsQUFBQSxDQUlDLE1BQU07RUFIVCxBeUIyQ0YsUXpCM0NVLENBQUEsQUFBQSxRQUFDLEFBQUEsRXlCMkNYLFdBQVcsQXpCMUNOLE1BQU07RUFEVCxBeUIyQ0YsUXpCM0NVLENBQUEsQUFBQSxRQUFDLEFBQUEsRXlCMkNYLFdBQVcsQXpCekNOLE1BQU07RUFGVCxBeUIyQ0YsUXpCM0NVLENBQUEsQUFBQSxRQUFDLEFBQUEsRXlCMkNYLFdBQVcsQXpCeENOLE1BQU0sQ0FBQztJQUNOLGdCQUFnQixFakIxQkUsT0FBTztJaUIyQnJCLFlBQVksRWpCNkhXLE9BQU0sR2lCNUhsQztFeUJxQ0wsQXpCbENFLFd5QmtDUyxDekJsQ1QsTUFBTSxDQUFDO0lBQ0wsS0FBSyxFakJoQ2UsT0FBTztJaUJpQzNCLGdCQUFnQixFakJxSGEsSUFBSSxHaUJwSGxDOztBeUJ3Q0gsQUFBQSxTQUFTLENBQUM7RUFDUixLQUFLLEUxQy9FaUIsT0FBTTtFMENnRjVCLFdBQVcsRUFBRSxNQUFPO0VBQ3BCLGFBQWEsRUFBRSxDQUFFLEdBOEJsQjtFQWpDRCxBQUFBLFNBQVMsRUFBVCxBQUFBLFNBQVMsQUFNTixPQUFPLEVBTlYsQUFBQSxTQUFTLEFBT04sT0FBTyxFQVBWLEFBQUEsU0FBUyxDQVFOLEFBQUEsUUFBQyxBQUFBO0VBQ0YsQUFURixRQVNVLENBQUEsQUFBQSxRQUFDLEFBQUEsRUFUWCxTQUFTLENBU2M7SUFDbkIsZ0JBQWdCLEVBQUUsV0FBWTtJM0JyQ2hDLGtCQUFrQixFMkJzQ0ksSUFBSTtJM0JyQ2xCLFVBQVUsRTJCcUNJLElBQUksR0FDekI7RUFaSCxBQUFBLFNBQVMsRUFBVCxBQUFBLFNBQVMsQUFjTixNQUFNLEVBZFQsQUFBQSxTQUFTLEFBZU4sTUFBTSxFQWZULEFBQUEsU0FBUyxBQWdCTixPQUFPLENBQUM7SUFDUCxZQUFZLEVBQUUsV0FBWSxHQUMzQjtFQWxCSCxBQUFBLFNBQVMsQUFtQk4sTUFBTSxFQW5CVCxBQUFBLFNBQVMsQUFvQk4sTUFBTSxDQUFDO0lBQ04sS0FBSyxFMUNoRmUsT0FBTTtJMENpRjFCLGVBQWUsRTFDL0VLLFNBQVM7STBDZ0Y3QixnQkFBZ0IsRUFBRSxXQUFZLEdBQy9CO0VBeEJILEFBQUEsU0FBUyxDQXlCTixBQUFBLFFBQUMsQUFBQSxDQUVDLE1BQU0sRUEzQlgsQUFBQSxTQUFTLENBeUJOLEFBQUEsUUFBQyxBQUFBLENBR0MsTUFBTTtFQUZULEFBMUJGLFFBMEJVLENBQUEsQUFBQSxRQUFDLEFBQUEsRUExQlgsU0FBUyxBQTJCSixNQUFNO0VBRFQsQUExQkYsUUEwQlUsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFQTFCWCxTQUFTLEFBNEJKLE1BQU0sQ0FBQztJQUNOLEtBQUssRTFDOUdjLE9BQU87STBDK0cxQixlQUFlLEVBQUUsSUFBSyxHQUN2Qjs7QUFRTCxBQUFBLE9BQU8sRUdyQ1AsQUhxQ0EsYUdyQ2EsR0FBRyxJQUFJLENIcUNaO0V6QjFFTixPQUFPLEVqQnFDbUIsSUFBSSxDQUNKLElBQUk7RWlCckM5QixTQUFTLEVqQlRlLElBQUk7RWlCVTVCLFdBQVcsRWpCNENlLE9BQVM7RWlCM0NuQyxhQUFhLEVqQitDYSxHQUFHLEcwQzJCOUI7O0FBQ0QsQUFBQSxPQUFPLEVHMUNQLEFIMENBLGFHMUNhLEdBQUcsSUFBSSxDSDBDWjtFekI5RU4sT0FBTyxFakJ3Q21CLEdBQUcsQ0FDSCxJQUFJO0VpQnhDOUIsU0FBUyxFakJSZSxJQUFJO0VpQlM1QixXQUFXLEVqQjZDZSxHQUFHO0VpQjVDN0IsYUFBYSxFakJnRGEsR0FBRyxHMEM4QjlCOztBQUNELEFBQUEsT0FBTyxFRy9DUCxBSCtDQSxhRy9DYSxHQUFHLElBQUksQ0grQ1o7RXpCbEZOLE9BQU8sRWpCMkNtQixHQUFHLENBQ0gsR0FBRztFaUIzQzdCLFNBQVMsRWpCUmUsSUFBSTtFaUJTNUIsV0FBVyxFakI2Q2UsR0FBRztFaUI1QzdCLGFBQWEsRWpCZ0RhLEdBQUcsRzBDaUM5Qjs7QUFNRCxBQUFBLFVBQVUsQ0FBQztFQUNULE9BQU8sRUFBRSxLQUFNO0VBQ2YsS0FBSyxFQUFFLElBQUssR0FDYjs7QUFHRCxBQUFhLFVBQUgsR0FBRyxVQUFVLENBQUM7RUFDdEIsVUFBVSxFQUFFLEdBQUksR0FDakI7O0FBR0QsQUFBbUIsS0FBZCxDQUFBLEFBQUEsSUFBQyxDQUFLLFFBQVEsQUFBYixDQUdILFVBQVU7QUFGYixBQUFrQixLQUFiLENBQUEsQUFBQSxJQUFDLENBQUssT0FBTyxBQUFaLENBRUgsVUFBVTtBQURiLEFBQW1CLEtBQWQsQ0FBQSxBQUFBLElBQUMsQ0FBSyxRQUFRLEFBQWIsQ0FDSCxVQUFVLENBQUM7RUFDVixLQUFLLEVBQUUsSUFBSyxHQUNiOztBQzdKSCxBQUFBLEtBQUssQ0FBQztFQUNKLE9BQU8sRUFBRSxDQUFFO0U1QitLWCxrQkFBa0IsRTRCOUtFLE9BQU8sQ0FBQyxLQUFJLENBQUMsTUFBTTtFNUIrS2xDLGFBQWEsRTRCL0tFLE9BQU8sQ0FBQyxLQUFJLENBQUMsTUFBTTtFNUJnTC9CLFVBQVUsRTRCaExFLE9BQU8sQ0FBQyxLQUFJLENBQUMsTUFBTSxHQUl4QztFQU5ELEFBQUEsS0FBSyxBQUdGLEdBQUcsQ0FBQztJQUNILE9BQU8sRUFBRSxDQUFFLEdBQ1o7O0FBR0gsQUFBQSxTQUFTLENBQUM7RUFDUixPQUFPLEVBQUUsSUFBSyxHQUtmO0VBTkQsQUFBQSxTQUFTLEFBR04sR0FBRyxDQUFNO0lBQUUsT0FBTyxFQUFFLEtBQU0sR0FBSTs7QUFLakMsQUFBVyxFQUFULEFBQUEsU0FBUyxBQUFBLEdBQUcsQ0FBSTtFQUFFLE9BQU8sRUFBRSxTQUFVLEdBQUk7O0FBRTNDLEFBQWMsS0FBVCxBQUFBLFNBQVMsQUFBQSxHQUFHLENBQUM7RUFBRSxPQUFPLEVBQUUsZUFBZ0IsR0FBSTs7QUFFakQsQUFBQSxXQUFXLENBQUM7RUFDVixRQUFRLEVBQUUsUUFBUztFQUNuQixNQUFNLEVBQUUsQ0FBRTtFQUNWLFFBQVEsRUFBRSxNQUFPO0U1QjhKakIsMkJBQTJCLEU0QjdKRSxNQUFNLEVBQUUsVUFBVTtFNUI4SnZDLG1CQUFtQixFNEI5SkUsTUFBTSxFQUFFLFVBQVU7RTVCcUsvQywyQkFBMkIsRTRCcEtFLEtBQUk7RTVCcUt6QixtQkFBbUIsRTRCcktFLEtBQUk7RTVCd0tqQyxrQ0FBa0MsRTRCdktFLElBQUk7RTVCd0toQywwQkFBMEIsRTRCeEtFLElBQUksR0FDekM7O0FDOUJELEFBQUEsTUFBTSxDQUFDO0VBQ0wsT0FBTyxFQUFFLFlBQWE7RUFDdEIsS0FBSyxFQUFFLENBQUU7RUFDVCxNQUFNLEVBQUUsQ0FBRTtFQUNWLFdBQVcsRUFBRSxHQUFJO0VBQ2pCLGNBQWMsRUFBRSxNQUFPO0VBQ3ZCLFVBQVUsRTVDMkdnQixHQUFHLEM0QzNHRyxNQUFNO0VBQ3RDLFVBQVUsRTVDMEdnQixHQUFHLEM0QzFHRyxLQUFLLENBQUMsRUFBRTtFQUN4QyxZQUFZLEU1Q3lHYyxHQUFHLEM0Q3pHRyxLQUFLLENBQUMsV0FBVztFQUNqRCxXQUFXLEU1Q3dHZSxHQUFHLEM0Q3hHRyxLQUFLLENBQUMsV0FBVyxHQUNsRDs7QUFHRCxBQUFBLE9BQU87QUFDUCxBQUFBLFNBQVMsQ0FBQztFQUNSLFFBQVEsRUFBRSxRQUFTLEdBQ3BCOztBQUdELEFBQWdCLGdCQUFBLEFBQUEsTUFBTSxDQUFDO0VBQ3JCLE9BQU8sRUFBRSxDQUFFLEdBQ1o7O0FBR0QsQUFBQSxjQUFjLENBQUM7RUFDYixRQUFRLEVBQUUsUUFBUztFQUNuQixHQUFHLEVBQUUsSUFBSztFQUNWLElBQUksRUFBRSxDQUFFO0VBQ1IsT0FBTyxFNUNtUGtCLElBQUk7RTRDbFA3QixPQUFPLEVBQUUsSUFBSztFQUNkLEtBQUssRUFBRSxJQUFLO0VBQ1osU0FBUyxFQUFFLEtBQU07RUFDakIsT0FBTyxFQUFFLEtBQU07RUFDZixNQUFNLEVBQUUsT0FBUTtFQUNoQixVQUFVLEVBQUUsSUFBSztFQUNqQixTQUFTLEU1Q1VlLElBQUk7RTRDVDVCLFVBQVUsRUFBRSxJQUFLO0VBQ2pCLGdCQUFnQixFNUNvTWUsSUFBSTtFNENuTW5DLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDNUN1TWMsSUFBSTtFNEN0TW5DLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDNUNvTWMsbUJBQUk7RTRDbk1uQyxhQUFhLEU1QytEYSxHQUFHO0VlekM3QixrQkFBa0IsRTZCckJFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFJO0U3QnNCM0IsVUFBVSxFNkJ0QkUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQUk7RUFDbkMsZUFBZSxFQUFFLFdBQVksR0F5QjlCO0VBM0NELEFBQUEsY0FBYyxBQXVCWCxXQUFXLENBQUM7SUFDWCxLQUFLLEVBQUUsQ0FBRTtJQUNULElBQUksRUFBRSxJQUFLLEdBQ1o7RUExQkgsQUE2QkUsY0E3QlksQ0E2QlosUUFBUSxDQUFDO0l2QnREVCxNQUFNLEVBQUUsR0FBSTtJQUNaLE1BQU0sRUFBSSxHQUFxQixDQUFXLENBQUM7SUFDM0MsUUFBUSxFQUFFLE1BQU87SUFDakIsZ0JBQWdCLEVyQjZPZSxPQUFPLEc0Q3hMckM7RUEvQkgsQUFrQ1MsY0FsQ0ssR0FrQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLE9BQU8sRUFBRSxLQUFNO0lBQ2YsT0FBTyxFQUFFLFFBQVM7SUFDbEIsS0FBSyxFQUFFLElBQUs7SUFDWixXQUFXLEVBQUUsTUFBTztJQUNwQixXQUFXLEU1Q05XLE9BQVc7STRDT2pDLEtBQUssRTVDMURnQixPQUFPO0k0QzJENUIsV0FBVyxFQUFFLE1BQU8sR0FDckI7O0FBSUgsQUFBc0IsY0FBUixHQUFHLEVBQUUsR0FBRyxDQUFDLEFBQ3BCLE1BQU0sRUFEVCxBQUFzQixjQUFSLEdBQUcsRUFBRSxHQUFHLENBQUMsQUFFcEIsTUFBTSxDQUFDO0VBQ04sZUFBZSxFQUFFLElBQUs7RUFDdEIsS0FBSyxFNUMwS3dCLE9BQU07RTRDektuQyxnQkFBZ0IsRTVDMkthLE9BQU8sRzRDMUtyQzs7QUFJSCxBQUEyQixjQUFiLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBNUIsQUFBMkIsY0FBYixHQUFHLE9BQU8sR0FBRyxDQUFDLEFBRXpCLE1BQU0sRUFGVCxBQUEyQixjQUFiLEdBQUcsT0FBTyxHQUFHLENBQUMsQUFHekIsTUFBTSxDQUFDO0VBQ04sS0FBSyxFNUN3Qm1CLElBQUk7RTRDdkI1QixlQUFlLEVBQUUsSUFBSztFQUN0QixPQUFPLEVBQUUsQ0FBRTtFQUNYLGdCQUFnQixFNUM1RUksT0FBTSxHNEM2RTNCOztBQU9ILEFBQTZCLGNBQWYsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUE5QixBQUE2QixjQUFmLEdBQUcsU0FBUyxHQUFHLENBQUMsQUFFM0IsTUFBTSxFQUZULEFBQTZCLGNBQWYsR0FBRyxTQUFTLEdBQUcsQ0FBQyxBQUczQixNQUFNLENBQUM7RUFDTixLQUFLLEU1QzNGZ0IsT0FBTyxHNEM0RjdCOztBQUxILEFBQTZCLGNBQWYsR0FBRyxTQUFTLEdBQUcsQ0FBQyxBQVEzQixNQUFNLEVBUlQsQUFBNkIsY0FBZixHQUFHLFNBQVMsR0FBRyxDQUFDLEFBUzNCLE1BQU0sQ0FBQztFQUNOLGVBQWUsRUFBRSxJQUFLO0VBQ3RCLGdCQUFnQixFQUFFLFdBQVk7RUFDOUIsZ0JBQWdCLEVBQUUsSUFBSztFckMzR3pCLE1BQU0sRUFBRSwyREFBMkQ7RXFDNkdqRSxNQUFNLEU1Q29IdUIsV0FBVyxHNENuSHpDOztBQUlILEFBRUksS0FGQyxHQUVELGNBQWMsQ0FBQztFQUNmLE9BQU8sRUFBRSxLQUFNLEdBQ2hCOztBQUpILEFBT0ksS0FQQyxHQU9ELENBQUMsQ0FBQztFQUNGLE9BQU8sRUFBRSxDQUFFLEdBQ1o7O0FBT0gsQUFBQSxvQkFBb0IsQ0FBQztFQUNuQixJQUFJLEVBQUUsSUFBSztFQUNYLEtBQUssRUFBRSxDQUFFLEdBQ1Y7O0FBT0QsQUFBQSxtQkFBbUIsQ0FBQztFQUNsQixJQUFJLEVBQUUsQ0FBRTtFQUNSLEtBQUssRUFBRSxJQUFLLEdBQ2I7O0FBR0QsQUFBQSxnQkFBZ0IsQ0FBQztFQUNmLE9BQU8sRUFBRSxLQUFNO0VBQ2YsT0FBTyxFQUFFLFFBQVM7RUFDbEIsU0FBUyxFNUN0R2UsSUFBSTtFNEN1RzVCLFdBQVcsRTVDN0ZhLE9BQVc7RTRDOEZuQyxLQUFLLEU1Qy9Ja0IsT0FBTztFNENnSjlCLFdBQVcsRUFBRSxNQUFPLEdBQ3JCOztBQUdELEFBQUEsa0JBQWtCLENBQUM7RUFDakIsUUFBUSxFQUFFLEtBQU07RUFDaEIsSUFBSSxFQUFFLENBQUU7RUFDUixLQUFLLEVBQUUsQ0FBRTtFQUNULE1BQU0sRUFBRSxDQUFFO0VBQ1YsR0FBRyxFQUFFLENBQUU7RUFDUCxPQUFPLEVBQUcsR0FBZ0IsR0FDM0I7O0FBR0QsQUFBYyxXQUFILEdBQUcsY0FBYyxDQUFDO0VBQzNCLEtBQUssRUFBRSxDQUFFO0VBQ1QsSUFBSSxFQUFFLElBQUssR0FDWjs7QUFPRCxBQUdFLE9BSEssQ0FHTCxNQUFNO0FBRlIsQUFFRSxvQkFGa0IsQ0FBQyxTQUFTLENBRTVCLE1BQU0sQ0FBQztFQUNMLFVBQVUsRUFBRSxDQUFFO0VBQ2QsYUFBYSxFNUNwRVcsR0FBRyxDNENvRU0sTUFBTTtFQUN2QyxhQUFhLEU1Q3JFVyxHQUFHLEM0Q3FFTSxLQUFLLENBQUMsRUFBRTtFQUN6QyxPQUFPLEVBQUUsRUFBRyxHQUNiOztBQVJILEFBVUUsT0FWSyxDQVVMLGNBQWM7QUFUaEIsQUFTRSxvQkFUa0IsQ0FBQyxTQUFTLENBUzVCLGNBQWMsQ0FBQztFQUNiLEdBQUcsRUFBRSxJQUFLO0VBQ1YsTUFBTSxFQUFFLElBQUs7RUFDYixhQUFhLEVBQUUsR0FBSSxHQUNwQjs7QUFRSCxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7RUFDZixBQUNFLGFBRFcsQ0FDWCxjQUFjLENBQUM7SUFDYixLQUFLLEVBQUUsQ0FBRTtJQUFFLElBQUksRUFBRSxJQUFLLEdBQ3ZCO0VBSEgsQUFNRSxhQU5XLENBTVgsbUJBQW1CLENBQUM7SUFDbEIsSUFBSSxFQUFFLENBQUU7SUFBRSxLQUFLLEVBQUUsSUFBSyxHQUN2Qjs7QUNoTkwsQUFBQSxVQUFVO0FBQ1YsQUFBQSxtQkFBbUIsQ0FBQztFQUNsQixRQUFRLEVBQUUsUUFBUztFQUNuQixPQUFPLEVBQUUsWUFBYTtFQUN0QixjQUFjLEVBQUUsTUFBTyxHQVl4QjtFQWhCRCxBQUtJLFVBTE0sR0FLTixJQUFJO0VBSlIsQUFJSSxtQkFKZSxHQUlmLElBQUksQ0FBQztJQUNMLFFBQVEsRUFBRSxRQUFTO0lBQ25CLEtBQUssRUFBRSxJQUFLLEdBUWI7SUFmSCxBQUtJLFVBTE0sR0FLTixJQUFJLEFBSUgsTUFBTSxFQVRYLEFBS0ksVUFMTSxHQUtOLElBQUksQUFLSCxNQUFNLEVBVlgsQUFLSSxVQUxNLEdBS04sSUFBSSxBQU1ILE9BQU8sRUFYWixBQUtJLFVBTE0sR0FLTixJQUFJLEFBT0gsT0FBTztJQVhaLEFBSUksbUJBSmUsR0FJZixJQUFJLEFBSUgsTUFBTTtJQVJYLEFBSUksbUJBSmUsR0FJZixJQUFJLEFBS0gsTUFBTTtJQVRYLEFBSUksbUJBSmUsR0FJZixJQUFJLEFBTUgsT0FBTztJQVZaLEFBSUksbUJBSmUsR0FJZixJQUFJLEFBT0gsT0FBTyxDQUFDO01BQ1AsT0FBTyxFQUFFLENBQUUsR0FDWjs7QUFLTCxBQUNTLFVBREMsQ0FDUixJQUFJLEdBQUcsSUFBSTtBQURiLEFBRVMsVUFGQyxDQUVSLElBQUksR0FBRyxVQUFVO0FBRm5CLEFBR2UsVUFITCxDQUdSLFVBQVUsR0FBRyxJQUFJO0FBSG5CLEFBSWUsVUFKTCxDQUlSLFVBQVUsR0FBRyxVQUFVLENBQUM7RUFDdEIsV0FBVyxFQUFFLElBQUssR0FDbkI7O0FBSUgsQUFBQSxZQUFZLENBQUM7RUFDWCxXQUFXLEVBQUUsSUFBSyxHQWFuQjtFQWRELEFBQUEsWUFBWSxBakJyQlQsT0FBTyxFaUJxQlYsQUFBQSxZQUFZLEFqQnBCVCxNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsR0FBSTtJQUNiLE9BQU8sRUFBRSxLQUFNLEdBQ2hCO0VpQmlCSCxBQUFBLFlBQVksQWpCaEJULE1BQU0sQ0FBQztJQUNOLEtBQUssRUFBRSxJQUFLLEdBQ2I7RWlCY0gsQUFJRSxZQUpVLENBSVYsSUFBSTtFQUpOLEFBS0UsWUFMVSxDQUtWLFVBQVU7RUFMWixBQU1FLFlBTlUsQ0FNVixZQUFZLENBQUM7SUFDWCxLQUFLLEVBQUUsSUFBSyxHQUNiO0VBUkgsQUFTSSxZQVRRLEdBU1IsSUFBSTtFQVRSLEFBVUksWUFWUSxHQVVSLFVBQVU7RUFWZCxBQVdJLFlBWFEsR0FXUixZQUFZLENBQUM7SUFDYixXQUFXLEVBQUUsR0FBSSxHQUNsQjs7QUFHSCxBQUF5RSxVQUEvRCxHQUFHLElBQUksQUFBQSxJQUFLLENBQUEsQUFBQSxZQUFZLENBQUMsSUFBSyxDQUFBLEFBQUEsV0FBVyxDQUFDLElBQUssQ0FBQSxBQUFBLGdCQUFnQixFQUFFO0VBQ3pFLGFBQWEsRUFBRSxDQUFFLEdBQ2xCOztBQUdELEFBQWlCLFVBQVAsR0FBRyxJQUFJLEFBQUEsWUFBWSxDQUFDO0VBQzVCLFdBQVcsRUFBRSxDQUFFLEdBSWhCO0VBTEQsQUFBaUIsVUFBUCxHQUFHLElBQUksQUFBQSxZQUFZLEFBRTFCLElBQUssQ0FBQSxBQUFBLFdBQVcsQ0FBQyxJQUFLLENBQUEsQUFBQSxnQkFBZ0IsRUFBRTtJbkJsRHpDLDBCQUEwQixFbUJtREssQ0FBQztJbkJsRDdCLHVCQUF1QixFbUJrREssQ0FBQyxHQUMvQjs7QUFHSCxBQUE2QyxVQUFuQyxHQUFHLElBQUksQUFBQSxXQUFXLEFBQUEsSUFBSyxDQUFBLEFBQUEsWUFBWTtBQUM3QyxBQUE4QyxVQUFwQyxHQUFHLGdCQUFnQixBQUFBLElBQUssQ0FBQSxBQUFBLFlBQVksRUFBRTtFbkJoRDlDLHlCQUF5QixFbUJpREcsQ0FBQztFbkJoRDFCLHNCQUFzQixFbUJnREcsQ0FBQyxHQUM5Qjs7QUFHRCxBQUFhLFVBQUgsR0FBRyxVQUFVLENBQUM7RUFDdEIsS0FBSyxFQUFFLElBQUssR0FDYjs7QUFDRCxBQUE2RCxVQUFuRCxHQUFHLFVBQVUsQUFBQSxJQUFLLENBQUEsQUFBQSxZQUFZLENBQUMsSUFBSyxDQUFBLEFBQUEsV0FBVyxJQUFJLElBQUksQ0FBQztFQUNoRSxhQUFhLEVBQUUsQ0FBRSxHQUNsQjs7QUFDRCxBQUNRLFVBREUsR0FBRyxVQUFVLEFBQUEsWUFBWSxBQUFBLElBQUssQ0FBQSxBQUFBLFdBQVcsSUFDL0MsSUFBSSxBQUFBLFdBQVc7QUFEbkIsQUFFSSxVQUZNLEdBQUcsVUFBVSxBQUFBLFlBQVksQUFBQSxJQUFLLENBQUEsQUFBQSxXQUFXLElBRS9DLGdCQUFnQixDQUFDO0VuQnJFbkIsMEJBQTBCLEVtQnNFSyxDQUFDO0VuQnJFN0IsdUJBQXVCLEVtQnFFSyxDQUFDLEdBQy9COztBQUVILEFBQTJELFVBQWpELEdBQUcsVUFBVSxBQUFBLFdBQVcsQUFBQSxJQUFLLENBQUEsQUFBQSxZQUFZLElBQUksSUFBSSxBQUFBLFlBQVksQ0FBQztFbkJqRXRFLHlCQUF5QixFbUJrRUcsQ0FBQztFbkJqRTFCLHNCQUFzQixFbUJpRUcsQ0FBQyxHQUM5Qjs7QUFHRCxBQUEyQixVQUFqQixDQUFDLGdCQUFnQixBQUFBLE9BQU87QUFDbEMsQUFBZ0IsVUFBTixBQUFBLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztFQUMvQixPQUFPLEVBQUUsQ0FBRSxHQUNaOztBQWdCRCxBQUFvQixVQUFWLEdBQUcsSUFBSSxHQUFHLGdCQUFnQixDQUFDO0VBQ25DLFlBQVksRUFBRSxHQUFJO0VBQ2xCLGFBQWEsRUFBRSxHQUFJLEdBQ3BCOztBQUNELEFBQXVCLFVBQWIsR0FBRyxPQUFPLEdBQUcsZ0JBQWdCLEVBWHZDLEFBV3VCLGFBWFYsQUFXYixVQUFVLEdBWE0sSUFBSSxHQVdHLGdCQUFnQixDQUFDO0VBQ3RDLFlBQVksRUFBRSxJQUFLO0VBQ25CLGFBQWEsRUFBRSxJQUFLLEdBQ3JCOztBQUlELEFBQWdCLFVBQU4sQUFBQSxLQUFLLENBQUMsZ0JBQWdCLENBQUM7RTlCL0MvQixrQkFBa0IsRThCZ0RFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBSTtFOUIvQ2hDLFVBQVUsRThCK0NFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxvQkFBSSxHQU16QztFQVBELEFBQWdCLFVBQU4sQUFBQSxLQUFLLENBQUMsZ0JBQWdCLEFBSTdCLFNBQVMsQ0FBQztJOUJuRFgsa0JBQWtCLEU4Qm9ESSxJQUFJO0k5Qm5EbEIsVUFBVSxFOEJtREksSUFBSSxHQUN6Qjs7QUFLSCxBQUFLLElBQUQsQ0FBQyxNQUFNLENBQUM7RUFDVixXQUFXLEVBQUUsQ0FBRSxHQUNoQjs7QUFFRCxBQUFRLE9BQUQsQ0FBQyxNQUFNLEVBakNkLEFBaUNRLGFBakNLLEdBQUcsSUFBSSxDQWlDWixNQUFNLENBQUM7RUFDYixZQUFZLEU3Q1ZjLEdBQUcsQ0FBSCxHQUFHLEM2Q1V1QixDQUFDO0VBQ3JELG1CQUFtQixFQUFFLENBQUUsR0FDeEI7O0FBRUQsQUFBZ0IsT0FBVCxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQXRCLEFBQWdCLE9BQVQsQ0F0Q1AsYUFBYSxHQUFHLElBQUksQ0FzQ0osTUFBTSxDQUFDO0VBQ3JCLFlBQVksRUFBRSxDQUFDLEM3Q2ZXLEdBQUcsQ0FBSCxHQUFHLEc2Q2dCOUI7O0FBTUQsQUFDSSxtQkFEZSxHQUNmLElBQUk7QUFEUixBQUVJLG1CQUZlLEdBRWYsVUFBVTtBQUZkLEFBR2lCLG1CQUhFLEdBR2YsVUFBVSxHQUFHLElBQUksQ0FBQztFQUNsQixPQUFPLEVBQUUsS0FBTTtFQUNmLEtBQUssRUFBRSxJQUFLO0VBQ1osS0FBSyxFQUFFLElBQUs7RUFDWixTQUFTLEVBQUUsSUFBSyxHQUNqQjs7QUFSSCxBQVdJLG1CQVhlLEdBV2YsVUFBVSxBakI3SVgsT0FBTyxFaUJrSVYsQUFXSSxtQkFYZSxHQVdmLFVBQVUsQWpCNUlYLE1BQU0sQ0FBQztFQUNOLE9BQU8sRUFBRSxHQUFJO0VBQ2IsT0FBTyxFQUFFLEtBQU0sR0FDaEI7O0FpQjhISCxBQVdJLG1CQVhlLEdBV2YsVUFBVSxBakJ4SVgsTUFBTSxDQUFDO0VBQ04sS0FBSyxFQUFFLElBQUssR0FDYjs7QWlCMkhILEFBYU0sbUJBYmEsR0FXZixVQUFVLEdBRVIsSUFBSSxDQUFDO0VBQ0wsS0FBSyxFQUFFLElBQUssR0FDYjs7QUFmTCxBQWtCVyxtQkFsQlEsR0FrQmYsSUFBSSxHQUFHLElBQUk7QUFsQmYsQUFtQlcsbUJBbkJRLEdBbUJmLElBQUksR0FBRyxVQUFVO0FBbkJyQixBQW9CaUIsbUJBcEJFLEdBb0JmLFVBQVUsR0FBRyxJQUFJO0FBcEJyQixBQXFCaUIsbUJBckJFLEdBcUJmLFVBQVUsR0FBRyxVQUFVLENBQUM7RUFDeEIsVUFBVSxFQUFFLElBQUs7RUFDakIsV0FBVyxFQUFFLENBQUUsR0FDaEI7O0FBR0gsQUFBc0IsbUJBQUgsR0FBRyxJQUFJLEFBQ3ZCLElBQUssQ0FBQSxBQUFBLFlBQVksQ0FBQyxJQUFLLENBQUEsQUFBQSxXQUFXLEVBQUU7RUFDbkMsYUFBYSxFQUFFLENBQUUsR0FDbEI7O0FBSEgsQUFBc0IsbUJBQUgsR0FBRyxJQUFJLEFBSXZCLFlBQVksQUFBQSxJQUFLLENBQUEsQUFBQSxXQUFXLEVBQUU7RW5CM0svQix1QkFBdUIsRTFCMEdHLEdBQUc7RTBCekc1QixzQkFBc0IsRTFCeUdHLEdBQUc7RTBCbEc3QiwwQkFBMEIsRW1CcUtNLENBQUM7RW5CcEtoQyx5QkFBeUIsRW1Cb0tNLENBQUMsR0FDaEM7O0FBUEgsQUFBc0IsbUJBQUgsR0FBRyxJQUFJLEFBUXZCLFdBQVcsQUFBQSxJQUFLLENBQUEsQUFBQSxZQUFZLEVBQUU7RW5CL0svQix1QkFBdUIsRW1CZ0xNLENBQUM7RW5CL0s3QixzQkFBc0IsRW1CK0tNLENBQUM7RW5CeEs5QiwwQkFBMEIsRTFCa0dBLEdBQUc7RTBCakc1Qix5QkFBeUIsRTFCaUdBLEdBQUcsRzZDd0U1Qjs7QUFFSCxBQUFzRSxtQkFBbkQsR0FBRyxVQUFVLEFBQUEsSUFBSyxDQUFBLEFBQUEsWUFBWSxDQUFDLElBQUssQ0FBQSxBQUFBLFdBQVcsSUFBSSxJQUFJLENBQUM7RUFDekUsYUFBYSxFQUFFLENBQUUsR0FDbEI7O0FBQ0QsQUFDUSxtQkFEVyxHQUFHLFVBQVUsQUFBQSxZQUFZLEFBQUEsSUFBSyxDQUFBLEFBQUEsV0FBVyxJQUN4RCxJQUFJLEFBQUEsV0FBVztBQURuQixBQUVJLG1CQUZlLEdBQUcsVUFBVSxBQUFBLFlBQVksQUFBQSxJQUFLLENBQUEsQUFBQSxXQUFXLElBRXhELGdCQUFnQixDQUFDO0VuQmpMbkIsMEJBQTBCLEVtQmtMTSxDQUFDO0VuQmpMaEMseUJBQXlCLEVtQmlMTSxDQUFDLEdBQ2hDOztBQUVILEFBQW9FLG1CQUFqRCxHQUFHLFVBQVUsQUFBQSxXQUFXLEFBQUEsSUFBSyxDQUFBLEFBQUEsWUFBWSxJQUFJLElBQUksQUFBQSxZQUFZLENBQUM7RW5CN0wvRSx1QkFBdUIsRW1COExJLENBQUM7RW5CN0wzQixzQkFBc0IsRW1CNkxJLENBQUMsR0FDN0I7O0FBTUQsQUFBQSxvQkFBb0IsQ0FBQztFQUNuQixPQUFPLEVBQUUsS0FBTTtFQUNmLEtBQUssRUFBRSxJQUFLO0VBQ1osWUFBWSxFQUFFLEtBQU07RUFDcEIsZUFBZSxFQUFFLFFBQVMsR0FjM0I7RUFsQkQsQUFLSSxvQkFMZ0IsR0FLaEIsSUFBSTtFQUxSLEFBTUksb0JBTmdCLEdBTWhCLFVBQVUsQ0FBQztJQUNYLEtBQUssRUFBRSxJQUFLO0lBQ1osT0FBTyxFQUFFLFVBQVc7SUFDcEIsS0FBSyxFQUFFLEVBQUcsR0FDWDtFQVZILEFBV2Usb0JBWEssR0FXaEIsVUFBVSxDQUFDLElBQUksQ0FBQztJQUNoQixLQUFLLEVBQUUsSUFBSyxHQUNiO0VBYkgsQUFlZSxvQkFmSyxHQWVoQixVQUFVLENBQUMsY0FBYyxDQUFDO0lBQzFCLElBQUksRUFBRSxJQUFLLEdBQ1o7O0NBZ0JILEFBQUEsQUFHc0IsV0FIckIsQ0FBWSxTQUFTLEFBQXJCLElBQ0csSUFBSSxDQUVKLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxPQUFPLEFBQVo7Q0FIVixBQUFBLEFBSXlCLFdBSnhCLENBQVksU0FBUyxBQUFyQixJQUNHLElBQUksQ0FHSixLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssVUFBVSxBQUFmO0NBSlYsQUFBQSxBQUdzQixXQUhyQixDQUFZLFNBQVMsQUFBckIsSUFFRyxVQUFVLEdBQUcsSUFBSSxDQUNqQixLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssT0FBTyxBQUFaO0NBSFYsQUFBQSxBQUl5QixXQUp4QixDQUFZLFNBQVMsQUFBckIsSUFFRyxVQUFVLEdBQUcsSUFBSSxDQUVqQixLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssVUFBVSxBQUFmLEVBQWlCO0VBQ3JCLFFBQVEsRUFBRSxRQUFTO0VBQ25CLElBQUksRUFBRSxnQkFBSTtFQUNWLGNBQWMsRUFBRSxJQUFLLEdBQ3RCOztBQzNPTCxBQUFBLFlBQVksQ0FBQztFQUNYLFFBQVEsRUFBRSxRQUFTO0VBQ25CLE9BQU8sRUFBRSxLQUFNO0VBQ2YsZUFBZSxFQUFFLFFBQVMsR0EyQjNCO0VBOUJELEFBQUEsWUFBWSxDQU1ULEFBQUEsS0FBQyxFQUFPLE1BQU0sQUFBYixFQUFlO0lBQ2YsS0FBSyxFQUFFLElBQUs7SUFDWixZQUFZLEVBQUUsQ0FBRTtJQUNoQixhQUFhLEVBQUUsQ0FBRSxHQUNsQjtFQVZILEFBWUUsWUFaVSxDQVlWLGFBQWEsQ0FBQztJQUdaLFFBQVEsRUFBRSxRQUFTO0lBQ25CLE9BQU8sRUFBRSxDQUFFO0lBS1gsS0FBSyxFQUFFLElBQUs7SUFFWixLQUFLLEVBQUUsSUFBSztJQUNaLGFBQWEsRUFBRSxDQUFFLEdBS2xCO0lBN0JILEFBWUUsWUFaVSxDQVlWLGFBQWEsQUFjVixNQUFNLENBQUM7TUFDTixPQUFPLEVBQUUsQ0FBRSxHQUNaOztBQXVCTCxBQUFBLGtCQUFrQjtBQUNsQixBQUFBLGdCQUFnQjtBQUNoQixBQUFhLFlBQUQsQ0FBQyxhQUFhLENBQUM7RUFDekIsT0FBTyxFQUFFLFVBQVcsR0FLckI7RUFSRCxBQUFBLGtCQUFrQixBQUtmLElBQUssQ0FBQSxBQUFBLFlBQVksQ0FBQyxJQUFLLENBQUEsQUFBQSxXQUFXO0VBSnJDLEFBQUEsZ0JBQWdCLEFBSWIsSUFBSyxDQUFBLEFBQUEsWUFBWSxDQUFDLElBQUssQ0FBQSxBQUFBLFdBQVc7RUFIckMsQUFBYSxZQUFELENBQUMsYUFBYSxBQUd2QixJQUFLLENBQUEsQUFBQSxZQUFZLENBQUMsSUFBSyxDQUFBLEFBQUEsV0FBVyxFQUFFO0lBQ25DLGFBQWEsRUFBRSxDQUFFLEdBQ2xCOztBQUdILEFBQUEsa0JBQWtCO0FBQ2xCLEFBQUEsZ0JBQWdCLENBQUM7RUFDZixLQUFLLEVBQUUsRUFBRztFQUNWLFdBQVcsRUFBRSxNQUFPO0VBQ3BCLGNBQWMsRUFBRSxNQUFPLEdBQ3hCOztBQUlELEFBQUEsa0JBQWtCLENBQUM7RUFDakIsT0FBTyxFOUNpQm1CLEdBQUcsQ0FDSCxJQUFJO0U4Q2pCOUIsU0FBUyxFOUMzQmUsSUFBSTtFOEM0QjVCLFdBQVcsRUFBRSxNQUFPO0VBQ3BCLFdBQVcsRUFBRSxDQUFFO0VBQ2YsS0FBSyxFOUNwRWtCLE9BQU87RThDcUU5QixVQUFVLEVBQUUsTUFBTztFQUNuQixnQkFBZ0IsRTlDcEVPLE9BQU87RThDcUU5QixNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQzlDK0djLElBQUk7RThDOUduQyxhQUFhLEU5Q3dCYSxHQUFHLEc4Q0w5QjtFQTVCRCxBQUFBLGtCQUFrQixBQVlmLFNBQVM7RUF2Q1osQUEyQkEsZUEzQmUsR0EyQmYsa0JBQWtCO0VBMUJsQixBQTBCQSxlQTFCZSxHQUFHLGdCQUFnQixHQTBCbEMsa0JBQWtCLEFBMUJtQixJQUFJLENBc0M1QjtJQUNULE9BQU8sRTlDV2lCLEdBQUcsQ0FDSCxJQUFJO0k4Q1g1QixTQUFTLEU5Q3JDYSxJQUFJO0k4Q3NDMUIsYUFBYSxFOUNvQlcsR0FBRyxHOENuQjVCO0VBaEJILEFBQUEsa0JBQWtCLEFBaUJmLFNBQVM7RUFqRFosQUFnQ0EsZUFoQ2UsR0FnQ2Ysa0JBQWtCO0VBL0JsQixBQStCQSxlQS9CZSxHQUFHLGdCQUFnQixHQStCbEMsa0JBQWtCLEFBL0JtQixJQUFJLENBZ0Q1QjtJQUNULE9BQU8sRTlDR2lCLElBQUksQ0FDSixJQUFJO0k4Q0g1QixTQUFTLEU5QzNDYSxJQUFJO0k4QzRDMUIsYUFBYSxFOUNjVyxHQUFHLEc4Q2I1QjtFQXJCSCxBQXdCb0Isa0JBeEJGLENBd0JoQixLQUFLLENBQUEsQUFBQSxJQUFDLENBQUssT0FBTyxBQUFaO0VBeEJSLEFBeUJ1QixrQkF6QkwsQ0F5QmhCLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBSyxVQUFVLEFBQWYsRUFBaUI7SUFDckIsVUFBVSxFQUFFLENBQUUsR0FDZjs7QUFJSCxBQUEwQixZQUFkLENBQUMsYUFBYSxBQUFBLFlBQVk7QUFDdEMsQUFBa0Isa0JBQUEsQUFBQSxZQUFZO0FBQzlCLEFBQStCLGdCQUFmLEFBQUEsWUFBWSxHQUFHLElBQUk7QUFDbkMsQUFBNEMsZ0JBQTVCLEFBQUEsWUFBWSxHQUFHLFVBQVUsR0FBRyxJQUFJO0FBQ2hELEFBQStCLGdCQUFmLEFBQUEsWUFBWSxHQUFHLGdCQUFnQjtBQUMvQyxBQUF3RSxnQkFBeEQsQUFBQSxXQUFXLEdBQUcsSUFBSSxBQUFBLElBQUssQ0FBQSxBQUFBLFdBQVcsQ0FBQyxJQUFLLENBQUEsQUFBQSxnQkFBZ0I7QUFDeEUsQUFBNEQsZ0JBQTVDLEFBQUEsV0FBVyxHQUFHLFVBQVUsQUFBQSxJQUFLLENBQUEsQUFBQSxXQUFXLElBQUksSUFBSSxDQUFDO0VwQjFHL0QsMEJBQTBCLEVvQjJHRyxDQUFDO0VwQjFHM0IsdUJBQXVCLEVvQjBHRyxDQUFDLEdBQy9COztBQUNELEFBQWtCLGtCQUFBLEFBQUEsWUFBWSxDQUFDO0VBQzdCLFlBQVksRUFBRSxDQUFFLEdBQ2pCOztBQUNELEFBQTBCLFlBQWQsQ0FBQyxhQUFhLEFBQUEsV0FBVztBQUNyQyxBQUFrQixrQkFBQSxBQUFBLFdBQVc7QUFDN0IsQUFBOEIsZ0JBQWQsQUFBQSxXQUFXLEdBQUcsSUFBSTtBQUNsQyxBQUEyQyxnQkFBM0IsQUFBQSxXQUFXLEdBQUcsVUFBVSxHQUFHLElBQUk7QUFDL0MsQUFBOEIsZ0JBQWQsQUFBQSxXQUFXLEdBQUcsZ0JBQWdCO0FBQzlDLEFBQW9ELGdCQUFwQyxBQUFBLFlBQVksR0FBRyxJQUFJLEFBQUEsSUFBSyxDQUFBLEFBQUEsWUFBWTtBQUNwRCxBQUE4RCxnQkFBOUMsQUFBQSxZQUFZLEdBQUcsVUFBVSxBQUFBLElBQUssQ0FBQSxBQUFBLFlBQVksSUFBSSxJQUFJLENBQUM7RXBCOUdqRSx5QkFBeUIsRW9CK0dHLENBQUM7RXBCOUcxQixzQkFBc0IsRW9COEdHLENBQUMsR0FDOUI7O0FBQ0QsQUFBa0Isa0JBQUEsQUFBQSxXQUFXLENBQUM7RUFDNUIsV0FBVyxFQUFFLENBQUUsR0FDaEI7O0FBSUQsQUFBQSxnQkFBZ0IsQ0FBQztFQUNmLFFBQVEsRUFBRSxRQUFTO0VBR25CLFNBQVMsRUFBRSxDQUFFO0VBQ2IsV0FBVyxFQUFFLE1BQU8sR0ErQnJCO0VBcENELEFBU0ksZ0JBVFksR0FTWixJQUFJLENBQUM7SUFDTCxRQUFRLEVBQUUsUUFBUyxHQVVwQjtJQXBCSCxBQVdNLGdCQVhVLEdBU1osSUFBSSxHQUVGLElBQUksQ0FBQztNQUNMLFdBQVcsRUFBRSxJQUFLLEdBQ25CO0lBYkwsQUFTSSxnQkFUWSxHQVNaLElBQUksQUFNSCxNQUFNLEVBZlgsQUFTSSxnQkFUWSxHQVNaLElBQUksQUFPSCxNQUFNLEVBaEJYLEFBU0ksZ0JBVFksR0FTWixJQUFJLEFBUUgsT0FBTyxDQUFDO01BQ1AsT0FBTyxFQUFFLENBQUUsR0FDWjtFQW5CTCxBQXdCTSxnQkF4QlUsQUF1QmIsWUFBWSxHQUNULElBQUk7RUF4QlYsQUF5Qk0sZ0JBekJVLEFBdUJiLFlBQVksR0FFVCxVQUFVLENBQUM7SUFDWCxZQUFZLEVBQUUsSUFBSyxHQUNwQjtFQTNCTCxBQThCTSxnQkE5QlUsQUE2QmIsV0FBVyxHQUNSLElBQUk7RUE5QlYsQUErQk0sZ0JBL0JVLEFBNkJiLFdBQVcsR0FFUixVQUFVLENBQUM7SUFDWCxPQUFPLEVBQUUsQ0FBRTtJQUNYLFdBQVcsRUFBRSxJQUFLLEdBQ25COztBQ2hLTCxBQUFBLElBQUksQ0FBQztFQUNILGFBQWEsRUFBRSxDQUFFO0VBQ2pCLFlBQVksRUFBRSxDQUFFO0VBQ2hCLFVBQVUsRUFBRSxJQUFLLEdBeURsQjtFQTVERCxBQUFBLElBQUksQW5CS0QsT0FBTyxFbUJMVixBQUFBLElBQUksQW5CTUQsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLEdBQUk7SUFDYixPQUFPLEVBQUUsS0FBTSxHQUNoQjtFbUJUSCxBQUFBLElBQUksQW5CVUQsTUFBTSxDQUFDO0lBQ04sS0FBSyxFQUFFLElBQUssR0FDYjtFbUJaSCxBQU1JLElBTkEsR0FNQSxFQUFFLENBQUM7SUFDSCxRQUFRLEVBQUUsUUFBUztJQUNuQixPQUFPLEVBQUUsS0FBTSxHQXlCaEI7SUFqQ0gsQUFVTSxJQVZGLEdBTUEsRUFBRSxHQUlBLENBQUMsQ0FBQztNQUNGLFFBQVEsRUFBRSxRQUFTO01BQ25CLE9BQU8sRUFBRSxLQUFNO01BQ2YsT0FBTyxFL0NxWitCLElBQUksQ0FBQyxJQUFJLEcrQy9ZaEQ7TUFuQkwsQUFVTSxJQVZGLEdBTUEsRUFBRSxHQUlBLENBQUMsQUFJQSxNQUFNLEVBZGIsQUFVTSxJQVZGLEdBTUEsRUFBRSxHQUlBLENBQUMsQUFLQSxNQUFNLENBQUM7UUFDTixlQUFlLEVBQUUsSUFBSztRQUN0QixnQkFBZ0IsRS9DVkMsT0FBTyxHK0NXekI7SUFsQlAsQUFzQmlCLElBdEJiLEdBTUEsRUFBRSxBQWdCRCxTQUFTLEdBQUcsQ0FBQyxDQUFDO01BQ2IsS0FBSyxFL0NqQmMsT0FBTyxHK0MwQjNCO01BaENMLEFBc0JpQixJQXRCYixHQU1BLEVBQUUsQUFnQkQsU0FBUyxHQUFHLENBQUMsQUFHWCxNQUFNLEVBekJiLEFBc0JpQixJQXRCYixHQU1BLEVBQUUsQUFnQkQsU0FBUyxHQUFHLENBQUMsQUFJWCxNQUFNLENBQUM7UUFDTixLQUFLLEUvQ3JCWSxPQUFPO1ErQ3NCeEIsZUFBZSxFQUFFLElBQUs7UUFDdEIsZ0JBQWdCLEVBQUUsV0FBWTtRQUM5QixNQUFNLEUvQ2lNbUIsV0FBVyxHK0NoTXJDO0VBL0JQLEFBb0NVLElBcENOLENBb0NGLEtBQUssR0FBRyxDQUFDLEVBcENYLEFBb0NVLElBcENOLENBb0NGLEtBQUssR0FBRyxDQUFDLEFBRU4sTUFBTSxFQXRDWCxBQW9DVSxJQXBDTixDQW9DRixLQUFLLEdBQUcsQ0FBQyxBQUdOLE1BQU0sQ0FBQztJQUNOLGdCQUFnQixFL0NqQ0csT0FBTztJK0NrQzFCLFlBQVksRS9DaENNLE9BQU0sRytDaUN6QjtFQTFDTCxBQWtERSxJQWxERSxDQWtERixZQUFZLENBQUM7STFCckRiLE1BQU0sRUFBRSxHQUFJO0lBQ1osTUFBTSxFQUFJLEdBQXFCLENBQVcsQ0FBQztJQUMzQyxRQUFRLEVBQUUsTUFBTztJQUNqQixnQkFBZ0IsRUFKUyxPQUFPLEcwQndEL0I7RUFwREgsQUF5RGEsSUF6RFQsR0F5REEsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixTQUFTLEVBQUUsSUFBSyxHQUNqQjs7QUFRSCxBQUFBLFNBQVMsQ0FBQztFQUNSLGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDL0NxV2tCLElBQUksRytDbFUvQztFQXBDRCxBQUVJLFNBRkssR0FFTCxFQUFFLENBQUM7SUFDSCxLQUFLLEVBQUUsSUFBSztJQUVaLGFBQWEsRUFBRSxJQUFLLEdBeUJyQjtJQTlCSCxBQVFNLFNBUkcsR0FFTCxFQUFFLEdBTUEsQ0FBQyxDQUFDO01BQ0YsWUFBWSxFQUFFLEdBQUk7TUFDbEIsV0FBVyxFL0N0QlMsT0FBVztNK0N1Qi9CLE1BQU0sRUFBRSxxQkFBc0I7TUFDOUIsYUFBYSxFL0NzQlMsR0FBRyxDQUFILEdBQUcsQytDdEI4QixDQUFDLENBQUMsQ0FBQyxHQUkzRDtNQWhCTCxBQVFNLFNBUkcsR0FFTCxFQUFFLEdBTUEsQ0FBQyxBQUtBLE1BQU0sQ0FBQztRQUNOLFlBQVksRS9DMUVLLE9BQU8sQ0FBUCxPQUFPLENBa2FZLElBQUksRytDdlZ6QztJQWZQLEFBbUJlLFNBbkJOLEdBRUwsRUFBRSxBQWlCRCxPQUFPLEdBQUcsQ0FBQyxFQW5CaEIsQUFtQmUsU0FuQk4sR0FFTCxFQUFFLEFBaUJELE9BQU8sR0FBRyxDQUFDLEFBRVQsTUFBTSxFQXJCYixBQW1CZSxTQW5CTixHQUVMLEVBQUUsQUFpQkQsT0FBTyxHQUFHLENBQUMsQUFHVCxNQUFNLENBQUM7TUFDTixLQUFLLEUvQ3JGWSxPQUFPO00rQ3NGeEIsZ0JBQWdCLEUvQ3RFQSxJQUFJO00rQ3VFcEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEMvQ21WbUIsSUFBSTtNK0NsVnhDLG1CQUFtQixFQUFFLFdBQVk7TUFDakMsTUFBTSxFQUFFLE9BQVEsR0FDakI7O0FBYVAsQUFDSSxVQURNLEdBQ04sRUFBRSxDQUFDO0VBQ0gsS0FBSyxFQUFFLElBQUssR0FtQmI7RUFyQkgsQUFLTSxVQUxJLEdBQ04sRUFBRSxHQUlBLENBQUMsQ0FBQztJQUNGLGFBQWEsRS9DYlMsR0FBRyxHK0NjMUI7RUFQTCxBQVFNLFVBUkksR0FDTixFQUFFLEdBT0EsRUFBRSxDQUFDO0lBQ0gsV0FBVyxFQUFFLEdBQUksR0FDbEI7RUFWTCxBQWFlLFVBYkwsR0FDTixFQUFFLEFBWUQsT0FBTyxHQUFHLENBQUMsRUFiaEIsQUFhZSxVQWJMLEdBQ04sRUFBRSxBQVlELE9BQU8sR0FBRyxDQUFDLEFBRVQsTUFBTSxFQWZiLEFBYWUsVUFiTCxHQUNOLEVBQUUsQUFZRCxPQUFPLEdBQUcsQ0FBQyxBQUdULE1BQU0sQ0FBQztJQUNOLEtBQUssRS9DbkJlLElBQUk7SStDb0J4QixnQkFBZ0IsRS9DckhBLE9BQU0sRytDc0h2Qjs7QUFPUCxBQUNJLFlBRFEsR0FDUixFQUFFLENBQUM7RUFDSCxLQUFLLEVBQUUsSUFBSyxHQUtiO0VBUEgsQUFHTSxZQUhNLEdBQ1IsRUFBRSxHQUVBLEVBQUUsQ0FBQztJQUNILFVBQVUsRUFBRSxHQUFJO0lBQ2hCLFdBQVcsRUFBRSxDQUFFLEdBQ2hCOztBQVdMLEFBQUEsY0FBYyxFQXBGZCxBQW9GQSxTQXBGUyxBQWdDTixjQUFjLENBb0RGO0VBQ2IsS0FBSyxFQUFFLElBQUssR0F3QmI7RUF6QkQsQUFHSSxjQUhVLEdBR1YsRUFBRSxFQXZGTixBQXVGSSxTQXZGSyxBQWdDTixjQUFjLEdBdURiLEVBQUUsQ0FBQztJQUNILEtBQUssRUFBRSxJQUFLLEdBS2I7SUFUSCxBQUtNLGNBTFEsR0FHVixFQUFFLEdBRUEsQ0FBQyxFQXpGUCxBQXlGTSxTQXpGRyxBQWdDTixjQUFjLEdBdURiLEVBQUUsR0FFQSxDQUFDLENBQUM7TUFDRixVQUFVLEVBQUUsTUFBTztNQUNuQixhQUFhLEVBQUUsR0FBSSxHQUNwQjtFQVJMLEFBV2MsY0FYQSxHQVdWLFNBQVMsQ0FBQyxjQUFjLENBQUM7SUFDekIsR0FBRyxFQUFFLElBQUs7SUFDVixJQUFJLEVBQUUsSUFBSyxHQUNaO0VBRUQsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0lBaEJuQixBQWlCTSxjQWpCUSxHQWlCUixFQUFFLEVBckdSLEFBcUdNLFNBckdHLEFBZ0NOLGNBQWMsR0FxRVgsRUFBRSxDQUFDO01BQ0gsT0FBTyxFQUFFLFVBQVc7TUFDcEIsS0FBSyxFQUFFLEVBQUcsR0FJWDtNQXZCTCxBQW9CUSxjQXBCTSxHQWlCUixFQUFFLEdBR0EsQ0FBQyxFQXhHVCxBQXdHUSxTQXhHQyxBQWdDTixjQUFjLEdBcUVYLEVBQUUsR0FHQSxDQUFDLENBQUM7UUFDRixhQUFhLEVBQUUsQ0FBRSxHQUNsQjs7QUFRUCxBQUFBLG1CQUFtQixFQWxIbkIsQUFrSEEsU0FsSFMsQUFnQ04sY0FBYyxDQWtGRztFQUNsQixhQUFhLEVBQUUsQ0FBRSxHQXlCbEI7RUExQkQsQUFHUyxtQkFIVSxHQUdmLEVBQUUsR0FBRyxDQUFDLEVBckhWLEFBcUhTLFNBckhBLEFBZ0NOLGNBQWMsR0FxRmIsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVQLFlBQVksRUFBRSxDQUFFO0lBQ2hCLGFBQWEsRS9DdEZXLEdBQUcsRytDdUY1QjtFQVBILEFBU2MsbUJBVEssR0FTZixPQUFPLEdBQUcsQ0FBQyxFQTNIZixBQTJIYyxTQTNITCxBQWdDTixjQUFjLEdBMkZiLE9BQU8sR0FBRyxDQUFDO0VBVGYsQUFVZSxtQkFWSSxHQVVmLE9BQU8sR0FBRyxDQUFDLEFBQUEsTUFBTSxFQTVIckIsQUE0SGUsU0E1SE4sQUFnQ04sY0FBYyxHQTRGYixPQUFPLEdBQUcsQ0FBQyxBQUFBLE1BQU07RUFWckIsQUFXZSxtQkFYSSxHQVdmLE9BQU8sR0FBRyxDQUFDLEFBQUEsTUFBTSxFQTdIckIsQUE2SGUsU0E3SE4sQUFnQ04sY0FBYyxHQTZGYixPQUFPLEdBQUcsQ0FBQyxBQUFBLE1BQU0sQ0FBQztJQUNsQixNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQy9DZ1A2QixJQUFJLEcrQy9PbkQ7RUFFRCxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7SUFmbkIsQUFnQlcsbUJBaEJRLEdBZ0JiLEVBQUUsR0FBRyxDQUFDLEVBbElaLEFBa0lXLFNBbElGLEFBZ0NOLGNBQWMsR0FrR1gsRUFBRSxHQUFHLENBQUMsQ0FBQztNQUNQLGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDL0MyT29CLElBQUk7TStDMU9oRCxhQUFhLEUvQ2xHUyxHQUFHLENBQUgsR0FBRyxDK0NrRzhCLENBQUMsQ0FBQyxDQUFDLEdBQzNEO0lBbkJMLEFBb0JnQixtQkFwQkcsR0FvQmIsT0FBTyxHQUFHLENBQUMsRUF0SWpCLEFBc0lnQixTQXRJUCxBQWdDTixjQUFjLEdBc0dYLE9BQU8sR0FBRyxDQUFDO0lBcEJqQixBQXFCaUIsbUJBckJFLEdBcUJiLE9BQU8sR0FBRyxDQUFDLEFBQUEsTUFBTSxFQXZJdkIsQUF1SWlCLFNBdklSLEFBZ0NOLGNBQWMsR0F1R1gsT0FBTyxHQUFHLENBQUMsQUFBQSxNQUFNO0lBckJ2QixBQXNCaUIsbUJBdEJFLEdBc0JiLE9BQU8sR0FBRyxDQUFDLEFBQUEsTUFBTSxFQXhJdkIsQUF3SWlCLFNBeElSLEFBZ0NOLGNBQWMsR0F3R1gsT0FBTyxHQUFHLENBQUMsQUFBQSxNQUFNLENBQUM7TUFDbEIsbUJBQW1CLEUvQ3ZMRCxJQUFJLEcrQ3dMdkI7O0FBU0wsQUFDSSxZQURRLEdBQ1IsU0FBUyxDQUFDO0VBQ1YsT0FBTyxFQUFFLElBQUssR0FDZjs7QUFISCxBQUlJLFlBSlEsR0FJUixPQUFPLENBQUM7RUFDUixPQUFPLEVBQUUsS0FBTSxHQUNoQjs7QUFRSCxBQUFVLFNBQUQsQ0FBQyxjQUFjLENBQUM7RUFFdkIsVUFBVSxFQUFFLElBQUs7RXJCM09qQix1QkFBdUIsRXFCNk9JLENBQUM7RXJCNU8zQixzQkFBc0IsRXFCNE9JLENBQUMsR0FDN0I7O0FDdk9ELEFBQUEsT0FBTyxDQUFDO0VBQ04sUUFBUSxFQUFFLFFBQVM7RUFDbkIsVUFBVSxFaERnV3VCLElBQUk7RWdEL1ZyQyxhQUFhLEVoRG9EVyxJQUFLO0VnRG5EN0IsTUFBTSxFQUFFLHFCQUFzQixHQVEvQjtFQVpELEFBQUEsT0FBTyxBcEJHSixPQUFPLEVvQkhWLEFBQUEsT0FBTyxBcEJJSixNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsR0FBSTtJQUNiLE9BQU8sRUFBRSxLQUFNLEdBQ2hCO0VvQlBILEFBQUEsT0FBTyxBcEJRSixNQUFNLENBQUM7SUFDTixLQUFLLEVBQUUsSUFBSyxHQUNiO0VvQkRELE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztJQVRuQixBQUFBLE9BQU8sQ0FBQztNQVVKLGFBQWEsRWhEeUZXLEdBQUcsR2dEdkY5Qjs7QUFRRCxBQUFBLGNBQWMsQXBCakJYLE9BQU8sRW9CaUJWLEFBQUEsY0FBYyxBcEJoQlgsTUFBTSxDQUFDO0VBQ04sT0FBTyxFQUFFLEdBQUk7RUFDYixPQUFPLEVBQUUsS0FBTSxHQUNoQjs7QW9CYUgsQUFBQSxjQUFjLEFwQlpYLE1BQU0sQ0FBQztFQUNOLEtBQUssRUFBRSxJQUFLLEdBQ2I7O0FvQmFELE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztFQUhuQixBQUFBLGNBQWMsQ0FBQztJQUlYLEtBQUssRUFBRSxJQUFLLEdBRWY7O0FBYUQsQUFBQSxnQkFBZ0IsQ0FBQztFQUNmLFVBQVUsRUFBRSxPQUFRO0VBQ3BCLGFBQWEsRWhENFRvQixJQUFLO0VnRDNUdEMsWUFBWSxFaEQyVHFCLElBQUs7RWdEMVR0QyxVQUFVLEVBQUUscUJBQXNCO0VBQ2xDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0JBQUk7RUFFOUIsMEJBQTBCLEVBQUUsS0FBTSxHQStCbkM7RUF0Q0QsQUFBQSxnQkFBZ0IsQXBCcENiLE9BQU8sRW9Cb0NWLEFBQUEsZ0JBQWdCLEFwQm5DYixNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsR0FBSTtJQUNiLE9BQU8sRUFBRSxLQUFNLEdBQ2hCO0VvQmdDSCxBQUFBLGdCQUFnQixBcEIvQmIsTUFBTSxDQUFDO0lBQ04sS0FBSyxFQUFFLElBQUssR0FDYjtFb0I2QkgsQUFBQSxnQkFBZ0IsQUFTYixHQUFHLENBQUM7SUFDSCxVQUFVLEVBQUUsSUFBSyxHQUNsQjtFQUVELE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztJQWJuQixBQUFBLGdCQUFnQixDQUFDO01BY2IsS0FBSyxFQUFFLElBQUs7TUFDWixVQUFVLEVBQUUsQ0FBRTtNQUNkLFVBQVUsRUFBRSxJQUFLLEdBc0JwQjtNQXRDRCxBQUFBLGdCQUFnQixBQWtCWCxTQUFTLENBQUM7UUFDVCxPQUFPLEVBQUUsZ0JBQWlCO1FBQzFCLE1BQU0sRUFBRSxlQUFnQjtRQUN4QixjQUFjLEVBQUUsQ0FBRTtRQUNsQixRQUFRLEVBQUUsa0JBQW1CLEdBQzlCO01BdkJMLEFBQUEsZ0JBQWdCLEFBeUJYLEdBQUcsQ0FBQztRQUNILFVBQVUsRUFBRSxPQUFRLEdBQ3JCO01BSUQsQUEvQkosaUJBK0JxQixDQS9CckIsZ0JBQWdCO01BZ0NaLEFBaENKLGtCQWdDc0IsQ0FoQ3RCLGdCQUFnQjtNQWlDWixBQWpDSixvQkFpQ3dCLENBakN4QixnQkFBZ0IsQ0FpQ1c7UUFDckIsWUFBWSxFQUFFLENBQUU7UUFDaEIsYUFBYSxFQUFFLENBQUUsR0FDbEI7O0FBSUwsQUFFRSxpQkFGZSxDQUVmLGdCQUFnQjtBQURsQixBQUNFLG9CQURrQixDQUNsQixnQkFBZ0IsQ0FBQztFQUNmLFVBQVUsRWhEcVJxQixLQUFLLEdnRGhSckM7RUFIQyxNQUFNLEVBQUwsZ0JBQWdCLEVBQUUsS0FBSyxPQUFPLFdBQVcsRUFBRSxTQUFTO0lBTHpELEFBRUUsaUJBRmUsQ0FFZixnQkFBZ0I7SUFEbEIsQUFDRSxvQkFEa0IsQ0FDbEIsZ0JBQWdCLENBQUM7TUFJYixVQUFVLEVBQUUsS0FBTSxHQUVyQjs7QUFRSCxBQUVJLFVBRk0sR0FFTixjQUFjO0FBRmxCLEFBR0ksVUFITSxHQUdOLGdCQUFnQjtBQUZwQixBQUNJLGdCQURZLEdBQ1osY0FBYztBQURsQixBQUVJLGdCQUZZLEdBRVosZ0JBQWdCLENBQUM7RUFDakIsWUFBWSxFaERrUW1CLEtBQUs7RWdEalFwQyxXQUFXLEVoRGlRb0IsS0FBSyxHZ0QzUHJDO0VBSkMsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0lBUHJCLEFBRUksVUFGTSxHQUVOLGNBQWM7SUFGbEIsQUFHSSxVQUhNLEdBR04sZ0JBQWdCO0lBRnBCLEFBQ0ksZ0JBRFksR0FDWixjQUFjO0lBRGxCLEFBRUksZ0JBRlksR0FFWixnQkFBZ0IsQ0FBQztNQUtmLFlBQVksRUFBRSxDQUFFO01BQ2hCLFdBQVcsRUFBRyxDQUFFLEdBRW5COztBQVdILEFBQUEsa0JBQWtCLENBQUM7RUFDakIsT0FBTyxFaERvSmtCLElBQUk7RWdEbko3QixZQUFZLEVBQUUsT0FBUSxHQUt2QjtFQUhDLE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztJQUpuQixBQUFBLGtCQUFrQixDQUFDO01BS2YsYUFBYSxFQUFFLENBQUUsR0FFcEI7O0FBR0QsQUFBQSxpQkFBaUI7QUFDakIsQUFBQSxvQkFBb0IsQ0FBQztFQUNuQixRQUFRLEVBQUUsS0FBTTtFQUNoQixLQUFLLEVBQUUsQ0FBRTtFQUNULElBQUksRUFBRSxDQUFFO0VBQ1IsT0FBTyxFaEQwSWtCLElBQUksR2dEcEk5QjtFQUhDLE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztJQVJuQixBQUFBLGlCQUFpQjtJQUNqQixBQUFBLG9CQUFvQixDQUFDO01BUWpCLGFBQWEsRUFBRSxDQUFFLEdBRXBCOztBQUNELEFBQUEsaUJBQWlCLENBQUM7RUFDaEIsR0FBRyxFQUFFLENBQUU7RUFDUCxZQUFZLEVBQUUsT0FBUSxHQUN2Qjs7QUFDRCxBQUFBLG9CQUFvQixDQUFDO0VBQ25CLE1BQU0sRUFBRSxDQUFFO0VBQ1YsYUFBYSxFQUFFLENBQUU7RUFDakIsWUFBWSxFQUFFLE9BQVEsR0FDdkI7O0FBS0QsQUFBQSxhQUFhLENBQUM7RUFDWixLQUFLLEVBQUUsSUFBSztFQUNaLE9BQU8sRWhENE00QixJQUFjLENBRGhCLElBQUs7RWdEMU10QyxTQUFTLEVoRGpIZSxJQUFJO0VnRGtINUIsV0FBVyxFaERyR2EsSUFBSztFZ0RzRzdCLE1BQU0sRWhEcU0yQixJQUFJLEdnRHBMdEM7RUF0QkQsQUFBQSxhQUFhLEFBT1YsTUFBTSxFQVBULEFBQUEsYUFBYSxBQVFWLE1BQU0sQ0FBQztJQUNOLGVBQWUsRUFBRSxJQUFLLEdBQ3ZCO0VBVkgsQUFZSSxhQVpTLEdBWVQsR0FBRyxDQUFDO0lBQ0osT0FBTyxFQUFFLEtBQU0sR0FDaEI7RUFFRCxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7SUFDZixBQWpCSixPQWlCVyxHQUFHLFVBQVUsQ0FqQnhCLGFBQWE7SUFrQlQsQUFsQkosT0FrQlcsR0FBRyxnQkFBZ0IsQ0FsQjlCLGFBQWEsQ0FrQm9CO01BQzNCLFdBQVcsRWhEMExrQixLQUFLLEdnRHpMbkM7O0FBVUwsQUFBQSxjQUFjLENBQUM7RUFDYixRQUFRLEVBQUUsUUFBUztFQUNuQixLQUFLLEVBQUUsS0FBTTtFQUNiLFlBQVksRWhENEtxQixJQUFLO0VnRDNLdEMsT0FBTyxFQUFFLFFBQVM7RWxCOUxsQixVQUFVLEVBQUksR0FBYztFQUM1QixhQUFhLEVBQUksR0FBYztFa0IrTC9CLGdCQUFnQixFQUFFLFdBQVk7RUFDOUIsZ0JBQWdCLEVBQUUsSUFBSztFQUN2QixNQUFNLEVBQUUscUJBQXNCO0VBQzlCLGFBQWEsRWhENUZhLEdBQUcsR2dEa0g5QjtFQS9CRCxBQUFBLGNBQWMsQUFhWCxNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsQ0FBRSxHQUNaO0VBZkgsQUFrQkUsY0FsQlksQ0FrQlosU0FBUyxDQUFDO0lBQ1IsT0FBTyxFQUFFLEtBQU07SUFDZixLQUFLLEVBQUUsSUFBSztJQUNaLE1BQU0sRUFBRSxHQUFJO0lBQ1osYUFBYSxFQUFFLEdBQUksR0FDcEI7RUF2QkgsQUF3QmMsY0F4QkEsQ0F3QlosU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUNwQixVQUFVLEVBQUUsR0FBSSxHQUNqQjtFQUVELE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztJQTVCbkIsQUFBQSxjQUFjLENBQUM7TUE2QlgsT0FBTyxFQUFFLElBQUssR0FFakI7O0FBUUQsQUFBQSxXQUFXLENBQUM7RUFDVixNQUFNLEVBQUcsS0FBd0IsQ2hEdUlBLEtBQUssR2dEMUZ2QztFQTlDRCxBQUdTLFdBSEUsR0FHUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsV0FBVyxFQUFLLElBQUs7SUFDckIsY0FBYyxFQUFFLElBQUs7SUFDckIsV0FBVyxFaEQ1S1csSUFBSyxHZ0Q2SzVCO0VBRUQsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0lBVG5CLEFBV1UsV0FYQyxDQVdQLEtBQUssQ0FBQyxjQUFjLENBQUM7TUFDbkIsUUFBUSxFQUFFLE1BQU87TUFDakIsS0FBSyxFQUFFLElBQUs7TUFDWixLQUFLLEVBQUUsSUFBSztNQUNaLFVBQVUsRUFBRSxDQUFFO01BQ2QsZ0JBQWdCLEVBQUUsV0FBWTtNQUM5QixNQUFNLEVBQUUsQ0FBRTtNQUNWLFVBQVUsRUFBRSxJQUFLLEdBWWxCO01BOUJMLEFBbUJhLFdBbkJGLENBV1AsS0FBSyxDQUFDLGNBQWMsR0FRaEIsRUFBRSxHQUFHLENBQUM7TUFuQmQsQUFvQk0sV0FwQkssQ0FXUCxLQUFLLENBQUMsY0FBYyxDQVNsQixnQkFBZ0IsQ0FBQztRQUNmLE9BQU8sRUFBRSxpQkFBa0IsR0FDNUI7TUF0QlAsQUF1QmEsV0F2QkYsQ0FXUCxLQUFLLENBQUMsY0FBYyxHQVloQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1AsV0FBVyxFaEQ5TE8sSUFBSyxHZ0RtTXhCO1FBN0JQLEFBdUJhLFdBdkJGLENBV1AsS0FBSyxDQUFDLGNBQWMsR0FZaEIsRUFBRSxHQUFHLENBQUMsQUFFTCxNQUFNLEVBekJmLEFBdUJhLFdBdkJGLENBV1AsS0FBSyxDQUFDLGNBQWMsR0FZaEIsRUFBRSxHQUFHLENBQUMsQUFHTCxNQUFNLENBQUM7VUFDTixnQkFBZ0IsRUFBRSxJQUFLLEdBQ3hCO0VBTVAsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0lBbENuQixBQUFBLFdBQVcsQ0FBQztNQW1DUixLQUFLLEVBQUUsSUFBSztNQUNaLE1BQU0sRUFBRSxDQUFFLEdBVWI7TUE5Q0QsQUFzQ00sV0F0Q0ssR0FzQ0wsRUFBRSxDQUFDO1FBQ0gsS0FBSyxFQUFFLElBQUssR0FLYjtRQTVDTCxBQXdDUSxXQXhDRyxHQXNDTCxFQUFFLEdBRUEsQ0FBQyxDQUFDO1VBQ0YsV0FBVyxFaERnR2tCLElBQWM7VWdEL0YzQyxjQUFjLEVoRCtGZSxJQUFjLEdnRDlGNUM7O0FBV1AsQUFBQSxZQUFZLENBQUM7RUFDWCxXQUFXLEVoRGlGc0IsS0FBSztFZ0RoRnRDLFlBQVksRWhEZ0ZxQixLQUFLO0VnRC9FdEMsT0FBTyxFQUFFLElBQUksQ2hEK0VvQixJQUFLO0VnRDlFdEMsVUFBVSxFQUFFLHFCQUFzQjtFQUNsQyxhQUFhLEVBQUUscUJBQXNCO0VqQzlOckMsa0JBQWtCLEVpQytOVCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0JBQUksRUFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0JBQUk7RWpDOU5qRCxVQUFVLEVpQzhOVCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0JBQUksRUFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0JBQUk7RWxCN1J6RCxVQUFVLEVBQUksR0FBYztFQUM1QixhQUFhLEVBQUksR0FBYyxHa0J5VGhDO0VQMkpDLE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztJTzlMbkIsQVBnTUksWU9oTVEsQ1BnTVIsV0FBVyxDQUFDO01BQ1YsT0FBTyxFQUFFLFlBQWE7TUFDdEIsYUFBYSxFQUFFLENBQUU7TUFDakIsY0FBYyxFQUFFLE1BQU8sR0FDeEI7SU9wTUwsQVB1TUksWU92TVEsQ1B1TVIsYUFBYSxDQUFDO01BQ1osT0FBTyxFQUFFLFlBQWE7TUFDdEIsS0FBSyxFQUFFLElBQUs7TUFDWixjQUFjLEVBQUUsTUFBTyxHQUN4QjtJTzNNTCxBUDhNSSxZTzlNUSxDUDhNUixvQkFBb0IsQ0FBQztNQUNuQixPQUFPLEVBQUUsWUFBYSxHQUN2QjtJT2hOTCxBUGtOSSxZT2xOUSxDUGtOUixZQUFZLENBQUM7TUFDWCxPQUFPLEVBQUUsWUFBYTtNQUN0QixjQUFjLEVBQUUsTUFBTyxHQU94QjtNTzNOTCxBUHNOTSxZT3ROTSxDUGtOUixZQUFZLENBSVYsa0JBQWtCO01PdE54QixBUHVOTSxZT3ZOTSxDUGtOUixZQUFZLENBS1YsZ0JBQWdCO01Pdk50QixBUHdOTSxZT3hOTSxDUGtOUixZQUFZLENBTVYsYUFBYSxDQUFDO1FBQ1osS0FBSyxFQUFFLElBQUssR0FDYjtJTzFOUCxBUDhObUIsWU85TlAsQ1A4TlIsWUFBWSxHQUFHLGFBQWEsQ0FBQztNQUMzQixLQUFLLEVBQUUsSUFBSyxHQUNiO0lPaE9MLEFQa09JLFlPbE9RLENQa09SLGNBQWMsQ0FBQztNQUNiLGFBQWEsRUFBRSxDQUFFO01BQ2pCLGNBQWMsRUFBRSxNQUFPLEdBQ3hCO0lPck9MLEFQeU9JLFlPek9RLENQeU9SLE1BQU07SU96T1YsQVAwT0ksWU8xT1EsQ1AwT1IsU0FBUyxDQUFDO01BQ1IsT0FBTyxFQUFFLFlBQWE7TUFDdEIsVUFBVSxFQUFFLENBQUU7TUFDZCxhQUFhLEVBQUUsQ0FBRTtNQUNqQixjQUFjLEVBQUUsTUFBTyxHQUt4QjtNT25QTCxBUGdQTSxZT2hQTSxDUHlPUixNQUFNLENBT0osS0FBSztNT2hQWCxBUGdQTSxZT2hQTSxDUDBPUixTQUFTLENBTVAsS0FBSyxDQUFDO1FBQ0osWUFBWSxFQUFFLENBQUUsR0FDakI7SU9sUFAsQVBvUDZCLFlPcFBqQixDUG9QUixNQUFNLENBQUMsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLE9BQU8sQUFBWjtJT3BQakIsQVBxUG1DLFlPclB2QixDUHFQUixTQUFTLENBQUMsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFLLFVBQVUsQUFBZixFQUFpQjtNQUMvQixRQUFRLEVBQUUsUUFBUztNQUNuQixXQUFXLEVBQUUsQ0FBRSxHQUNoQjtJT3hQTCxBUDJQa0IsWU8zUE4sQ1AyUFIsYUFBYSxDQUFDLHNCQUFzQixDQUFDO01BQ25DLEdBQUcsRUFBRSxDQUFFLEdBQ1I7RU9oUEQsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0lBYnJCLEFBWUUsWUFaVSxDQVlWLFdBQVcsQ0FBQztNQUVSLGFBQWEsRUFBRSxHQUFJLEdBTXRCO01BcEJILEFBWUUsWUFaVSxDQVlWLFdBQVcsQUFJTixXQUFXLENBQUM7UUFDWCxhQUFhLEVBQUUsQ0FBRSxHQUNsQjtFQVFMLE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztJQTFCbkIsQUFBQSxZQUFZLENBQUM7TUEyQlQsS0FBSyxFQUFFLElBQUs7TUFDWixNQUFNLEVBQUUsQ0FBRTtNQUNWLFdBQVcsRUFBRSxDQUFFO01BQ2YsWUFBWSxFQUFFLENBQUU7TUFDaEIsV0FBVyxFQUFFLENBQUU7TUFDZixjQUFjLEVBQUUsQ0FBRTtNakN6UHBCLGtCQUFrQixFaUMwUEksSUFBSTtNakN6UGxCLFVBQVUsRWlDeVBJLElBQUksR0FFM0I7O0FBTUQsQUFBbUIsV0FBUixHQUFHLEVBQUUsR0FBRyxjQUFjLENBQUM7RUFDaEMsVUFBVSxFQUFFLENBQUU7RXRCcFVkLHVCQUF1QixFc0JxVUksQ0FBQztFdEJwVTNCLHNCQUFzQixFc0JvVUksQ0FBQyxHQUM3Qjs7QUFFRCxBQUF3QyxvQkFBcEIsQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLGNBQWMsQ0FBQztFQUNyRCxhQUFhLEVBQUUsQ0FBRTtFdEJ6VWpCLHVCQUF1QixFMUIwR0csR0FBRztFMEJ6RzVCLHNCQUFzQixFMUJ5R0csR0FBRztFMEJsRzdCLDBCQUEwQixFc0JtVUksQ0FBQztFdEJsVTlCLHlCQUF5QixFc0JrVUksQ0FBQyxHQUNoQzs7QUFPRCxBQUFBLFdBQVcsQ0FBQztFbEJoVlYsVUFBVSxFQUFJLEdBQWM7RUFDNUIsYUFBYSxFQUFJLEdBQWMsR2tCd1ZoQztFQVRELEFBQUEsV0FBVyxBQUdSLE9BQU8sRUh6UFYsQUdzUEEsYUh0UGEsR0dzUGIsV0FBVyxBSHRQSyxJQUFJLENHeVBUO0lsQm5WVCxVQUFVLEVBQUksSUFBYztJQUM1QixhQUFhLEVBQUksSUFBYyxHa0JvVjlCO0VBTEgsQUFBQSxXQUFXLEFBTVIsT0FBTyxFSDdQVixBR3VQQSxhSHZQYSxHR3VQYixXQUFXLEFIdlBLLElBQUksQ0c2UFQ7SWxCdFZULFVBQVUsRUFBSSxJQUFjO0lBQzVCLGFBQWEsRUFBSSxJQUFjLEdrQnVWOUI7O0FBUUgsQUFBQSxZQUFZLENBQUM7RWxCaFdYLFVBQVUsRUFBSSxJQUFjO0VBQzVCLGFBQWEsRUFBSSxJQUFjLEdrQnVXaEM7RUFMQyxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7SUFIbkIsQUFBQSxZQUFZLENBQUM7TUFJVCxLQUFLLEVBQUUsSUFBSztNQUNaLFdBQVcsRWhESW9CLElBQUs7TWdESHBDLFlBQVksRWhER21CLElBQUssR2dERHZDOztBQVdELE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztFQUNmLEFBQUEsWUFBWSxDQUFDO0lBQ1gsS0FBSyxFQUFFLGVBQWdCLEdBQ3hCO0VBQ0QsQUFBQSxhQUFhLENBQUM7SUFDWixLQUFLLEVBQUUsZ0JBQWlCO0lBQzFCLFlBQVksRWhEaEJxQixLQUFLLEdnRHFCckM7SUFQRCxBQUlJLGFBSlMsR0FJVCxhQUFhLENBQUM7TUFDZCxZQUFZLEVBQUUsQ0FBRSxHQUNqQjs7QUFTTCxBQUFBLGVBQWUsQ0FBQztFQUNkLGdCQUFnQixFaER6QmlCLE9BQU87RWdEMEJ4QyxZQUFZLEVoRHpCcUIsT0FBTSxHZ0R5SnhDO0VBbElELEFBSUUsZUFKYSxDQUliLGFBQWEsQ0FBQztJQUNaLEtBQUssRWhEekJrQyxJQUFJLEdnRCtCNUM7SUFYSCxBQUlFLGVBSmEsQ0FJYixhQUFhLEFBRVYsTUFBTSxFQU5YLEFBSUUsZUFKYSxDQUliLGFBQWEsQUFHVixNQUFNLENBQUM7TUFDTixLQUFLLEVoRGxCZ0MsT0FBTTtNZ0RtQjNDLGdCQUFnQixFaERsQnFCLFdBQVcsR2dEbUJqRDtFQVZMLEFBYUUsZUFiYSxDQWFiLFlBQVksQ0FBQztJQUNYLEtBQUssRWhEdkMwQixJQUFJLEdnRHdDcEM7RUFmSCxBQWtCVyxlQWxCSSxDQWlCYixXQUFXLEdBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLEtBQUssRWhEdkNnQyxJQUFJLEdnRDhDMUM7SUExQkwsQUFrQlcsZUFsQkksQ0FpQmIsV0FBVyxHQUNQLEVBQUUsR0FBRyxDQUFDLEFBR0wsTUFBTSxFQXJCYixBQWtCVyxlQWxCSSxDQWlCYixXQUFXLEdBQ1AsRUFBRSxHQUFHLENBQUMsQUFJTCxNQUFNLENBQUM7TUFDTixLQUFLLEVoRDFDOEIsSUFBSTtNZ0QyQ3ZDLGdCQUFnQixFaEQxQ21CLFdBQVcsR2dEMkMvQztFQXpCUCxBQTJCZ0IsZUEzQkQsQ0FpQmIsV0FBVyxHQVVQLE9BQU8sR0FBRyxDQUFDLEVBM0JqQixBQTJCZ0IsZUEzQkQsQ0FpQmIsV0FBVyxHQVVQLE9BQU8sR0FBRyxDQUFDLEFBRVYsTUFBTSxFQTdCYixBQTJCZ0IsZUEzQkQsQ0FpQmIsV0FBVyxHQVVQLE9BQU8sR0FBRyxDQUFDLEFBR1YsTUFBTSxDQUFDO0lBQ04sS0FBSyxFaERoRDhCLElBQUk7SWdEaUR2QyxnQkFBZ0IsRWhEaERtQixPQUFNLEdnRGlEMUM7RUFqQ1AsQUFtQ2tCLGVBbkNILENBaUJiLFdBQVcsR0FrQlAsU0FBUyxHQUFHLENBQUMsRUFuQ25CLEFBbUNrQixlQW5DSCxDQWlCYixXQUFXLEdBa0JQLFNBQVMsR0FBRyxDQUFDLEFBRVosTUFBTSxFQXJDYixBQW1Da0IsZUFuQ0gsQ0FpQmIsV0FBVyxHQWtCUCxTQUFTLEdBQUcsQ0FBQyxBQUdaLE1BQU0sQ0FBQztJQUNOLEtBQUssRWhEdEQ4QixJQUFJO0lnRHVEdkMsZ0JBQWdCLEVoRHREbUIsV0FBVyxHZ0R1RC9DO0VBekNQLEFBNkNFLGVBN0NhLENBNkNiLGNBQWMsQ0FBQztJQUNiLFlBQVksRWhEbEQyQixJQUFJLEdnRDBENUM7SUF0REgsQUE2Q0UsZUE3Q2EsQ0E2Q2IsY0FBYyxBQUVYLE1BQU0sRUEvQ1gsQUE2Q0UsZUE3Q2EsQ0E2Q2IsY0FBYyxBQUdYLE1BQU0sQ0FBQztNQUNOLGdCQUFnQixFaER2RHFCLElBQUksR2dEd0QxQztJQWxETCxBQW1ESSxlQW5EVyxDQTZDYixjQUFjLENBTVosU0FBUyxDQUFDO01BQ1IsZ0JBQWdCLEVoRHpEcUIsSUFBSSxHZ0QwRDFDO0VBckRMLEFBd0RFLGVBeERhLENBd0RiLGdCQUFnQjtFQXhEbEIsQUF5REUsZUF6RGEsQ0F5RGIsWUFBWSxDQUFDO0lBQ1gsWUFBWSxFaERqRm1CLE9BQU0sR2dEa0Z0QztFQTNESCxBQWdFYyxlQWhFQyxDQThEYixXQUFXLEdBRVAsS0FBSyxHQUFHLENBQUMsRUFoRWYsQUFnRWMsZUFoRUMsQ0E4RGIsV0FBVyxHQUVQLEtBQUssR0FBRyxDQUFDLEFBRVIsTUFBTSxFQWxFYixBQWdFYyxlQWhFQyxDQThEYixXQUFXLEdBRVAsS0FBSyxHQUFHLENBQUMsQUFHUixNQUFNLENBQUM7SUFDTixnQkFBZ0IsRWhEcEZtQixPQUFNO0lnRHFGekMsS0FBSyxFaER0RjhCLElBQUksR2dEdUZ4QztFQUdILE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztJQXpFckIsQUE0RWUsZUE1RUEsQ0E4RGIsV0FBVyxDQWFQLEtBQUssQ0FBQyxjQUFjLEdBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDUCxLQUFLLEVoRGpHNEIsSUFBSSxHZ0R1R3RDO01BbkZULEFBNEVlLGVBNUVBLENBOERiLFdBQVcsQ0FhUCxLQUFLLENBQUMsY0FBYyxHQUNoQixFQUFFLEdBQUcsQ0FBQyxBQUVMLE1BQU0sRUE5RWpCLEFBNEVlLGVBNUVBLENBOERiLFdBQVcsQ0FhUCxLQUFLLENBQUMsY0FBYyxHQUNoQixFQUFFLEdBQUcsQ0FBQyxBQUdMLE1BQU0sQ0FBQztRQUNOLEtBQUssRWhEbkcwQixJQUFJO1FnRG9HbkMsZ0JBQWdCLEVoRG5HZSxXQUFXLEdnRG9HM0M7SUFsRlgsQUFvRm9CLGVBcEZMLENBOERiLFdBQVcsQ0FhUCxLQUFLLENBQUMsY0FBYyxHQVNoQixPQUFPLEdBQUcsQ0FBQyxFQXBGckIsQUFvRm9CLGVBcEZMLENBOERiLFdBQVcsQ0FhUCxLQUFLLENBQUMsY0FBYyxHQVNoQixPQUFPLEdBQUcsQ0FBQyxBQUVWLE1BQU0sRUF0RmpCLEFBb0ZvQixlQXBGTCxDQThEYixXQUFXLENBYVAsS0FBSyxDQUFDLGNBQWMsR0FTaEIsT0FBTyxHQUFHLENBQUMsQUFHVixNQUFNLENBQUM7TUFDTixLQUFLLEVoRHpHMEIsSUFBSTtNZ0QwR25DLGdCQUFnQixFaER6R2UsT0FBTSxHZ0QwR3RDO0lBMUZYLEFBNEZzQixlQTVGUCxDQThEYixXQUFXLENBYVAsS0FBSyxDQUFDLGNBQWMsR0FpQmhCLFNBQVMsR0FBRyxDQUFDLEVBNUZ2QixBQTRGc0IsZUE1RlAsQ0E4RGIsV0FBVyxDQWFQLEtBQUssQ0FBQyxjQUFjLEdBaUJoQixTQUFTLEdBQUcsQ0FBQyxBQUVaLE1BQU0sRUE5RmpCLEFBNEZzQixlQTVGUCxDQThEYixXQUFXLENBYVAsS0FBSyxDQUFDLGNBQWMsR0FpQmhCLFNBQVMsR0FBRyxDQUFDLEFBR1osTUFBTSxDQUFDO01BQ04sS0FBSyxFaEQvRzBCLElBQUk7TWdEZ0huQyxnQkFBZ0IsRWhEL0dlLFdBQVcsR2dEZ0gzQztFQWxHWCxBQTZHRSxlQTdHYSxDQTZHYixZQUFZLENBQUM7SUFDWCxLQUFLLEVoRGxJa0MsSUFBSSxHZ0RzSTVDO0lBbEhILEFBNkdFLGVBN0dhLENBNkdiLFlBQVksQUFFVCxNQUFNLENBQUM7TUFDTixLQUFLLEVoRG5JZ0MsSUFBSSxHZ0RvSTFDO0VBakhMLEFBb0hFLGVBcEhhLENBb0hiLFNBQVMsQ0FBQztJQUNSLEtBQUssRWhEeklrQyxJQUFJLEdnRHFKNUM7SUFqSUgsQUFvSEUsZUFwSGEsQ0FvSGIsU0FBUyxBQUVOLE1BQU0sRUF0SFgsQUFvSEUsZUFwSGEsQ0FvSGIsU0FBUyxBQUdOLE1BQU0sQ0FBQztNQUNOLEtBQUssRWhEM0lnQyxJQUFJLEdnRDRJMUM7SUF6SEwsQUFvSEUsZUFwSGEsQ0FvSGIsU0FBUyxDQU1OLEFBQUEsUUFBQyxBQUFBLENBRUMsTUFBTSxFQTVIYixBQW9IRSxlQXBIYSxDQW9IYixTQUFTLENBTU4sQUFBQSxRQUFDLEFBQUEsQ0FHQyxNQUFNO0lBRlQsQUFQRixRQU9VLENBQUEsQUFBQSxRQUFDLEFBQUEsRUEzSGIsZUFBZSxDQW9IYixTQUFTLEFBUUosTUFBTTtJQURULEFBUEYsUUFPVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEVBM0hiLGVBQWUsQ0FvSGIsU0FBUyxBQVNKLE1BQU0sQ0FBQztNQUNOLEtBQUssRWhEN0k4QixJQUFJLEdnRDhJeEM7O0FBT1AsQUFBQSxlQUFlLENBQUM7RUFDZCxnQkFBZ0IsRWhEckkwQixJQUFJO0VnRHNJOUMsWUFBWSxFaERySThCLE9BQU0sR2dEc1FqRDtFQW5JRCxBQUlFLGVBSmEsQ0FJYixhQUFhLENBQUM7SUFDWixLQUFLLEVoRHJJbUMsT0FBTyxHZ0QySWhEO0lBWEgsQUFJRSxlQUphLENBSWIsYUFBYSxBQUVWLE1BQU0sRUFOWCxBQUlFLGVBSmEsQ0FJYixhQUFhLEFBR1YsTUFBTSxDQUFDO01BQ04sS0FBSyxFaEQ5SGlDLElBQUk7TWdEK0gxQyxnQkFBZ0IsRWhEOUhzQixXQUFXLEdnRCtIbEQ7RUFWTCxBQWFFLGVBYmEsQ0FhYixZQUFZLENBQUM7SUFDWCxLQUFLLEVoRG5KbUMsT0FBTyxHZ0RvSmhEO0VBZkgsQUFrQlcsZUFsQkksQ0FpQmIsV0FBVyxHQUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDUCxLQUFLLEVoRG5KaUMsT0FBTyxHZ0QwSjlDO0lBMUJMLEFBa0JXLGVBbEJJLENBaUJiLFdBQVcsR0FDUCxFQUFFLEdBQUcsQ0FBQyxBQUdMLE1BQU0sRUFyQmIsQUFrQlcsZUFsQkksQ0FpQmIsV0FBVyxHQUNQLEVBQUUsR0FBRyxDQUFDLEFBSUwsTUFBTSxDQUFDO01BQ04sS0FBSyxFaER0SitCLElBQUk7TWdEdUp4QyxnQkFBZ0IsRWhEdEpvQixXQUFXLEdnRHVKaEQ7RUF6QlAsQUEyQmdCLGVBM0JELENBaUJiLFdBQVcsR0FVUCxPQUFPLEdBQUcsQ0FBQyxFQTNCakIsQUEyQmdCLGVBM0JELENBaUJiLFdBQVcsR0FVUCxPQUFPLEdBQUcsQ0FBQyxBQUVWLE1BQU0sRUE3QmIsQUEyQmdCLGVBM0JELENBaUJiLFdBQVcsR0FVUCxPQUFPLEdBQUcsQ0FBQyxBQUdWLE1BQU0sQ0FBQztJQUNOLEtBQUssRWhEOUorQixJQUFJO0lnRCtKeEMsZ0JBQWdCLEVoRDVKb0IsT0FBTSxHZ0Q2SjNDO0VBakNQLEFBbUNrQixlQW5DSCxDQWlCYixXQUFXLEdBa0JQLFNBQVMsR0FBRyxDQUFDLEVBbkNuQixBQW1Da0IsZUFuQ0gsQ0FpQmIsV0FBVyxHQWtCUCxTQUFTLEdBQUcsQ0FBQyxBQUVaLE1BQU0sRUFyQ2IsQUFtQ2tCLGVBbkNILENBaUJiLFdBQVcsR0FrQlAsU0FBUyxHQUFHLENBQUMsQUFHWixNQUFNLENBQUM7SUFDTixLQUFLLEVoRGxLK0IsSUFBSTtJZ0RtS3hDLGdCQUFnQixFaERsS29CLFdBQVcsR2dEbUtoRDtFQXpDUCxBQThDRSxlQTlDYSxDQThDYixjQUFjLENBQUM7SUFDYixZQUFZLEVoRC9KNEIsSUFBSSxHZ0R1SzdDO0lBdkRILEFBOENFLGVBOUNhLENBOENiLGNBQWMsQUFFWCxNQUFNLEVBaERYLEFBOENFLGVBOUNhLENBOENiLGNBQWMsQUFHWCxNQUFNLENBQUM7TUFDTixnQkFBZ0IsRWhEcEtzQixJQUFJLEdnRHFLM0M7SUFuREwsQUFvREksZUFwRFcsQ0E4Q2IsY0FBYyxDQU1aLFNBQVMsQ0FBQztNQUNSLGdCQUFnQixFaER0S3NCLElBQUksR2dEdUszQztFQXRETCxBQXlERSxlQXpEYSxDQXlEYixnQkFBZ0I7RUF6RGxCLEFBMERFLGVBMURhLENBMERiLFlBQVksQ0FBQztJQUNYLFlBQVksRUFBRSxPQUFNLEdBQ3JCO0VBNURILEFBZ0VjLGVBaEVDLENBK0RiLFdBQVcsR0FDUCxLQUFLLEdBQUcsQ0FBQyxFQWhFZixBQWdFYyxlQWhFQyxDQStEYixXQUFXLEdBQ1AsS0FBSyxHQUFHLENBQUMsQUFFUixNQUFNLEVBbEViLEFBZ0VjLGVBaEVDLENBK0RiLFdBQVcsR0FDUCxLQUFLLEdBQUcsQ0FBQyxBQUdSLE1BQU0sQ0FBQztJQUNOLGdCQUFnQixFaERoTW9CLE9BQU07SWdEaU0xQyxLQUFLLEVoRHBNK0IsSUFBSSxHZ0RxTXpDO0VBR0gsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0lBekVyQixBQTRFVSxlQTVFSyxDQStEYixXQUFXLENBWVAsS0FBSyxDQUFDLGNBQWMsR0FDaEIsZ0JBQWdCLENBQUM7TUFDakIsWUFBWSxFaERoTnNCLE9BQU0sR2dEaU56QztJQTlFVCxBQStFUSxlQS9FTyxDQStEYixXQUFXLENBWVAsS0FBSyxDQUFDLGNBQWMsQ0FJbEIsUUFBUSxDQUFDO01BQ1AsZ0JBQWdCLEVoRG5Oa0IsT0FBTSxHZ0RvTnpDO0lBakZULEFBa0ZlLGVBbEZBLENBK0RiLFdBQVcsQ0FZUCxLQUFLLENBQUMsY0FBYyxHQU9oQixFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ1AsS0FBSyxFaERuTjZCLE9BQU8sR2dEeU4xQztNQXpGVCxBQWtGZSxlQWxGQSxDQStEYixXQUFXLENBWVAsS0FBSyxDQUFDLGNBQWMsR0FPaEIsRUFBRSxHQUFHLENBQUMsQUFFTCxNQUFNLEVBcEZqQixBQWtGZSxlQWxGQSxDQStEYixXQUFXLENBWVAsS0FBSyxDQUFDLGNBQWMsR0FPaEIsRUFBRSxHQUFHLENBQUMsQUFHTCxNQUFNLENBQUM7UUFDTixLQUFLLEVoRHJOMkIsSUFBSTtRZ0RzTnBDLGdCQUFnQixFaERyTmdCLFdBQVcsR2dEc041QztJQXhGWCxBQTBGb0IsZUExRkwsQ0ErRGIsV0FBVyxDQVlQLEtBQUssQ0FBQyxjQUFjLEdBZWhCLE9BQU8sR0FBRyxDQUFDLEVBMUZyQixBQTBGb0IsZUExRkwsQ0ErRGIsV0FBVyxDQVlQLEtBQUssQ0FBQyxjQUFjLEdBZWhCLE9BQU8sR0FBRyxDQUFDLEFBRVYsTUFBTSxFQTVGakIsQUEwRm9CLGVBMUZMLENBK0RiLFdBQVcsQ0FZUCxLQUFLLENBQUMsY0FBYyxHQWVoQixPQUFPLEdBQUcsQ0FBQyxBQUdWLE1BQU0sQ0FBQztNQUNOLEtBQUssRWhEN04yQixJQUFJO01nRDhOcEMsZ0JBQWdCLEVoRDNOZ0IsT0FBTSxHZ0Q0TnZDO0lBaEdYLEFBa0dzQixlQWxHUCxDQStEYixXQUFXLENBWVAsS0FBSyxDQUFDLGNBQWMsR0F1QmhCLFNBQVMsR0FBRyxDQUFDLEVBbEd2QixBQWtHc0IsZUFsR1AsQ0ErRGIsV0FBVyxDQVlQLEtBQUssQ0FBQyxjQUFjLEdBdUJoQixTQUFTLEdBQUcsQ0FBQyxBQUVaLE1BQU0sRUFwR2pCLEFBa0dzQixlQWxHUCxDQStEYixXQUFXLENBWVAsS0FBSyxDQUFDLGNBQWMsR0F1QmhCLFNBQVMsR0FBRyxDQUFDLEFBR1osTUFBTSxDQUFDO01BQ04sS0FBSyxFaERqTzJCLElBQUk7TWdEa09wQyxnQkFBZ0IsRWhEak9nQixXQUFXLEdnRGtPNUM7RUF4R1gsQUE4R0UsZUE5R2EsQ0E4R2IsWUFBWSxDQUFDO0lBQ1gsS0FBSyxFaEQvT21DLE9BQU8sR2dEbVBoRDtJQW5ISCxBQThHRSxlQTlHYSxDQThHYixZQUFZLEFBRVQsTUFBTSxDQUFDO01BQ04sS0FBSyxFaERoUGlDLElBQUksR2dEaVAzQztFQWxITCxBQXFIRSxlQXJIYSxDQXFIYixTQUFTLENBQUM7SUFDUixLQUFLLEVoRHRQbUMsT0FBTyxHZ0RrUWhEO0lBbElILEFBcUhFLGVBckhhLENBcUhiLFNBQVMsQUFFTixNQUFNLEVBdkhYLEFBcUhFLGVBckhhLENBcUhiLFNBQVMsQUFHTixNQUFNLENBQUM7TUFDTixLQUFLLEVoRHhQaUMsSUFBSSxHZ0R5UDNDO0lBMUhMLEFBcUhFLGVBckhhLENBcUhiLFNBQVMsQ0FNTixBQUFBLFFBQUMsQUFBQSxDQUVDLE1BQU0sRUE3SGIsQUFxSEUsZUFySGEsQ0FxSGIsU0FBUyxDQU1OLEFBQUEsUUFBQyxBQUFBLENBR0MsTUFBTTtJQUZULEFBUEYsUUFPVSxDQUFBLEFBQUEsUUFBQyxBQUFBLEVBNUhiLGVBQWUsQ0FxSGIsU0FBUyxBQVFKLE1BQU07SUFEVCxBQVBGLFFBT1UsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFQTVIYixlQUFlLENBcUhiLFNBQVMsQUFTSixNQUFNLENBQUM7TUFDTixLQUFLLEVoRDFQK0IsSUFBSSxHZ0QyUHpDOztBQzdvQlAsQUFBQSxXQUFXLENBQUM7RUFDVixPQUFPLEVqRG94QnVCLEdBQUcsQ0FDSCxJQUFJO0VpRHB4QmxDLGFBQWEsRWpEMERXLElBQUs7RWlEekQ3QixVQUFVLEVBQUUsSUFBSztFQUNqQixnQkFBZ0IsRWpEb3hCYyxPQUFPO0VpRG54QnJDLGFBQWEsRWpEbUdhLEdBQUcsR2lEbEY5QjtFQXRCRCxBQU9JLFdBUE8sR0FPUCxFQUFFLENBQUM7SUFDSCxPQUFPLEVBQUUsWUFBYSxHQVN2QjtJQWpCSCxBQVVRLFdBVkcsR0FPUCxFQUFFLEdBR0EsRUFBRSxBQUFBLE9BQU8sQ0FBQztNQUdWLE9BQU8sRUFBRSxLQUFrQztNQUMzQyxPQUFPLEVBQUUsS0FBTTtNQUNmLEtBQUssRWpEMndCcUIsSUFBSSxHaUQxd0IvQjtFQWhCTCxBQW1CSSxXQW5CTyxHQW1CUCxPQUFPLENBQUM7SUFDUixLQUFLLEVqRFhnQixPQUFPLEdpRFk3Qjs7QUN2QkgsQUFBQSxXQUFXLENBQUM7RUFDVixPQUFPLEVBQUUsWUFBYTtFQUN0QixZQUFZLEVBQUUsQ0FBRTtFQUNoQixNQUFNLEVsRDJEa0IsSUFBSyxDa0QzREMsQ0FBQztFQUMvQixhQUFhLEVsRHNHYSxHQUFHLEdrRGxDOUI7RUF4RUQsQUFNSSxXQU5PLEdBTVAsRUFBRSxDQUFDO0lBQ0gsT0FBTyxFQUFFLE1BQU8sR0EwQmpCO0lBakNILEFBUU0sV0FSSyxHQU1QLEVBQUUsR0FFQSxDQUFDO0lBUlAsQUFTTSxXQVRLLEdBTVAsRUFBRSxHQUdBLElBQUksQ0FBQztNQUNMLFFBQVEsRUFBRSxRQUFTO01BQ25CLEtBQUssRUFBRSxJQUFLO01BQ1osT0FBTyxFbEQrRWUsR0FBRyxDQUNILElBQUk7TWtEL0UxQixXQUFXLEVsRCtDUyxPQUFXO01rRDlDL0IsZUFBZSxFQUFFLElBQUs7TUFDdEIsS0FBSyxFbEREYSxPQUFNO01rREV4QixnQkFBZ0IsRWxEb2JpQixJQUFJO01rRG5ickMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENsRG9iZ0IsSUFBSTtNa0RuYnJDLFdBQVcsRUFBRSxJQUFLLEdBQ25CO0lBbkJMLEFBcUJRLFdBckJHLEdBTVAsRUFBRSxBQWNELFlBQVksR0FDVCxDQUFDO0lBckJULEFBc0JRLFdBdEJHLEdBTVAsRUFBRSxBQWNELFlBQVksR0FFVCxJQUFJLENBQUM7TUFDTCxXQUFXLEVBQUUsQ0FBRTtNeEJYckIseUJBQXlCLEUxQjhGQyxHQUFHO00wQjdGMUIsc0JBQXNCLEUxQjZGQyxHQUFHLEdrRGpGeEI7SUF6QlAsQUE0QlEsV0E1QkcsR0FNUCxFQUFFLEFBcUJELFdBQVcsR0FDUixDQUFDO0lBNUJULEFBNkJRLFdBN0JHLEdBTVAsRUFBRSxBQXFCRCxXQUFXLEdBRVIsSUFBSSxDQUFDO014QnpCWCwwQkFBMEIsRTFCc0dBLEdBQUc7TTBCckcxQix1QkFBdUIsRTFCcUdBLEdBQUcsR2tEM0V4QjtFQS9CUCxBQW1DUyxXQW5DRSxHQW1DUCxFQUFFLEdBQUcsQ0FBQyxBQUVMLE1BQU0sRUFyQ1gsQUFtQ1MsV0FuQ0UsR0FtQ1AsRUFBRSxHQUFHLENBQUMsQUFHTCxNQUFNO0VBdENYLEFBb0NTLFdBcENFLEdBb0NQLEVBQUUsR0FBRyxJQUFJLEFBQ1IsTUFBTTtFQXJDWCxBQW9DUyxXQXBDRSxHQW9DUCxFQUFFLEdBQUcsSUFBSSxBQUVSLE1BQU0sQ0FBQztJQUNOLE9BQU8sRUFBRSxDQUFFO0lBQ1gsS0FBSyxFbERQYSxPQUFNO0lrRFF4QixnQkFBZ0IsRWxEN0JHLE9BQU87SWtEOEIxQixZQUFZLEVsRCtacUIsSUFBSSxHa0Q5WnRDO0VBM0NMLEFBOENjLFdBOUNILEdBOENQLE9BQU8sR0FBRyxDQUFDLEVBOUNmLEFBOENjLFdBOUNILEdBOENQLE9BQU8sR0FBRyxDQUFDLEFBR1YsTUFBTSxFQWpEWCxBQThDYyxXQTlDSCxHQThDUCxPQUFPLEdBQUcsQ0FBQyxBQUlWLE1BQU07RUFsRFgsQUErQ2MsV0EvQ0gsR0ErQ1AsT0FBTyxHQUFHLElBQUk7RUEvQ2xCLEFBK0NjLFdBL0NILEdBK0NQLE9BQU8sR0FBRyxJQUFJLEFBRWIsTUFBTTtFQWpEWCxBQStDYyxXQS9DSCxHQStDUCxPQUFPLEdBQUcsSUFBSSxBQUdiLE1BQU0sQ0FBQztJQUNOLE9BQU8sRUFBRSxDQUFFO0lBQ1gsS0FBSyxFbER1WjRCLElBQUk7SWtEdFpyQyxnQkFBZ0IsRWxEdkNFLE9BQU07SWtEd0N4QixZQUFZLEVsRHhDTSxPQUFNO0lrRHlDeEIsTUFBTSxFQUFFLE9BQVEsR0FDakI7RUF4REwsQUE0RE0sV0E1REssR0EyRFAsU0FBUyxHQUNQLElBQUk7RUE1RFYsQUE2RFUsV0E3REMsR0EyRFAsU0FBUyxHQUVQLElBQUksQUFBQSxNQUFNO0VBN0RoQixBQThEVSxXQTlEQyxHQTJEUCxTQUFTLEdBR1AsSUFBSSxBQUFBLE1BQU07RUE5RGhCLEFBK0RNLFdBL0RLLEdBMkRQLFNBQVMsR0FJUCxDQUFDO0VBL0RQLEFBZ0VPLFdBaEVJLEdBMkRQLFNBQVMsR0FLUCxDQUFDLEFBQUEsTUFBTTtFQWhFYixBQWlFTyxXQWpFSSxHQTJEUCxTQUFTLEdBTVAsQ0FBQyxBQUFBLE1BQU0sQ0FBQztJQUNSLEtBQUssRWxEdkRjLE9BQU87SWtEd0QxQixnQkFBZ0IsRWxENllpQixJQUFJO0lrRDVZckMsWUFBWSxFbEQ2WXFCLElBQUk7SWtENVlyQyxNQUFNLEVsRCtKcUIsV0FBVyxHa0Q5SnZDOztBQVFMLEEvQjdFTSxjK0I2RVEsRy9COUVWLEVBQUUsR0FDQSxDQUFDO0ErQjZFUCxBL0I1RU0sYytCNEVRLEcvQjlFVixFQUFFLEdBRUEsSUFBSSxDQUFDO0VBQ0wsT0FBTyxFbkIyRmUsSUFBSSxDQUNKLElBQUk7RW1CM0YxQixTQUFTLEVuQjZDVyxJQUFJO0VtQjVDeEIsV0FBVyxFbkJrR1csT0FBUyxHbUJqR2hDOztBK0J3RUwsQS9CdEVRLGMrQnNFTSxHL0I5RVYsRUFBRSxBQU9ELFlBQVksR0FDVCxDQUFDO0ErQnNFVCxBL0JyRVEsYytCcUVNLEcvQjlFVixFQUFFLEFBT0QsWUFBWSxHQUVULElBQUksQ0FBQztFT0dYLHlCQUF5QixFMUIrRkMsR0FBRztFMEI5RjFCLHNCQUFzQixFMUI4RkMsR0FBRyxHbUJoR3hCOztBK0JtRVAsQS9CaEVRLGMrQmdFTSxHL0I5RVYsRUFBRSxBQWFELFdBQVcsR0FDUixDQUFDO0ErQmdFVCxBL0IvRFEsYytCK0RNLEcvQjlFVixFQUFFLEFBYUQsV0FBVyxHQUVSLElBQUksQ0FBQztFT1hYLDBCQUEwQixFMUJ1R0EsR0FBRztFMEJ0RzFCLHVCQUF1QixFMUJzR0EsR0FBRyxHbUIxRnhCOztBK0JrRVAsQS9CbEZNLGMrQmtGUSxHL0JuRlYsRUFBRSxHQUNBLENBQUM7QStCa0ZQLEEvQmpGTSxjK0JpRlEsRy9CbkZWLEVBQUUsR0FFQSxJQUFJLENBQUM7RUFDTCxPQUFPLEVuQjhGZSxHQUFHLENBQ0gsSUFBSTtFbUI5RjFCLFNBQVMsRW5COENXLElBQUk7RW1CN0N4QixXQUFXLEVuQm1HVyxHQUFHLEdtQmxHMUI7O0ErQjZFTCxBL0IzRVEsYytCMkVNLEcvQm5GVixFQUFFLEFBT0QsWUFBWSxHQUNULENBQUM7QStCMkVULEEvQjFFUSxjK0IwRU0sRy9CbkZWLEVBQUUsQUFPRCxZQUFZLEdBRVQsSUFBSSxDQUFDO0VPR1gseUJBQXlCLEUxQmdHQyxHQUFHO0UwQi9GMUIsc0JBQXNCLEUxQitGQyxHQUFHLEdtQmpHeEI7O0ErQndFUCxBL0JyRVEsYytCcUVNLEcvQm5GVixFQUFFLEFBYUQsV0FBVyxHQUNSLENBQUM7QStCcUVULEEvQnBFUSxjK0JvRU0sRy9CbkZWLEVBQUUsQUFhRCxXQUFXLEdBRVIsSUFBSSxDQUFDO0VPWFgsMEJBQTBCLEUxQndHQSxHQUFHO0UwQnZHMUIsdUJBQXVCLEUxQnVHQSxHQUFHLEdtQjNGeEI7O0FnQ2ZQLEFBQUEsTUFBTSxDQUFDO0VBQ0wsWUFBWSxFQUFFLENBQUU7RUFDaEIsTUFBTSxFbkQwRGtCLElBQUssQ21EMURDLENBQUM7RUFDL0IsVUFBVSxFQUFFLElBQUs7RUFDakIsVUFBVSxFQUFFLE1BQU8sR0E0Q3BCO0VBaERELEFBQUEsTUFBTSxBdkJRSCxPQUFPLEV1QlJWLEFBQUEsTUFBTSxBdkJTSCxNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsR0FBSTtJQUNiLE9BQU8sRUFBRSxLQUFNLEdBQ2hCO0V1QlpILEFBQUEsTUFBTSxBdkJhSCxNQUFNLENBQUM7SUFDTixLQUFLLEVBQUUsSUFBSyxHQUNiO0V1QmZILEFBTUUsTUFOSSxDQU1KLEVBQUUsQ0FBQztJQUNELE9BQU8sRUFBRSxNQUFPLEdBZWpCO0lBdEJILEFBUU0sTUFSQSxDQU1KLEVBQUUsR0FFRSxDQUFDO0lBUlAsQUFTTSxNQVRBLENBTUosRUFBRSxHQUdFLElBQUksQ0FBQztNQUNMLE9BQU8sRUFBRSxZQUFhO01BQ3RCLE9BQU8sRUFBRSxRQUFTO01BQ2xCLGdCQUFnQixFbkRzYmlCLElBQUk7TW1EcmJyQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ25Ec2JnQixJQUFJO01tRHJickMsYUFBYSxFbkQwY29CLElBQUksR21EemN0QztJQWZMLEFBaUJPLE1BakJELENBTUosRUFBRSxHQVdFLENBQUMsQUFBQSxNQUFNO0lBakJiLEFBa0JPLE1BbEJELENBTUosRUFBRSxHQVlFLENBQUMsQUFBQSxNQUFNLENBQUM7TUFDUixlQUFlLEVBQUUsSUFBSztNQUN0QixnQkFBZ0IsRW5EVkcsT0FBTyxHbURXM0I7RUFyQkwsQUF5Qk0sTUF6QkEsQ0F3QkosS0FBSyxHQUNELENBQUM7RUF6QlAsQUEwQk0sTUExQkEsQ0F3QkosS0FBSyxHQUVELElBQUksQ0FBQztJQUNMLEtBQUssRUFBRSxLQUFNLEdBQ2Q7RUE1QkwsQUFnQ00sTUFoQ0EsQ0ErQkosU0FBUyxHQUNMLENBQUM7RUFoQ1AsQUFpQ00sTUFqQ0EsQ0ErQkosU0FBUyxHQUVMLElBQUksQ0FBQztJQUNMLEtBQUssRUFBRSxJQUFLLEdBQ2I7RUFuQ0wsQUF1Q00sTUF2Q0EsQ0FzQ0osU0FBUyxHQUNMLENBQUM7RUF2Q1AsQUF3Q08sTUF4Q0QsQ0FzQ0osU0FBUyxHQUVMLENBQUMsQUFBQSxNQUFNO0VBeENiLEFBeUNPLE1BekNELENBc0NKLFNBQVMsR0FHTCxDQUFDLEFBQUEsTUFBTTtFQXpDYixBQTBDTSxNQTFDQSxDQXNDSixTQUFTLEdBSUwsSUFBSSxDQUFDO0lBQ0wsS0FBSyxFbkRsQ2MsT0FBTztJbURtQzFCLGdCQUFnQixFbkRzWmlCLElBQUk7SW1EclpyQyxNQUFNLEVuRHFMcUIsV0FBVyxHbURwTHZDOztBQy9DTCxBQUFBLE1BQU0sQ0FBQztFQUNMLE9BQU8sRUFBRSxNQUFPO0VBQ2hCLE9BQU8sRUFBRSxjQUFlO0VBQ3hCLFNBQVMsRUFBRSxHQUFJO0VBQ2YsV0FBVyxFQUFFLElBQUs7RUFDbEIsV0FBVyxFQUFFLENBQUU7RUFDZixLQUFLLEVwRCtqQnVCLElBQUk7RW9EOWpCaEMsVUFBVSxFQUFFLE1BQU87RUFDbkIsV0FBVyxFQUFFLE1BQU87RUFDcEIsY0FBYyxFQUFFLFFBQVM7RUFDekIsYUFBYSxFQUFFLEtBQU0sR0FjdEI7RUF4QkQsQUFBQSxNQUFNLEFBZUgsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLElBQUssR0FDZjtFQUdELEFBcEJGLElBb0JNLENBcEJOLE1BQU0sQ0FvQkc7SUFDTCxRQUFRLEVBQUUsUUFBUztJQUNuQixHQUFHLEVBQUUsSUFBSyxHQUNYOztBQUlILEFBQUMsQ0FBQSxBQUFBLE1BQU0sQUFDSixNQUFNLEVBRFQsQUFBQyxDQUFBLEFBQUEsTUFBTSxBQUVKLE1BQU0sQ0FBQztFQUNOLEtBQUssRXBEeWlCcUIsSUFBSTtFb0R4aUI5QixlQUFlLEVBQUUsSUFBSztFQUN0QixNQUFNLEVBQUUsT0FBUSxHQUNqQjs7QUFNSCxBQUFBLGNBQWMsQ0FBQztFOUN4Q2IsZ0JBQWdCLEVOV08sT0FBTyxHb0QrQi9CO0VBRkQsQUFBQSxjQUFjLEM5Q3RDWCxBQUFBLElBQUMsQUFBQSxDQUNDLE1BQU0sRThDcUNYLEFBQUEsY0FBYyxDOUN0Q1gsQUFBQSxJQUFDLEFBQUEsQ0FFQyxNQUFNLENBQUM7SUFDTixnQkFBZ0IsRUFBRSxPQUFNLEdBQ3pCOztBOENzQ0wsQUFBQSxjQUFjLENBQUM7RTlDNUNiLGdCQUFnQixFTmNNLE9BQU0sR29EZ0M3QjtFQUZELEFBQUEsY0FBYyxDOUMxQ1gsQUFBQSxJQUFDLEFBQUEsQ0FDQyxNQUFNLEU4Q3lDWCxBQUFBLGNBQWMsQzlDMUNYLEFBQUEsSUFBQyxBQUFBLENBRUMsTUFBTSxDQUFDO0lBQ04sZ0JBQWdCLEVBQUUsT0FBTSxHQUN6Qjs7QThDMENMLEFBQUEsY0FBYyxDQUFDO0U5Q2hEYixnQkFBZ0IsRU5lTSxPQUFPLEdvRG1DOUI7RUFGRCxBQUFBLGNBQWMsQzlDOUNYLEFBQUEsSUFBQyxBQUFBLENBQ0MsTUFBTSxFOEM2Q1gsQUFBQSxjQUFjLEM5QzlDWCxBQUFBLElBQUMsQUFBQSxDQUVDLE1BQU0sQ0FBQztJQUNOLGdCQUFnQixFQUFFLE9BQU0sR0FDekI7O0E4QzhDTCxBQUFBLFdBQVcsQ0FBQztFOUNwRFYsZ0JBQWdCLEVOZ0JNLE9BQU8sR29Ec0M5QjtFQUZELEFBQUEsV0FBVyxDOUNsRFIsQUFBQSxJQUFDLEFBQUEsQ0FDQyxNQUFNLEU4Q2lEWCxBQUFBLFdBQVcsQzlDbERSLEFBQUEsSUFBQyxBQUFBLENBRUMsTUFBTSxDQUFDO0lBQ04sZ0JBQWdCLEVBQUUsT0FBTSxHQUN6Qjs7QThDa0RMLEFBQUEsY0FBYyxDQUFDO0U5Q3hEYixnQkFBZ0IsRU5pQk0sT0FBTyxHb0R5QzlCO0VBRkQsQUFBQSxjQUFjLEM5Q3REWCxBQUFBLElBQUMsQUFBQSxDQUNDLE1BQU0sRThDcURYLEFBQUEsY0FBYyxDOUN0RFgsQUFBQSxJQUFDLEFBQUEsQ0FFQyxNQUFNLENBQUM7SUFDTixnQkFBZ0IsRUFBRSxPQUFNLEdBQ3pCOztBOENzREwsQUFBQSxhQUFhLENBQUM7RTlDNURaLGdCQUFnQixFTmtCTSxPQUFPLEdvRDRDOUI7RUFGRCxBQUFBLGFBQWEsQzlDMURWLEFBQUEsSUFBQyxBQUFBLENBQ0MsTUFBTSxFOEN5RFgsQUFBQSxhQUFhLEM5QzFEVixBQUFBLElBQUMsQUFBQSxDQUVDLE1BQU0sQ0FBQztJQUNOLGdCQUFnQixFQUFFLE9BQU0sR0FDekI7O0ErQ0hMLEFBQUEsTUFBTSxDQUFDO0VBQ0wsT0FBTyxFQUFFLFlBQWE7RUFDdEIsU0FBUyxFQUFFLElBQUs7RUFDaEIsT0FBTyxFQUFFLE9BQVE7RUFDakIsU0FBUyxFckQyQ2UsSUFBSTtFcUQxQzVCLFdBQVcsRXJEc3dCaUIsSUFBSTtFcURyd0JoQyxLQUFLLEVyRDJ2QnVCLElBQUk7RXFEMXZCaEMsV0FBVyxFckRxd0JpQixDQUFDO0VxRHB3QjdCLGNBQWMsRUFBRSxNQUFPO0VBQ3ZCLFdBQVcsRUFBRSxNQUFPO0VBQ3BCLFVBQVUsRUFBRSxNQUFPO0VBQ25CLGdCQUFnQixFckRITyxPQUFPO0VxREk5QixhQUFhLEVyRGl3QmUsSUFBSSxHcUQxdEJqQztFQW5ERCxBQUFBLE1BQU0sQUFlSCxNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsSUFBSyxHQUNmO0VBR0QsQUFwQkYsSUFvQk0sQ0FwQk4sTUFBTSxDQW9CRztJQUNMLFFBQVEsRUFBRSxRQUFTO0lBQ25CLEdBQUcsRUFBRSxJQUFLLEdBQ1g7RUFFRCxBQXpCRixPQXlCUyxDQXpCVCxNQUFNLEVSeUZOLEFRekZBLGFSeUZhLEdBQUcsSUFBSSxDUXpGcEIsTUFBTTtFQTBCSixBQTFCRixhQTBCZSxHQUFHLElBQUksQ0ExQnRCLE1BQU0sQ0EwQm1CO0lBQ3JCLEdBQUcsRUFBRSxDQUFFO0lBQ1AsT0FBTyxFQUFFLE9BQVEsR0FDbEI7RUFLRCxBQWxDRixnQkFrQ2tCLEFBQUEsT0FBTyxHQWxDekIsTUFBTTtFQW1DSixBQW5DRixVQW1DWSxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBbkMxQixNQUFNLENBbUN5QjtJQUMzQixLQUFLLEVyRHpCZSxPQUFNO0lxRDBCMUIsZ0JBQWdCLEVyRG91QlUsSUFBSSxHcURudUIvQjtFQUVELEFBeENGLGdCQXdDa0IsR0F4Q2xCLE1BQU0sQ0F3Q2lCO0lBQ25CLEtBQUssRUFBRSxLQUFNLEdBQ2Q7RUFFRCxBQTVDRixnQkE0Q2tCLEdBNUNsQixNQUFNLEdBQU4sTUFBTSxDQTRDcUI7SUFDdkIsWUFBWSxFQUFFLEdBQUksR0FDbkI7RUFFRCxBQWhERixVQWdEWSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBaERyQixNQUFNLENBZ0RvQjtJQUN0QixXQUFXLEVBQUUsR0FBSSxHQUNsQjs7QUFJSCxBQUFDLENBQUEsQUFBQSxNQUFNLEFBQ0osTUFBTSxFQURULEFBQUMsQ0FBQSxBQUFBLE1BQU0sQUFFSixNQUFNLENBQUM7RUFDTixLQUFLLEVyRDBzQnFCLElBQUk7RXFEenNCOUIsZUFBZSxFQUFFLElBQUs7RUFDdEIsTUFBTSxFQUFFLE9BQVEsR0FDakI7O0FDN0RILEFBQUEsVUFBVSxDQUFDO0VBQ1QsV0FBVyxFdERxZW9CLElBQUk7RXNEcGVuQyxjQUFjLEV0RG9laUIsSUFBSTtFc0RuZW5DLGFBQWEsRXREbWVrQixJQUFJO0VzRGxlbkMsS0FBSyxFdERtZTBCLE9BQU87RXNEbGV0QyxnQkFBZ0IsRXRES08sT0FBTyxHc0RzQy9CO0VBaERELEFBT0UsVUFQUSxDQU9SLEVBQUU7RUFQSixBQVFFLFVBUlEsQ0FRUixHQUFHLENBQUM7SUFDRixLQUFLLEV0RGdld0IsT0FBTyxHc0QvZHJDO0VBVkgsQUFZRSxVQVpRLENBWVIsQ0FBQyxDQUFDO0lBQ0EsYUFBYSxFQUFHLElBQWtCO0lBQ2xDLFNBQVMsRXRENGRvQixJQUFJO0lzRDNkakMsV0FBVyxFQUFFLEdBQUksR0FDbEI7RUFoQkgsQUFrQkksVUFsQk0sR0FrQk4sRUFBRSxDQUFDO0lBQ0gsZ0JBQWdCLEVBQUUsT0FBTSxHQUN6QjtFQUVELEFBdEJGLFVBc0JZLENBdEJaLFVBQVU7RUF1QlIsQUF2QkYsZ0JBdUJrQixDQXZCbEIsVUFBVSxDQXVCVztJQUNqQixhQUFhLEV0RGlGVyxHQUFHO0lzRGhGM0IsWUFBWSxFQUFJLElBQWtCO0lBQ2xDLGFBQWEsRUFBRyxJQUFrQixHQUNuQztFQTNCSCxBQTZCRSxVQTdCUSxDQTZCUixVQUFVLENBQUM7SUFDVCxTQUFTLEVBQUUsSUFBSyxHQUNqQjtFQUVELE1BQU0sQ0FBTixNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7SUFqQzlCLEFBQUEsVUFBVSxDQUFDO01Ba0NQLFdBQVcsRUFBTSxJQUFrQjtNQUNuQyxjQUFjLEVBQUcsSUFBa0IsR0FhdEM7TUFYRyxBQXJDSixVQXFDYyxDQXJDZCxVQUFVO01Bc0NOLEFBdENKLGdCQXNDb0IsQ0F0Q3BCLFVBQVUsQ0FzQ2E7UUFDakIsWUFBWSxFQUFJLElBQWtCO1FBQ2xDLGFBQWEsRUFBRyxJQUFrQixHQUNuQztNQXpDTCxBQTJDSSxVQTNDTSxDQTJDTixFQUFFO01BM0NOLEFBNENJLFVBNUNNLENBNENOLEdBQUcsQ0FBQztRQUNGLFNBQVMsRXREOGJrQixJQUFJLEdzRDdiaEM7O0FDN0NMLEFBQUEsVUFBVSxDQUFDO0VBQ1QsT0FBTyxFQUFFLEtBQU07RUFDZixPQUFPLEV2RHF1QnFCLEdBQUc7RXVEcHVCL0IsYUFBYSxFdkR3RFcsSUFBSztFdUR2RDdCLFdBQVcsRXZEcURhLE9BQVc7RXVEcERuQyxnQkFBZ0IsRXZEa0JNLElBQUk7RXVEakIxQixNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ3ZEcXVCVyxJQUFJO0V1RHB1QmhDLGFBQWEsRXZEZ0dhLEdBQUc7RWU0RTdCLGtCQUFrQixFd0MzS0UsTUFBTSxDQUFDLElBQUcsQ0FBQyxXQUFXO0V4QzRLckMsYUFBYSxFd0M1S0UsTUFBTSxDQUFDLElBQUcsQ0FBQyxXQUFXO0V4QzZLbEMsVUFBVSxFd0M3S0UsTUFBTSxDQUFDLElBQUcsQ0FBQyxXQUFXLEdBZ0IzQztFQXhCRCxBQVVJLFVBVk0sR0FVTixHQUFHO0VBVlAsQUFXTSxVQVhJLENBV1IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJbERSUixPQUFPLEVBRHVCLEtBQUs7SUFFbkMsU0FBUyxFQUFFLElBQUs7SUFDaEIsTUFBTSxFQUFFLElBQUs7SWtEUVgsV0FBVyxFQUFFLElBQUs7SUFDbEIsWUFBWSxFQUFFLElBQUssR0FDcEI7RUFmSCxBQW9CRSxVQXBCUSxDQW9CUixRQUFRLENBQUM7SUFDUCxPQUFPLEV2RDZ0Qm1CLEdBQUc7SXVENXRCN0IsS0FBSyxFdkRoQmdCLE9BQU8sR3VEaUI3Qjs7QUFJSCxBQUFXLENBQVYsQUFBQSxVQUFVLEFBQUEsTUFBTTtBQUNqQixBQUFXLENBQVYsQUFBQSxVQUFVLEFBQUEsTUFBTTtBQUNqQixBQUFXLENBQVYsQUFBQSxVQUFVLEFBQUEsT0FBTyxDQUFDO0VBQ2pCLFlBQVksRXZEbkJVLE9BQU0sR3VEb0I3Qjs7QUM3QkQsQUFBQSxNQUFNLENBQUM7RUFDTCxPQUFPLEV4RDBtQnFCLElBQUk7RXdEem1CaEMsYUFBYSxFeER1RFcsSUFBSztFd0R0RDdCLE1BQU0sRUFBRSxxQkFBc0I7RUFDOUIsYUFBYSxFeERpR2EsR0FBRyxHd0QxRTlCO0VBM0JELEFBT0UsTUFQSSxDQU9KLEVBQUUsQ0FBQztJQUNELFVBQVUsRUFBRSxDQUFFO0lBRWQsS0FBSyxFQUFFLE9BQVEsR0FDaEI7RUFYSCxBQWNFLE1BZEksQ0FjSixXQUFXLENBQUM7SUFDVixXQUFXLEV4RDhsQmUsSUFBSSxHd0Q3bEIvQjtFQWhCSCxBQW1CSSxNQW5CRSxHQW1CRixDQUFDO0VBbkJMLEFBb0JJLE1BcEJFLEdBb0JGLEVBQUUsQ0FBQztJQUNILGFBQWEsRUFBRSxDQUFFLEdBQ2xCO0VBdEJILEFBd0JRLE1BeEJGLEdBd0JGLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDTixVQUFVLEVBQUUsR0FBSSxHQUNqQjs7QUFPSCxBQUFBLGtCQUFrQjtBQUNsQixBQUFBLGtCQUFrQixDQUFDO0VBQ2pCLGFBQWEsRUFBRyxJQUFjLEdBUy9CO0VBWEQsQUFLRSxrQkFMZ0IsQ0FLaEIsTUFBTTtFQUpSLEFBSUUsa0JBSmdCLENBSWhCLE1BQU0sQ0FBQztJQUNMLFFBQVEsRUFBRSxRQUFTO0lBQ25CLEdBQUcsRUFBRSxJQUFLO0lBQ1YsS0FBSyxFQUFFLEtBQU07SUFDYixLQUFLLEVBQUUsT0FBUSxHQUNoQjs7QUFPSCxBQUFBLGNBQWMsQ0FBQztFeEN2RGIsZ0JBQWdCLEVoQnFmZSxPQUFPO0VnQnBmdEMsWUFBWSxFaEJxZm1CLE9BQU07RWdCcGZyQyxLQUFLLEVoQmtmMEIsT0FBTyxHd0QzYnZDO0VBRkQsQXhDbkRFLGN3Q21EWSxDeENuRFosRUFBRSxDQUFDO0lBQ0QsZ0JBQWdCLEVBQUUsT0FBTSxHQUN6QjtFd0NpREgsQXhDaERFLGN3Q2dEWSxDeENoRFosV0FBVyxDQUFDO0lBQ1YsS0FBSyxFQUFFLE9BQU0sR0FDZDs7QXdDa0RILEFBQUEsV0FBVyxDQUFDO0V4QzNEVixnQkFBZ0IsRWhCeWZlLE9BQU87RWdCeGZ0QyxZQUFZLEVoQnlmbUIsT0FBTTtFZ0J4ZnJDLEtBQUssRWhCc2YwQixPQUFPLEd3RDNidkM7RUFGRCxBeEN2REUsV3dDdURTLEN4Q3ZEVCxFQUFFLENBQUM7SUFDRCxnQkFBZ0IsRUFBRSxPQUFNLEdBQ3pCO0V3Q3FESCxBeENwREUsV3dDb0RTLEN4Q3BEVCxXQUFXLENBQUM7SUFDVixLQUFLLEVBQUUsT0FBTSxHQUNkOztBd0NzREgsQUFBQSxjQUFjLENBQUM7RXhDL0RiLGdCQUFnQixFaEI2ZmUsT0FBTztFZ0I1ZnRDLFlBQVksRWhCNmZtQixPQUFNO0VnQjVmckMsS0FBSyxFaEIwZjBCLE9BQU8sR3dEM2J2QztFQUZELEF4QzNERSxjd0MyRFksQ3hDM0RaLEVBQUUsQ0FBQztJQUNELGdCQUFnQixFQUFFLE9BQU0sR0FDekI7RXdDeURILEF4Q3hERSxjd0N3RFksQ3hDeERaLFdBQVcsQ0FBQztJQUNWLEtBQUssRUFBRSxPQUFNLEdBQ2Q7O0F3QzBESCxBQUFBLGFBQWEsQ0FBQztFeENuRVosZ0JBQWdCLEVoQmlnQmUsT0FBTztFZ0JoZ0J0QyxZQUFZLEVoQmlnQm1CLE9BQU07RWdCaGdCckMsS0FBSyxFaEI4ZjBCLE9BQU8sR3dEM2J2QztFQUZELEF4Qy9ERSxhd0MrRFcsQ3hDL0RYLEVBQUUsQ0FBQztJQUNELGdCQUFnQixFQUFFLE9BQU0sR0FDekI7RXdDNkRILEF4QzVERSxhd0M0RFcsQ3hDNURYLFdBQVcsQ0FBQztJQUNWLEtBQUssRUFBRSxPQUFNLEdBQ2Q7O0F5Q0hILGtCQUFrQixDQUFsQixvQkFBa0I7RUFDaEIsQUFBQSxJQUFJO0lBQUksbUJBQW1CLEVBQUUsTUFBTztFQUNwQyxBQUFBLEVBQUU7SUFBTSxtQkFBbUIsRUFBRSxHQUFJOztBQUluQyxVQUFVLENBQVYsb0JBQVU7RUFDUixBQUFBLElBQUk7SUFBSSxtQkFBbUIsRUFBRSxNQUFPO0VBQ3BDLEFBQUEsRUFBRTtJQUFNLG1CQUFtQixFQUFFLEdBQUk7O0FBUW5DLEFBQUEsU0FBUyxDQUFDO0VBQ1IsUUFBUSxFQUFFLE1BQU87RUFDakIsTUFBTSxFekRzQ2tCLElBQUs7RXlEckM3QixhQUFhLEV6RHFDVyxJQUFLO0V5RHBDN0IsZ0JBQWdCLEV6RGduQlksT0FBTztFeUQvbUJuQyxhQUFhLEV6RCtFYSxHQUFHO0VlekM3QixrQkFBa0IsRTBDckNFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBSTtFMUNzQ2hDLFVBQVUsRTBDdENFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBSSxHQUN6Qzs7QUFHRCxBQUFBLGFBQWEsQ0FBQztFQUNaLEtBQUssRUFBRSxJQUFLO0VBQ1osS0FBSyxFQUFFLEVBQUc7RUFDVixNQUFNLEVBQUUsSUFBSztFQUNiLFNBQVMsRXpEY2UsSUFBSTtFeURiNUIsV0FBVyxFekR5QmEsSUFBSztFeUR4QjdCLEtBQUssRXpEc21CdUIsSUFBSTtFeURybUJoQyxVQUFVLEVBQUUsTUFBTztFQUNuQixnQkFBZ0IsRXpEMUJNLE9BQU07RWVtRDVCLGtCQUFrQixFMEN4QkUsS0FBSyxDQUFDLENBQUMsQ0FBRSxJQUFHLENBQUMsQ0FBQyxDQUFDLG1CQUFJO0UxQ3lCL0IsVUFBVSxFMEN6QkUsS0FBSyxDQUFDLENBQUMsQ0FBRSxJQUFHLENBQUMsQ0FBQyxDQUFDLG1CQUFJO0UxQzZJdkMsa0JBQWtCLEUwQzVJRSxLQUFLLENBQUMsSUFBRyxDQUFDLElBQUk7RTFDNkk3QixhQUFhLEUwQzdJRSxLQUFLLENBQUMsSUFBRyxDQUFDLElBQUk7RTFDOEkxQixVQUFVLEUwQzlJRSxLQUFLLENBQUMsSUFBRyxDQUFDLElBQUksR0FDbkM7O0FBT0QsQUFBa0IsaUJBQUQsQ0FBQyxhQUFhO0FBQy9CLEFBQUEscUJBQXFCLENBQUM7RTlCQXBCLGdCQUFnQixFQUFFLDJMQUF1QjtFQUN6QyxnQkFBZ0IsRUFBRSxzTEFBa0I7RUFDcEMsZ0JBQWdCLEVBQUUsbUxBQWU7RThCQWpDLGVBQWUsRUFBRSxTQUFVLEdBQzVCOztBQU1ELEFBQWlCLFNBQVIsQUFBQSxPQUFPLENBQUMsYUFBYTtBQUM5QixBQUFhLGFBQUEsQUFBQSxPQUFPLENBQUM7RTFDN0NuQixpQkFBaUIsRTBDOENFLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUTtFMUM3Q3JELFlBQVksRTBDNkNFLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUTtFMUM1Q2xELFNBQVMsRTBDNENFLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUMzRDs7QUFNRCxBQUFBLHFCQUFxQixDQUFDO0VsQ3JFcEIsZ0JBQWdCLEV2QmVNLE9BQU8sR3lEd0Q5QjtFbENwRUMsQWtDa0VGLGlCbENsRW1CLENrQ2tFbkIscUJBQXFCLENsQ2xFQztJSWdEcEIsZ0JBQWdCLEVBQUUsMkxBQXVCO0lBQ3pDLGdCQUFnQixFQUFFLHNMQUFrQjtJQUNwQyxnQkFBZ0IsRUFBRSxtTEFBZSxHSmhEaEM7O0FrQ29FSCxBQUFBLGtCQUFrQixDQUFDO0VsQ3pFakIsZ0JBQWdCLEV2QmdCTSxPQUFPLEd5RDJEOUI7RWxDeEVDLEFrQ3NFRixpQmxDdEVtQixDa0NzRW5CLGtCQUFrQixDbEN0RUk7SUlnRHBCLGdCQUFnQixFQUFFLDJMQUF1QjtJQUN6QyxnQkFBZ0IsRUFBRSxzTEFBa0I7SUFDcEMsZ0JBQWdCLEVBQUUsbUxBQWUsR0poRGhDOztBa0N3RUgsQUFBQSxxQkFBcUIsQ0FBQztFbEM3RXBCLGdCQUFnQixFdkJpQk0sT0FBTyxHeUQ4RDlCO0VsQzVFQyxBa0MwRUYsaUJsQzFFbUIsQ2tDMEVuQixxQkFBcUIsQ2xDMUVDO0lJZ0RwQixnQkFBZ0IsRUFBRSwyTEFBdUI7SUFDekMsZ0JBQWdCLEVBQUUsc0xBQWtCO0lBQ3BDLGdCQUFnQixFQUFFLG1MQUFlLEdKaERoQzs7QWtDNEVILEFBQUEsb0JBQW9CLENBQUM7RWxDakZuQixnQkFBZ0IsRXZCa0JNLE9BQU8sR3lEaUU5QjtFbENoRkMsQWtDOEVGLGlCbEM5RW1CLENrQzhFbkIsb0JBQW9CLENsQzlFRTtJSWdEcEIsZ0JBQWdCLEVBQUUsMkxBQXVCO0lBQ3pDLGdCQUFnQixFQUFFLHNMQUFrQjtJQUNwQyxnQkFBZ0IsRUFBRSxtTEFBZSxHSmhEaEM7O0FtQ1JILEFBQUEsTUFBTSxDQUFDO0VBRUwsVUFBVSxFQUFFLElBQUssR0FLbEI7RUFQRCxBQUFBLE1BQU0sQUFJSCxZQUFZLENBQUM7SUFDWixVQUFVLEVBQUUsQ0FBRSxHQUNmOztBQUdILEFBQUEsTUFBTTtBQUNOLEFBQUEsV0FBVyxDQUFDO0VBQ1YsSUFBSSxFQUFFLENBQUU7RUFDUixRQUFRLEVBQUUsTUFBTyxHQUNsQjs7QUFFRCxBQUFBLFdBQVcsQ0FBQztFQUNWLEtBQUssRUFBRSxPQUFRLEdBQ2hCOztBQUVELEFBQUEsYUFBYSxDQUFDO0VBQ1osT0FBTyxFQUFFLEtBQU0sR0FNaEI7RUFQRCxBQUFBLGFBQWEsQUFJVixjQUFjLENBQUM7SUFDZCxTQUFTLEVBQUUsSUFBSyxHQUNqQjs7QUFHSCxBQUFBLFlBQVk7QUFDWixBQUFTLE1BQUgsR0FBRyxXQUFXLENBQUM7RUFDbkIsWUFBWSxFQUFFLElBQUssR0FDcEI7O0FBRUQsQUFBQSxXQUFXO0FBQ1gsQUFBUyxNQUFILEdBQUcsVUFBVSxDQUFDO0VBQ2xCLGFBQWEsRUFBRSxJQUFLLEdBQ3JCOztBQUVELEFBQUEsV0FBVztBQUNYLEFBQUEsWUFBWTtBQUNaLEFBQUEsV0FBVyxDQUFDO0VBQ1YsT0FBTyxFQUFFLFVBQVc7RUFDcEIsY0FBYyxFQUFFLEdBQUksR0FDckI7O0FBRUQsQUFBQSxhQUFhLENBQUM7RUFDWixjQUFjLEVBQUUsTUFBTyxHQUN4Qjs7QUFFRCxBQUFBLGFBQWEsQ0FBQztFQUNaLGNBQWMsRUFBRSxNQUFPLEdBQ3hCOztBQUdELEFBQUEsY0FBYyxDQUFDO0VBQ2IsVUFBVSxFQUFFLENBQUU7RUFDZCxhQUFhLEVBQUUsR0FBSSxHQUNwQjs7QUFLRCxBQUFBLFdBQVcsQ0FBQztFQUNWLFlBQVksRUFBRSxDQUFFO0VBQ2hCLFVBQVUsRUFBRSxJQUFLLEdBQ2xCOztBQ3hERCxBQUFBLFdBQVcsQ0FBQztFQUVWLGFBQWEsRUFBRSxJQUFLO0VBQ3BCLFlBQVksRUFBRSxDQUFFLEdBQ2pCOztBQU9ELEFBQUEsZ0JBQWdCLENBQUM7RUFDZixRQUFRLEVBQUUsUUFBUztFQUNuQixPQUFPLEVBQUUsS0FBTTtFQUNmLE9BQU8sRUFBRSxTQUFVO0VBRW5CLGFBQWEsRUFBRSxJQUFLO0VBQ3BCLGdCQUFnQixFM0Qwb0JjLElBQUk7RTJEem9CbEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEMzRDJvQmEsSUFBSSxHMkRqb0JuQztFQWpCRCxBQUFBLGdCQUFnQixBQVViLFlBQVksQ0FBQztJakMzQmQsdUJBQXVCLEUxQjBHRyxHQUFHO0kwQnpHNUIsc0JBQXNCLEUxQnlHRyxHQUFHLEcyRDdFNUI7RUFaSCxBQUFBLGdCQUFnQixBQWFiLFdBQVcsQ0FBQztJQUNYLGFBQWEsRUFBRSxDQUFFO0lqQ3ZCbkIsMEJBQTBCLEUxQmtHQSxHQUFHO0kwQmpHNUIseUJBQXlCLEUxQmlHQSxHQUFHLEcyRHpFNUI7O0FBU0gsQUFBQyxDQUFBLEFBQUEsZ0JBQWdCO0FBQ2pCLEFBQU0sTUFBQSxBQUFBLGdCQUFnQixDQUFDO0VBQ3JCLEtBQUssRTNENm9CeUIsSUFBSSxHMkRob0JuQztFQWZELEFBSUUsQ0FKRCxBQUFBLGdCQUFnQixDQUlmLHdCQUF3QjtFQUgxQixBQUdFLE1BSEksQUFBQSxnQkFBZ0IsQ0FHcEIsd0JBQXdCLENBQUM7SUFDdkIsS0FBSyxFM0Q0b0J1QixJQUFJLEcyRDNvQmpDO0VBTkgsQUFBQyxDQUFBLEFBQUEsZ0JBQWdCLEFBU2QsTUFBTSxFQVRULEFBQUMsQ0FBQSxBQUFBLGdCQUFnQixBQVVkLE1BQU07RUFUVCxBQUFNLE1BQUEsQUFBQSxnQkFBZ0IsQUFRbkIsTUFBTTtFQVJULEFBQU0sTUFBQSxBQUFBLGdCQUFnQixBQVNuQixNQUFNLENBQUM7SUFDTixlQUFlLEVBQUUsSUFBSztJQUN0QixLQUFLLEUzRG1vQnVCLElBQUk7STJEbG9CaEMsZ0JBQWdCLEUzRGluQlksT0FBTyxHMkRobkJwQzs7QUFHSCxBQUFNLE1BQUEsQUFBQSxnQkFBZ0IsQ0FBQztFQUNyQixLQUFLLEVBQUUsSUFBSztFQUNaLFVBQVUsRUFBRSxJQUFLLEdBQ2xCOztBQUVELEFBQUEsZ0JBQWdCLEFBRWIsU0FBUyxFQUZaLEFBQUEsZ0JBQWdCLEFBR2IsU0FBUyxBQUFBLE1BQU0sRUFIbEIsQUFBQSxnQkFBZ0IsQUFJYixTQUFTLEFBQUEsTUFBTSxDQUFDO0VBQ2YsZ0JBQWdCLEUzRHpESyxPQUFPO0UyRDBENUIsS0FBSyxFM0QzRGdCLE9BQU87RTJENEQ1QixNQUFNLEUzRDZKdUIsV0FBVyxHMkRwSnpDO0VBaEJILEFBVUksZ0JBVlksQUFFYixTQUFTLENBUVIsd0JBQXdCLEVBVjVCLEFBVUksZ0JBVlksQUFHYixTQUFTLEFBQUEsTUFBTSxDQU9kLHdCQUF3QixFQVY1QixBQVVJLGdCQVZZLEFBSWIsU0FBUyxBQUFBLE1BQU0sQ0FNZCx3QkFBd0IsQ0FBQztJQUN2QixLQUFLLEVBQUUsT0FBUSxHQUNoQjtFQVpMLEFBYUksZ0JBYlksQUFFYixTQUFTLENBV1IscUJBQXFCLEVBYnpCLEFBYUksZ0JBYlksQUFHYixTQUFTLEFBQUEsTUFBTSxDQVVkLHFCQUFxQixFQWJ6QixBQWFJLGdCQWJZLEFBSWIsU0FBUyxBQUFBLE1BQU0sQ0FTZCxxQkFBcUIsQ0FBQztJQUNwQixLQUFLLEUzRG5FYyxPQUFPLEcyRG9FM0I7O0FBZkwsQUFBQSxnQkFBZ0IsQUFtQmIsT0FBTyxFQW5CVixBQUFBLGdCQUFnQixBQW9CYixPQUFPLEFBQUEsTUFBTSxFQXBCaEIsQUFBQSxnQkFBZ0IsQUFxQmIsT0FBTyxBQUFBLE1BQU0sQ0FBQztFQUNiLE9BQU8sRUFBRSxDQUFFO0VBQ1gsS0FBSyxFM0R3Qm1CLElBQUk7RTJEdkI1QixnQkFBZ0IsRTNEMUVJLE9BQU07RTJEMkUxQixZQUFZLEUzRDNFUSxPQUFNLEcyRHNGM0I7RUFwQ0gsQUE0QkksZ0JBNUJZLEFBbUJiLE9BQU8sQ0FTTix3QkFBd0I7RUE1QjVCLEFBNkIrQixnQkE3QmYsQUFtQmIsT0FBTyxDQVVOLHdCQUF3QixHQUFHLEtBQUs7RUE3QnBDLEFBOEIrQixnQkE5QmYsQUFtQmIsT0FBTyxDQVdOLHdCQUF3QixHQUFHLE1BQU0sRUE5QnJDLEFBNEJJLGdCQTVCWSxBQW9CYixPQUFPLEFBQUEsTUFBTSxDQVFaLHdCQUF3QjtFQTVCNUIsQUE2QitCLGdCQTdCZixBQW9CYixPQUFPLEFBQUEsTUFBTSxDQVNaLHdCQUF3QixHQUFHLEtBQUs7RUE3QnBDLEFBOEIrQixnQkE5QmYsQUFvQmIsT0FBTyxBQUFBLE1BQU0sQ0FVWix3QkFBd0IsR0FBRyxNQUFNLEVBOUJyQyxBQTRCSSxnQkE1QlksQUFxQmIsT0FBTyxBQUFBLE1BQU0sQ0FPWix3QkFBd0I7RUE1QjVCLEFBNkIrQixnQkE3QmYsQUFxQmIsT0FBTyxBQUFBLE1BQU0sQ0FRWix3QkFBd0IsR0FBRyxLQUFLO0VBN0JwQyxBQThCK0IsZ0JBOUJmLEFBcUJiLE9BQU8sQUFBQSxNQUFNLENBU1osd0JBQXdCLEdBQUcsTUFBTSxDQUFDO0lBQ2hDLEtBQUssRUFBRSxPQUFRLEdBQ2hCO0VBaENMLEFBaUNJLGdCQWpDWSxBQW1CYixPQUFPLENBY04scUJBQXFCLEVBakN6QixBQWlDSSxnQkFqQ1ksQUFvQmIsT0FBTyxBQUFBLE1BQU0sQ0FhWixxQkFBcUIsRUFqQ3pCLEFBaUNJLGdCQWpDWSxBQXFCYixPQUFPLEFBQUEsTUFBTSxDQVlaLHFCQUFxQixDQUFDO0lBQ3BCLEtBQUssRTNEOGtCcUIsT0FBTyxHMkQ3a0JsQzs7QXZDbkdILEFBQUEsd0JBQXdCLENBQXhCO0VBQ0UsS0FBSyxFcEJtZndCLE9BQU87RW9CbGZwQyxnQkFBZ0IsRXBCbWZhLE9BQU8sR29CaGZyQzs7QUFFRCxBQUFDLENBQUEsQUFBQSx3QkFBd0I7QUFDekIsQUFBTSxNQUFBLEFBQUEsd0JBQXdCLENBRDlCO0VBQ0UsS0FBSyxFcEI0ZXdCLE9BQU8sR29CMWRyQztFQW5CRCxBQUdFLENBSEQsQUFBQSx3QkFBd0IsQ0FHdkIsd0JBQXdCO0VBRjFCLEFBRUUsTUFGSSxBQUFBLHdCQUF3QixDQUU1Qix3QkFBd0IsQ0FBQztJQUN2QixLQUFLLEVBQUUsT0FBUSxHQUNoQjtFQUxILEFBQUMsQ0FBQSxBQUFBLHdCQUF3QixBQU90QixNQUFNLEVBUFQsQUFBQyxDQUFBLEFBQUEsd0JBQXdCLEFBUXRCLE1BQU07RUFQVCxBQUFNLE1BQUEsQUFBQSx3QkFBd0IsQUFNM0IsTUFBTTtFQU5ULEFBQU0sTUFBQSxBQUFBLHdCQUF3QixBQU8zQixNQUFNLENBQUM7SUFDTixLQUFLLEVwQm9lc0IsT0FBTztJb0JuZWxDLGdCQUFnQixFQUFFLE9BQU0sR0FDekI7RUFYSCxBQUFDLENBQUEsQUFBQSx3QkFBd0IsQUFZdEIsT0FBTyxFQVpWLEFBQUMsQ0FBQSxBQUFBLHdCQUF3QixBQWF0QixPQUFPLEFBQUEsTUFBTSxFQWJoQixBQUFDLENBQUEsQUFBQSx3QkFBd0IsQUFjdEIsT0FBTyxBQUFBLE1BQU07RUFiaEIsQUFBTSxNQUFBLEFBQUEsd0JBQXdCLEFBVzNCLE9BQU87RUFYVixBQUFNLE1BQUEsQUFBQSx3QkFBd0IsQUFZM0IsT0FBTyxBQUFBLE1BQU07RUFaaEIsQUFBTSxNQUFBLEFBQUEsd0JBQXdCLEFBYTNCLE9BQU8sQUFBQSxNQUFNLENBQUM7SUFDYixLQUFLLEVBQUUsSUFBSztJQUNaLGdCQUFnQixFcEI2ZFcsT0FBTztJb0I1ZGxDLFlBQVksRXBCNGRlLE9BQU8sR29CM2RuQzs7QUF6QkgsQUFBQSxxQkFBcUIsQ0FBckI7RUFDRSxLQUFLLEVwQnVmd0IsT0FBTztFb0J0ZnBDLGdCQUFnQixFcEJ1ZmEsT0FBTyxHb0JwZnJDOztBQUVELEFBQUMsQ0FBQSxBQUFBLHFCQUFxQjtBQUN0QixBQUFNLE1BQUEsQUFBQSxxQkFBcUIsQ0FEM0I7RUFDRSxLQUFLLEVwQmdmd0IsT0FBTyxHb0I5ZHJDO0VBbkJELEFBR0UsQ0FIRCxBQUFBLHFCQUFxQixDQUdwQix3QkFBd0I7RUFGMUIsQUFFRSxNQUZJLEFBQUEscUJBQXFCLENBRXpCLHdCQUF3QixDQUFDO0lBQ3ZCLEtBQUssRUFBRSxPQUFRLEdBQ2hCO0VBTEgsQUFBQyxDQUFBLEFBQUEscUJBQXFCLEFBT25CLE1BQU0sRUFQVCxBQUFDLENBQUEsQUFBQSxxQkFBcUIsQUFRbkIsTUFBTTtFQVBULEFBQU0sTUFBQSxBQUFBLHFCQUFxQixBQU14QixNQUFNO0VBTlQsQUFBTSxNQUFBLEFBQUEscUJBQXFCLEFBT3hCLE1BQU0sQ0FBQztJQUNOLEtBQUssRXBCd2VzQixPQUFPO0lvQnZlbEMsZ0JBQWdCLEVBQUUsT0FBTSxHQUN6QjtFQVhILEFBQUMsQ0FBQSxBQUFBLHFCQUFxQixBQVluQixPQUFPLEVBWlYsQUFBQyxDQUFBLEFBQUEscUJBQXFCLEFBYW5CLE9BQU8sQUFBQSxNQUFNLEVBYmhCLEFBQUMsQ0FBQSxBQUFBLHFCQUFxQixBQWNuQixPQUFPLEFBQUEsTUFBTTtFQWJoQixBQUFNLE1BQUEsQUFBQSxxQkFBcUIsQUFXeEIsT0FBTztFQVhWLEFBQU0sTUFBQSxBQUFBLHFCQUFxQixBQVl4QixPQUFPLEFBQUEsTUFBTTtFQVpoQixBQUFNLE1BQUEsQUFBQSxxQkFBcUIsQUFheEIsT0FBTyxBQUFBLE1BQU0sQ0FBQztJQUNiLEtBQUssRUFBRSxJQUFLO0lBQ1osZ0JBQWdCLEVwQmllVyxPQUFPO0lvQmhlbEMsWUFBWSxFcEJnZWUsT0FBTyxHb0IvZG5DOztBQXpCSCxBQUFBLHdCQUF3QixDQUF4QjtFQUNFLEtBQUssRXBCMmZ3QixPQUFPO0VvQjFmcEMsZ0JBQWdCLEVwQjJmYSxPQUFPLEdvQnhmckM7O0FBRUQsQUFBQyxDQUFBLEFBQUEsd0JBQXdCO0FBQ3pCLEFBQU0sTUFBQSxBQUFBLHdCQUF3QixDQUQ5QjtFQUNFLEtBQUssRXBCb2Z3QixPQUFPLEdvQmxlckM7RUFuQkQsQUFHRSxDQUhELEFBQUEsd0JBQXdCLENBR3ZCLHdCQUF3QjtFQUYxQixBQUVFLE1BRkksQUFBQSx3QkFBd0IsQ0FFNUIsd0JBQXdCLENBQUM7SUFDdkIsS0FBSyxFQUFFLE9BQVEsR0FDaEI7RUFMSCxBQUFDLENBQUEsQUFBQSx3QkFBd0IsQUFPdEIsTUFBTSxFQVBULEFBQUMsQ0FBQSxBQUFBLHdCQUF3QixBQVF0QixNQUFNO0VBUFQsQUFBTSxNQUFBLEFBQUEsd0JBQXdCLEFBTTNCLE1BQU07RUFOVCxBQUFNLE1BQUEsQUFBQSx3QkFBd0IsQUFPM0IsTUFBTSxDQUFDO0lBQ04sS0FBSyxFcEI0ZXNCLE9BQU87SW9CM2VsQyxnQkFBZ0IsRUFBRSxPQUFNLEdBQ3pCO0VBWEgsQUFBQyxDQUFBLEFBQUEsd0JBQXdCLEFBWXRCLE9BQU8sRUFaVixBQUFDLENBQUEsQUFBQSx3QkFBd0IsQUFhdEIsT0FBTyxBQUFBLE1BQU0sRUFiaEIsQUFBQyxDQUFBLEFBQUEsd0JBQXdCLEFBY3RCLE9BQU8sQUFBQSxNQUFNO0VBYmhCLEFBQU0sTUFBQSxBQUFBLHdCQUF3QixBQVczQixPQUFPO0VBWFYsQUFBTSxNQUFBLEFBQUEsd0JBQXdCLEFBWTNCLE9BQU8sQUFBQSxNQUFNO0VBWmhCLEFBQU0sTUFBQSxBQUFBLHdCQUF3QixBQWEzQixPQUFPLEFBQUEsTUFBTSxDQUFDO0lBQ2IsS0FBSyxFQUFFLElBQUs7SUFDWixnQkFBZ0IsRXBCcWVXLE9BQU87SW9CcGVsQyxZQUFZLEVwQm9lZSxPQUFPLEdvQm5lbkM7O0FBekJILEFBQUEsdUJBQXVCLENBQXZCO0VBQ0UsS0FBSyxFcEIrZndCLE9BQU87RW9COWZwQyxnQkFBZ0IsRXBCK2ZhLE9BQU8sR29CNWZyQzs7QUFFRCxBQUFDLENBQUEsQUFBQSx1QkFBdUI7QUFDeEIsQUFBTSxNQUFBLEFBQUEsdUJBQXVCLENBRDdCO0VBQ0UsS0FBSyxFcEJ3ZndCLE9BQU8sR29CdGVyQztFQW5CRCxBQUdFLENBSEQsQUFBQSx1QkFBdUIsQ0FHdEIsd0JBQXdCO0VBRjFCLEFBRUUsTUFGSSxBQUFBLHVCQUF1QixDQUUzQix3QkFBd0IsQ0FBQztJQUN2QixLQUFLLEVBQUUsT0FBUSxHQUNoQjtFQUxILEFBQUMsQ0FBQSxBQUFBLHVCQUF1QixBQU9yQixNQUFNLEVBUFQsQUFBQyxDQUFBLEFBQUEsdUJBQXVCLEFBUXJCLE1BQU07RUFQVCxBQUFNLE1BQUEsQUFBQSx1QkFBdUIsQUFNMUIsTUFBTTtFQU5ULEFBQU0sTUFBQSxBQUFBLHVCQUF1QixBQU8xQixNQUFNLENBQUM7SUFDTixLQUFLLEVwQmdmc0IsT0FBTztJb0IvZWxDLGdCQUFnQixFQUFFLE9BQU0sR0FDekI7RUFYSCxBQUFDLENBQUEsQUFBQSx1QkFBdUIsQUFZckIsT0FBTyxFQVpWLEFBQUMsQ0FBQSxBQUFBLHVCQUF1QixBQWFyQixPQUFPLEFBQUEsTUFBTSxFQWJoQixBQUFDLENBQUEsQUFBQSx1QkFBdUIsQUFjckIsT0FBTyxBQUFBLE1BQU07RUFiaEIsQUFBTSxNQUFBLEFBQUEsdUJBQXVCLEFBVzFCLE9BQU87RUFYVixBQUFNLE1BQUEsQUFBQSx1QkFBdUIsQUFZMUIsT0FBTyxBQUFBLE1BQU07RUFaaEIsQUFBTSxNQUFBLEFBQUEsdUJBQXVCLEFBYTFCLE9BQU8sQUFBQSxNQUFNLENBQUM7SUFDYixLQUFLLEVBQUUsSUFBSztJQUNaLGdCQUFnQixFcEJ5ZVcsT0FBTztJb0J4ZWxDLFlBQVksRXBCd2VlLE9BQU8sR29CdmVuQzs7QXVDOEZMLEFBQUEsd0JBQXdCLENBQUM7RUFDdkIsVUFBVSxFQUFFLENBQUU7RUFDZCxhQUFhLEVBQUUsR0FBSSxHQUNwQjs7QUFDRCxBQUFBLHFCQUFxQixDQUFDO0VBQ3BCLGFBQWEsRUFBRSxDQUFFO0VBQ2pCLFdBQVcsRUFBRSxHQUFJLEdBQ2xCOztBQzNIRCxBQUFBLE1BQU0sQ0FBQztFQUNMLGFBQWEsRTVEMERXLElBQUs7RTREekQ3QixnQkFBZ0IsRTVENnJCWSxJQUFJO0U0RDVyQmhDLE1BQU0sRUFBRSxxQkFBc0I7RUFDOUIsYUFBYSxFNURtR2EsR0FBRztFZXpDN0Isa0JBQWtCLEU2Q3pERSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxtQkFBSTtFN0MwRDFCLFVBQVUsRTZDMURFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFJLEdBQ25DOztBQUdELEFBQUEsV0FBVyxDQUFDO0VBQ1YsT0FBTyxFNURzckJxQixJQUFJLEc0RHByQmpDO0VBSEQsQUFBQSxXQUFXLEFoQ0ZSLE9BQU8sRWdDRVYsQUFBQSxXQUFXLEFoQ0RSLE1BQU0sQ0FBQztJQUNOLE9BQU8sRUFBRSxHQUFJO0lBQ2IsT0FBTyxFQUFFLEtBQU0sR0FDaEI7RWdDRkgsQUFBQSxXQUFXLEFoQ0dSLE1BQU0sQ0FBQztJQUNOLEtBQUssRUFBRSxJQUFLLEdBQ2I7O0FnQ0NILEFBQUEsY0FBYyxDQUFDO0VBQ2IsT0FBTyxFNURpckJxQixJQUFJLENBQUMsSUFBSTtFNERockJyQyxhQUFhLEVBQUUscUJBQXNCO0VsQ3BCckMsdUJBQXVCLEVrQ3FCSyxHQUFvQjtFbENwQi9DLHNCQUFzQixFa0NvQkssR0FBb0IsR0FLakQ7RUFSRCxBQUtjLGNBTEEsR0FLVixTQUFTLENBQUMsZ0JBQWdCLENBQUM7SUFDM0IsS0FBSyxFQUFFLE9BQVEsR0FDaEI7O0FBSUgsQUFBQSxZQUFZLENBQUM7RUFDWCxVQUFVLEVBQUUsQ0FBRTtFQUNkLGFBQWEsRUFBRSxDQUFFO0VBQ2pCLFNBQVMsRUFBRSxJQUFJO0VBQ2YsS0FBSyxFQUFFLE9BQVEsR0FTaEI7RUFiRCxBQU1JLFlBTlEsR0FNUixDQUFDO0VBTkwsQUFPSSxZQVBRLEdBT1IsS0FBSztFQVBULEFBUUksWUFSUSxHQVFSLE1BQU07RUFSVixBQVNZLFlBVEEsR0FTUixLQUFLLEdBQUcsQ0FBQztFQVRiLEFBVWEsWUFWRCxHQVVSLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWCxLQUFLLEVBQUUsT0FBUSxHQUNoQjs7QUFJSCxBQUFBLGFBQWEsQ0FBQztFQUNaLE9BQU8sRTVEc3BCcUIsSUFBSSxDQUFDLElBQUk7RTREcnBCckMsZ0JBQWdCLEU1RDJwQlksT0FBTztFNEQxcEJuQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEtBQUssQzVEeXBCTyxJQUFJO0UwQmpzQmhDLDBCQUEwQixFa0N5Q0ssR0FBb0I7RWxDeENsRCx5QkFBeUIsRWtDd0NLLEdBQW9CLEdBQ3BEOztBQVFELEFBQ0ksTUFERSxHQUNGLFdBQVc7QUFEZixBQUVzQixNQUZoQixHQUVGLGVBQWUsR0FBRyxXQUFXLENBQUM7RUFDOUIsYUFBYSxFQUFFLENBQUUsR0FzQmxCO0VBekJILEFBS0ksTUFMRSxHQUNGLFdBQVcsQ0FJWCxnQkFBZ0I7RUFMcEIsQUFLSSxNQUxFLEdBRUYsZUFBZSxHQUFHLFdBQVcsQ0FHN0IsZ0JBQWdCLENBQUM7SUFDZixZQUFZLEVBQUUsS0FBTTtJQUNwQixhQUFhLEVBQUUsQ0FBRSxHQUNsQjtFQVJMLEFBWXNCLE1BWmhCLEdBQ0YsV0FBVyxBQVVWLFlBQVksQ0FDWCxnQkFBZ0IsQUFBQSxZQUFZO0VBWmxDLEFBWXNCLE1BWmhCLEdBRUYsZUFBZSxHQUFHLFdBQVcsQUFTNUIsWUFBWSxDQUNYLGdCQUFnQixBQUFBLFlBQVksQ0FBQztJQUMzQixVQUFVLEVBQUUsQ0FBRTtJbEN2RXBCLHVCQUF1QixFa0N3RVcsR0FBb0I7SWxDdkVyRCxzQkFBc0IsRWtDdUVXLEdBQW9CLEdBQ2pEO0VBZlAsQUFvQnNCLE1BcEJoQixHQUNGLFdBQVcsQUFrQlYsV0FBVyxDQUNWLGdCQUFnQixBQUFBLFdBQVc7RUFwQmpDLEFBb0JzQixNQXBCaEIsR0FFRixlQUFlLEdBQUcsV0FBVyxBQWlCNUIsV0FBVyxDQUNWLGdCQUFnQixBQUFBLFdBQVcsQ0FBQztJQUMxQixhQUFhLEVBQUUsQ0FBRTtJbEN2RXZCLDBCQUEwQixFa0N3RVcsR0FBb0I7SWxDdkV4RCx5QkFBeUIsRWtDdUVXLEdBQW9CLEdBQ3BEOztBQXZCUCxBQTJCb0IsTUEzQmQsR0EwQkYsY0FBYyxHQUFHLGVBQWUsR0FBRyxXQUFXLENBQzlDLGdCQUFnQixBQUFBLFlBQVksQ0FBQztFbENyRi9CLHVCQUF1QixFa0NzRlEsQ0FBQztFbENyRi9CLHNCQUFzQixFa0NxRlEsQ0FBQyxHQUM3Qjs7QUFJTCxBQUNrQixjQURKLEdBQUcsV0FBVyxDQUMxQixnQkFBZ0IsQUFBQSxZQUFZLENBQUM7RUFDM0IsZ0JBQWdCLEVBQUUsQ0FBRSxHQUNyQjs7QUFFSCxBQUFjLFdBQUgsR0FBRyxhQUFhLENBQUM7RUFDMUIsZ0JBQWdCLEVBQUUsQ0FBRSxHQUNyQjs7QUFPRCxBQUNJLE1BREUsR0FDRixNQUFNO0FBRFYsQUFFd0IsTUFGbEIsR0FFRixpQkFBaUIsR0FBRyxNQUFNO0FBRjlCLEFBR3NCLE1BSGhCLEdBR0YsZUFBZSxHQUFHLE1BQU0sQ0FBQztFQUN6QixhQUFhLEVBQUUsQ0FBRSxHQU1sQjtFQVZILEFBTUksTUFORSxHQUNGLE1BQU0sQ0FLTixPQUFPO0VBTlgsQUFNSSxNQU5FLEdBRUYsaUJBQWlCLEdBQUcsTUFBTSxDQUkxQixPQUFPO0VBTlgsQUFNSSxNQU5FLEdBR0YsZUFBZSxHQUFHLE1BQU0sQ0FHeEIsT0FBTyxDQUFDO0lBQ04sWUFBWSxFNURtbEJZLElBQUk7STREbGxCNUIsYUFBYSxFNURrbEJXLElBQUksRzREamxCN0I7O0FBVEwsQUFZVSxNQVpKLEdBWUYsTUFBTSxBQUFBLFlBQVk7QUFadEIsQUFhMEMsTUFicEMsR0FhRixpQkFBaUIsQUFBQSxZQUFZLEdBQUcsTUFBTSxBQUFBLFlBQVksQ0FBQztFbEN0SHJELHVCQUF1QixFa0N1SE8sR0FBb0I7RWxDdEhqRCxzQkFBc0IsRWtDc0hPLEdBQW9CLEdBa0JqRDtFQWhDSCxBQWtCVSxNQWxCSixHQVlGLE1BQU0sQUFBQSxZQUFZLEdBSWhCLEtBQUssQUFBQSxZQUFZLEdBRWYsRUFBRSxBQUFBLFlBQVk7RUFsQnRCLEFBa0JVLE1BbEJKLEdBWUYsTUFBTSxBQUFBLFlBQVksR0FLaEIsS0FBSyxBQUFBLFlBQVksR0FDZixFQUFFLEFBQUEsWUFBWTtFQWxCdEIsQUFrQlUsTUFsQkosR0FhRixpQkFBaUIsQUFBQSxZQUFZLEdBQUcsTUFBTSxBQUFBLFlBQVksR0FHaEQsS0FBSyxBQUFBLFlBQVksR0FFZixFQUFFLEFBQUEsWUFBWTtFQWxCdEIsQUFrQlUsTUFsQkosR0FhRixpQkFBaUIsQUFBQSxZQUFZLEdBQUcsTUFBTSxBQUFBLFlBQVksR0FJaEQsS0FBSyxBQUFBLFlBQVksR0FDZixFQUFFLEFBQUEsWUFBWSxDQUFDO0lBQ2Ysc0JBQXNCLEVBQUcsR0FBb0I7SUFDN0MsdUJBQXVCLEVBQUcsR0FBb0IsR0FVL0M7SUE5QlAsQUFzQlUsTUF0QkosR0FZRixNQUFNLEFBQUEsWUFBWSxHQUloQixLQUFLLEFBQUEsWUFBWSxHQUVmLEVBQUUsQUFBQSxZQUFZLENBSWQsRUFBRSxBQUFBLFlBQVk7SUF0QnRCLEFBdUJVLE1BdkJKLEdBWUYsTUFBTSxBQUFBLFlBQVksR0FJaEIsS0FBSyxBQUFBLFlBQVksR0FFZixFQUFFLEFBQUEsWUFBWSxDQUtkLEVBQUUsQUFBQSxZQUFZO0lBdkJ0QixBQXNCVSxNQXRCSixHQVlGLE1BQU0sQUFBQSxZQUFZLEdBS2hCLEtBQUssQUFBQSxZQUFZLEdBQ2YsRUFBRSxBQUFBLFlBQVksQ0FJZCxFQUFFLEFBQUEsWUFBWTtJQXRCdEIsQUF1QlUsTUF2QkosR0FZRixNQUFNLEFBQUEsWUFBWSxHQUtoQixLQUFLLEFBQUEsWUFBWSxHQUNmLEVBQUUsQUFBQSxZQUFZLENBS2QsRUFBRSxBQUFBLFlBQVk7SUF2QnRCLEFBc0JVLE1BdEJKLEdBYUYsaUJBQWlCLEFBQUEsWUFBWSxHQUFHLE1BQU0sQUFBQSxZQUFZLEdBR2hELEtBQUssQUFBQSxZQUFZLEdBRWYsRUFBRSxBQUFBLFlBQVksQ0FJZCxFQUFFLEFBQUEsWUFBWTtJQXRCdEIsQUF1QlUsTUF2QkosR0FhRixpQkFBaUIsQUFBQSxZQUFZLEdBQUcsTUFBTSxBQUFBLFlBQVksR0FHaEQsS0FBSyxBQUFBLFlBQVksR0FFZixFQUFFLEFBQUEsWUFBWSxDQUtkLEVBQUUsQUFBQSxZQUFZO0lBdkJ0QixBQXNCVSxNQXRCSixHQWFGLGlCQUFpQixBQUFBLFlBQVksR0FBRyxNQUFNLEFBQUEsWUFBWSxHQUloRCxLQUFLLEFBQUEsWUFBWSxHQUNmLEVBQUUsQUFBQSxZQUFZLENBSWQsRUFBRSxBQUFBLFlBQVk7SUF0QnRCLEFBdUJVLE1BdkJKLEdBYUYsaUJBQWlCLEFBQUEsWUFBWSxHQUFHLE1BQU0sQUFBQSxZQUFZLEdBSWhELEtBQUssQUFBQSxZQUFZLEdBQ2YsRUFBRSxBQUFBLFlBQVksQ0FLZCxFQUFFLEFBQUEsWUFBWSxDQUFDO01BQ2Isc0JBQXNCLEVBQUcsR0FBb0IsR0FDOUM7SUF6QlQsQUEwQlUsTUExQkosR0FZRixNQUFNLEFBQUEsWUFBWSxHQUloQixLQUFLLEFBQUEsWUFBWSxHQUVmLEVBQUUsQUFBQSxZQUFZLENBUWQsRUFBRSxBQUFBLFdBQVc7SUExQnJCLEFBMkJVLE1BM0JKLEdBWUYsTUFBTSxBQUFBLFlBQVksR0FJaEIsS0FBSyxBQUFBLFlBQVksR0FFZixFQUFFLEFBQUEsWUFBWSxDQVNkLEVBQUUsQUFBQSxXQUFXO0lBM0JyQixBQTBCVSxNQTFCSixHQVlGLE1BQU0sQUFBQSxZQUFZLEdBS2hCLEtBQUssQUFBQSxZQUFZLEdBQ2YsRUFBRSxBQUFBLFlBQVksQ0FRZCxFQUFFLEFBQUEsV0FBVztJQTFCckIsQUEyQlUsTUEzQkosR0FZRixNQUFNLEFBQUEsWUFBWSxHQUtoQixLQUFLLEFBQUEsWUFBWSxHQUNmLEVBQUUsQUFBQSxZQUFZLENBU2QsRUFBRSxBQUFBLFdBQVc7SUEzQnJCLEFBMEJVLE1BMUJKLEdBYUYsaUJBQWlCLEFBQUEsWUFBWSxHQUFHLE1BQU0sQUFBQSxZQUFZLEdBR2hELEtBQUssQUFBQSxZQUFZLEdBRWYsRUFBRSxBQUFBLFlBQVksQ0FRZCxFQUFFLEFBQUEsV0FBVztJQTFCckIsQUEyQlUsTUEzQkosR0FhRixpQkFBaUIsQUFBQSxZQUFZLEdBQUcsTUFBTSxBQUFBLFlBQVksR0FHaEQsS0FBSyxBQUFBLFlBQVksR0FFZixFQUFFLEFBQUEsWUFBWSxDQVNkLEVBQUUsQUFBQSxXQUFXO0lBM0JyQixBQTBCVSxNQTFCSixHQWFGLGlCQUFpQixBQUFBLFlBQVksR0FBRyxNQUFNLEFBQUEsWUFBWSxHQUloRCxLQUFLLEFBQUEsWUFBWSxHQUNmLEVBQUUsQUFBQSxZQUFZLENBUWQsRUFBRSxBQUFBLFdBQVc7SUExQnJCLEFBMkJVLE1BM0JKLEdBYUYsaUJBQWlCLEFBQUEsWUFBWSxHQUFHLE1BQU0sQUFBQSxZQUFZLEdBSWhELEtBQUssQUFBQSxZQUFZLEdBQ2YsRUFBRSxBQUFBLFlBQVksQ0FTZCxFQUFFLEFBQUEsV0FBVyxDQUFDO01BQ1osdUJBQXVCLEVBQUcsR0FBb0IsR0FDL0M7O0FBN0JULEFBa0NVLE1BbENKLEdBa0NGLE1BQU0sQUFBQSxXQUFXO0FBbENyQixBQW1DeUMsTUFuQ25DLEdBbUNGLGlCQUFpQixBQUFBLFdBQVcsR0FBRyxNQUFNLEFBQUEsV0FBVyxDQUFDO0VsQ3BJbkQsMEJBQTBCLEVrQ3FJTyxHQUFvQjtFbENwSXBELHlCQUF5QixFa0NvSU8sR0FBb0IsR0FrQnBEO0VBdERILEFBd0NVLE1BeENKLEdBa0NGLE1BQU0sQUFBQSxXQUFXLEdBSWYsS0FBSyxBQUFBLFdBQVcsR0FFZCxFQUFFLEFBQUEsV0FBVztFQXhDckIsQUF3Q1UsTUF4Q0osR0FrQ0YsTUFBTSxBQUFBLFdBQVcsR0FLZixLQUFLLEFBQUEsV0FBVyxHQUNkLEVBQUUsQUFBQSxXQUFXO0VBeENyQixBQXdDVSxNQXhDSixHQW1DRixpQkFBaUIsQUFBQSxXQUFXLEdBQUcsTUFBTSxBQUFBLFdBQVcsR0FHOUMsS0FBSyxBQUFBLFdBQVcsR0FFZCxFQUFFLEFBQUEsV0FBVztFQXhDckIsQUF3Q1UsTUF4Q0osR0FtQ0YsaUJBQWlCLEFBQUEsV0FBVyxHQUFHLE1BQU0sQUFBQSxXQUFXLEdBSTlDLEtBQUssQUFBQSxXQUFXLEdBQ2QsRUFBRSxBQUFBLFdBQVcsQ0FBQztJQUNkLHlCQUF5QixFQUFHLEdBQW9CO0lBQ2hELDBCQUEwQixFQUFHLEdBQW9CLEdBVWxEO0lBcERQLEFBNENVLE1BNUNKLEdBa0NGLE1BQU0sQUFBQSxXQUFXLEdBSWYsS0FBSyxBQUFBLFdBQVcsR0FFZCxFQUFFLEFBQUEsV0FBVyxDQUliLEVBQUUsQUFBQSxZQUFZO0lBNUN0QixBQTZDVSxNQTdDSixHQWtDRixNQUFNLEFBQUEsV0FBVyxHQUlmLEtBQUssQUFBQSxXQUFXLEdBRWQsRUFBRSxBQUFBLFdBQVcsQ0FLYixFQUFFLEFBQUEsWUFBWTtJQTdDdEIsQUE0Q1UsTUE1Q0osR0FrQ0YsTUFBTSxBQUFBLFdBQVcsR0FLZixLQUFLLEFBQUEsV0FBVyxHQUNkLEVBQUUsQUFBQSxXQUFXLENBSWIsRUFBRSxBQUFBLFlBQVk7SUE1Q3RCLEFBNkNVLE1BN0NKLEdBa0NGLE1BQU0sQUFBQSxXQUFXLEdBS2YsS0FBSyxBQUFBLFdBQVcsR0FDZCxFQUFFLEFBQUEsV0FBVyxDQUtiLEVBQUUsQUFBQSxZQUFZO0lBN0N0QixBQTRDVSxNQTVDSixHQW1DRixpQkFBaUIsQUFBQSxXQUFXLEdBQUcsTUFBTSxBQUFBLFdBQVcsR0FHOUMsS0FBSyxBQUFBLFdBQVcsR0FFZCxFQUFFLEFBQUEsV0FBVyxDQUliLEVBQUUsQUFBQSxZQUFZO0lBNUN0QixBQTZDVSxNQTdDSixHQW1DRixpQkFBaUIsQUFBQSxXQUFXLEdBQUcsTUFBTSxBQUFBLFdBQVcsR0FHOUMsS0FBSyxBQUFBLFdBQVcsR0FFZCxFQUFFLEFBQUEsV0FBVyxDQUtiLEVBQUUsQUFBQSxZQUFZO0lBN0N0QixBQTRDVSxNQTVDSixHQW1DRixpQkFBaUIsQUFBQSxXQUFXLEdBQUcsTUFBTSxBQUFBLFdBQVcsR0FJOUMsS0FBSyxBQUFBLFdBQVcsR0FDZCxFQUFFLEFBQUEsV0FBVyxDQUliLEVBQUUsQUFBQSxZQUFZO0lBNUN0QixBQTZDVSxNQTdDSixHQW1DRixpQkFBaUIsQUFBQSxXQUFXLEdBQUcsTUFBTSxBQUFBLFdBQVcsR0FJOUMsS0FBSyxBQUFBLFdBQVcsR0FDZCxFQUFFLEFBQUEsV0FBVyxDQUtiLEVBQUUsQUFBQSxZQUFZLENBQUM7TUFDYix5QkFBeUIsRUFBRyxHQUFvQixHQUNqRDtJQS9DVCxBQWdEVSxNQWhESixHQWtDRixNQUFNLEFBQUEsV0FBVyxHQUlmLEtBQUssQUFBQSxXQUFXLEdBRWQsRUFBRSxBQUFBLFdBQVcsQ0FRYixFQUFFLEFBQUEsV0FBVztJQWhEckIsQUFpRFUsTUFqREosR0FrQ0YsTUFBTSxBQUFBLFdBQVcsR0FJZixLQUFLLEFBQUEsV0FBVyxHQUVkLEVBQUUsQUFBQSxXQUFXLENBU2IsRUFBRSxBQUFBLFdBQVc7SUFqRHJCLEFBZ0RVLE1BaERKLEdBa0NGLE1BQU0sQUFBQSxXQUFXLEdBS2YsS0FBSyxBQUFBLFdBQVcsR0FDZCxFQUFFLEFBQUEsV0FBVyxDQVFiLEVBQUUsQUFBQSxXQUFXO0lBaERyQixBQWlEVSxNQWpESixHQWtDRixNQUFNLEFBQUEsV0FBVyxHQUtmLEtBQUssQUFBQSxXQUFXLEdBQ2QsRUFBRSxBQUFBLFdBQVcsQ0FTYixFQUFFLEFBQUEsV0FBVztJQWpEckIsQUFnRFUsTUFoREosR0FtQ0YsaUJBQWlCLEFBQUEsV0FBVyxHQUFHLE1BQU0sQUFBQSxXQUFXLEdBRzlDLEtBQUssQUFBQSxXQUFXLEdBRWQsRUFBRSxBQUFBLFdBQVcsQ0FRYixFQUFFLEFBQUEsV0FBVztJQWhEckIsQUFpRFUsTUFqREosR0FtQ0YsaUJBQWlCLEFBQUEsV0FBVyxHQUFHLE1BQU0sQUFBQSxXQUFXLEdBRzlDLEtBQUssQUFBQSxXQUFXLEdBRWQsRUFBRSxBQUFBLFdBQVcsQ0FTYixFQUFFLEFBQUEsV0FBVztJQWpEckIsQUFnRFUsTUFoREosR0FtQ0YsaUJBQWlCLEFBQUEsV0FBVyxHQUFHLE1BQU0sQUFBQSxXQUFXLEdBSTlDLEtBQUssQUFBQSxXQUFXLEdBQ2QsRUFBRSxBQUFBLFdBQVcsQ0FRYixFQUFFLEFBQUEsV0FBVztJQWhEckIsQUFpRFUsTUFqREosR0FtQ0YsaUJBQWlCLEFBQUEsV0FBVyxHQUFHLE1BQU0sQUFBQSxXQUFXLEdBSTlDLEtBQUssQUFBQSxXQUFXLEdBQ2QsRUFBRSxBQUFBLFdBQVcsQ0FTYixFQUFFLEFBQUEsV0FBVyxDQUFDO01BQ1osMEJBQTBCLEVBQUcsR0FBb0IsR0FDbEQ7O0FBbkRULEFBdURrQixNQXZEWixHQXVERixXQUFXLEdBQUcsTUFBTTtBQXZEeEIsQUF3RGtCLE1BeERaLEdBd0RGLFdBQVcsR0FBRyxpQkFBaUI7QUF4RG5DLEFBeURhLE1BekRQLEdBeURGLE1BQU0sR0FBRyxXQUFXO0FBekR4QixBQTBEd0IsTUExRGxCLEdBMERGLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztFQUNoQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEtBQUssQzVEekJPLElBQUksRzREMEJqQzs7QUE1REgsQUE2RGdELE1BN0QxQyxHQTZERixNQUFNLEdBQUcsS0FBSyxBQUFBLFlBQVksR0FBRyxFQUFFLEFBQUEsWUFBWSxDQUFDLEVBQUU7QUE3RGxELEFBOERnRCxNQTlEMUMsR0E4REYsTUFBTSxHQUFHLEtBQUssQUFBQSxZQUFZLEdBQUcsRUFBRSxBQUFBLFlBQVksQ0FBQyxFQUFFLENBQUM7RUFDL0MsVUFBVSxFQUFFLENBQUUsR0FDZjs7QUFoRUgsQUFpRUksTUFqRUUsR0FpRUYsZUFBZTtBQWpFbkIsQUFrRXdCLE1BbEVsQixHQWtFRixpQkFBaUIsR0FBRyxlQUFlLENBQUM7RUFDcEMsTUFBTSxFQUFFLENBQUUsR0FpQ1g7RUFwR0gsQUF3RVksTUF4RU4sR0FpRUYsZUFBZSxHQUdiLEtBQUssR0FHSCxFQUFFLEdBQ0EsRUFBRSxBQUFBLFlBQVk7RUF4RXhCLEFBeUVZLE1BekVOLEdBaUVGLGVBQWUsR0FHYixLQUFLLEdBR0gsRUFBRSxHQUVBLEVBQUUsQUFBQSxZQUFZO0VBekV4QixBQXdFWSxNQXhFTixHQWlFRixlQUFlLEdBSWIsS0FBSyxHQUVILEVBQUUsR0FDQSxFQUFFLEFBQUEsWUFBWTtFQXhFeEIsQUF5RVksTUF6RU4sR0FpRUYsZUFBZSxHQUliLEtBQUssR0FFSCxFQUFFLEdBRUEsRUFBRSxBQUFBLFlBQVk7RUF6RXhCLEFBd0VZLE1BeEVOLEdBaUVGLGVBQWUsR0FLYixLQUFLLEdBQ0gsRUFBRSxHQUNBLEVBQUUsQUFBQSxZQUFZO0VBeEV4QixBQXlFWSxNQXpFTixHQWlFRixlQUFlLEdBS2IsS0FBSyxHQUNILEVBQUUsR0FFQSxFQUFFLEFBQUEsWUFBWTtFQXpFeEIsQUF3RVksTUF4RU4sR0FrRUYsaUJBQWlCLEdBQUcsZUFBZSxHQUVqQyxLQUFLLEdBR0gsRUFBRSxHQUNBLEVBQUUsQUFBQSxZQUFZO0VBeEV4QixBQXlFWSxNQXpFTixHQWtFRixpQkFBaUIsR0FBRyxlQUFlLEdBRWpDLEtBQUssR0FHSCxFQUFFLEdBRUEsRUFBRSxBQUFBLFlBQVk7RUF6RXhCLEFBd0VZLE1BeEVOLEdBa0VGLGlCQUFpQixHQUFHLGVBQWUsR0FHakMsS0FBSyxHQUVILEVBQUUsR0FDQSxFQUFFLEFBQUEsWUFBWTtFQXhFeEIsQUF5RVksTUF6RU4sR0FrRUYsaUJBQWlCLEdBQUcsZUFBZSxHQUdqQyxLQUFLLEdBRUgsRUFBRSxHQUVBLEVBQUUsQUFBQSxZQUFZO0VBekV4QixBQXdFWSxNQXhFTixHQWtFRixpQkFBaUIsR0FBRyxlQUFlLEdBSWpDLEtBQUssR0FDSCxFQUFFLEdBQ0EsRUFBRSxBQUFBLFlBQVk7RUF4RXhCLEFBeUVZLE1BekVOLEdBa0VGLGlCQUFpQixHQUFHLGVBQWUsR0FJakMsS0FBSyxHQUNILEVBQUUsR0FFQSxFQUFFLEFBQUEsWUFBWSxDQUFDO0lBQ2YsV0FBVyxFQUFFLENBQUUsR0FDaEI7RUEzRVQsQUE0RVksTUE1RU4sR0FpRUYsZUFBZSxHQUdiLEtBQUssR0FHSCxFQUFFLEdBS0EsRUFBRSxBQUFBLFdBQVc7RUE1RXZCLEFBNkVZLE1BN0VOLEdBaUVGLGVBQWUsR0FHYixLQUFLLEdBR0gsRUFBRSxHQU1BLEVBQUUsQUFBQSxXQUFXO0VBN0V2QixBQTRFWSxNQTVFTixHQWlFRixlQUFlLEdBSWIsS0FBSyxHQUVILEVBQUUsR0FLQSxFQUFFLEFBQUEsV0FBVztFQTVFdkIsQUE2RVksTUE3RU4sR0FpRUYsZUFBZSxHQUliLEtBQUssR0FFSCxFQUFFLEdBTUEsRUFBRSxBQUFBLFdBQVc7RUE3RXZCLEFBNEVZLE1BNUVOLEdBaUVGLGVBQWUsR0FLYixLQUFLLEdBQ0gsRUFBRSxHQUtBLEVBQUUsQUFBQSxXQUFXO0VBNUV2QixBQTZFWSxNQTdFTixHQWlFRixlQUFlLEdBS2IsS0FBSyxHQUNILEVBQUUsR0FNQSxFQUFFLEFBQUEsV0FBVztFQTdFdkIsQUE0RVksTUE1RU4sR0FrRUYsaUJBQWlCLEdBQUcsZUFBZSxHQUVqQyxLQUFLLEdBR0gsRUFBRSxHQUtBLEVBQUUsQUFBQSxXQUFXO0VBNUV2QixBQTZFWSxNQTdFTixHQWtFRixpQkFBaUIsR0FBRyxlQUFlLEdBRWpDLEtBQUssR0FHSCxFQUFFLEdBTUEsRUFBRSxBQUFBLFdBQVc7RUE3RXZCLEFBNEVZLE1BNUVOLEdBa0VGLGlCQUFpQixHQUFHLGVBQWUsR0FHakMsS0FBSyxHQUVILEVBQUUsR0FLQSxFQUFFLEFBQUEsV0FBVztFQTVFdkIsQUE2RVksTUE3RU4sR0FrRUYsaUJBQWlCLEdBQUcsZUFBZSxHQUdqQyxLQUFLLEdBRUgsRUFBRSxHQU1BLEVBQUUsQUFBQSxXQUFXO0VBN0V2QixBQTRFWSxNQTVFTixHQWtFRixpQkFBaUIsR0FBRyxlQUFlLEdBSWpDLEtBQUssR0FDSCxFQUFFLEdBS0EsRUFBRSxBQUFBLFdBQVc7RUE1RXZCLEFBNkVZLE1BN0VOLEdBa0VGLGlCQUFpQixHQUFHLGVBQWUsR0FJakMsS0FBSyxHQUNILEVBQUUsR0FNQSxFQUFFLEFBQUEsV0FBVyxDQUFDO0lBQ2QsWUFBWSxFQUFFLENBQUUsR0FDakI7RUEvRVQsQUFxRlUsTUFyRkosR0FpRUYsZUFBZSxHQWlCYixLQUFLLEdBRUgsRUFBRSxBQUFBLFlBQVksR0FDWixFQUFFO0VBckZaLEFBc0ZVLE1BdEZKLEdBaUVGLGVBQWUsR0FpQmIsS0FBSyxHQUVILEVBQUUsQUFBQSxZQUFZLEdBRVosRUFBRTtFQXRGWixBQXFGVSxNQXJGSixHQWlFRixlQUFlLEdBa0JiLEtBQUssR0FDSCxFQUFFLEFBQUEsWUFBWSxHQUNaLEVBQUU7RUFyRlosQUFzRlUsTUF0RkosR0FpRUYsZUFBZSxHQWtCYixLQUFLLEdBQ0gsRUFBRSxBQUFBLFlBQVksR0FFWixFQUFFO0VBdEZaLEFBcUZVLE1BckZKLEdBa0VGLGlCQUFpQixHQUFHLGVBQWUsR0FnQmpDLEtBQUssR0FFSCxFQUFFLEFBQUEsWUFBWSxHQUNaLEVBQUU7RUFyRlosQUFzRlUsTUF0RkosR0FrRUYsaUJBQWlCLEdBQUcsZUFBZSxHQWdCakMsS0FBSyxHQUVILEVBQUUsQUFBQSxZQUFZLEdBRVosRUFBRTtFQXRGWixBQXFGVSxNQXJGSixHQWtFRixpQkFBaUIsR0FBRyxlQUFlLEdBaUJqQyxLQUFLLEdBQ0gsRUFBRSxBQUFBLFlBQVksR0FDWixFQUFFO0VBckZaLEFBc0ZVLE1BdEZKLEdBa0VGLGlCQUFpQixHQUFHLGVBQWUsR0FpQmpDLEtBQUssR0FDSCxFQUFFLEFBQUEsWUFBWSxHQUVaLEVBQUUsQ0FBQztJQUNILGFBQWEsRUFBRSxDQUFFLEdBQ2xCO0VBeEZULEFBOEZVLE1BOUZKLEdBaUVGLGVBQWUsR0EwQmIsS0FBSyxHQUVILEVBQUUsQUFBQSxXQUFXLEdBQ1gsRUFBRTtFQTlGWixBQStGVSxNQS9GSixHQWlFRixlQUFlLEdBMEJiLEtBQUssR0FFSCxFQUFFLEFBQUEsV0FBVyxHQUVYLEVBQUU7RUEvRlosQUE4RlUsTUE5RkosR0FpRUYsZUFBZSxHQTJCYixLQUFLLEdBQ0gsRUFBRSxBQUFBLFdBQVcsR0FDWCxFQUFFO0VBOUZaLEFBK0ZVLE1BL0ZKLEdBaUVGLGVBQWUsR0EyQmIsS0FBSyxHQUNILEVBQUUsQUFBQSxXQUFXLEdBRVgsRUFBRTtFQS9GWixBQThGVSxNQTlGSixHQWtFRixpQkFBaUIsR0FBRyxlQUFlLEdBeUJqQyxLQUFLLEdBRUgsRUFBRSxBQUFBLFdBQVcsR0FDWCxFQUFFO0VBOUZaLEFBK0ZVLE1BL0ZKLEdBa0VGLGlCQUFpQixHQUFHLGVBQWUsR0F5QmpDLEtBQUssR0FFSCxFQUFFLEFBQUEsV0FBVyxHQUVYLEVBQUU7RUEvRlosQUE4RlUsTUE5RkosR0FrRUYsaUJBQWlCLEdBQUcsZUFBZSxHQTBCakMsS0FBSyxHQUNILEVBQUUsQUFBQSxXQUFXLEdBQ1gsRUFBRTtFQTlGWixBQStGVSxNQS9GSixHQWtFRixpQkFBaUIsR0FBRyxlQUFlLEdBMEJqQyxLQUFLLEdBQ0gsRUFBRSxBQUFBLFdBQVcsR0FFWCxFQUFFLENBQUM7SUFDSCxhQUFhLEVBQUUsQ0FBRSxHQUNsQjs7QUFqR1QsQUFxR0ksTUFyR0UsR0FxR0YsaUJBQWlCLENBQUM7RUFDbEIsTUFBTSxFQUFFLENBQUU7RUFDVixhQUFhLEVBQUUsQ0FBRSxHQUNsQjs7QUFTSCxBQUFBLFlBQVksQ0FBQztFQUNYLGFBQWEsRTVEN0pXLElBQUssRzREd0w5QjtFQTVCRCxBQUlFLFlBSlUsQ0FJVixNQUFNLENBQUM7SUFDTCxhQUFhLEVBQUUsQ0FBRTtJQUNqQixhQUFhLEU1RHRIVyxHQUFHLEc0RDJINUI7SUFYSCxBQVFNLFlBUk0sQ0FJVixNQUFNLEdBSUYsTUFBTSxDQUFDO01BQ1AsVUFBVSxFQUFFLEdBQUksR0FDakI7RUFWTCxBQWFFLFlBYlUsQ0FhVixjQUFjLENBQUM7SUFDYixhQUFhLEVBQUUsQ0FBRSxHQU1sQjtJQXBCSCxBQWdCd0IsWUFoQlosQ0FhVixjQUFjLEdBR1YsZUFBZSxHQUFHLFdBQVc7SUFoQm5DLEFBaUJ3QixZQWpCWixDQWFWLGNBQWMsR0FJVixlQUFlLEdBQUcsV0FBVyxDQUFDO01BQzlCLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSyxDNUQ2ZEcsSUFBSSxHNEQ1ZDdCO0VBbkJMLEFBc0JFLFlBdEJVLENBc0JWLGFBQWEsQ0FBQztJQUNaLFVBQVUsRUFBRSxDQUFFLEdBSWY7SUEzQkgsQUF3QnNCLFlBeEJWLENBc0JWLGFBQWEsR0FFVCxlQUFlLENBQUMsV0FBVyxDQUFDO01BQzVCLGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDNURzZEEsSUFBSSxHNERyZDdCOztBQU1MLEFBQUEsY0FBYyxDQUFDO0UxQzFQYixZQUFZLEVsQjZzQmdCLElBQUksRzREamRqQztFQUZELEExQ3hQTSxjMEN3UFEsRzFDeFBSLGNBQWMsQ0FBQztJQUNqQixLQUFLLEVsQk1nQixPQUFPO0lrQkw1QixnQkFBZ0IsRWxCMHNCVSxPQUFPO0lrQnpzQmpDLFlBQVksRWxCd3NCYyxJQUFJLEdrQi9yQi9CO0kwQzRPSCxBMUNuUHdCLGMwQ21QVixHMUN4UFIsY0FBYyxHQUtkLGVBQWUsR0FBRyxXQUFXLENBQUM7TUFDOUIsZ0JBQWdCLEVsQnFzQlEsSUFBSSxHa0Jwc0I3QjtJMENpUEwsQTFDaFBJLGMwQ2dQVSxHMUN4UFIsY0FBYyxDQVFoQixNQUFNLENBQUM7TUFDTCxLQUFLLEVsQm1zQm1CLE9BQU87TWtCbHNCL0IsZ0JBQWdCLEVsQkhHLE9BQU8sR2tCSTNCO0UwQzZPTCxBMUMxT3dCLGMwQzBPVixHMUMzT1IsYUFBYSxHQUNiLGVBQWUsR0FBRyxXQUFXLENBQUM7SUFDOUIsbUJBQW1CLEVsQjRyQkssSUFBSSxHa0IzckI3Qjs7QTBDMk9MLEFBQUEsY0FBYyxDQUFDO0UxQzdQYixZQUFZLEVsQmNVLE9BQU0sRzREaVA3QjtFQUZELEExQzNQTSxjMEMyUFEsRzFDM1BSLGNBQWMsQ0FBQztJQUNqQixLQUFLLEVsQjZzQnFCLElBQUk7SWtCNXNCOUIsZ0JBQWdCLEVsQlVJLE9BQU07SWtCVDFCLFlBQVksRWxCU1EsT0FBTSxHa0JBM0I7STBDK09ILEExQ3RQd0IsYzBDc1BWLEcxQzNQUixjQUFjLEdBS2QsZUFBZSxHQUFHLFdBQVcsQ0FBQztNQUM5QixnQkFBZ0IsRWxCTUUsT0FBTSxHa0JMekI7STBDb1BMLEExQ25QSSxjMENtUFUsRzFDM1BSLGNBQWMsQ0FRaEIsTUFBTSxDQUFDO01BQ0wsS0FBSyxFbEJHYSxPQUFNO01rQkZ4QixnQkFBZ0IsRWxCb3NCUSxJQUFJLEdrQm5zQjdCO0UwQ2dQTCxBMUM3T3dCLGMwQzZPVixHMUM5T1IsYUFBYSxHQUNiLGVBQWUsR0FBRyxXQUFXLENBQUM7SUFDOUIsbUJBQW1CLEVsQkhELE9BQU0sR2tCSXpCOztBMEM4T0wsQUFBQSxjQUFjLENBQUM7RTFDaFFiLFlBQVksRWxCc2ZtQixPQUFNLEc0RHBQdEM7RUFGRCxBMUM5UE0sYzBDOFBRLEcxQzlQUixjQUFjLENBQUM7SUFDakIsS0FBSyxFbEJpZndCLE9BQU87SWtCaGZwQyxnQkFBZ0IsRWxCaWZhLE9BQU87SWtCaGZwQyxZQUFZLEVsQmlmaUIsT0FBTSxHa0J4ZXBDO0kwQ2tQSCxBMUN6UHdCLGMwQ3lQVixHMUM5UFIsY0FBYyxHQUtkLGVBQWUsR0FBRyxXQUFXLENBQUM7TUFDOUIsZ0JBQWdCLEVsQjhlVyxPQUFNLEdrQjdlbEM7STBDdVBMLEExQ3RQSSxjMENzUFUsRzFDOVBSLGNBQWMsQ0FRaEIsTUFBTSxDQUFDO01BQ0wsS0FBSyxFbEIwZXNCLE9BQU87TWtCemVsQyxnQkFBZ0IsRWxCd2VXLE9BQU8sR2tCdmVuQztFMENtUEwsQTFDaFB3QixjMENnUFYsRzFDalBSLGFBQWEsR0FDYixlQUFlLEdBQUcsV0FBVyxDQUFDO0lBQzlCLG1CQUFtQixFbEJxZVEsT0FBTSxHa0JwZWxDOztBMENpUEwsQUFBQSxXQUFXLENBQUM7RTFDblFWLFlBQVksRWxCMGZtQixPQUFNLEc0RHJQdEM7RUFGRCxBMUNqUU0sVzBDaVFLLEcxQ2pRTCxjQUFjLENBQUM7SUFDakIsS0FBSyxFbEJxZndCLE9BQU87SWtCcGZwQyxnQkFBZ0IsRWxCcWZhLE9BQU87SWtCcGZwQyxZQUFZLEVsQnFmaUIsT0FBTSxHa0I1ZXBDO0kwQ3FQSCxBMUM1UHdCLFcwQzRQYixHMUNqUUwsY0FBYyxHQUtkLGVBQWUsR0FBRyxXQUFXLENBQUM7TUFDOUIsZ0JBQWdCLEVsQmtmVyxPQUFNLEdrQmpmbEM7STBDMFBMLEExQ3pQSSxXMEN5UE8sRzFDalFMLGNBQWMsQ0FRaEIsTUFBTSxDQUFDO01BQ0wsS0FBSyxFbEI4ZXNCLE9BQU87TWtCN2VsQyxnQkFBZ0IsRWxCNGVXLE9BQU8sR2tCM2VuQztFMENzUEwsQTFDblB3QixXMENtUGIsRzFDcFBMLGFBQWEsR0FDYixlQUFlLEdBQUcsV0FBVyxDQUFDO0lBQzlCLG1CQUFtQixFbEJ5ZVEsT0FBTSxHa0J4ZWxDOztBMENvUEwsQUFBQSxjQUFjLENBQUM7RTFDdFFiLFlBQVksRWxCOGZtQixPQUFNLEc0RHRQdEM7RUFGRCxBMUNwUU0sYzBDb1FRLEcxQ3BRUixjQUFjLENBQUM7SUFDakIsS0FBSyxFbEJ5ZndCLE9BQU87SWtCeGZwQyxnQkFBZ0IsRWxCeWZhLE9BQU87SWtCeGZwQyxZQUFZLEVsQnlmaUIsT0FBTSxHa0JoZnBDO0kwQ3dQSCxBMUMvUHdCLGMwQytQVixHMUNwUVIsY0FBYyxHQUtkLGVBQWUsR0FBRyxXQUFXLENBQUM7TUFDOUIsZ0JBQWdCLEVsQnNmVyxPQUFNLEdrQnJmbEM7STBDNlBMLEExQzVQSSxjMEM0UFUsRzFDcFFSLGNBQWMsQ0FRaEIsTUFBTSxDQUFDO01BQ0wsS0FBSyxFbEJrZnNCLE9BQU87TWtCamZsQyxnQkFBZ0IsRWxCZ2ZXLE9BQU8sR2tCL2VuQztFMEN5UEwsQTFDdFB3QixjMENzUFYsRzFDdlBSLGFBQWEsR0FDYixlQUFlLEdBQUcsV0FBVyxDQUFDO0lBQzlCLG1CQUFtQixFbEI2ZVEsT0FBTSxHa0I1ZWxDOztBMEN1UEwsQUFBQSxhQUFhLENBQUM7RTFDelFaLFlBQVksRWxCa2dCbUIsT0FBTSxHNER2UHRDO0VBRkQsQTFDdlFNLGEwQ3VRTyxHMUN2UVAsY0FBYyxDQUFDO0lBQ2pCLEtBQUssRWxCNmZ3QixPQUFPO0lrQjVmcEMsZ0JBQWdCLEVsQjZmYSxPQUFPO0lrQjVmcEMsWUFBWSxFbEI2ZmlCLE9BQU0sR2tCcGZwQztJMEMyUEgsQTFDbFF3QixhMENrUVgsRzFDdlFQLGNBQWMsR0FLZCxlQUFlLEdBQUcsV0FBVyxDQUFDO01BQzlCLGdCQUFnQixFbEIwZlcsT0FBTSxHa0J6ZmxDO0kwQ2dRTCxBMUMvUEksYTBDK1BTLEcxQ3ZRUCxjQUFjLENBUWhCLE1BQU0sQ0FBQztNQUNMLEtBQUssRWxCc2ZzQixPQUFPO01rQnJmbEMsZ0JBQWdCLEVsQm9mVyxPQUFPLEdrQm5mbkM7RTBDNFBMLEExQ3pQd0IsYTBDeVBYLEcxQzFQUCxhQUFhLEdBQ2IsZUFBZSxHQUFHLFdBQVcsQ0FBQztJQUM5QixtQkFBbUIsRWxCaWZRLE9BQU0sR2tCaGZsQzs7QTJDakJMLEFBQUEsaUJBQWlCLENBQUM7RUFDaEIsUUFBUSxFQUFFLFFBQVM7RUFDbkIsT0FBTyxFQUFFLEtBQU07RUFDZixNQUFNLEVBQUUsQ0FBRTtFQUNWLE9BQU8sRUFBRSxDQUFFO0VBQ1gsUUFBUSxFQUFFLE1BQU8sR0FlbEI7RUFwQkQsQUFPRSxpQkFQZSxDQU9mLHNCQUFzQjtFQVB4QixBQVFFLGlCQVJlLENBUWYsTUFBTTtFQVJSLEFBU0UsaUJBVGUsQ0FTZixLQUFLO0VBVFAsQUFVRSxpQkFWZSxDQVVmLE1BQU07RUFWUixBQVdFLGlCQVhlLENBV2YsS0FBSyxDQUFDO0lBQ0osUUFBUSxFQUFFLFFBQVM7SUFDbkIsR0FBRyxFQUFFLENBQUU7SUFDUCxJQUFJLEVBQUUsQ0FBRTtJQUNSLE1BQU0sRUFBRSxDQUFFO0lBQ1YsTUFBTSxFQUFFLElBQUs7SUFDYixLQUFLLEVBQUUsSUFBSztJQUNaLE1BQU0sRUFBRSxDQUFFLEdBQ1g7O0FBSUgsQUFBQSx1QkFBdUIsQ0FBQztFQUN0QixjQUFjLEVBQUUsTUFBTyxHQUN4Qjs7QUFHRCxBQUFBLHNCQUFzQixDQUFDO0VBQ3JCLGNBQWMsRUFBRSxHQUFJLEdBQ3JCOztBQzVCRCxBQUFBLEtBQUssQ0FBQztFQUNKLFVBQVUsRUFBRSxJQUFLO0VBQ2pCLE9BQU8sRUFBRSxJQUFLO0VBQ2QsYUFBYSxFQUFFLElBQUs7RUFDcEIsZ0JBQWdCLEU5RHF2QlksT0FBTztFOERwdkJuQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQzlEcXZCVyxPQUFNO0U4RHB2QmxDLGFBQWEsRTlEaUdhLEdBQUc7RWV6QzdCLGtCQUFrQixFK0N2REUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFJO0UvQ3dEaEMsVUFBVSxFK0N4REUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFJLEdBS3pDO0VBWkQsQUFRRSxLQVJHLENBUUgsVUFBVSxDQUFDO0lBQ1QsWUFBWSxFQUFFLElBQUs7SUFDbkIsWUFBWSxFQUFFLG1CQUFJLEdBQ25COztBQUlILEFBQUEsUUFBUSxDQUFDO0VBQ1AsT0FBTyxFQUFFLElBQUs7RUFDZCxhQUFhLEU5RHVGYSxHQUFHLEc4RHRGOUI7O0FBQ0QsQUFBQSxRQUFRLENBQUM7RUFDUCxPQUFPLEVBQUUsR0FBSTtFQUNiLGFBQWEsRTlEb0ZhLEdBQUcsRzhEbkY5Qjs7QUN2QkQsQUFBQSxNQUFNLENBQUM7RUFDTCxLQUFLLEVBQUUsS0FBTTtFQUNiLFNBQVMsRUFBRyxJQUFlO0VBQzNCLFdBQVcsRS9EbXpCaUIsSUFBSTtFK0RsekJoQyxXQUFXLEVBQUUsQ0FBRTtFQUNmLEtBQUssRS9Ea3pCdUIsSUFBSTtFK0RqekJoQyxXQUFXLEUvRGt6QmlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUk7RUkxekJ4QyxPQUFPLEUyRFNVLEdBQUU7RTNETm5CLE1BQU0sRUFBRSxpQkFBSyxHMkRpQmQ7RUFsQkQsQUFBQSxNQUFNLEFBU0gsTUFBTSxFQVRULEFBQUEsTUFBTSxBQVVILE1BQU0sQ0FBQztJQUNOLEtBQUssRS9ENHlCcUIsSUFBSTtJK0QzeUI5QixlQUFlLEVBQUUsSUFBSztJQUN0QixNQUFNLEVBQUUsT0FBUTtJM0RmbEIsT0FBTyxFMkRnQlksR0FBRTtJM0RickIsTUFBTSxFQUFFLGlCQUFLLEcyRGNaOztBQVNILEFBQU0sTUFBQSxBQUFBLE1BQU0sQ0FBQztFQUNYLE9BQU8sRUFBRSxDQUFFO0VBQ1gsTUFBTSxFQUFFLE9BQVE7RUFDaEIsVUFBVSxFQUFFLFdBQVk7RUFDeEIsTUFBTSxFQUFFLENBQUU7RUFDVixrQkFBa0IsRUFBRSxJQUFLLEdBQzFCOztBQ3pCRCxBQUFBLFdBQVcsQ0FBQztFQUNWLFFBQVEsRUFBRSxNQUFPLEdBQ2xCOztBQUdELEFBQUEsTUFBTSxDQUFDO0VBQ0wsT0FBTyxFQUFFLElBQUs7RUFDZCxRQUFRLEVBQUUsTUFBTztFQUNqQixRQUFRLEVBQUUsS0FBTTtFQUNoQixHQUFHLEVBQUUsQ0FBRTtFQUNQLEtBQUssRUFBRSxDQUFFO0VBQ1QsTUFBTSxFQUFFLENBQUU7RUFDVixJQUFJLEVBQUUsQ0FBRTtFQUNSLE9BQU8sRWhFbVFrQixJQUFJO0VnRWxRN0IsMEJBQTBCLEVBQUUsS0FBTTtFQUlsQyxPQUFPLEVBQUUsQ0FBRSxHQVFaO0VBckJELEFBZ0JTLE1BaEJILEFBZ0JILEtBQUssQ0FBQyxhQUFhLENBQUM7SWpEMEdyQixpQkFBaUIsRUFBRSxrQkFBUztJQUN4QixhQUFhLEVBQUUsa0JBQVM7SUFDdkIsWUFBWSxFQUFFLGtCQUFTO0lBQ3BCLFNBQVMsRUFBRSxrQkFBUztJQWtFNUIsa0JBQWtCLEVBQUUsaUJBQUMsQ2lEN0tXLElBQUksQ0FBQyxRQUFRO0lqRDhLMUMsZUFBZSxFQUFFLGNBQUMsQ2lEOUtXLElBQUksQ0FBQyxRQUFRO0lqRCtLeEMsYUFBYSxFQUFFLFlBQUMsQ2lEL0tXLElBQUksQ0FBQyxRQUFRO0lqRGdMckMsVUFBVSxFQUFFLFNBQVMsQ2lEaExHLElBQUksQ0FBQyxRQUFRLEdBQzVDO0VBbkJILEFBb0JPLE1BcEJELEFBb0JILEdBQUcsQ0FBQyxhQUFhLENBQUM7SWpEc0duQixpQkFBaUIsRUFBRSxlQUFTO0lBQ3hCLGFBQWEsRUFBRSxlQUFTO0lBQ3ZCLFlBQVksRUFBRSxlQUFTO0lBQ3BCLFNBQVMsRUFBRSxlQUFTLEdpRHpHb0I7O0FBRWxELEFBQVksV0FBRCxDQUFDLE1BQU0sQ0FBQztFQUNqQixVQUFVLEVBQUUsTUFBTztFQUNuQixVQUFVLEVBQUUsSUFBSyxHQUNsQjs7QUFHRCxBQUFBLGFBQWEsQ0FBQztFQUNaLFFBQVEsRUFBRSxRQUFTO0VBQ25CLEtBQUssRUFBRSxJQUFLO0VBQ1osTUFBTSxFQUFFLElBQUssR0FDZDs7QUFHRCxBQUFBLGNBQWMsQ0FBQztFQUNiLFFBQVEsRUFBRSxRQUFTO0VBQ25CLGdCQUFnQixFaEV1aUI2QixJQUFJO0VnRXRpQmpELE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDaEUwaUI0QixJQUFJO0VnRXppQmpELE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDaEV1aUI0QixrQkFBSTtFZ0V0aUJqRCxhQUFhLEVoRXVEYSxHQUFHO0VlMUM3QixrQkFBa0IsRWlEWkUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsa0JBQUk7RWpEYTFCLFVBQVUsRWlEYkUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsa0JBQUk7RUFDbEMsZUFBZSxFQUFFLFdBQVk7RUFFN0IsT0FBTyxFQUFFLENBQUUsR0FDWjs7QUFHRCxBQUFBLGVBQWUsQ0FBQztFQUNkLFFBQVEsRUFBRSxLQUFNO0VBQ2hCLEdBQUcsRUFBRSxDQUFFO0VBQ1AsS0FBSyxFQUFFLENBQUU7RUFDVCxNQUFNLEVBQUUsQ0FBRTtFQUNWLElBQUksRUFBRSxDQUFFO0VBQ1IsT0FBTyxFaEVvTmtCLElBQUk7RWdFbk43QixnQkFBZ0IsRWhFNGhCWSxJQUFJLEdnRXhoQmpDO0VBWEQsQUFBQSxlQUFlLEFBU1osS0FBSyxDQUFDO0k1RHJFUCxPQUFPLEU0RHFFbUIsQ0FBQztJNURsRTNCLE1BQU0sRUFBRSxnQkFBSyxHNERrRW1CO0VBVGxDLEFBQUEsZUFBZSxBQVVaLEdBQUcsQ0FBQztJNUR0RUwsT0FBTyxFSmltQnFCLEdBQUU7SUk5bEI5QixNQUFNLEVBQUUsaUJBQUssRzREbUV1Qzs7QUFLdEQsQUFBQSxhQUFhLENBQUM7RUFDWixPQUFPLEVoRXVnQnFCLElBQUk7RWdFdGdCaEMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENoRXNoQkksT0FBTyxHZ0VwaEJwQztFQUpELEFBQUEsYUFBYSxBcENqRVYsT0FBTyxFb0NpRVYsQUFBQSxhQUFhLEFwQ2hFVixNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsR0FBSTtJQUNiLE9BQU8sRUFBRSxLQUFNLEdBQ2hCO0VvQzZESCxBQUFBLGFBQWEsQXBDNURWLE1BQU0sQ0FBQztJQUNOLEtBQUssRUFBRSxJQUFLLEdBQ2I7O0FvQ2dFSCxBQUFjLGFBQUQsQ0FBQyxNQUFNLENBQUM7RUFDbkIsVUFBVSxFQUFFLElBQUssR0FDbEI7O0FBR0QsQUFBQSxZQUFZLENBQUM7RUFDWCxNQUFNLEVBQUUsQ0FBRTtFQUNWLFdBQVcsRWhFNUJhLE9BQVcsR2dFNkJwQzs7QUFJRCxBQUFBLFdBQVcsQ0FBQztFQUNWLFFBQVEsRUFBRSxRQUFTO0VBQ25CLE9BQU8sRWhFaWZxQixJQUFJLEdnRWhmakM7O0FBR0QsQUFBQSxhQUFhLENBQUM7RUFDWixPQUFPLEVoRTRlcUIsSUFBSTtFZ0UzZWhDLFVBQVUsRUFBRSxLQUFNO0VBQ2xCLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSyxDaEU2Zk8sT0FBTyxHZ0U3ZXBDO0VBbkJELEFBQUEsYUFBYSxBcEN6RlYsT0FBTyxFb0N5RlYsQUFBQSxhQUFhLEFwQ3hGVixNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsR0FBSTtJQUNiLE9BQU8sRUFBRSxLQUFNLEdBQ2hCO0VvQ3FGSCxBQUFBLGFBQWEsQXBDcEZWLE1BQU0sQ0FBQztJQUNOLEtBQUssRUFBRSxJQUFLLEdBQ2I7RW9Da0ZILEFBT1MsYUFQSSxDQU9YLElBQUksR0FBRyxJQUFJLENBQUM7SUFDVixXQUFXLEVBQUUsR0FBSTtJQUNqQixhQUFhLEVBQUUsQ0FBRSxHQUNsQjtFQVZILEFBWW9CLGFBWlAsQ0FZWCxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixXQUFXLEVBQUUsSUFBSyxHQUNuQjtFQWRILEFBZ0JlLGFBaEJGLENBZ0JYLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDdEIsV0FBVyxFQUFFLENBQUUsR0FDaEI7O0FBSUgsQUFBQSx3QkFBd0IsQ0FBQztFQUN2QixRQUFRLEVBQUUsUUFBUztFQUNuQixHQUFHLEVBQUUsT0FBUTtFQUNiLEtBQUssRUFBRSxJQUFLO0VBQ1osTUFBTSxFQUFFLElBQUs7RUFDYixRQUFRLEVBQUUsTUFBTyxHQUNsQjs7QUFHRCxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7RUFFZixBQUFBLGFBQWEsQ0FBQztJQUNaLEtBQUssRWhFbWVxQixLQUFLO0lnRWxlL0IsTUFBTSxFQUFFLFNBQVUsR0FDbkI7RUFDRCxBQUFBLGNBQWMsQ0FBQztJakR2RWYsa0JBQWtCLEVpRHdFSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBSTtJakR2RTdCLFVBQVUsRWlEdUVJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFJLEdBQ3BDO0VBR0QsQUFBQSxTQUFTLENBQUM7SUFBRSxLQUFLLEVoRTRkVyxLQUFLLEdnRTVkRDs7QUFHbEMsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0VBQ2YsQUFBQSxTQUFTLENBQUM7SUFBRSxLQUFLLEVoRXNkVyxLQUFLLEdnRXRkRDs7QUM5SWxDLEFBQUEsUUFBUSxDQUFDO0VBQ1AsUUFBUSxFQUFFLFFBQVM7RUFDbkIsT0FBTyxFakUrUWtCLElBQUk7RWlFOVE3QixPQUFPLEVBQUUsS0FBTTtFckRSZixXQUFXLEVaNENhLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVTtFWTFDdEUsVUFBVSxFQUFFLE1BQU87RUFDbkIsV0FBVyxFQUFFLE1BQU87RUFDcEIsY0FBYyxFQUFFLE1BQU87RUFDdkIsVUFBVSxFQUFFLElBQUs7RUFDakIsV0FBVyxFWndEYSxPQUFXO0VZdkRuQyxVQUFVLEVBQUUsSUFBSztFQUNqQixVQUFVLEVBQUUsS0FBTTtFQUNsQixlQUFlLEVBQUUsSUFBSztFQUN0QixXQUFXLEVBQUUsSUFBSztFQUNsQixjQUFjLEVBQUUsSUFBSztFQUNyQixXQUFXLEVBQUUsTUFBTztFQUNwQixVQUFVLEVBQUUsTUFBTztFQUNuQixZQUFZLEVBQUUsTUFBTztFQUNyQixTQUFTLEVBQUUsTUFBTztFcURIbEIsU0FBUyxFakV3Q2UsSUFBSTtFSWxENUIsT0FBTyxFNkRZVSxDQUFDO0U3RFRsQixNQUFNLEVBQUUsZ0JBQUssRzZEZ0JkO0VBaEJELEFBQUEsUUFBUSxBQVdMLEdBQUcsQ0FBSztJN0RkVCxPQUFPLEVKK2dCcUIsR0FBRTtJSTVnQjlCLE1BQU0sRUFBRSxpQkFBSyxHNkRXb0M7RUFYbkQsQUFBQSxRQUFRLEFBWUwsSUFBSSxDQUFJO0lBQUUsVUFBVSxFQUFHLElBQUs7SUFBRSxPQUFPLEVqRW1nQlYsR0FBRyxDaUVuZ0I4QixDQUFDLEdBQUk7RUFacEUsQUFBQSxRQUFRLEFBYUwsTUFBTSxDQUFFO0lBQUUsV0FBVyxFQUFHLEdBQUk7SUFBRSxPQUFPLEVBQUUsQ0FBQyxDakVrZ0JiLEdBQUcsR2lFbGdCbUM7RUFicEUsQUFBQSxRQUFRLEFBY0wsT0FBTyxDQUFDO0lBQUUsVUFBVSxFQUFJLEdBQUk7SUFBRSxPQUFPLEVqRWlnQlYsR0FBRyxDaUVqZ0I4QixDQUFDLEdBQUk7RUFkcEUsQUFBQSxRQUFRLEFBZUwsS0FBSyxDQUFHO0lBQUUsV0FBVyxFQUFFLElBQUs7SUFBRSxPQUFPLEVBQUUsQ0FBQyxDakVnZ0JiLEdBQUcsR2lFaGdCbUM7O0FBSXBFLEFBQUEsY0FBYyxDQUFDO0VBQ2IsU0FBUyxFakVtZm1CLEtBQUs7RWlFbGZqQyxPQUFPLEVBQUUsT0FBUTtFQUNqQixLQUFLLEVqRW1mdUIsSUFBSTtFaUVsZmhDLFVBQVUsRUFBRSxNQUFPO0VBQ25CLGdCQUFnQixFakVtZlksSUFBSTtFaUVsZmhDLGFBQWEsRWpFOEVhLEdBQUcsR2lFN0U5Qjs7QUFHRCxBQUFBLGNBQWMsQ0FBQztFQUNiLFFBQVEsRUFBRSxRQUFTO0VBQ25CLEtBQUssRUFBRSxDQUFFO0VBQ1QsTUFBTSxFQUFFLENBQUU7RUFDVixZQUFZLEVBQUUsV0FBWTtFQUMxQixZQUFZLEVBQUUsS0FBTSxHQUNyQjs7QUFFRCxBQUNRLFFBREEsQUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDO0VBQ25CLE1BQU0sRUFBRSxDQUFFO0VBQ1YsSUFBSSxFQUFFLEdBQUk7RUFDVixXQUFXLEVqRXNlZSxJQUFHO0VpRXJlN0IsWUFBWSxFakVxZWMsR0FBRyxDQUFILEdBQUcsQ2lFcmUyQixDQUFDO0VBQ3pELGdCQUFnQixFakVnZVUsSUFBSSxHaUUvZC9COztBQVBILEFBUWEsUUFSTCxBQVFMLFNBQVMsQ0FBQyxjQUFjLENBQUM7RUFDeEIsTUFBTSxFQUFFLENBQUU7RUFDVixLQUFLLEVqRWdlcUIsR0FBRztFaUUvZDdCLGFBQWEsRWpFK2RhLElBQUc7RWlFOWQ3QixZQUFZLEVqRThkYyxHQUFHLENBQUgsR0FBRyxDaUU5ZDJCLENBQUM7RUFDekQsZ0JBQWdCLEVqRXlkVSxJQUFJLEdpRXhkL0I7O0FBZEgsQUFlYyxRQWZOLEFBZUwsVUFBVSxDQUFDLGNBQWMsQ0FBQztFQUN6QixNQUFNLEVBQUUsQ0FBRTtFQUNWLElBQUksRWpFeWRzQixHQUFHO0VpRXhkN0IsYUFBYSxFakV3ZGEsSUFBRztFaUV2ZDdCLFlBQVksRWpFdWRjLEdBQUcsQ0FBSCxHQUFHLENpRXZkMkIsQ0FBQztFQUN6RCxnQkFBZ0IsRWpFa2RVLElBQUksR2lFamQvQjs7QUFyQkgsQUFzQlUsUUF0QkYsQUFzQkwsTUFBTSxDQUFDLGNBQWMsQ0FBQztFQUNyQixHQUFHLEVBQUUsR0FBSTtFQUNULElBQUksRUFBRSxDQUFFO0VBQ1IsVUFBVSxFakVpZGdCLElBQUc7RWlFaGQ3QixZQUFZLEVqRWdkYyxHQUFHLENBQUgsR0FBRyxDQUFILEdBQUcsQ2lFaGRnRCxDQUFDO0VBQzlFLGtCQUFrQixFakUyY1EsSUFBSSxHaUUxYy9COztBQTVCSCxBQTZCUyxRQTdCRCxBQTZCTCxLQUFLLENBQUMsY0FBYyxDQUFDO0VBQ3BCLEdBQUcsRUFBRSxHQUFJO0VBQ1QsS0FBSyxFQUFFLENBQUU7RUFDVCxVQUFVLEVqRTBjZ0IsSUFBRztFaUV6YzdCLFlBQVksRWpFeWNjLEdBQUcsQ2lFemNNLENBQUMsQ2pFeWNWLEdBQUcsQ0FBSCxHQUFHO0VpRXhjN0IsaUJBQWlCLEVqRW9jUyxJQUFJLEdpRW5jL0I7O0FBbkNILEFBb0NXLFFBcENILEFBb0NMLE9BQU8sQ0FBQyxjQUFjLENBQUM7RUFDdEIsR0FBRyxFQUFFLENBQUU7RUFDUCxJQUFJLEVBQUUsR0FBSTtFQUNWLFdBQVcsRWpFbWNlLElBQUc7RWlFbGM3QixZQUFZLEVBQUUsQ0FBQyxDakVrY1csR0FBRyxDQUFILEdBQUc7RWlFamM3QixtQkFBbUIsRWpFNmJPLElBQUksR2lFNWIvQjs7QUExQ0gsQUEyQ2dCLFFBM0NSLEFBMkNMLFlBQVksQ0FBQyxjQUFjLENBQUM7RUFDM0IsR0FBRyxFQUFFLENBQUU7RUFDUCxLQUFLLEVqRTZicUIsR0FBRztFaUU1YjdCLFVBQVUsRWpFNGJnQixJQUFHO0VpRTNiN0IsWUFBWSxFQUFFLENBQUMsQ2pFMmJXLEdBQUcsQ0FBSCxHQUFHO0VpRTFiN0IsbUJBQW1CLEVqRXNiTyxJQUFJLEdpRXJiL0I7O0FBakRILEFBa0RpQixRQWxEVCxBQWtETCxhQUFhLENBQUMsY0FBYyxDQUFDO0VBQzVCLEdBQUcsRUFBRSxDQUFFO0VBQ1AsSUFBSSxFakVzYnNCLEdBQUc7RWlFcmI3QixVQUFVLEVqRXFiZ0IsSUFBRztFaUVwYjdCLFlBQVksRUFBRSxDQUFDLENqRW9iVyxHQUFHLENBQUgsR0FBRztFaUVuYjdCLG1CQUFtQixFakUrYU8sSUFBSSxHaUU5YS9COztBQzlGSCxBQUFBLFFBQVEsQ0FBQztFQUNQLFFBQVEsRUFBRSxRQUFTO0VBQ25CLEdBQUcsRUFBRSxDQUFFO0VBQ1AsSUFBSSxFQUFFLENBQUU7RUFDUixPQUFPLEVsRTZRa0IsSUFBSTtFa0U1UTdCLE9BQU8sRUFBRSxJQUFLO0VBQ2QsU0FBUyxFbEVzaEIyQixLQUFLO0VrRXJoQnpDLE9BQU8sRUFBRSxHQUFJO0V0RFhiLFdBQVcsRVo0Q2EsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVO0VZMUN0RSxVQUFVLEVBQUUsTUFBTztFQUNuQixXQUFXLEVBQUUsTUFBTztFQUNwQixjQUFjLEVBQUUsTUFBTztFQUN2QixVQUFVLEVBQUUsSUFBSztFQUNqQixXQUFXLEVad0RhLE9BQVc7RVl2RG5DLFVBQVUsRUFBRSxJQUFLO0VBQ2pCLFVBQVUsRUFBRSxLQUFNO0VBQ2xCLGVBQWUsRUFBRSxJQUFLO0VBQ3RCLFdBQVcsRUFBRSxJQUFLO0VBQ2xCLGNBQWMsRUFBRSxJQUFLO0VBQ3JCLFdBQVcsRUFBRSxNQUFPO0VBQ3BCLFVBQVUsRUFBRSxNQUFPO0VBQ25CLFlBQVksRUFBRSxNQUFPO0VBQ3JCLFNBQVMsRUFBRSxNQUFPO0VzREFsQixTQUFTLEVsRW1DZSxJQUFJO0VrRWpDNUIsZ0JBQWdCLEVsRTZnQm9CLElBQUk7RWtFNWdCeEMsZUFBZSxFQUFFLFdBQVk7RUFDN0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENsRWloQm1CLElBQUk7RWtFaGhCeEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENsRThnQm1CLGtCQUFJO0VrRTdnQnhDLGFBQWEsRWxFd0ZhLEdBQUc7RWUxQzdCLGtCQUFrQixFbUQ3Q0UsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQUk7RW5EOEMzQixVQUFVLEVtRDlDRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBSSxHQU9wQztFQXpCRCxBQUFBLFFBQVEsQUFxQkwsSUFBSSxDQUFLO0lBQUUsVUFBVSxFbEVpaEJjLEtBQUksR2tFamhCUztFQXJCbkQsQUFBQSxRQUFRLEFBc0JMLE1BQU0sQ0FBRztJQUFFLFdBQVcsRWxFZ2hCYSxJQUFJLEdrRWhoQlM7RUF0Qm5ELEFBQUEsUUFBUSxBQXVCTCxPQUFPLENBQUU7SUFBRSxVQUFVLEVsRStnQmMsSUFBSSxHa0UvZ0JRO0VBdkJsRCxBQUFBLFFBQVEsQUF3QkwsS0FBSyxDQUFJO0lBQUUsV0FBVyxFbEU4Z0JhLEtBQUksR2tFOWdCVTs7QUFHcEQsQUFBQSxjQUFjLENBQUM7RUFDYixNQUFNLEVBQUUsQ0FBRTtFQUNWLE9BQU8sRUFBRSxRQUFTO0VBQ2xCLFNBQVMsRWxFZ0JlLElBQUk7RWtFZjVCLGdCQUFnQixFbEVvZ0JvQixPQUFNO0VrRW5nQjFDLGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU07RUFDL0IsYUFBYSxFQUFHLEdBQW9CLENBQU8sR0FBb0IsQ0FBTSxDQUFDLENBQUMsQ0FBQyxHQUN6RTs7QUFFRCxBQUFBLGdCQUFnQixDQUFDO0VBQ2YsT0FBTyxFQUFFLFFBQVMsR0FDbkI7O0FBTUQsQUFBVyxRQUFILEdBQUcsTUFBTSxFQUFqQixBQUFXLFFBQUgsR0FBRyxNQUFNLEFBRWQsTUFBTSxDQUFDO0VBQ04sUUFBUSxFQUFFLFFBQVM7RUFDbkIsT0FBTyxFQUFFLEtBQU07RUFDZixLQUFLLEVBQUUsQ0FBRTtFQUNULE1BQU0sRUFBRSxDQUFFO0VBQ1YsWUFBWSxFQUFFLFdBQVk7RUFDMUIsWUFBWSxFQUFFLEtBQU0sR0FDckI7O0FBRUgsQUFBVyxRQUFILEdBQUcsTUFBTSxDQUFDO0VBQ2hCLFlBQVksRWxFbWZ5QixJQUFvQixHa0VsZjFEOztBQUNELEFBQWlCLFFBQVQsR0FBRyxNQUFNLEFBQUEsTUFBTSxDQUFDO0VBQ3RCLFlBQVksRWxFMmV3QixJQUFJO0VrRTFleEMsT0FBTyxFQUFFLEVBQUcsR0FDYjs7QUFFRCxBQUNVLFFBREYsQUFDTCxJQUFJLEdBQUcsTUFBTSxDQUFDO0VBQ2IsSUFBSSxFQUFFLEdBQUk7RUFDVixXQUFXLEVsRXlld0IsS0FBb0I7RWtFeGV2RCxtQkFBbUIsRUFBRSxDQUFFO0VBQ3ZCLGdCQUFnQixFbEUyZWtCLE9BQU07RWtFMWV4QyxnQkFBZ0IsRWxFd2VrQixtQkFBTztFa0V2ZXpDLE1BQU0sRWxFcWU2QixLQUFvQixHa0U3ZHhEO0VBZkgsQUFDVSxRQURGLEFBQ0wsSUFBSSxHQUFHLE1BQU0sQUFPWCxNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsR0FBSTtJQUNiLE1BQU0sRUFBRSxHQUFJO0lBQ1osV0FBVyxFbEU0ZHFCLEtBQUk7SWtFM2RwQyxtQkFBbUIsRUFBRSxDQUFFO0lBQ3ZCLGdCQUFnQixFbEU4Y2dCLElBQUksR2tFN2NyQzs7QUFkTCxBQWdCWSxRQWhCSixBQWdCTCxNQUFNLEdBQUcsTUFBTSxDQUFDO0VBQ2YsR0FBRyxFQUFFLEdBQUk7RUFDVCxJQUFJLEVsRTBkK0IsS0FBb0I7RWtFemR2RCxVQUFVLEVsRXlkeUIsS0FBb0I7RWtFeGR2RCxpQkFBaUIsRUFBRSxDQUFFO0VBQ3JCLGtCQUFrQixFbEUyZGdCLE9BQU07RWtFMWR4QyxrQkFBa0IsRWxFd2RnQixtQkFBTyxHa0VoZDFDO0VBOUJILEFBZ0JZLFFBaEJKLEFBZ0JMLE1BQU0sR0FBRyxNQUFNLEFBT2IsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLEdBQUk7SUFDYixJQUFJLEVBQUUsR0FBSTtJQUNWLE1BQU0sRWxFNmMwQixLQUFJO0lrRTVjcEMsaUJBQWlCLEVBQUUsQ0FBRTtJQUNyQixrQkFBa0IsRWxFK2JjLElBQUksR2tFOWJyQzs7QUE3QkwsQUErQmEsUUEvQkwsQUErQkwsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUNoQixJQUFJLEVBQUUsR0FBSTtFQUNWLFdBQVcsRWxFMmN3QixLQUFvQjtFa0UxY3ZELGdCQUFnQixFQUFFLENBQUU7RUFDcEIsbUJBQW1CLEVsRTZjZSxPQUFNO0VrRTVjeEMsbUJBQW1CLEVsRTBjZSxtQkFBTztFa0V6Y3pDLEdBQUcsRWxFdWNnQyxLQUFvQixHa0UvYnhEO0VBN0NILEFBK0JhLFFBL0JMLEFBK0JMLE9BQU8sR0FBRyxNQUFNLEFBT2QsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLEdBQUk7SUFDYixHQUFHLEVBQUUsR0FBSTtJQUNULFdBQVcsRWxFOGJxQixLQUFJO0lrRTdicEMsZ0JBQWdCLEVBQUUsQ0FBRTtJQUNwQixtQkFBbUIsRWxFZ2JhLElBQUksR2tFL2FyQzs7QUE1Q0wsQUErQ1csUUEvQ0gsQUErQ0wsS0FBSyxHQUFHLE1BQU0sQ0FBQztFQUNkLEdBQUcsRUFBRSxHQUFJO0VBQ1QsS0FBSyxFbEUyYjhCLEtBQW9CO0VrRTFidkQsVUFBVSxFbEUwYnlCLEtBQW9CO0VrRXpidkQsa0JBQWtCLEVBQUUsQ0FBRTtFQUN0QixpQkFBaUIsRWxFNGJpQixPQUFNO0VrRTNieEMsaUJBQWlCLEVsRXliaUIsbUJBQU8sR2tFamIxQztFQTdESCxBQStDVyxRQS9DSCxBQStDTCxLQUFLLEdBQUcsTUFBTSxBQU9aLE1BQU0sQ0FBQztJQUNOLE9BQU8sRUFBRSxHQUFJO0lBQ2IsS0FBSyxFQUFFLEdBQUk7SUFDWCxrQkFBa0IsRUFBRSxDQUFFO0lBQ3RCLGlCQUFpQixFbEVpYWUsSUFBSTtJa0VoYXBDLE1BQU0sRWxFNGEwQixLQUFJLEdrRTNhckM7O0FDMUhMLEFBQUEsU0FBUyxDQUFDO0VBQ1IsUUFBUSxFQUFFLFFBQVMsR0FDcEI7O0FBRUQsQUFBQSxlQUFlLENBQUM7RUFDZCxRQUFRLEVBQUUsUUFBUztFQUNuQixRQUFRLEVBQUUsTUFBTztFQUNqQixLQUFLLEVBQUUsSUFBSyxHQTBFYjtFQTdFRCxBQUtJLGVBTFcsR0FLWCxLQUFLLENBQUM7SUFDTixPQUFPLEVBQUUsSUFBSztJQUNkLFFBQVEsRUFBRSxRQUFTO0lwRHdLckIsa0JBQWtCLEVvRHZLSSxJQUFHLENBQUMsV0FBVyxDQUFDLElBQUk7SXBEd0tyQyxhQUFhLEVvRHhLSSxJQUFHLENBQUMsV0FBVyxDQUFDLElBQUk7SXBEeUtsQyxVQUFVLEVvRHpLSSxJQUFHLENBQUMsV0FBVyxDQUFDLElBQUksR0FnQ3pDO0lBeENILEFBV00sZUFYUyxHQUtYLEtBQUssR0FNSCxHQUFHO0lBWFQsQUFZVSxlQVpLLEdBS1gsS0FBSyxHQU9ILENBQUMsR0FBRyxHQUFHLENBQUM7TTlEYlosT0FBTyxFQUR1QixLQUFLO01BRW5DLFNBQVMsRUFBRSxJQUFLO01BQ2hCLE1BQU0sRUFBRSxJQUFLO004RGFULFdBQVcsRUFBRSxDQUFFLEdBQ2hCO0lBR0QsTUFBTSxDQUFOLEdBQUcsTUFBTSxZQUFZLElBQUksb0JBQUM7TUFsQjlCLEFBS0ksZUFMVyxHQUtYLEtBQUssQ0FBQztRcEQrTFIsa0JBQWtCLEVBQUUsaUJBQUMsQ29EakxhLElBQUksQ0FBQyxXQUFXO1FwRGtML0MsZUFBZSxFQUFFLGNBQUMsQ29EbExhLElBQUksQ0FBQyxXQUFXO1FwRG1MN0MsYUFBYSxFQUFFLFlBQUMsQ29EbkxhLElBQUksQ0FBQyxXQUFXO1FwRG9MMUMsVUFBVSxFQUFFLFNBQVMsQ29EcExLLElBQUksQ0FBQyxXQUFXO1FwRDRCbEQsMkJBQTJCLEVvRDNCTSxNQUFNO1FwRDRCcEMsd0JBQXdCLEVvRDVCTSxNQUFNO1FwRDZCL0IsbUJBQW1CLEVvRDdCTSxNQUFNO1FwRHVJdkMsbUJBQW1CLEVvRHRJTSxNQUFNO1FwRHVJNUIsZ0JBQWdCLEVvRHZJTSxNQUFNO1FwRHdJdkIsV0FBVyxFb0R4SU0sTUFBTSxHQW1COUI7UUF4Q0gsQUFLSSxlQUxXLEdBS1gsS0FBSyxBQWtCRixLQUFLLEVBdkJaLEFBS0ksZUFMVyxHQUtYLEtBQUssQUFtQkYsT0FBTyxBQUFBLE1BQU0sQ0FBQztVcEQ2R25CLGlCQUFpQixFQUFFLHVCQUFXO1VBQ3RCLFNBQVMsRUFBRSx1QkFBVztVb0Q1R3hCLElBQUksRUFBRSxDQUFFLEdBQ1Q7UUEzQlAsQUFLSSxlQUxXLEdBS1gsS0FBSyxBQXVCRixLQUFLLEVBNUJaLEFBS0ksZUFMVyxHQUtYLEtBQUssQUF3QkYsT0FBTyxBQUFBLEtBQUssQ0FBQztVcER3R2xCLGlCQUFpQixFQUFFLHdCQUFXO1VBQ3RCLFNBQVMsRUFBRSx3QkFBVztVb0R2R3hCLElBQUksRUFBRSxDQUFFLEdBQ1Q7UUFoQ1AsQUFLSSxlQUxXLEdBS1gsS0FBSyxBQTRCRixLQUFLLEFBQUEsS0FBSyxFQWpDakIsQUFLSSxlQUxXLEdBS1gsS0FBSyxBQTZCRixLQUFLLEFBQUEsTUFBTSxFQWxDbEIsQUFLSSxlQUxXLEdBS1gsS0FBSyxBQThCRixPQUFPLENBQUM7VXBEa0diLGlCQUFpQixFQUFFLG9CQUFXO1VBQ3RCLFNBQVMsRUFBRSxvQkFBVztVb0RqR3hCLElBQUksRUFBRSxDQUFFLEdBQ1Q7RUF0Q1AsQUEwQ0ksZUExQ1csR0EwQ1gsT0FBTztFQTFDWCxBQTJDSSxlQTNDVyxHQTJDWCxLQUFLO0VBM0NULEFBNENJLGVBNUNXLEdBNENYLEtBQUssQ0FBQztJQUNOLE9BQU8sRUFBRSxLQUFNLEdBQ2hCO0VBOUNILEFBZ0RJLGVBaERXLEdBZ0RYLE9BQU8sQ0FBQztJQUNSLElBQUksRUFBRSxDQUFFLEdBQ1Q7RUFsREgsQUFvREksZUFwRFcsR0FvRFgsS0FBSztFQXBEVCxBQXFESSxlQXJEVyxHQXFEWCxLQUFLLENBQUM7SUFDTixRQUFRLEVBQUUsUUFBUztJQUNuQixHQUFHLEVBQUUsQ0FBRTtJQUNQLEtBQUssRUFBRSxJQUFLLEdBQ2I7RUF6REgsQUEyREksZUEzRFcsR0EyRFgsS0FBSyxDQUFDO0lBQ04sSUFBSSxFQUFFLElBQUssR0FDWjtFQTdESCxBQThESSxlQTlEVyxHQThEWCxLQUFLLENBQUM7SUFDTixJQUFJLEVBQUUsS0FBTSxHQUNiO0VBaEVILEFBaUVTLGVBakVNLEdBaUVYLEtBQUssQUFBQSxLQUFLO0VBakVkLEFBa0VTLGVBbEVNLEdBa0VYLEtBQUssQUFBQSxNQUFNLENBQUM7SUFDWixJQUFJLEVBQUUsQ0FBRSxHQUNUO0VBcEVILEFBc0VXLGVBdEVJLEdBc0VYLE9BQU8sQUFBQSxLQUFLLENBQUM7SUFDYixJQUFJLEVBQUUsS0FBTSxHQUNiO0VBeEVILEFBeUVXLGVBekVJLEdBeUVYLE9BQU8sQUFBQSxNQUFNLENBQUM7SUFDZCxJQUFJLEVBQUUsSUFBSyxHQUNaOztBQU9ILEFBQUEsaUJBQWlCLENBQUM7RUFDaEIsUUFBUSxFQUFFLFFBQVM7RUFDbkIsR0FBRyxFQUFFLENBQUU7RUFDUCxJQUFJLEVBQUUsQ0FBRTtFQUNSLE1BQU0sRUFBRSxDQUFFO0VBQ1YsS0FBSyxFbkU0c0J1QyxHQUFHO0VJMXlCL0MsT0FBTyxFSjJ5QnFDLEdBQUU7RUl4eUI5QyxNQUFNLEVBQUUsaUJBQUs7RStENkZiLFNBQVMsRW5FNHNCbUMsSUFBSTtFbUUzc0JoRCxLQUFLLEVuRXdzQnVDLElBQUk7RW1FdnNCaEQsVUFBVSxFQUFFLE1BQU87RUFDbkIsV0FBVyxFbkVvc0JpQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBSTtFbUVuc0IxRCxnQkFBZ0IsRUFBRSxXQUFJLEdBK0R2QjtFQTFFRCxBQUFBLGlCQUFpQixBQWdCZCxLQUFLLENBQUM7SXhDbkdQLGdCQUFnQixFQUFFLGdGQUF1QjtJQUN6QyxnQkFBZ0IsRUFBRSwyRUFBa0I7SUFDcEMsZ0JBQWdCLEVBQUUsNEVBQWU7SUFDakMsaUJBQWlCLEVBQUUsUUFBUztJQUM1QixNQUFNLEVBQUUsOEdBQWdKLEd3Q2lHdko7RUFsQkgsQUFBQSxpQkFBaUIsQUFtQmQsTUFBTSxDQUFDO0lBQ04sSUFBSSxFQUFFLElBQUs7SUFDWCxLQUFLLEVBQUUsQ0FBRTtJeEN4R1gsZ0JBQWdCLEVBQUUsZ0ZBQXVCO0lBQ3pDLGdCQUFnQixFQUFFLDJFQUFrQjtJQUNwQyxnQkFBZ0IsRUFBRSw0RUFBZTtJQUNqQyxpQkFBaUIsRUFBRSxRQUFTO0lBQzVCLE1BQU0sRUFBRSw4R0FBZ0osR3dDc0d2SjtFQXZCSCxBQUFBLGlCQUFpQixBQTBCZCxNQUFNLEVBMUJULEFBQUEsaUJBQWlCLEFBMkJkLE1BQU0sQ0FBQztJQUNOLE9BQU8sRUFBRSxDQUFFO0lBQ1gsS0FBSyxFbkVtckJxQyxJQUFJO0ltRWxyQjlDLGVBQWUsRUFBRSxJQUFLO0kvRHZIeEIsT0FBTyxFK0R3SFksR0FBRTtJL0RySHJCLE1BQU0sRUFBRSxpQkFBSyxHK0RzSFo7RUFoQ0gsQUFtQ0UsaUJBbkNlLENBbUNmLFVBQVU7RUFuQ1osQUFvQ0UsaUJBcENlLENBb0NmLFVBQVU7RUFwQ1osQUFxQ0UsaUJBckNlLENBcUNmLHVCQUF1QjtFQXJDekIsQUFzQ0UsaUJBdENlLENBc0NmLHdCQUF3QixDQUFDO0lBQ3ZCLFFBQVEsRUFBRSxRQUFTO0lBQ25CLEdBQUcsRUFBRSxHQUFJO0lBQ1QsVUFBVSxFQUFFLEtBQU07SUFDbEIsT0FBTyxFQUFFLENBQUU7SUFDWCxPQUFPLEVBQUUsWUFBYSxHQUN2QjtFQTVDSCxBQTZDRSxpQkE3Q2UsQ0E2Q2YsVUFBVTtFQTdDWixBQThDRSxpQkE5Q2UsQ0E4Q2YsdUJBQXVCLENBQUM7SUFDdEIsSUFBSSxFQUFFLEdBQUk7SUFDVixXQUFXLEVBQUUsS0FBTSxHQUNwQjtFQWpESCxBQWtERSxpQkFsRGUsQ0FrRGYsVUFBVTtFQWxEWixBQW1ERSxpQkFuRGUsQ0FtRGYsd0JBQXdCLENBQUM7SUFDdkIsS0FBSyxFQUFFLEdBQUk7SUFDWCxZQUFZLEVBQUUsS0FBTSxHQUNyQjtFQXRESCxBQXVERSxpQkF2RGUsQ0F1RGYsVUFBVTtFQXZEWixBQXdERSxpQkF4RGUsQ0F3RGYsVUFBVSxDQUFDO0lBQ1QsS0FBSyxFQUFHLElBQUs7SUFDYixNQUFNLEVBQUUsSUFBSztJQUNiLFdBQVcsRUFBRSxDQUFFO0lBQ2YsV0FBVyxFQUFFLEtBQU0sR0FDcEI7RUE3REgsQUFnRUUsaUJBaEVlLENBZ0VmLFVBQVUsQUFDUCxPQUFPLENBQUM7SUFDUCxPQUFPLEVBQUUsT0FBUSxHQUNsQjtFQW5FTCxBQXFFRSxpQkFyRWUsQ0FxRWYsVUFBVSxBQUNQLE9BQU8sQ0FBQztJQUNQLE9BQU8sRUFBRSxPQUFRLEdBQ2xCOztBQVNMLEFBQUEsb0JBQW9CLENBQUM7RUFDbkIsUUFBUSxFQUFFLFFBQVM7RUFDbkIsTUFBTSxFQUFFLElBQUs7RUFDYixJQUFJLEVBQUUsR0FBSTtFQUNWLE9BQU8sRUFBRSxFQUFHO0VBQ1osS0FBSyxFQUFFLEdBQUk7RUFDWCxXQUFXLEVBQUUsSUFBSztFQUNsQixZQUFZLEVBQUUsQ0FBRTtFQUNoQixVQUFVLEVBQUUsSUFBSztFQUNqQixVQUFVLEVBQUUsTUFBTyxHQThCcEI7RUF2Q0QsQUFXRSxvQkFYa0IsQ0FXbEIsRUFBRSxDQUFDO0lBQ0QsT0FBTyxFQUFFLFlBQWE7SUFDdEIsS0FBSyxFQUFHLElBQUs7SUFDYixNQUFNLEVBQUUsSUFBSztJQUNiLE1BQU0sRUFBRSxHQUFJO0lBQ1osV0FBVyxFQUFFLE1BQU87SUFDcEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENuRW9uQnlCLElBQUk7SW1Fbm5COUMsYUFBYSxFQUFFLElBQUs7SUFDcEIsTUFBTSxFQUFFLE9BQVE7SUFXaEIsZ0JBQWdCLEVBQUUsT0FBUTtJQUMxQixnQkFBZ0IsRUFBRSxXQUFJLEdBQ3ZCO0VBaENILEFBaUNFLG9CQWpDa0IsQ0FpQ2xCLE9BQU8sQ0FBQztJQUNOLE1BQU0sRUFBRSxDQUFFO0lBQ1YsS0FBSyxFQUFHLElBQUs7SUFDYixNQUFNLEVBQUUsSUFBSztJQUNiLGdCQUFnQixFbkUrbEIwQixJQUFJLEdtRTlsQi9DOztBQU1ILEFBQUEsaUJBQWlCLENBQUM7RUFDaEIsUUFBUSxFQUFFLFFBQVM7RUFDbkIsSUFBSSxFQUFFLEdBQUk7RUFDVixLQUFLLEVBQUUsR0FBSTtFQUNYLE1BQU0sRUFBRSxJQUFLO0VBQ2IsT0FBTyxFQUFFLEVBQUc7RUFDWixXQUFXLEVBQUUsSUFBSztFQUNsQixjQUFjLEVBQUUsSUFBSztFQUNyQixLQUFLLEVuRW1sQnVDLElBQUk7RW1FbGxCaEQsVUFBVSxFQUFFLE1BQU87RUFDbkIsV0FBVyxFbkV1a0JpQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBSSxHbUVua0IzRDtFQWRELEFBV0ksaUJBWGEsQ0FXYixJQUFJLENBQUM7SUFDTCxXQUFXLEVBQUUsSUFBSyxHQUNuQjs7QUFLSCxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VBRzFCLEFBQ0UsaUJBRGUsQ0FDZix1QkFBdUI7RUFEekIsQUFFRSxpQkFGZSxDQUVmLHdCQUF3QjtFQUYxQixBQUdFLGlCQUhlLENBR2YsVUFBVTtFQUhaLEFBSUUsaUJBSmUsQ0FJZixVQUFVLENBQUM7SUFDVCxLQUFLLEVBQUcsSUFBMkI7SUFDbkMsTUFBTSxFQUFHLElBQTJCO0lBQ3BDLFVBQVUsRUFBRyxLQUEyQjtJQUN4QyxTQUFTLEVBQUcsSUFBMkIsR0FDeEM7RUFUSCxBQVVFLGlCQVZlLENBVWYsdUJBQXVCO0VBVnpCLEFBV0UsaUJBWGUsQ0FXZixVQUFVLENBQUM7SUFDVCxXQUFXLEVBQUcsS0FBMkIsR0FDMUM7RUFiSCxBQWNFLGlCQWRlLENBY2Ysd0JBQXdCO0VBZDFCLEFBZUUsaUJBZmUsQ0FlZixVQUFVLENBQUM7SUFDVCxZQUFZLEVBQUcsS0FBMkIsR0FDM0M7RUFJSCxBQUFBLGlCQUFpQixDQUFDO0lBQ2hCLElBQUksRUFBRSxHQUFJO0lBQ1YsS0FBSyxFQUFFLEdBQUk7SUFDWCxjQUFjLEVBQUUsSUFBSyxHQUN0QjtFQUdELEFBQUEsb0JBQW9CLENBQUM7SUFDbkIsTUFBTSxFQUFFLElBQUssR0FDZDs7QUNwUUgsQUFBQSxTQUFTLEF4Q0tOLE9BQU8sRXdDTFYsQUFBQSxTQUFTLEF4Q01OLE1BQU0sQ0FBQztFQUNOLE9BQU8sRUFBRSxHQUFJO0VBQ2IsT0FBTyxFQUFFLEtBQU0sR0FDaEI7O0F3Q1RILEFBQUEsU0FBUyxBeENVTixNQUFNLENBQUM7RUFDTixLQUFLLEVBQUUsSUFBSyxHQUNiOztBd0NUSCxBQUFBLGFBQWEsQ0FBQztFdkNSWixPQUFPLEVBQUUsS0FBTTtFQUNmLFdBQVcsRUFBRSxJQUFLO0VBQ2xCLFlBQVksRUFBRSxJQUFLLEd1Q1FwQjs7QUFDRCxBQUFBLFdBQVcsQ0FBQztFQUNWLEtBQUssRUFBRSxnQkFBaUIsR0FDekI7O0FBQ0QsQUFBQSxVQUFVLENBQUM7RUFDVCxLQUFLLEVBQUUsZUFBZ0IsR0FDeEI7O0FBT0QsQUFBQSxLQUFLLENBQUM7RUFDSixPQUFPLEVBQUUsZUFBZ0IsR0FDMUI7O0FBQ0QsQUFBQSxLQUFLLENBQUM7RUFDSixPQUFPLEVBQUUsZ0JBQWlCLEdBQzNCOztBQUNELEFBQUEsVUFBVSxDQUFDO0VBQ1QsVUFBVSxFQUFFLE1BQU8sR0FDcEI7O0FBQ0QsQUFBQSxVQUFVLENBQUM7RWpFekJULElBQUksRUFBRSxLQUFNO0VBQ1osS0FBSyxFQUFFLFdBQVk7RUFDbkIsV0FBVyxFQUFFLElBQUs7RUFDbEIsZ0JBQWdCLEVBQUUsV0FBWTtFQUM5QixNQUFNLEVBQUUsQ0FBRSxHaUV1Qlg7O0FBT0QsQUFBQSxPQUFPLENBQUM7RUFDTixPQUFPLEVBQUUsZUFBZ0IsR0FDMUI7O0FBTUQsQUFBQSxNQUFNLENBQUM7RUFDTCxRQUFRLEVBQUUsS0FBTSxHQUNqQjs7QUNqQ0MsYUFBYTtFQUNYLEtBQUssRUFBRSxZQUFhOztBNUROdEIsQUFBQSxXQUFXLENBQVg7RUFDRSxPQUFPLEVBQUUsZUFBZ0IsR0FDMUI7O0FBRkQsQUFBQSxXQUFXLENBQVg7RUFDRSxPQUFPLEVBQUUsZUFBZ0IsR0FDMUI7O0FBRkQsQUFBQSxXQUFXLENBQVg7RUFDRSxPQUFPLEVBQUUsZUFBZ0IsR0FDMUI7O0FBRkQsQUFBQSxXQUFXLENBQVg7RUFDRSxPQUFPLEVBQUUsZUFBZ0IsR0FDMUI7O0E0RGlCSCxBQUFBLGlCQUFpQjtBQUNqQixBQUFBLGtCQUFrQjtBQUNsQixBQUFBLHdCQUF3QjtBQUN4QixBQUFBLGlCQUFpQjtBQUNqQixBQUFBLGtCQUFrQjtBQUNsQixBQUFBLHdCQUF3QjtBQUN4QixBQUFBLGlCQUFpQjtBQUNqQixBQUFBLGtCQUFrQjtBQUNsQixBQUFBLHdCQUF3QjtBQUN4QixBQUFBLGlCQUFpQjtBQUNqQixBQUFBLGtCQUFrQjtBQUNsQixBQUFBLHdCQUF3QixDQUFDO0VBQ3ZCLE9BQU8sRUFBRSxlQUFnQixHQUMxQjs7QUFFRCxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7RTVENUNmLEFBQUEsV0FBVyxDQUFYO0lBQ0UsT0FBTyxFQUFFLGdCQUFpQixHQUMzQjtFQUNELEFBQUssS0FBQSxBQUFBLFdBQVcsQ0FBaEI7SUFBRSxPQUFPLEVBQUUsZ0JBQWlCLEdBQUk7RUFDaEMsQUFBRSxFQUFBLEFBQUEsV0FBVyxDQUFiO0lBQUUsT0FBTyxFQUFFLG9CQUFxQixHQUFJO0VBQ3BDLEFBQUUsRUFBQSxBQUFBLFdBQVc7RUFDYixBQUFFLEVBQUEsQUFBQSxXQUFXLENBRGI7SUFBRSxPQUFPLEVBQUUscUJBQXNCLEdBQUk7O0E0RDJDckMsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0VBRG5CLEFBQUEsaUJBQWlCLENBQUM7SUFFZCxPQUFPLEVBQUUsZ0JBQWlCLEdBRTdCOztBQUVDLE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztFQURuQixBQUFBLGtCQUFrQixDQUFDO0lBRWYsT0FBTyxFQUFFLGlCQUFrQixHQUU5Qjs7QUFFQyxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7RUFEbkIsQUFBQSx3QkFBd0IsQ0FBQztJQUVyQixPQUFPLEVBQUUsdUJBQXdCLEdBRXBDOztBQUVELE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSyxPQUFPLFNBQVMsRUFBRSxLQUFLO0U1RC9EdEMsQUFBQSxXQUFXLENBQVg7SUFDRSxPQUFPLEVBQUUsZ0JBQWlCLEdBQzNCO0VBQ0QsQUFBSyxLQUFBLEFBQUEsV0FBVyxDQUFoQjtJQUFFLE9BQU8sRUFBRSxnQkFBaUIsR0FBSTtFQUNoQyxBQUFFLEVBQUEsQUFBQSxXQUFXLENBQWI7SUFBRSxPQUFPLEVBQUUsb0JBQXFCLEdBQUk7RUFDcEMsQUFBRSxFQUFBLEFBQUEsV0FBVztFQUNiLEFBQUUsRUFBQSxBQUFBLFdBQVcsQ0FEYjtJQUFFLE9BQU8sRUFBRSxxQkFBc0IsR0FBSTs7QTREOERyQyxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUssT0FBTyxTQUFTLEVBQUUsS0FBSztFQUQxQyxBQUFBLGlCQUFpQixDQUFDO0lBRWQsT0FBTyxFQUFFLGdCQUFpQixHQUU3Qjs7QUFFQyxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUssT0FBTyxTQUFTLEVBQUUsS0FBSztFQUQxQyxBQUFBLGtCQUFrQixDQUFDO0lBRWYsT0FBTyxFQUFFLGlCQUFrQixHQUU5Qjs7QUFFQyxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUssT0FBTyxTQUFTLEVBQUUsS0FBSztFQUQxQyxBQUFBLHdCQUF3QixDQUFDO0lBRXJCLE9BQU8sRUFBRSx1QkFBd0IsR0FFcEM7O0FBRUQsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLLE9BQU8sU0FBUyxFQUFFLE1BQU07RTVEbEZ2QyxBQUFBLFdBQVcsQ0FBWDtJQUNFLE9BQU8sRUFBRSxnQkFBaUIsR0FDM0I7RUFDRCxBQUFLLEtBQUEsQUFBQSxXQUFXLENBQWhCO0lBQUUsT0FBTyxFQUFFLGdCQUFpQixHQUFJO0VBQ2hDLEFBQUUsRUFBQSxBQUFBLFdBQVcsQ0FBYjtJQUFFLE9BQU8sRUFBRSxvQkFBcUIsR0FBSTtFQUNwQyxBQUFFLEVBQUEsQUFBQSxXQUFXO0VBQ2IsQUFBRSxFQUFBLEFBQUEsV0FBVyxDQURiO0lBQUUsT0FBTyxFQUFFLHFCQUFzQixHQUFJOztBNERpRnJDLE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSyxPQUFPLFNBQVMsRUFBRSxNQUFNO0VBRDNDLEFBQUEsaUJBQWlCLENBQUM7SUFFZCxPQUFPLEVBQUUsZ0JBQWlCLEdBRTdCOztBQUVDLE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSyxPQUFPLFNBQVMsRUFBRSxNQUFNO0VBRDNDLEFBQUEsa0JBQWtCLENBQUM7SUFFZixPQUFPLEVBQUUsaUJBQWtCLEdBRTlCOztBQUVDLE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSyxPQUFPLFNBQVMsRUFBRSxNQUFNO0VBRDNDLEFBQUEsd0JBQXdCLENBQUM7SUFFckIsT0FBTyxFQUFFLHVCQUF3QixHQUVwQzs7QUFFRCxNQUFNLEVBQUwsU0FBUyxFQUFFLE1BQU07RTVEckdoQixBQUFBLFdBQVcsQ0FBWDtJQUNFLE9BQU8sRUFBRSxnQkFBaUIsR0FDM0I7RUFDRCxBQUFLLEtBQUEsQUFBQSxXQUFXLENBQWhCO0lBQUUsT0FBTyxFQUFFLGdCQUFpQixHQUFJO0VBQ2hDLEFBQUUsRUFBQSxBQUFBLFdBQVcsQ0FBYjtJQUFFLE9BQU8sRUFBRSxvQkFBcUIsR0FBSTtFQUNwQyxBQUFFLEVBQUEsQUFBQSxXQUFXO0VBQ2IsQUFBRSxFQUFBLEFBQUEsV0FBVyxDQURiO0lBQUUsT0FBTyxFQUFFLHFCQUFzQixHQUFJOztBNERvR3JDLE1BQU0sRUFBTCxTQUFTLEVBQUUsTUFBTTtFQURwQixBQUFBLGlCQUFpQixDQUFDO0lBRWQsT0FBTyxFQUFFLGdCQUFpQixHQUU3Qjs7QUFFQyxNQUFNLEVBQUwsU0FBUyxFQUFFLE1BQU07RUFEcEIsQUFBQSxrQkFBa0IsQ0FBQztJQUVmLE9BQU8sRUFBRSxpQkFBa0IsR0FFOUI7O0FBRUMsTUFBTSxFQUFMLFNBQVMsRUFBRSxNQUFNO0VBRHBCLEFBQUEsd0JBQXdCLENBQUM7SUFFckIsT0FBTyxFQUFFLHVCQUF3QixHQUVwQzs7QUFFRCxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7RTVEOUdmLEFBQUEsVUFBVSxDQUFWO0lBQ0UsT0FBTyxFQUFFLGVBQWdCLEdBQzFCOztBNERnSEgsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLLE9BQU8sU0FBUyxFQUFFLEtBQUs7RTVEbEh0QyxBQUFBLFVBQVUsQ0FBVjtJQUNFLE9BQU8sRUFBRSxlQUFnQixHQUMxQjs7QTREb0hILE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSyxPQUFPLFNBQVMsRUFBRSxNQUFNO0U1RHRIdkMsQUFBQSxVQUFVLENBQVY7SUFDRSxPQUFPLEVBQUUsZUFBZ0IsR0FDMUI7O0E0RHdISCxNQUFNLEVBQUwsU0FBUyxFQUFFLE1BQU07RTVEMUhoQixBQUFBLFVBQVUsQ0FBVjtJQUNFLE9BQU8sRUFBRSxlQUFnQixHQUMxQjs7QUFGRCxBQUFBLGNBQWMsQ0FBZDtFQUNFLE9BQU8sRUFBRSxlQUFnQixHQUMxQjs7QTREcUlILE1BQU0sQ0FBTixLQUFLO0U1RGpKSCxBQUFBLGNBQWMsQ0FBZDtJQUNFLE9BQU8sRUFBRSxnQkFBaUIsR0FDM0I7RUFDRCxBQUFLLEtBQUEsQUFBQSxjQUFjLENBQW5CO0lBQUUsT0FBTyxFQUFFLGdCQUFpQixHQUFJO0VBQ2hDLEFBQUUsRUFBQSxBQUFBLGNBQWMsQ0FBaEI7SUFBRSxPQUFPLEVBQUUsb0JBQXFCLEdBQUk7RUFDcEMsQUFBRSxFQUFBLEFBQUEsY0FBYztFQUNoQixBQUFFLEVBQUEsQUFBQSxjQUFjLENBRGhCO0lBQUUsT0FBTyxFQUFFLHFCQUFzQixHQUFJOztBNEQrSXZDLEFBQUEsb0JBQW9CLENBQUM7RUFDbkIsT0FBTyxFQUFFLGVBQWdCLEdBSzFCO0VBSEMsTUFBTSxDQUFOLEtBQUs7SUFIUCxBQUFBLG9CQUFvQixDQUFDO01BSWpCLE9BQU8sRUFBRSxnQkFBaUIsR0FFN0I7O0FBQ0QsQUFBQSxxQkFBcUIsQ0FBQztFQUNwQixPQUFPLEVBQUUsZUFBZ0IsR0FLMUI7RUFIQyxNQUFNLENBQU4sS0FBSztJQUhQLEFBQUEscUJBQXFCLENBQUM7TUFJbEIsT0FBTyxFQUFFLGlCQUFrQixHQUU5Qjs7QUFDRCxBQUFBLDJCQUEyQixDQUFDO0VBQzFCLE9BQU8sRUFBRSxlQUFnQixHQUsxQjtFQUhDLE1BQU0sQ0FBTixLQUFLO0lBSFAsQUFBQSwyQkFBMkIsQ0FBQztNQUl4QixPQUFPLEVBQUUsdUJBQXdCLEdBRXBDOztBQUVELE1BQU0sQ0FBTixLQUFLO0U1RGhLSCxBQUFBLGFBQWEsQ0FBYjtJQUNFLE9BQU8sRUFBRSxlQUFnQixHQUMxQjs7QTZEbEJILHNFQUFzRTtBQUV0RSxBQUFBLE9BQU8sQ0FBQTtFQUNMLGdCQUFnQixFQUFFLGtCQUFtQjtFQUNyQyxhQUFhLEVBQUUsaUJBQWtCO0VBQ2pDLGFBQWEsRUFBRSxJQUFLO0VBQ3BCLE1BQU0sRUFBRSxJQUFLLEdBc0JkO0VBMUJELEFBTUUsT0FOSyxDQU1MLEtBQUssQ0FBQTtJQUNILFVBQVUsRUFBRSxJQUFLLEdBQ2xCO0VBUkgsQUFVRSxPQVZLLENBVUwsQ0FBQyxDQUFDO0lBQ0EsV0FBVyxFQUFFLElBQUssR0FDbkI7RUFaSCxBQWNFLE9BZEssQ0FjTCxXQUFXLENBQUM7SUFDVixPQUFPLEVBQUUsaUJBQWtCO0lBQzNCLEtBQUssRUFBRSxLQUFNO0lBQ2IsVUFBVSxFQUFFLElBQUssR0FRbEI7SUFMQyxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7TUFwQnJCLEFBcUJtQyxPQXJCNUIsQ0FjTCxXQUFXLENBT1AsV0FBVyxDQUFDLENBQUMsQUFBQSxJQUFLLENBQUEsQUFBQSxXQUFXLEVBQUM7UUFDNUIsT0FBTyxFQUFFLElBQUssR0FDZjs7QUFLUCxnRUFBZ0U7QUM5QmhFLHlEQUF5RDtBQUt6RCxBQUFBLGdCQUFnQixDQUFDO0VBQ2Ysa0JBQWtCLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLHNCQUFJO0VBQ3hDLGVBQWUsRUFBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsc0JBQUk7RUFDeEMsVUFBVSxFQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxzQkFBSSxHQStIekM7RUFsSUQsQUFLRSxnQkFMYyxDQUtkLEtBQUssQ0FBQTtJQUNILFNBQVMsRUFBRSxJQUFLO0lBQ2hCLE1BQU0sRXZFcURnQixJQUFLLEN1RXJERixJQUFJLEdBQzlCO0VBUkgsQUFVRSxnQkFWYyxDQVVkLENBQUMsQ0FBQztJQUNBLFdBQVcsRUFBRSxJQUFLLEdBQ25CO0VBWkgsQUFlRSxnQkFmYyxDQWVkLFNBQVMsQ0FBQztJQUNSLGdCQUFnQixFQUFFLHVCQUFHLEdBQ3RCO0VBakJILEFBa0JFLGdCQWxCYyxDQWtCZCxVQUFVLENBQUM7SUFDVCxxR0FBcUc7SUFDckcsZ0JBQWdCLEVBQUUsZUFBRyxHQUN0QjtFQXJCSCxBQXNCRSxnQkF0QmMsQ0FzQmQsZ0JBQWdCLENBQUE7SUFDZCxnQkFBZ0IsRUFBRSxzQkFBRyxHQUN0QjtFQXhCSCxBQXlCRSxnQkF6QmMsQ0F5QmQsVUFBVSxDQUFBO0lBQ1IsZ0JBQWdCLEVBQUUsZ0JBQUcsR0FDdEI7RUEzQkgsQUE0QkUsZ0JBNUJjLENBNEJkLFdBQVcsQ0FBQTtJQUNULGdCQUFnQixFQUFFLGlCQUFHLEdBQ3RCO0VBOUJILEFBK0JFLGdCQS9CYyxDQStCZCxVQUFVLENBQUE7SUFDUixnQkFBZ0IsRUFBRSxnQkFBRyxHQUN0QjtFQWpDSCxBQWtDRSxnQkFsQ2MsQ0FrQ2QsaUJBQWlCLENBQUE7SUFDZixnQkFBZ0IsRUFBRSx1QkFBRyxHQUN0QjtFQXBDSCxBQXFDRSxnQkFyQ2MsQ0FxQ2QsU0FBUyxDQUFBO0lBQ1AsZ0JBQWdCLEVBQUUsbUJBQUcsR0FDdEI7RUF2Q0gsQUE0Q0ksZ0JBNUNZLENBMENkLEVBQUUsQUFBQSxPQUFPLENBQUMsQ0FBQyxDQUVULFVBQVU7RUE1Q2QsQUE0Q0ksZ0JBNUNZLENBMkNkLEVBQUUsQUFBQSxNQUFNLENBQUMsQ0FBQyxDQUNSLFVBQVUsQ0FBQTtJQUNSLGdCQUFnQixFQUFFLG9CQUFHLEdBQ3RCO0VBOUNMLEFBK0NJLGdCQS9DWSxDQTBDZCxFQUFFLEFBQUEsT0FBTyxDQUFDLENBQUMsQ0FLVCxnQkFBZ0I7RUEvQ3BCLEFBK0NJLGdCQS9DWSxDQTJDZCxFQUFFLEFBQUEsTUFBTSxDQUFDLENBQUMsQ0FJUixnQkFBZ0IsQ0FBQTtJQUNkLGdCQUFnQixFQUFFLDJCQUFHLEdBQ3RCO0VBakRMLEFBa0RJLGdCQWxEWSxDQTBDZCxFQUFFLEFBQUEsT0FBTyxDQUFDLENBQUMsQ0FRVCxVQUFVO0VBbERkLEFBa0RJLGdCQWxEWSxDQTJDZCxFQUFFLEFBQUEsTUFBTSxDQUFDLENBQUMsQ0FPUixVQUFVLENBQUE7SUFDUixnQkFBZ0IsRUFBRSxxQkFBRyxHQUN0QjtFQXBETCxBQXFESSxnQkFyRFksQ0EwQ2QsRUFBRSxBQUFBLE9BQU8sQ0FBQyxDQUFDLENBV1QsV0FBVztFQXJEZixBQXFESSxnQkFyRFksQ0EyQ2QsRUFBRSxBQUFBLE1BQU0sQ0FBQyxDQUFDLENBVVIsV0FBVyxDQUFBO0lBQ1QsZ0JBQWdCLEVBQUUsc0JBQUcsR0FDdEI7RUF2REwsQUF3REksZ0JBeERZLENBMENkLEVBQUUsQUFBQSxPQUFPLENBQUMsQ0FBQyxDQWNULFVBQVU7RUF4RGQsQUF3REksZ0JBeERZLENBMkNkLEVBQUUsQUFBQSxNQUFNLENBQUMsQ0FBQyxDQWFSLFVBQVUsQ0FBQTtJQUNSLGdCQUFnQixFQUFFLHFCQUFHLEdBQ3RCO0VBMURMLEFBMkRJLGdCQTNEWSxDQTBDZCxFQUFFLEFBQUEsT0FBTyxDQUFDLENBQUMsQ0FpQlQsaUJBQWlCO0VBM0RyQixBQTJESSxnQkEzRFksQ0EyQ2QsRUFBRSxBQUFBLE1BQU0sQ0FBQyxDQUFDLENBZ0JSLGlCQUFpQixDQUFBO0lBQ2YsZ0JBQWdCLEVBQUUsNEJBQUcsR0FDdEI7RUE3REwsQUE4REksZ0JBOURZLENBMENkLEVBQUUsQUFBQSxPQUFPLENBQUMsQ0FBQyxDQW9CVCxTQUFTO0VBOURiLEFBOERJLGdCQTlEWSxDQTJDZCxFQUFFLEFBQUEsTUFBTSxDQUFDLENBQUMsQ0FtQlIsU0FBUyxDQUFBO0lBQ1AsZ0JBQWdCLEVBQUUsd0JBQUcsR0FDdEI7RUFoRUwsQUFvRUksZ0JBcEVZLENBbUVkLEVBQUUsQ0FDQSxDQUFDLENBQUM7SUFDQSxVQUFVLEVBQUUsbUJBQW9CLEdBQ2pDO0VBdEVMLEFBdUVNLGdCQXZFVSxDQW1FZCxFQUFFLENBSUEsRUFBRSxBQUFBLGVBQWUsQ0FBQTtJQUNmLFlBQVksRXZFWlEsSUFBSyxHdUV1RDFCO0lBbkhMLEFBeUVNLGdCQXpFVSxDQW1FZCxFQUFFLENBSUEsRUFBRSxBQUFBLGVBQWUsQ0FFZixFQUFFLENBQUE7TUFDQSxVQUFVLEVBQUUsSUFBSztNQUNqQixRQUFRLEVBQUUsUUFBUztNQUNuQixVQUFVLEVBQUUsR0FBZ0I7TUFDNUIsYUFBYSxFQUFFLEdBQWdCO01BQy9CLFdBQVcsRXZFbEJPLElBQUssR3VFc0R4QjtNQWxIUCxBQXlFTSxnQkF6RVUsQ0FtRWQsRUFBRSxDQUlBLEVBQUUsQUFBQSxlQUFlLENBRWYsRUFBRSxBQU9DLE9BQU8sQ0FBQztRQUNQLE9BQU8sRUFBRSxZQUFhO1FBQ3RCLFNBQVMsRUFBRSxHQUFJO1FBQ2YsV0FBVyxFQUFFLEdBQUk7UUFDakIsUUFBUSxFQUFFLFFBQVM7UUFDbkIsR0FBRyxFQUFFLElBQUs7UUFDVixJQUFJLEVBQUUsS0FBTTtRQUNaLFdBQVcsRUFBRSxDQUFFO1FBQ2YsT0FBTyxFQUFFLEdBQUk7UUFDYixnQkFBZ0IsRXZFN0VGLE9BQU0sR3VFOEVyQjtNQTFGVCxBQTRGVSxnQkE1Rk0sQ0FtRWQsRUFBRSxDQUlBLEVBQUUsQUFBQSxlQUFlLENBRWYsRUFBRSxHQW1CRSxDQUFDLENBQUM7UUFDRixNQUFNLEVBQUUsT0FBUTtRQUNoQixPQUFPLEVBQUUsS0FBTTtRQUNmLE9BQU8sRUFBRSxPQUFRO1FBQ2pCLFlBQVksRUFBRSxDQUFFO1FBQ2hCLGFBQWEsRXZFT0ssR0FBRyxHdUVFdEI7UUExR1QsQUFrR1ksZ0JBbEdJLENBbUVkLEVBQUUsQ0FJQSxFQUFFLEFBQUEsZUFBZSxDQUVmLEVBQUUsR0FtQkUsQ0FBQyxHQU1DLEdBQUcsQ0FBQztVQUNKLEtBQUssRUFBQyxJQUFLLEdBQ1o7UUFwR1gsQUE0RlUsZ0JBNUZNLENBbUVkLEVBQUUsQ0FJQSxFQUFFLEFBQUEsZUFBZSxDQUVmLEVBQUUsR0FtQkUsQ0FBQyxBQVNBLE1BQU0sRUFyR2pCLEFBNEZVLGdCQTVGTSxDQW1FZCxFQUFFLENBSUEsRUFBRSxBQUFBLGVBQWUsQ0FFZixFQUFFLEdBbUJFLENBQUMsQUFTUSxNQUFNLENBQUU7VUFDZixZQUFZLEVBQUUsSUFBSztVQUNuQixlQUFlLEVBQUUsSUFBSztVQUN0QixnQkFBZ0IsRXZFOUZILE9BQU8sR3VFK0ZyQjtNQXpHWCxBQTZHbUIsZ0JBN0dILENBbUVkLEVBQUUsQ0FJQSxFQUFFLEFBQUEsZUFBZSxDQUVmLEVBQUUsQUFvQ0MsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNYLFlBQVksRUFBRSxJQUFLO1FBQ25CLEtBQUssRXZFRmEsSUFBSTtRdUVHdEIsZ0JBQWdCLEVBQUUsT0FBTyxHQUMxQjtFQWpIVCxBQXFIaUIsZ0JBckhELEVBcUhkLEFBQUEsS0FBQyxFQUFPLE9BQU8sQUFBZCxFQUFlO0lBQ2QsbUJBQW1CLEVBQUUsV0FBWTtJQUNqQyxLQUFLLEVBQUMsSUFBSztJQUNYLE1BQU0sRUFBQyxJQUFLO0lBQ1osT0FBTyxFQUFFLFlBQWE7SUFDdEIsWUFBWSxFQUFFLElBQUs7SUFDbkIsUUFBUSxFQUFFLFFBQVM7SUFDbkIsR0FBRyxFQUFFLEdBQUksR0FDVjtFQTdISCxBQStIRSxnQkEvSGMsQ0ErSGQsc0JBQXNCLENBQUE7SUFDcEIsT0FBTyxFQUFFLElBQUssR0FDZjs7QUFHSCxBQUFRLFFBQUEsQUFBQSxVQUFVLENBQUM7RUFFakIsWUFBWSxFQUFFLElBQUssR0FvQnBCO0VBdEJELEFBSUUsUUFKTSxBQUFBLFVBQVUsQ0FJaEIsZ0JBQWdCLENBQUM7SUFDZixLQUFLLEVBQUUsSUFBSyxHQWdCYjtJQXJCSCxBQU9NLFFBUEUsQUFBQSxVQUFVLENBSWhCLGdCQUFnQixDQUdkLENBQUMsR0FBQyxJQUFJLEVBUFYsQUFPWSxRQVBKLEFBQUEsVUFBVSxDQUloQixnQkFBZ0IsQ0FHTixLQUFLLEVBUGpCLEFBT21CLFFBUFgsQUFBQSxVQUFVLENBSWhCLGdCQUFnQixDQUdDLGVBQWUsQ0FBQTtNQUM1QixPQUFPLEVBQUUsSUFBSyxHQUNmO0lBVEwsQUFXSSxRQVhJLEFBQUEsVUFBVSxDQUloQixnQkFBZ0IsQ0FPZCxDQUFDLENBQUE7TUFDQyxPQUFPLEVBQUUsSUFBSyxHQUNmO0lBYkwsQUFlSSxRQWZJLEFBQUEsVUFBVSxDQUloQixnQkFBZ0IsQ0FXZCxxQkFBcUIsQ0FBQTtNQUNuQixPQUFPLEVBQUUsSUFBSyxHQUNmO0lBakJMLEFBa0JJLFFBbEJJLEFBQUEsVUFBVSxDQUloQixnQkFBZ0IsQ0FjZCxzQkFBc0IsQ0FBQTtNQUNwQixPQUFPLEVBQUUsS0FBTSxHQUNoQjs7QUFJTCw2REFBNkQ7QUNqSzdELDREQUE0RDtBQUU1RCxBQUFBLE9BQU8sQ0FBQTtFQUNMLE9BQU8sRUFBRSxFQUFHO0VBQ1osUUFBUSxFQUFFLEtBQU0sR0FDakI7O0FBRUQsV0FBVztBQUNYLE1BQU0sRUFBTCxTQUFTLEVBQUUsS0FBSztFQUNmLEFBQUEsT0FBTyxDQUFBO0lBQ0wsT0FBTyxFQUFFLElBQUssR0FDZjtFQUVELEFBQUEscUJBQXFCLENBQUE7SUFDbkIsY0FBYyxFQUFFLElBQUssR0FDdEI7O0FBR0gsQUFBaUIsT0FBVixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7RUFDMUIsS0FBSyxFQUFFLEtBQU07RUFDYixPQUFPLEVBQUUsYUFBYztFQUN2QixPQUFPLEVBQUUsS0FBTSxHQUNoQjs7QUFDRCxnRUFBZ0U7QUN2QmhFLEFBRUksS0FGQyxDQUNILEVBQUUsQ0FDQSxDQUFDLENBQUM7RUFDQSxLQUFLLEVBQUUsSUFBSyxHQUNiOztBQ0pMLEFBQXlCLGNBQVgsQ0FBQyxFQUFFLEFBQUEsT0FBTyxDQUFDLENBQUM7QUFDMUIsQUFBMEIsY0FBWixDQUFDLEVBQUUsQUFBQSxPQUFPLENBQUMsQ0FBQyxBQUFBLE1BQU07QUFDaEMsQUFBbUIsY0FBTCxDQUFDLEVBQUUsQ0FBQyxDQUFDLEFBQUEsTUFBTTtBQUN6QixBQUE4QixjQUFoQixHQUFHLEVBQUUsQUFBQSxPQUFPLEdBQUcsQ0FBQyxBQUFBLE1BQU0sQ0FBQztFQUNuQyxnQkFBZ0IsRTFFYU0sT0FBTTtFMEVaNUIsS0FBSyxFQUFFLElBQUs7RUFDWixPQUFPLEVBQUUsSUFBSyxHQUNmOztBQUVELEFBQVUsU0FBRCxHQUFDLEVBQUUsQ0FBQztFQUNYLGFBQWEsRUFBRSxHQUFJLEdBQ3BCOztBQUVELEFBQWtCLGNBQUosQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0VBQ2pCLGNBQWMsRUFBRSxHQUFJLEdBQ3JCOztBQUVELEFBQUEsZUFBZSxDQUFDO0VBQ2QsbUJBQW1CLEVBQUUsY0FBZTtFQUNwQyxtQkFBbUIsRUFBRSxLQUFNO0VBQzNCLG1CQUFtQixFMUVIRyxPQUFNLEcwRUk3Qjs7QUFFRCxBQUFBLGlCQUFpQixDQUFDO0VBQ2hCLFVBQVUsRUFBRSxlQUFnQjtFQUM1QixNQUFNLEVBQUUsZUFBZ0IsR0FDekI7O0FDMUJELEFBQWMsSUFBVixBQUFBLE1BQU0sQ0FBQyxHQUFHLEFBQUEsS0FBSyxDQUFBO0VBQ2hCLEtBQUssRUFBRSxLQUFNO0VBQ2IsT0FBTyxFQUFFLEtBQU07RUFDZixNQUFNLEVBQUUsU0FBVTtFQUNsQixXQUFXLEVBQUUsSUFBSyxHQUNwQjs7QUFDRCxBQUFBLE1BQU0sQ0FBQztFQUNMLGdCQUFnQixFQUFFLGFBQUc7RUFDckIsZUFBZSxFQUFFLEtBQU07RUFDdkIsbUJBQW1CLEVBQUUsTUFBTztFQUM1QixpQkFBaUIsRUFBRSxTQUFVLEdBQzlCOztBQUVELEFBQU8sTUFBRCxDQUFDLGFBQWEsQ0FBQztFQUNuQixLQUFLLEVBQUUsSUFBSztFQUNWLE1BQU0sRUFBRSxLQUFNO0VBQ2QsTUFBTSxFQUFFLFlBQWE7RUFDckIsS0FBSyxFQUFFLEtBQU0sR0FDaEI7O0FBQ0QsQUFBQSxNQUFNLENBQUE7RUFXSjs7Ozs7Ozs7Ozs7S0FXRyxFQStCSjtFQXJERCxBQUNFLE1BREksQ0FDSixhQUFhLENBQUM7SUFDWixVQUFVLEVBQUUseUJBQUksR0FDakI7RUFISCxBQUtvQyxNQUw5QixDQUtKLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFELElBQUMsQUFBQTtFQUwzQixBQU13QyxNQU5sQyxDQU1KLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFBLEFBQUEsSUFBQyxDQUFELFFBQUMsQUFBQTtFQU4zQixBQU8yQixNQVByQixDQU9KLGNBQWMsQUFBQSxVQUFVLENBQUMsS0FBSyxDQUFBO0lBQzVCLGdCQUFnQixFQUFFLE9BQUcsR0FDdEI7RUFUSCxBQXdCUyxNQXhCSCxDQXdCSixJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ1YsVUFBVSxFQUFFLElBQUssR0FDbEI7RUExQkgsQUE0QmdCLE1BNUJWLENBNEJKLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDakIsTUFBTSxFQUFFLFVBQVcsR0FDcEI7RUE5QkgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxDQUFDO0kxRDdDYixLQUFLLEVqQnFKMEIsSUFBSTtJaUJwSm5DLGdCQUFnQixFakJVTSxPQUFNO0lpQlQ1QixZQUFZLEVqQnFKbUIsT0FBTTtJMkV4R25DLFVBQVUsRTNFcENVLE9BQU0sRzJFcUMzQjtJQW5DSCxBQWdDRSxNQWhDSSxDQWdDSixZQUFZLEExRHpDWCxNQUFNLEUwRFNULEFBZ0NFLE1BaENJLENBZ0NKLFlBQVksQTFEeENYLE1BQU0sQ0FBQztNQUNOLEtBQUssRWpCK0l3QixJQUFJO01pQjlJakMsZ0JBQWdCLEVBQUUsT0FBTTtNQUNwQixZQUFZLEVBQUUsT0FBTSxHQUN6QjtJMERJSCxBQWdDRSxNQWhDSSxDQWdDSixZQUFZLEExRG5DWCxNQUFNLENBQUM7TUFDTixLQUFLLEVqQjBJd0IsSUFBSTtNaUJ6SWpDLGdCQUFnQixFQUFFLE9BQU07TUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FDekI7STBEREgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxBMUQ5QlgsT0FBTyxFMERGVixBQWdDRSxNQWhDSSxDQWdDSixZQUFZLEExRDdCWCxPQUFPO0lBQ1IsQTBENEJBLEsxRDVCSyxHMERKUCxNQUFNLENBZ0NKLFlBQVksQTFENUJILGdCQUFnQixDQUFDO01BQ3hCLEtBQUssRWpCbUl3QixJQUFJO01pQmxJakMsZ0JBQWdCLEVBQUUsT0FBTTtNQUNwQixZQUFZLEVBQUUsT0FBTSxHQVN6QjtNMERoQkgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxBMUQ5QlgsT0FBTyxBQU9MLE1BQU0sRTBEVFgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxBMUQ5QlgsT0FBTyxBQVFMLE1BQU0sRTBEVlgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxBMUQ5QlgsT0FBTyxBQVNMLE1BQU0sRTBEWFgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxBMUQ3QlgsT0FBTyxBQU1MLE1BQU0sRTBEVFgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxBMUQ3QlgsT0FBTyxBQU9MLE1BQU0sRTBEVlgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxBMUQ3QlgsT0FBTyxBQVFMLE1BQU07TUFQVCxBMEQ0QkEsSzFENUJLLEcwREpQLE1BQU0sQ0FnQ0osWUFBWSxBMUQ1QkgsZ0JBQWdCLEFBS3RCLE1BQU07TUFMVCxBMEQ0QkEsSzFENUJLLEcwREpQLE1BQU0sQ0FnQ0osWUFBWSxBMUQ1QkgsZ0JBQWdCLEFBTXRCLE1BQU07TUFOVCxBMEQ0QkEsSzFENUJLLEcwREpQLE1BQU0sQ0FnQ0osWUFBWSxBMUQ1QkgsZ0JBQWdCLEFBT3RCLE1BQU0sQ0FBQztRQUNOLEtBQUssRWpCNEhzQixJQUFJO1FpQjNIL0IsZ0JBQWdCLEVBQUUsT0FBTTtRQUNwQixZQUFZLEVBQUUsT0FBTSxHQUN6QjtJMERmTCxBQWdDRSxNQWhDSSxDQWdDSixZQUFZLEExRGZYLE9BQU8sRTBEakJWLEFBZ0NFLE1BaENJLENBZ0NKLFlBQVksQTFEZFgsT0FBTztJQUNSLEEwRGFBLEsxRGJLLEcwRG5CUCxNQUFNLENBZ0NKLFlBQVksQTFEYkgsZ0JBQWdCLENBQUM7TUFDeEIsZ0JBQWdCLEVBQUUsSUFBSyxHQUN4QjtJMERyQkgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxBMURWWCxTQUFTLEFBR1AsTUFBTSxFMER6QlgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxBMURWWCxTQUFTLEFBSVAsTUFBTSxFMEQxQlgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxBMURWWCxTQUFTLEFBS1AsTUFBTSxFMEQzQlgsQUFnQ0UsTUFoQ0ksQ0FnQ0osWUFBWSxDMURUWCxBQUFBLFFBQUMsQUFBQSxDQUVDLE1BQU0sRTBEekJYLEFBZ0NFLE1BaENJLENBZ0NKLFlBQVksQzFEVFgsQUFBQSxRQUFDLEFBQUEsQ0FHQyxNQUFNLEUwRDFCWCxBQWdDRSxNQWhDSSxDQWdDSixZQUFZLEMxRFRYLEFBQUEsUUFBQyxBQUFBLENBSUMsTUFBTTtJQUhULEEwRFFBLFExRFJRLENBQUEsQUFBQSxRQUFDLEFBQUEsRTBEeEJYLE1BQU0sQ0FnQ0osWUFBWSxBMURQVCxNQUFNO0lBRFQsQTBEUUEsUTFEUlEsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFMER4QlgsTUFBTSxDQWdDSixZQUFZLEExRE5ULE1BQU07SUFGVCxBMERRQSxRMURSUSxDQUFBLEFBQUEsUUFBQyxBQUFBLEUwRHhCWCxNQUFNLENBZ0NKLFlBQVksQTFETFQsTUFBTSxDQUFDO01BQ04sZ0JBQWdCLEVqQjlCRSxPQUFNO01pQitCcEIsWUFBWSxFakI2R1csT0FBTSxHaUI1R2xDO0kwRDlCTCxBMURpQ0UsTTBEakNJLENBZ0NKLFlBQVksQzFEQ1osTUFBTSxDQUFDO01BQ0wsS0FBSyxFakJwQ2UsT0FBTTtNaUJxQzFCLGdCQUFnQixFakJxR2EsSUFBSSxHaUJwR2xDO0UwRHBDSCxBQXFDRSxNQXJDSSxDQXFDSixXQUFXLENBQUM7SUFDVixLQUFLLEVBQUUsR0FBSTtJQUNYLFVBQVUsRUFBRSxJQUFLO0lBQ2pCLEtBQUssRUFBRSxJQUFLLEdBQ2I7RUF6Q0gsQUEyQ0UsTUEzQ0ksQ0EyQ0oscUJBQXFCLENBQUE7SUFDbkIsT0FBTyxFQUFDLElBQUssR0FDZDtFQTdDSCxBQStDRSxNQS9DSSxDQStDSixtQkFBbUIsQ0FBQztJQUNsQixVQUFVLEVBQUUsSUFBSztJQUNqQixNQUFNLEVBQUUsT0FBUTtJQUNoQixLQUFLLEUzRXBEZSxPQUFNO0kyRXFEMUIsZUFBZSxFQUFFLFNBQVUsR0FDNUI7O0FDdEVILEFBQWUsV0FBSixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDZixXQUFXLEVBQUMsSUFBSyxHQUNsQjs7QUNIRCxBQUFBLGFBQWEsQ0FBQztFQUNWLEtBQUssRUFBRSxJQUFLO0VBQ1osU0FBUyxFQUFFLElBQUssR0FDbkI7O0FDSEQsQUFBZSxJQUFYLEFBQUEsT0FBTyxDQUFDLEdBQUcsQUFBQSxLQUFLLENBQUE7RUFDakIsS0FBSyxFQUFFLEtBQU07RUFDYixPQUFPLEVBQUUsS0FBTTtFQUNmLE1BQU0sRUFBRSxTQUFVO0VBQ2xCLFdBQVcsRUFBRSxJQUFLLEdBQ3BCOztBQUVELEFBQUUsRUFBQSxBQUFBLFlBQVksQ0FBQTtFQUNaLFVBQVUsRUFBRSxNQUFPLEdBQ3BCOztBQUVELEFBQVEsT0FBRCxDQUFDLGFBQWEsQ0FBQztFQUNwQixLQUFLLEVBQUUsSUFBSztFQUVWLEtBQUssRUFBRSxLQUFNO0VBQ2YsVUFBVSxFQUFFLE1BQU8sR0FFcEI7O0FBQ0QsQUFBQSxPQUFPLENBQUE7RUFFTCxVQUFVLEVBQUUseUJBQUk7RUFDaEIsS0FBSyxFQUFFLElBQUs7RUFDWixNQUFNLEVBQUUsS0FBTTtFQUNkLE1BQU0sRUFBRSxZQUFhO0VBQ3JCLEtBQUssRUFBRSxLQUFNO0VBQ2IsVUFBVSxFQUFFLE1BQU87RUFDbkIsVUFBVSxFQUFFLE1BQU87RUFDbkIsT0FBTyxFQUFFLGlCQUFrQixHQWtCNUI7RUEzQkQsQUFXMkIsT0FYcEIsQ0FXTCxjQUFjLEFBQUEsVUFBVSxDQUFDLEtBQUssQ0FBQTtJQUM1QixnQkFBZ0IsRUFBRSxPQUFHLEdBQ3RCO0VBYkgsQUFjUyxPQWRGLENBY0wsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNWLFVBQVUsRUFBRSxJQUFLLEdBQ2xCO0VBaEJILEFBa0JFLE9BbEJLLENBa0JMLFlBQVksQ0FBQztJN0Q5QmIsS0FBSyxFakJxSjBCLElBQUk7SWlCcEpuQyxnQkFBZ0IsRWpCVU0sT0FBTTtJaUJUNUIsWUFBWSxFakJxSm1CLE9BQU07SThFdkhuQyxVQUFVLEU5RXJCVSxPQUFNLEc4RXNCM0I7SUFyQkgsQUFrQkUsT0FsQkssQ0FrQkwsWUFBWSxBN0QxQlgsTUFBTSxFNkRRVCxBQWtCRSxPQWxCSyxDQWtCTCxZQUFZLEE3RHpCWCxNQUFNLENBQUM7TUFDTixLQUFLLEVqQitJd0IsSUFBSTtNaUI5SWpDLGdCQUFnQixFQUFFLE9BQU07TUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FDekI7STZER0gsQUFrQkUsT0FsQkssQ0FrQkwsWUFBWSxBN0RwQlgsTUFBTSxDQUFDO01BQ04sS0FBSyxFakIwSXdCLElBQUk7TWlCeklqQyxnQkFBZ0IsRUFBRSxPQUFNO01BQ3BCLFlBQVksRUFBRSxPQUFNLEdBQ3pCO0k2REZILEFBa0JFLE9BbEJLLENBa0JMLFlBQVksQTdEZlgsT0FBTyxFNkRIVixBQWtCRSxPQWxCSyxDQWtCTCxZQUFZLEE3RGRYLE9BQU87SUFDUixBNkRhQSxLN0RiSyxHNkRMUCxPQUFPLENBa0JMLFlBQVksQTdEYkgsZ0JBQWdCLENBQUM7TUFDeEIsS0FBSyxFakJtSXdCLElBQUk7TWlCbElqQyxnQkFBZ0IsRUFBRSxPQUFNO01BQ3BCLFlBQVksRUFBRSxPQUFNLEdBU3pCO002RGpCSCxBQWtCRSxPQWxCSyxDQWtCTCxZQUFZLEE3RGZYLE9BQU8sQUFPTCxNQUFNLEU2RFZYLEFBa0JFLE9BbEJLLENBa0JMLFlBQVksQTdEZlgsT0FBTyxBQVFMLE1BQU0sRTZEWFgsQUFrQkUsT0FsQkssQ0FrQkwsWUFBWSxBN0RmWCxPQUFPLEFBU0wsTUFBTSxFNkRaWCxBQWtCRSxPQWxCSyxDQWtCTCxZQUFZLEE3RGRYLE9BQU8sQUFNTCxNQUFNLEU2RFZYLEFBa0JFLE9BbEJLLENBa0JMLFlBQVksQTdEZFgsT0FBTyxBQU9MLE1BQU0sRTZEWFgsQUFrQkUsT0FsQkssQ0FrQkwsWUFBWSxBN0RkWCxPQUFPLEFBUUwsTUFBTTtNQVBULEE2RGFBLEs3RGJLLEc2RExQLE9BQU8sQ0FrQkwsWUFBWSxBN0RiSCxnQkFBZ0IsQUFLdEIsTUFBTTtNQUxULEE2RGFBLEs3RGJLLEc2RExQLE9BQU8sQ0FrQkwsWUFBWSxBN0RiSCxnQkFBZ0IsQUFNdEIsTUFBTTtNQU5ULEE2RGFBLEs3RGJLLEc2RExQLE9BQU8sQ0FrQkwsWUFBWSxBN0RiSCxnQkFBZ0IsQUFPdEIsTUFBTSxDQUFDO1FBQ04sS0FBSyxFakI0SHNCLElBQUk7UWlCM0gvQixnQkFBZ0IsRUFBRSxPQUFNO1FBQ3BCLFlBQVksRUFBRSxPQUFNLEdBQ3pCO0k2RGhCTCxBQWtCRSxPQWxCSyxDQWtCTCxZQUFZLEE3REFYLE9BQU8sRTZEbEJWLEFBa0JFLE9BbEJLLENBa0JMLFlBQVksQTdEQ1gsT0FBTztJQUNSLEE2REZBLEs3REVLLEc2RHBCUCxPQUFPLENBa0JMLFlBQVksQTdERUgsZ0JBQWdCLENBQUM7TUFDeEIsZ0JBQWdCLEVBQUUsSUFBSyxHQUN4QjtJNkR0QkgsQUFrQkUsT0FsQkssQ0FrQkwsWUFBWSxBN0RLWCxTQUFTLEFBR1AsTUFBTSxFNkQxQlgsQUFrQkUsT0FsQkssQ0FrQkwsWUFBWSxBN0RLWCxTQUFTLEFBSVAsTUFBTSxFNkQzQlgsQUFrQkUsT0FsQkssQ0FrQkwsWUFBWSxBN0RLWCxTQUFTLEFBS1AsTUFBTSxFNkQ1QlgsQUFrQkUsT0FsQkssQ0FrQkwsWUFBWSxDN0RNWCxBQUFBLFFBQUMsQUFBQSxDQUVDLE1BQU0sRTZEMUJYLEFBa0JFLE9BbEJLLENBa0JMLFlBQVksQzdETVgsQUFBQSxRQUFDLEFBQUEsQ0FHQyxNQUFNLEU2RDNCWCxBQWtCRSxPQWxCSyxDQWtCTCxZQUFZLEM3RE1YLEFBQUEsUUFBQyxBQUFBLENBSUMsTUFBTTtJQUhULEE2RFBBLFE3RE9RLENBQUEsQUFBQSxRQUFDLEFBQUEsRTZEekJYLE9BQU8sQ0FrQkwsWUFBWSxBN0RRVCxNQUFNO0lBRFQsQTZEUEEsUTdET1EsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFNkR6QlgsT0FBTyxDQWtCTCxZQUFZLEE3RFNULE1BQU07SUFGVCxBNkRQQSxRN0RPUSxDQUFBLEFBQUEsUUFBQyxBQUFBLEU2RHpCWCxPQUFPLENBa0JMLFlBQVksQTdEVVQsTUFBTSxDQUFDO01BQ04sZ0JBQWdCLEVqQjlCRSxPQUFNO01pQitCcEIsWUFBWSxFakI2R1csT0FBTSxHaUI1R2xDO0k2RC9CTCxBN0RrQ0UsTzZEbENLLENBa0JMLFlBQVksQzdEZ0JaLE1BQU0sQ0FBQztNQUNMLEtBQUssRWpCcENlLE9BQU07TWlCcUMxQixnQkFBZ0IsRWpCcUdhLElBQUksR2lCcEdsQztFNkRyQ0gsQUFzQkcsT0F0QkksQ0FzQkwsQ0FBQyxBQUFBLFdBQVcsQ0FBQztJQUNYLE1BQU0sRUFBRSxjQUFlO0lBQ3ZCLFNBQVMsRUFBRSxJQUFLO0lBQ2hCLFVBQVUsRUFBRSxNQUFPLEdBQ3BCOztBaEZqQ0g7Ozs7Ozs7Ozs7OzswQkFZMEI7QUFFMUIsQUFBQSxJQUFJLEVBQUUsQUFBQSxJQUFJLEVBQUUsQUFBSSxJQUFBLEFBQUEsTUFBTSxDQUFDO0VBQ3JCLE1BQU0sRUFBRSxJQUFLO0VBQ2IsVUFBVSxFQUFFLElBQUs7RUFDakIsTUFBTSxFQUFFLENBQUUsR0FDWDs7QUFFRCxBQUFBLElBQUksQ0FBQTtFQUNGLFNBQVMsRUFBRSxJQUFLO0VBQ2hCLFVBQVUsRUFBRSxNQUFPLEdBQ3BCOztBQUVELEFBQUEsS0FBSyxDQUFDO0VBQ0osTUFBTSxFQUFFLElBQUs7RUFDYixVQUFVLEVBQUUsSUFBSztFQUNqQixjQUFjLEVBQUUsSUFBSyxHQUN0Qjs7QUFFRCx3RUFBd0U7QUFFeEUsQUFBQSxRQUFRLENBQUM7RUFDTCxZQUFZLEVBQUUsQ0FBRTtFQUNoQixVQUFVLEVBQUUsYUFBYztFQUMxQixVQUFVLEVBQUUsSUFBSztFQUNqQixNQUFNLEVBQUUsSUFBSyxHQUNoQjs7QUFFRCxBQUFRLFFBQUEsQUFBQSxRQUFRLENBQUM7RUFDYixZQUFZLEVBQUUsS0FBTSxHQUN2Qjs7QUFFRCxBQUFBLGdCQUFnQixDQUFDO0VBQ2YsT0FBTyxFQUFFLEVBQUc7RUFDWixRQUFRLEVBQUUsS0FBTTtFQUNoQixJQUFJLEVBQUUsS0FBTTtFQUNaLEtBQUssRUFBRSxDQUFFO0VBQ1QsTUFBTSxFQUFFLElBQUs7RUFDYixXQUFXLEVBQUUsTUFBTztFQUNwQixVQUFVLEVBQUUsSUFBSztFQUNqQixVQUFVLEVBQUUsYUFBYztFQUMxQixVQUFVLEVBQUUsS0FBTSxHQUNuQjs7QUFFRCxBQUFpQixRQUFULEFBQUEsUUFBUSxDQUFDLGdCQUFnQixDQUFDO0VBQ2hDLEtBQUssRUFBRSxLQUFNO0VBQ2IsT0FBTyxFQUFFLElBQUssR0FDZjs7QUFFRCxBQUFBLHFCQUFxQixDQUFDO0VBQ3BCLEtBQUssRUFBRSxJQUFLO0VBQ1osUUFBUSxFQUFFLFFBQVM7RUFDbkIsT0FBTyxFQUFFLElBQUs7RUFDZCxVQUFVLEVBQUUsSUFBSztFQUNqQixNQUFNLEVBQUUsSUFBSyxHQW1CZDtFQXhCRCxBQU1FLHFCQU5tQixDQU1uQixnQkFBZ0I7RUFObEIsQUFPRSxxQkFQbUIsQ0FPbkIsZ0JBQWdCO0VBUGxCLEFBUW1CLHFCQVJFLENBUW5CLGdCQUFnQixDQUFDLFVBQVU7RUFSN0IsQUFTRSxxQkFUbUIsQ0FTbkIsYUFBYTtFQVRmLEFBVUUscUJBVm1CLENBVW5CLFFBQVEsQ0FBQztJQUNQLFVBQVUsRUFBRSxJQUFLO0lBQ2pCLE1BQU0sRUFBRSxJQUFLLEdBQ2Q7RUFiSCxBQWVFLHFCQWZtQixDQWVuQixRQUFRLENBQUM7SUFDUCxZQUFZLEVBQUksSUFBa0I7SUFDbEMsYUFBYSxFQUFHLElBQWtCLEdBQ25DO0VBbEJILEFBb0JFLHFCQXBCbUIsQ0FvQm5CLGFBQWEsQ0FBQztJQUNaLHNDQUFzQztJQUN0QyxjQUFjLEVBQUUsSUFBSyxHQUN0Qjs7QUFJSCxBQUFBLGNBQWMsQ0FBQztFQUNYLFVBQVUsRUFBRSxLQUFNLEdBQ3JCOztBQUVELEFBQWlCLFFBQVQsQUFBQSxRQUFRLENBQUMscUJBQXFCLENBQUM7RUFDbkMsUUFBUSxFQUFFLFFBQVM7RUFDbkIsWUFBWSxFQUFFLE1BQU8sR0FDeEI7O0FBRUQsTUFBTSxFQUFMLFNBQVMsRUFBRSxLQUFLO0VBQ2IsQUFBQSxRQUFRLENBQUM7SUFDTCxZQUFZLEVBQUUsS0FBTSxHQUN2QjtFQUVELEFBQVEsUUFBQSxBQUFBLFFBQVEsQ0FBQztJQUNiLFlBQVksRUFBRSxDQUFFLEdBQ25CO0VBRUQsQUFBQSxnQkFBZ0IsQ0FBQztJQUNmLEtBQUssRUFBRSxLQUFNO0lBQ2IsT0FBTyxFQUFFLElBQUssR0FDZjtFQUVELEFBQWlCLFFBQVQsQUFBQSxRQUFRLENBQUMsZ0JBQWdCLENBQUM7SUFDOUIsS0FBSyxFQUFFLENBQUUsR0FDWjtFQUVELEFBQUEscUJBQXFCLENBQUM7SUFDbEIsT0FBTyxFQUFFLElBQUs7SUFDZCxRQUFRLEVBQUUsUUFBUyxHQUN0QjtFQUVELEFBQWlCLFFBQVQsQUFBQSxRQUFRLENBQUMscUJBQXFCLENBQUM7SUFDbkMsUUFBUSxFQUFFLFFBQVM7SUFDbkIsWUFBWSxFQUFFLENBQUUsR0FDbkI7O0FBR0wsQUFBQSxjQUFjLENBQUE7RUFDWixNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0V6SEssT0FBTSxHRjBIN0I7O0FBRUQsQUFBZSxjQUFELENBQUMsU0FBUyxDQUFBO0VBQ3RCLFVBQVUsRUU3SFksT0FBTSxHRjhIN0I7O0FBQ0QsNEVBQTRFO0NBRTVFLEFBQUEsQUFBUSxPQUFQLEFBQUEsRUFBUztFQUNOLGFBQWEsRUFBRSxLQUFNLEdBQ3hCOztBQUVELGlFQUFpRTtBQUNqRSxNQUFNLEVBQUwsU0FBUyxFQUFFLEtBQUs7RUFDYixBQUFZLFlBQUEsQUFBQSxTQUFTLENBQUM7SUFDbEIsS0FBSyxFQUFFLFlBQWEsR0FDdkI7O0FBRUwscUVBQXFFO0FBRXJFLDJCQUEyQjtBQUUzQixBQUFBLFlBQVksQ0FBQztFQUNULFVBQVUsRUFBRSxpQkFBa0I7RUFDOUIsS0FBSyxFQUFFLGlCQUFrQixHQUM1Qjs7QUFFRCxBQUFBLGtCQUFrQixDQUFDO0VBQ2YsVUFBVSxFQUFFLGdCQUFpQixHQUNoQzs7QUFDRCxBQUFBLGNBQWMsQ0FBQztFQUNmLHlCQUF5QixFQUFFLGNBQWU7RUFDMUMsMEJBQTBCLEVBQUUsY0FBZSxHQUMxQzs7QUFFRCxBQUFBLGlCQUFpQixDQUFDO0VBQ2YsVUFBVSxFQUFFLEtBQU07RUFDbEIsWUFBWSxFQUFFLEdBQUk7RUFDbEIsS0FBSyxFQUFFLEtBQU0sR0FDZjs7QUFDRCxBQUFBLGFBQWEsQ0FBQztFQUNaLHFCQUFxQjtFQUNyQixPQUFPLEVBQUMsTUFBTztFQUNmLEtBQUssRUFBRSxLQUFNO0VBQ2IsTUFBTSxFQUFFLFlBQWEsR0FDdEI7O0FBRUQsQUFBQSxTQUFTLENBQUM7RUFDUixnQkFBZ0IsRUFBRSxPQUFRO0VBQzFCLE1BQU0sRUFBRSxHQUFJLEdBQ2I7O0FBQ0QsQUFBVSxTQUFELENBQUMsU0FBUyxDQUFDO0VBQ2xCLFNBQVMsRUFBRSxJQUFLO0VBQ2hCLE9BQU8sRUFBRSxtQkFBb0IsR0FDOUI7O0FBRUQsQUFBUyxTQUFBLEFBQUEsTUFBTSxDQUFDO0VBQ2QsS0FBSyxFQUFFLGNBQWU7RUFDdEIsU0FBUyxFQUFFLElBQUssR0FDakI7O0FBQ0QsOEJBQThCO0FBQzlCLEFBQUEsWUFBWSxDQUFDO0VBQ2IsT0FBTyxFQUFFLElBQUs7RUFDZCxLQUFLLEVBQUUsSUFBSztFQUNaLG9CQUFvQixFQUNuQjs7QUFDRCxBQUF3QyxrQkFBdEIsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUM7RUFDckQsVUFBVSxFQUFFLElBQUs7RUFDakIsYUFBYSxFQUFFLElBQUs7RUFDcEIsb0JBQW9CO0VBQ3BCLEtBQUssRUFBQyxJQUFLLEdBQ1Y7O0FBQ0Q7OztHQUdHO0FBQ0gsQUFBQSxLQUFLLENBQUM7RUFDTixPQUFPLEVBQUUsS0FBTTtFQUNmLFdBQVcsRUFBRSxJQUFLO0VBQ2xCLGFBQWEsRUFBRSxHQUFJLEdBQ2xCOztBQUVELGdEQUFnRDtBQUNoRCxBQUFBLFlBQVksQ0FBQztFQUNiLGdCQUFnQixFQUFFLE9BQVEsR0FDekI7O0FBRUQsaUZBQWlGO0FBQ2pGLEFBQStCLGdCQUFmLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztFQUNwQyxNQUFNLEVBQUUsa0JBQW1CLEdBQzlCOztBQUVEO3VCQUN1QjtBQUN2QixBQUFBLGFBQWEsQ0FBQztFQUNWLG9CQUFvQjtFQUNwQixzQkFBc0IsRUFDekI7O0FBRUQsQUFBYSxZQUFELENBQUMsZ0JBQWdCLENBQUM7RUFDMUIsVUFBVSxFQUFFLGVBQWdCLEdBQy9COztBQUVELEFBQUEsS0FBSyxDQUFBO0VBQ0wsVUFBVSxFQUFDLElBQUssR0FDZjs7QUFFRCxBQUFBLFdBQVcsQ0FBQztFQUNSLE9BQU8sRUFBQyxLQUFNO0VBQUUsS0FBSyxFQUFDLElBQUs7RUFBRSxLQUFLLEVBQUMsR0FBSTtFQUFFLE1BQU0sRUFBQyxHQUFJLEdBQ3ZEOztBQUVELEFBQUEsSUFBSSxDQUFBO0VBQ0osZ0JBQWdCLEVBQUMsT0FBUSxHQUN4Qjs7QUFFRCxBQUFBLFlBQVksQ0FBQTtFQUNaLGdCQUFnQixFQUFDLE9BQVEsR0FDeEI7O0FBSUQsQUFBc0IsU0FBYixHQUFHLE9BQU8sR0FBRyxDQUFDLEVBQUUsQUFBdUIsU0FBZCxHQUFHLE9BQU8sR0FBRyxDQUFDLEFBQUEsTUFBTSxFQUFFLEFBQXVCLFNBQWQsR0FBRyxPQUFPLEdBQUcsQ0FBQyxBQUFBLE1BQU0sQ0FBQztFQUNyRiw4QkFBOEI7RUFDOUIsZ0JBQWdCLEVBQUUsT0FBUTtFQUMxQixLQUFLLEVBQUUsSUFBSztFQUNaLE1BQU0sRUFBRSxJQUFLLEdBQ2I7O0FBRUQsK0RBQStEO0FBQy9ELEFBQUEsV0FBVyxDQUFBO0VBQ1YsT0FBTyxFQUFDLFlBQWE7RUFDckIsZ0JBQWdCLEVBQUUsSUFBSyxHQUV2Qjs7QUFFRCxBQUFBLFlBQVksQ0FBQTtFQUNYLDhCQUE4QjtFQUM5QixXQUFXLEVBQUUsSUFBSztFQUNsQixLQUFLLEVBQUUsS0FBTTtFQUNiLFVBQVUsRUFBRSxNQUFPO0VBQ25CLFdBQVcsRUFBRSxJQUFLO0VBQ2xCLFdBQVcsRUFBQyxHQUFJO0VBQ2hCLE9BQU8sRUFBQyxZQUFhO0VBQ3JCLE1BQU0sRUFBQyxJQUFLO0VBQ1osV0FBVyxFQUFFLDJDQUE0QztFQUN6RCxTQUFTLEVBQUUsR0FBSSxHQUNmOztBQUVELEFBQUEsVUFBVSxDQUFBO0VBQ1YsS0FBSyxFQUFFLElBQUs7RUFDWixPQUFPLEVBQUUsWUFBYTtFQUN0QixhQUFhLEVBQUUsR0FBSTtFQUNuQixNQUFNLEVBQUMsY0FBZTtFQUN0QixzQkFBc0I7RUFDdEIsVUFBVSxFQUFFLE1BQU87RUFDbkIsV0FBVyxFQUFFLE1BQU8sR0FDbkI7O0FBRUQsQUFBQSxXQUFXLENBQUM7RUFDVixXQUFXLEVBQUUsSUFBSyxHQUNuQjs7QUFDRCxBQUFnQixlQUFELENBQUMsY0FBYyxDQUFDO0VBQzlCLE9BQU8sRUFBRSxJQUFLLEdBQ2Q7O0FBQ0QsQUFBUSxPQUFELENBQUMsV0FBVyxDQUFDO0VBQ2hCLGdCQUFnQixFQUFFLGlCQUFHO0VBQ3JCLGlCQUFpQixFQUFFLFNBQVU7RUFDakMsbUJBQW1CLEVBQUMsV0FBWTtFQUNoQyxPQUFPLEVBQUMsQ0FBRTtFQUNOLGVBQWUsRUFBRSxJQUFLO0VBQ3RCLGNBQWMsRUFBQyxNQUFPO0VBQ3pCLFlBQVksRUFBRSxLQUFNO0VBQ2pCLG9CQUFvQjtFQUNwQixRQUFRLEVBQUUsUUFBUztFQUNuQixNQUFNLEVBQUUsSUFBSztFQUNiLEtBQUssRUFBRSxJQUFLLEdBQ2Y7O0FBRUQsQUFBUSxPQUFELENBQUMsWUFBWSxDQUFDO0VBQ3BCOzs7NkJBRzRCLEVBQzVCOztBQUVELEFBQUEsYUFBYSxDQUFDO0VBQ1YsY0FBYyxFQUFFLElBQUssR0FDeEI7O0FBQ0QsQUFBQSxhQUFhLENBQUM7RUFDVixhQUFhLEVBQUUsSUFBSyxHQUN2Qjs7QUFDRCxBQUFBLGtCQUFrQixDQUFDO0VBQ2YsYUFBYSxFQUFFLElBQUs7RUFDcEIsS0FBSyxFQUFFLEtBQU0sR0FDaEI7O0FBQ0QsQUFBQSxXQUFXLENBQUM7RUFDWixLQUFLLEVBQUUsUUFBUztFQUNaLFNBQVMsRUFBRSxLQUFNLEdBQ3BCOztBQUNELEFBQUEsYUFBYSxDQUFDO0VBQ2IsS0FBSyxFQUFFLEtBQU07RUFDZCxlQUFlLEVBQUUsU0FBVTtFQUN2QixhQUFhLEVBQUUsSUFBSyxHQUN2Qjs7QUFDRCxBQUFBLGFBQWEsQ0FBQztFQUNiLEtBQUssRUFBRSxHQUFJO0VBQ1gsZUFBZSxFQUFFLFNBQVUsR0FDM0I7O0FBQ0QsQUFBQSxPQUFPLENBQUM7RUFDSixXQUFXLEVBQUUsSUFBSztFQUNsQixLQUFLLEVBQUUsS0FBTTtFQUNiLE1BQU0sRUFBRSxLQUFNLEdBQ2pCOztBQUVELEFBQUEsZUFBZSxDQUFDO0VBQ2YsZUFBZSxFQUFDLDZCQUE4QjtFQUM5QyxrQkFBa0IsRUFBQyw2QkFBOEI7RUFDakQsVUFBVSxFQUFDLDZCQUE4QjtFQUN6QyxVQUFVLEVBQUMsa0dBQWdCO0VBQzNCLFVBQVUsRUFBQyxtREFBb0I7RUFDL0IsVUFBVSxFQUFDLHNEQUF1QjtFQUNsQyxVQUFVLEVBQUMsaURBQWtCO0VBQzdCLFVBQVUsRUFBQyxrREFBbUI7RUFDOUIsVUFBVSxFQUFDLG9EQUFlO0VBQzFCLE1BQU0sRUFBQyx5R0FBeUc7RUFDaEgsZ0JBQWdCLEVBQUMsT0FBUTtFQUN6QixrQkFBa0IsRUFBQyxHQUFJO0VBQ3ZCLHFCQUFxQixFQUFDLEdBQUk7RUFDMUIsYUFBYSxFQUFDLEdBQUk7RUFDbEIsTUFBTSxFQUFDLGlCQUFrQjtFQUN6QixPQUFPLEVBQUMsWUFBYTtFQUNyQixNQUFNLEVBQUMsT0FBUTtFQUNmLEtBQUssRUFBQyxPQUFRO0VBQ2QsV0FBVyxFQUFDLEtBQU07RUFDbEIsU0FBUyxFQUFDLElBQUs7RUFDZixXQUFXLEVBQUMsSUFBSztFQUNqQixPQUFPLEVBQUMsUUFBUztFQUNqQixlQUFlLEVBQUMsSUFBSztFQUNyQixXQUFXLEVBQUMsbUJBQW9CLEdBQ2hDOztBQUNELEFBQWUsZUFBQSxBQUFBLE1BQU0sQ0FBQztFQUNyQixVQUFVLEVBQUMsa0dBQWdCO0VBQzNCLFVBQVUsRUFBQyxtREFBb0I7RUFDL0IsVUFBVSxFQUFDLHNEQUF1QjtFQUNsQyxVQUFVLEVBQUMsaURBQWtCO0VBQzdCLFVBQVUsRUFBQyxrREFBbUI7RUFDOUIsVUFBVSxFQUFDLG9EQUFlO0VBQzFCLE1BQU0sRUFBQyx5R0FBeUc7RUFDaEgsZ0JBQWdCLEVBQUMsT0FBUSxHQUN6Qjs7QUFFRCxBQUFBLGlCQUFpQixDQUFDO0VBQ2QsTUFBTSxFQUFFLGVBQWdCO0VBQ3hCLEtBQUssRUFBRSxJQUFLLEdBQ2Y7O0FBRUQsQUFBQSxZQUFZLENBQUM7RUFDVCxLQUFLLEVBQUUsSUFBSyxHQUNmOztBQUNELEFBQUEsYUFBYSxDQUFDO0VBQ1YsS0FBSyxFQUFFLElBQUs7RUFDWixLQUFLLEVBQUUsSUFBSztFQUNaLFdBQVcsRUFBRSxJQUFLLEdBQ3JCOztBQUVELEFBQWMsYUFBRCxDQUFDLEtBQUssQ0FBQztFQUNuQixVQUFVLEVBQUUsTUFBTyxHQUNuQjs7QUFDRCxnQkFBZ0I7QUFDaEIsQUFBQyxDQUFBLEFBQUEsUUFBUSxDQUNUO0VBQ0MsU0FBUyxFQUFDLElBQUs7RUFDZixLQUFLLEVBQUMsT0FBUTtFQUNkLE9BQU8sRUFBRSxHQUFJO0VBQ2IsV0FBVyxFQUFDLGNBQWU7RUFDM0IsV0FBVyxFQUFDLEdBQUk7RUFDaEIsVUFBVSxFQUFDLE1BQU87RUFDbEIsV0FBVyxFQUFDLEdBQUksR0FDaEI7O0FBRUQsQUFBQSxZQUFZLENBQ1o7RUFDQyxNQUFNLEVBQUUsY0FBZTtFQUN2QixPQUFPLEVBQUUsR0FBSTtFQUNiLGFBQWEsRUFBRSxJQUFLO0VBQ3BCLFNBQVMsRUFBQyxJQUFLO0VBQ2YsS0FBSyxFQUFDLE9BQVE7RUFDZCxPQUFPLEVBQUUsR0FBSTtFQUNiLFdBQVcsRUFBQyxjQUFlO0VBQzNCLFdBQVcsRUFBQyxHQUFJO0VBQ2hCLFVBQVUsRUFBQyxNQUFPO0VBQ2xCLFdBQVcsRUFBQyxJQUFLLEdBQ2pCOztBQUNELEFBQUMsQ0FBQSxBQUFBLFNBQVMsQ0FDVjtFQUNDLFNBQVMsRUFBQyxJQUFLO0VBQ2YsS0FBSyxFQUFDLE9BQVE7RUFDZCxPQUFPLEVBQUUsR0FBSTtFQUNiLFdBQVcsRUFBQyxjQUFlO0VBQzNCLFdBQVcsRUFBQyxHQUFJO0VBQ2hCLFVBQVUsRUFBQyxNQUFPO0VBQ2xCLFdBQVcsRUFBQyxJQUFLLEdBQ2pCOztBQUVELEFBQUMsQ0FBQSxBQUFBLFFBQVEsQ0FDVDtFQUNDLFNBQVMsRUFBQyxJQUFLO0VBQ1IsY0FBYyxFQUFFLEdBQUk7RUFDM0IsS0FBSyxFQUFFLEtBQU07RUFDYixXQUFXLEVBQUMsS0FBTTtFQUNsQixXQUFXLEVBQUMsSUFBSztFQUNqQixVQUFVLEVBQUMsTUFBTyxHQUNsQjs7QUFFRDs7Ozs7Ozs7R0FRRztBQUVILEFBQUcsR0FBQSxBQUFBLE1BQU0sQ0FDVDtFQUNDLE1BQU0sRUFBQyxLQUFNLEdBQ2I7O0FBRUQsQUFBRyxHQUFBLEFBQUEsUUFBUSxDQUNYO0VBQ0MsTUFBTSxFQUFDLEtBQU0sR0FDYjs7QUFFRCxBQUFHLEdBQUEsQUFBQSxRQUFRLENBQ1g7RUFDQyxNQUFNLEVBQUMsSUFBSyxHQUNaOztBQUVELEFBQUcsR0FBQSxBQUFBLFFBQVEsQ0FDWDtFQUNDLE1BQU0sRUFBQyxJQUFLLEdBQ1o7O0FBRUQsQUFBRyxHQUFBLEFBQUEsZUFBZSxDQUNsQjtFQUNDLHlDQUF5QztFQUN6QyxLQUFLLEVBQUMsS0FBTTtFQUNaLE1BQU0sRUFBQyxLQUFNO0VBQ2IsTUFBTSxFQUFDLEdBQUksR0FDWDs7QUFFRCxRQUFRO0FBRVIsQUFBTSxLQUFELENBQUMsSUFBSTtBQUNWLEFBQU0sS0FBRCxDQUFDLElBQUksQ0FBQztFQUNULElBQUksRUFBRSxJQUFLO0VBQ1gsTUFBTSxFQUFFLE9BQVE7RUFDaEIsT0FBTyxFQUFFLEdBQUk7RUFDYixlQUFlLEVBQUUsVUFBVyxHQUM3Qjs7QUFHRCxBQUFRLEVBQU4sQUFBQSxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQ1gsT0FBTyxFQUFFLElBQUssR0FDZjs7QUFFRCxBQUFRLEVBQU4sQUFBQSxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQ1gsSUFBSSxFQUFFLEtBQU07RUFDWixPQUFPLEVBQUUsR0FBSSxHQUNkOztBQUVELEFBQVEsRUFBTixBQUFBLEtBQUssQ0FBQyxJQUFJLENBQUM7RUFDWCxPQUFPLEVBQUUsR0FBSTtFQUNiLElBQUksRUFBRSxLQUFNLEdBQ2I7O0FBRUQsQUFBWSxFQUFWLEFBQUEsS0FBSyxDQUFDLElBQUksQUFBQSxPQUFPLENBQUM7RUFDbEIsT0FBTyxFQUFFLEdBQUk7RUFDYixJQUFJLEVBQUUsS0FBTTtFQUNaLFNBQVMsRUFBQyxHQUFJLEdBQ2Y7O0FBRUQsQUFBQSxLQUFLLENBQUM7RUFDSixJQUFJLEVBQUUsSUFBSztFQUNYLE1BQU0sRUFBRSxLQUFNO0VBQ2QsWUFBWSxFQUFFLEdBQUk7RUFDbEIsT0FBTyxFQUFFLEdBQUksR0FDZDs7QUFHRCxzRkFBc0Y7QUFDdEYsQUFBQSxRQUFRLENBQUM7RUFFTCxnQkFBZ0IsRUFBaUIsZ0JBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU07RUFDMUQsVUFBVSxFQUFFLE1BQU87RUFDbkIsU0FBUyxFQUFFLElBQUs7RUFDaEIsTUFBTSxFQUFFLElBQUs7RUFDakIsb0JBQW9CO0VBQ2hCLEtBQUssRUFBRSxJQUFLO0VBQ1osT0FBTyxFQUFFLElBQUssR0FDakI7O0FBQ0QsZ0JBQWdCO0FBRWhCLEFBQUEsT0FBTyxDQUFDO0VBQ0osTUFBTSxFQUFFLElBQUs7RUFDYixTQUFTLEVBQUUsSUFBSztFQUNoQixXQUFXLEVBQUUsSUFBSyxHQUNyQjs7QUFFRCxBQUFBLFdBQVcsQ0FBQTtFQUNSLGNBQWMsRUFBRSxJQUFLLEdBQ3ZCOztBQUVELHFDQUFxQztBQUVyQyxBQUFBLGVBQWUsRUFBQyxBQUFBLGtCQUFrQixFQUFDLEFBQUEsc0JBQXNCLENBQUE7RUFDeEQsV0FBVyxFQUFFLEVBQUcsR0FDaEI7O0FBR0QsQUFBQSxzQkFBc0IsQ0FBQTtFQUN0QixZQUFZLEVBQUUsSUFBSyxHQUNsQjs7QUFFRCxBQUFBLGtCQUFrQixDQUFDO0VBQ25CLFlBQVksRUFBRSxJQUFLLEdBQ2xCOztBQUVELEFBQUEsaUJBQWlCLEVBQUMsQUFBQSxxQkFBcUIsRUFBQyxBQUFBLGtCQUFrQixDQUFBO0VBQ3pELFdBQVcsRUFBRSxJQUFLLEdBQ2xCOztBQUVELEFBQUEsdUJBQXVCLEVBQUMsQUFBQSxvQkFBb0IsRUFBQyxBQUFBLDJCQUEyQixFQUFDLEFBQUEsd0JBQXdCLENBQUE7RUFDaEcsV0FBVyxFQUFFLGVBQWdCLEdBQzdCOztBQUVELEFBQUEsaUJBQWlCLEVBQUMsQUFBQSxxQkFBcUIsQ0FBQTtFQUNwQyxXQUFXLEVBQUUsRUFBRyxHQUNsQjs7QUFDRCxBQUFBLHFCQUFxQixDQUFBO0VBQ3JCLFdBQVcsRUFBRSxJQUFLLEdBQ2pCOztBQUNELEFBQUEsZ0JBQWdCLEVBQUMsQUFBQSxhQUFhLEVBQUMsQUFBQSxhQUFhLEVBQUMsQUFBQSxTQUFTLENBQUE7RUFDcEQsS0FBSyxFQUFDLEtBQU0sR0FDYjs7QUFDQSxBQUFBLGlCQUFpQixFQUFDLEFBQUEsaUJBQWlCLEVBQUMsQUFBQSxhQUFhLENBQUE7RUFDakQsV0FBVyxFQUFDLEVBQUcsR0FDZjs7QUFFRCxBQUFBLGFBQWEsRUFBQyxBQUFBLFNBQVMsRUFBQyxBQUFBLGlCQUFpQixFQUFDLEFBQUEsaUJBQWlCLEVBQUMsQUFBQSxhQUFhLEVBQUMsQUFBQSxpQkFBaUIsQ0FBQTtFQUN6RixVQUFVLEVBQUMsRUFBRyxHQUNmOztBQUVELEFBQXdCLGFBQVgsQUFBQSxVQUFVLENBQUMsS0FBSyxDQUFBO0VBQ3JCLGFBQWEsRUFBRSxjQUFlO0VBQ3JDLE1BQU0sRUFBRSxlQUFnQjtFQUN4QixLQUFLLEVBQUUsZ0JBQWlCO0VBQ3hCLFlBQVksRUFBRSxjQUFlO0VBQzdCLEtBQUssRUFBRSxLQUFNLEdBQ2I7O0FBRUQsQUFBbUMsYUFBdEIsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUE7RUFDN0MsYUFBYSxFQUFFLFlBQWE7RUFDNUIsZ0JBQWdCLEVBQUUsZUFBZ0I7RUFDbEMsV0FBVyxFQUFFLGVBQWdCO0VBQzdCLFNBQVMsRUFBRSxnQkFBaUIsR0FDM0I7O0FBRUQsQUFBYyxhQUFELENBQUMsbUJBQW1CLENBQUE7RUFDakMsYUFBYSxFQUFFLFlBQWE7RUFDNUIsZ0JBQWdCLEVBQUUsZUFBZ0IsR0FDakM7O0FBRUQsQUFBQSxpQkFBaUIsQ0FBQTtFQUNoQixhQUFhLEVBQUUsRUFBRztFQUNsQixLQUFLLEVBQUUsSUFBSztFQUNaLE1BQU0sRUFBRSxJQUFLLEdBQ2I7O0FBRUQsQUFBa0IsaUJBQUQsQ0FBQyxLQUFLLEVBQUUsQUFBYyxhQUFELENBQUMsS0FBSyxDQUFBO0VBQ3pDLFlBQVksRUFBQyxFQUFHO0VBQ2hCLEtBQUssRUFBQyxJQUFLLEdBQ2I7O0FBRUQsQUFBa0IsaUJBQUQsQ0FBQyxNQUFNLENBQUE7RUFDckIsTUFBTSxFQUFDLElBQUs7RUFDWixLQUFLLEVBQUUsS0FBTTtFQUNiLFNBQVMsRUFBRSxnQkFBaUIsR0FDOUI7O0FBRUQsQUFBQSxvQkFBb0IsQ0FBQTtFQUNuQixLQUFLLEVBQUMsS0FBTTtFQUNaLFlBQVksRUFBRSxjQUFlLEdBQzdCOztBQUVELEFBQUEsYUFBYSxDQUFBO0VBQ2IsS0FBSyxFQUFFLEtBQU0sR0FDWjs7QUFFRCxBQUFBLFFBQVEsRUFBQyxBQUFBLFlBQVksRUFBQyxBQUFBLGNBQWMsQ0FBQTtFQUNwQyxTQUFTLEVBQUMsS0FBTTtFQUNoQixLQUFLLEVBQUMsR0FBSTtFQUNWLE9BQU8sRUFBQyxJQUFLLEdBQ1o7O0FBRUQsQUFBQSx1QkFBdUIsQ0FBQztFQUN2QixPQUFPLEVBQUUsSUFBSyxHQUNkOztBQUVELEFBQWdDLCtCQUFELENBQUMsWUFBWSxDQUFBO0VBQzNDLFNBQVMsRUFBRSxJQUFLO0VBQ2hCLEtBQUssRUFBRSxJQUFLO0VBQ1osY0FBYyxFQUFFLEVBQUcsR0FDbkI7O0FBRUQsQUFBa0IsaUJBQUQsQ0FBQyxLQUFLLENBQUE7RUFDdEIsS0FBSyxFQUFDLElBQUs7RUFDWCxZQUFZLEVBQUUsRUFBRyxHQUNqQjs7QUFFRCxBQUFBLGtCQUFrQixDQUFBO0VBQ1YsWUFBWSxFQUFFLGFBQWMsR0FDbkM7O0FBRUQsQUFBQSxxQkFBcUIsQ0FBQTtFQUNyQixNQUFNLEVBQUUsU0FBVSxHQUNqQjs7QUFFRCxBQUFBLG1CQUFtQixDQUFBO0VBQ25CLFVBQVUsRUFBRSxNQUFPO0VBQ25CLE9BQU8sRUFBQyxJQUFLLEdBQ1o7O0FBRUQsQUFBQSxZQUFZLENBQUE7RUFDWixZQUFZLEVBQUUsY0FBZSxHQUM1Qjs7QUFDRCxBQUFBLGNBQWMsQ0FBQztFQUNiLE9BQU8sRUFBRSxLQUFNLEdBQ2hCOztBQUNELEFBQUEsaUJBQWlCLENBQUM7RUFDaEIsT0FBTyxFQUFFLFVBQVc7RUFDcEIsT0FBTyxFQUFFLElBQUssR0FDZjs7QUFFRCxBQUFBLGlCQUFpQixDQUFBO0VBQ2pCLE9BQU8sRUFBQyxLQUFNLEdBQ2I7O0FBRUQsQUFBQSxjQUFjLENBQUE7RUFDZCxnQkFBZ0IsRUFBRSxLQUFNO0VBQ3hCLGFBQWEsRUFBRSxHQUFJO0VBQ25CLEtBQUssRUFBRSxjQUFlO0VBQ3RCLE1BQU0sRUFBRSxjQUFlO0VBQ3ZCLFVBQVUsRUFBRSxJQUFLO0VBQ2pCLEdBQUcsRUFBRSx3QkFBeUIsR0FDN0I7O0FBRUQsQUFBa0IsaUJBQUQsQ0FBQyxLQUFLLENBQUE7RUFDdEIsS0FBSyxFQUFFLElBQUssR0FDWjs7QUFHRCxBQUFvQyxjQUF0QixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQTtFQUM5QyxhQUFhLEVBQUUsWUFBYTtFQUM1QixnQkFBZ0IsRUFBRSxlQUFnQjtFQUNsQyxXQUFXLEVBQUUsZUFBZ0I7RUFDN0IsU0FBUyxFQUFFLGdCQUFpQixHQUMzQjs7QUFFRCxBQUFlLGNBQUQsQ0FBQyx5QkFBeUIsQ0FBQTtFQUN4QyxLQUFLLEVBQUMsS0FBTSxHQUNYOztBQUVELEFBQUEsZUFBZSxDQUFBO0VBQ2YsTUFBTSxFQUFFLGVBQWdCO0VBQ3hCLE1BQU0sRUFBRSxLQUFNO0VBQ2QsS0FBSyxFQUFFLElBQUs7RUFDWixnQkFBZ0IsRUFBRSxPQUFRO0VBQzFCLGdCQUFnQixFQUFFLElBQUs7RUFDdkIsS0FBSyxFQUFFLGNBQWUsR0FDckI7O0FBRUQsQUFBZSxjQUFELENBQUMsbUJBQW1CLENBQUE7RUFDbEMsYUFBYSxFQUFFLFlBQWE7RUFDNUIsTUFBTSxFQUFFLElBQUs7RUFDYixXQUFXLEVBQUUsRUFBRyxHQUNmOztBQUVELEFBQWUsY0FBRCxDQUFDLFFBQVEsQ0FBQTtFQUN2QixZQUFZLEVBQUUsR0FBSTtFQUNsQixTQUFTLEVBQUUsTUFBTyxHQUNqQjs7QUFFRCxBQUFBLGtCQUFrQixDQUFBO0VBQ2pCLEtBQUssRUFBRSxHQUFJLEdBQ1g7O0FBRUQsa0JBQWtCO0FBRWxCLEFBQUEsYUFBYSxDQUFDO0VBQ1YsVUFBVSxFQUFFLElBQUs7RUFDakIsT0FBTyxFQUFFLElBQUs7RUFDZCxVQUFVLEVBQUUsaUJBQWtCLEdBQ2pDOztBQUVELEFBQWdELGdCQUFoQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCO0FBQ2hFLEFBQWdFLGdCQUFoRCxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFBQUEsTUFBTSxDQUFBO0VtQjdxQnBFLE9BQU8sRWpCa0NtQixHQUFHLENBQ0gsSUFBSTtFaUJsQzlCLFNBQVMsRWpCVmUsSUFBSTtFaUJXNUIsV0FBVyxFakJDYSxPQUFXO0VpQkFuQyxhQUFhLEVqQjhDYSxHQUFHO0VpQnZHN0IsS0FBSyxFakJxSzBCLElBQUk7RWlCcEtuQyxnQkFBZ0IsRWpCY00sT0FBTztFaUJiN0IsWUFBWSxFakJxS21CLE9BQU0sR0YrakJ0QztFQUpELEFBQWdELGdCQUFoQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFtQjl0QjdELE1BQU0sRW5COHRCVCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBbUI3dEI3RCxNQUFNO0VuQjh0QlQsQUFBZ0UsZ0JBQWhELENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQUFBQSxNQUFNLEFtQi90Qm5FLE1BQU07RW5CK3RCVCxBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1COXRCbkUsTUFBTSxDQUFDO0lBQ04sS0FBSyxFakIrSndCLElBQUk7SWlCOUpqQyxnQkFBZ0IsRUFBRSxPQUFNO0lBQ3BCLFlBQVksRUFBRSxPQUFNLEdBQ3pCO0VuQnl0QkgsQUFBZ0QsZ0JBQWhDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQW1CeHRCN0QsTUFBTTtFbkJ5dEJULEFBQWdFLGdCQUFoRCxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFBQUEsTUFBTSxBbUJ6dEJuRSxNQUFNLENBQUM7SUFDTixLQUFLLEVqQjBKd0IsSUFBSTtJaUJ6SmpDLGdCQUFnQixFQUFFLE9BQU07SUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FDekI7RW5Cb3RCSCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBbUJudEI3RCxPQUFPLEVuQm10QlYsQUFBZ0QsZ0JBQWhDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQW1CbHRCN0QsT0FBTztFQUNSLEFuQml0QjhDLEttQmp0QnpDLEduQml0QlAsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQW1CanRCckQsZ0JBQWdCO0VuQmt0QjNCLEFBQWdFLGdCQUFoRCxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFBQUEsTUFBTSxBbUJwdEJuRSxPQUFPO0VuQm90QlYsQUFBZ0UsZ0JBQWhELENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQUFBQSxNQUFNLEFtQm50Qm5FLE9BQU87RUFDUixBbkJrdEI4RCxLbUJsdEJ6RDtFbkJrdEJQLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFBQUEsTUFBTSxBbUJsdEIzRCxnQkFBZ0IsQ0FBQztJQUN4QixLQUFLLEVqQm1Kd0IsSUFBSTtJaUJsSmpDLGdCQUFnQixFQUFFLE9BQU07SUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FTekI7SW5CcXNCSCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBbUJudEI3RCxPQUFPLEFBT0wsTUFBTSxFbkI0c0JYLEFBQWdELGdCQUFoQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFtQm50QjdELE9BQU8sQUFRTCxNQUFNLEVuQjJzQlgsQUFBZ0QsZ0JBQWhDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQW1CbnRCN0QsT0FBTyxBQVNMLE1BQU0sRW5CMHNCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBbUJsdEI3RCxPQUFPLEFBTUwsTUFBTSxFbkI0c0JYLEFBQWdELGdCQUFoQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFtQmx0QjdELE9BQU8sQUFPTCxNQUFNLEVuQjJzQlgsQUFBZ0QsZ0JBQWhDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQW1CbHRCN0QsT0FBTyxBQVFMLE1BQU07SUFQVCxBbkJpdEI4QyxLbUJqdEJ6QyxHbkJpdEJQLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFtQmp0QnJELGdCQUFnQixBQUt0QixNQUFNO0lBTFQsQW5CaXRCOEMsS21CanRCekMsR25CaXRCUCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBbUJqdEJyRCxnQkFBZ0IsQUFNdEIsTUFBTTtJQU5ULEFuQml0QjhDLEttQmp0QnpDLEduQml0QlAsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQW1CanRCckQsZ0JBQWdCLEFBT3RCLE1BQU07SW5CMnNCWCxBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1CcHRCbkUsT0FBTyxBQU9MLE1BQU07SW5CNnNCWCxBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1CcHRCbkUsT0FBTyxBQVFMLE1BQU07SW5CNHNCWCxBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1CcHRCbkUsT0FBTyxBQVNMLE1BQU07SW5CMnNCWCxBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1CbnRCbkUsT0FBTyxBQU1MLE1BQU07SW5CNnNCWCxBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1CbnRCbkUsT0FBTyxBQU9MLE1BQU07SW5CNHNCWCxBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1CbnRCbkUsT0FBTyxBQVFMLE1BQU07SUFQVCxBbkJrdEI4RCxLbUJsdEJ6RDtJbkJrdEJQLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFBQUEsTUFBTSxBbUJsdEIzRCxnQkFBZ0IsQUFLdEIsTUFBTTtJQUxULEFuQmt0QjhELEttQmx0QnpEO0luQmt0QlAsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQUFBQSxNQUFNLEFtQmx0QjNELGdCQUFnQixBQU10QixNQUFNO0lBTlQsQW5Ca3RCOEQsS21CbHRCekQ7SW5Ca3RCUCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1CbHRCM0QsZ0JBQWdCLEFBT3RCLE1BQU0sQ0FBQztNQUNOLEtBQUssRWpCNElzQixJQUFJO01pQjNJL0IsZ0JBQWdCLEVBQUUsT0FBTTtNQUNwQixZQUFZLEVBQUUsT0FBTSxHQUN6QjtFbkJzc0JMLEFBQWdELGdCQUFoQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFtQnBzQjdELE9BQU8sRW5Cb3NCVixBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBbUJuc0I3RCxPQUFPO0VBQ1IsQW5Ca3NCOEMsS21CbHNCekMsR25Ca3NCUCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBbUJsc0JyRCxnQkFBZ0I7RW5CbXNCM0IsQUFBZ0UsZ0JBQWhELENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQUFBQSxNQUFNLEFtQnJzQm5FLE9BQU87RW5CcXNCVixBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1CcHNCbkUsT0FBTztFQUNSLEFuQm1zQjhELEttQm5zQnpEO0VuQm1zQlAsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQUFBQSxNQUFNLEFtQm5zQjNELGdCQUFnQixDQUFDO0lBQ3hCLGdCQUFnQixFQUFFLElBQUssR0FDeEI7RW5CZ3NCSCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBbUIvckI3RCxTQUFTLEFBR1AsTUFBTSxFbkI0ckJYLEFBQWdELGdCQUFoQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFtQi9yQjdELFNBQVMsQUFJUCxNQUFNLEVuQjJyQlgsQUFBZ0QsZ0JBQWhDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQW1CL3JCN0QsU0FBUyxBQUtQLE1BQU0sRW5CMHJCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDbUI5ckI3RCxBQUFBLFFBQUMsQUFBQSxDQUVDLE1BQU0sRW5CNHJCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDbUI5ckI3RCxBQUFBLFFBQUMsQUFBQSxDQUdDLE1BQU0sRW5CMnJCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDbUI5ckI3RCxBQUFBLFFBQUMsQUFBQSxDQUlDLE1BQU07RUFIVCxBbkI2ckI4QyxRbUI3ckJ0QyxDQUFBLEFBQUEsUUFBQyxBQUFBLEVuQjZyQlgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQW1CNXJCM0QsTUFBTTtFQURULEFuQjZyQjhDLFFtQjdyQnRDLENBQUEsQUFBQSxRQUFDLEFBQUEsRW5CNnJCWCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBbUIzckIzRCxNQUFNO0VBRlQsQW5CNnJCOEMsUW1CN3JCdEMsQ0FBQSxBQUFBLFFBQUMsQUFBQSxFbkI2ckJYLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFtQjFyQjNELE1BQU07RW5CMnJCWCxBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1CaHNCbkUsU0FBUyxBQUdQLE1BQU07RW5CNnJCWCxBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1CaHNCbkUsU0FBUyxBQUlQLE1BQU07RW5CNHJCWCxBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQW1CaHNCbkUsU0FBUyxBQUtQLE1BQU07RW5CMnJCWCxBQUFnRSxnQkFBaEQsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixBQUFBLE1BQU0sQ21CL3JCbkUsQUFBQSxRQUFDLEFBQUEsQ0FFQyxNQUFNO0VuQjZyQlgsQUFBZ0UsZ0JBQWhELENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQUFBQSxNQUFNLENtQi9yQm5FLEFBQUEsUUFBQyxBQUFBLENBR0MsTUFBTTtFbkI0ckJYLEFBQWdFLGdCQUFoRCxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFBQUEsTUFBTSxDbUIvckJuRSxBQUFBLFFBQUMsQUFBQSxDQUlDLE1BQU07RUFIVCxBbkI4ckI4RCxRbUI5ckJ0RCxDQUFBLEFBQUEsUUFBQyxBQUFBO0VuQjhyQlgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQUFBQSxNQUFNLEFtQjdyQmpFLE1BQU07RUFEVCxBbkI4ckI4RCxRbUI5ckJ0RCxDQUFBLEFBQUEsUUFBQyxBQUFBO0VuQjhyQlgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQUFBQSxNQUFNLEFtQjVyQmpFLE1BQU07RUFGVCxBbkI4ckI4RCxRbUI5ckJ0RCxDQUFBLEFBQUEsUUFBQyxBQUFBO0VuQjhyQlgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQUFBQSxNQUFNLEFtQjNyQmpFLE1BQU0sQ0FBQztJQUNOLGdCQUFnQixFakIxQkUsT0FBTztJaUIyQnJCLFlBQVksRWpCNkhXLE9BQU0sR2lCNUhsQztFbkJ1ckJMLEFtQnByQkUsZ0JuQm9yQmMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDbUJwckI5RCxNQUFNO0VuQnFyQlIsQW1CcnJCRSxnQm5CcXJCYyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEFBQUEsTUFBTSxDbUJyckJwRSxNQUFNLENBQUM7SUFDTCxLQUFLLEVqQmhDZSxPQUFPO0lpQmlDM0IsZ0JBQWdCLEVqQnFIYSxJQUFJLEdpQnBIbEM7O0FuQnVyQkgsQUFBZ0QsZ0JBQWhDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhO0FBQzdELEFBQTZELGdCQUE3QyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBQUFBLE1BQU0sQ0FBQTtFQUNqRSxhQUFhLEVFcGhCa0IsSUFBSTtFaUJoS25DLE9BQU8sRWpCa0NtQixHQUFHLENBQ0gsSUFBSTtFaUJsQzlCLFNBQVMsRWpCVmUsSUFBSTtFaUJXNUIsV0FBVyxFakJDYSxPQUFXO0VpQkFuQyxhQUFhLEVqQjhDYSxHQUFHO0VpQnZHN0IsS0FBSyxFakJ5SjBCLElBQUk7RWlCeEpuQyxnQkFBZ0IsRWpCV00sT0FBTztFaUJWN0IsWUFBWSxFakJ5Sm1CLE9BQU0sR0ZrbEJ0QztFQUxELEFBQWdELGdCQUFoQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBbUJwdUIxRCxNQUFNLEVuQm91QlQsQUFBZ0QsZ0JBQWhDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFtQm51QjFELE1BQU07RW5Cb3VCVCxBQUE2RCxnQkFBN0MsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQUFBQSxNQUFNLEFtQnJ1QmhFLE1BQU07RW5CcXVCVCxBQUE2RCxnQkFBN0MsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQUFBQSxNQUFNLEFtQnB1QmhFLE1BQU0sQ0FBQztJQUNOLEtBQUssRWpCbUp3QixJQUFJO0lpQmxKakMsZ0JBQWdCLEVBQUUsT0FBTTtJQUNwQixZQUFZLEVBQUUsT0FBTSxHQUN6QjtFbkIrdEJILEFBQWdELGdCQUFoQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBbUI5dEIxRCxNQUFNO0VuQit0QlQsQUFBNkQsZ0JBQTdDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFBQUEsTUFBTSxBbUIvdEJoRSxNQUFNLENBQUM7SUFDTixLQUFLLEVqQjhJd0IsSUFBSTtJaUI3SWpDLGdCQUFnQixFQUFFLE9BQU07SUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FDekI7RW5CMHRCSCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CenRCMUQsT0FBTyxFbkJ5dEJWLEFBQWdELGdCQUFoQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBbUJ4dEIxRCxPQUFPO0VBQ1IsQW5CdXRCOEMsS21CdnRCekMsR25CdXRCUCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CdnRCbEQsZ0JBQWdCO0VuQnd0QjNCLEFBQTZELGdCQUE3QyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBQUFBLE1BQU0sQW1CMXRCaEUsT0FBTztFbkIwdEJWLEFBQTZELGdCQUE3QyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBQUFBLE1BQU0sQW1CenRCaEUsT0FBTztFQUNSLEFuQnd0QjJELEttQnh0QnREO0VuQnd0QlAsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFBQUEsTUFBTSxBbUJ4dEJ4RCxnQkFBZ0IsQ0FBQztJQUN4QixLQUFLLEVqQnVJd0IsSUFBSTtJaUJ0SWpDLGdCQUFnQixFQUFFLE9BQU07SUFDcEIsWUFBWSxFQUFFLE9BQU0sR0FTekI7SW5CMnNCSCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CenRCMUQsT0FBTyxBQU9MLE1BQU0sRW5Ca3RCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CenRCMUQsT0FBTyxBQVFMLE1BQU0sRW5CaXRCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CenRCMUQsT0FBTyxBQVNMLE1BQU0sRW5CZ3RCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CeHRCMUQsT0FBTyxBQU1MLE1BQU0sRW5Ca3RCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CeHRCMUQsT0FBTyxBQU9MLE1BQU0sRW5CaXRCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CeHRCMUQsT0FBTyxBQVFMLE1BQU07SUFQVCxBbkJ1dEI4QyxLbUJ2dEJ6QyxHbkJ1dEJQLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBbUJ2dEJsRCxnQkFBZ0IsQUFLdEIsTUFBTTtJQUxULEFuQnV0QjhDLEttQnZ0QnpDLEduQnV0QlAsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFtQnZ0QmxELGdCQUFnQixBQU10QixNQUFNO0lBTlQsQW5CdXRCOEMsS21CdnRCekMsR25CdXRCUCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CdnRCbEQsZ0JBQWdCLEFBT3RCLE1BQU07SW5CaXRCWCxBQUE2RCxnQkFBN0MsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQUFBQSxNQUFNLEFtQjF0QmhFLE9BQU8sQUFPTCxNQUFNO0luQm10QlgsQUFBNkQsZ0JBQTdDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFBQUEsTUFBTSxBbUIxdEJoRSxPQUFPLEFBUUwsTUFBTTtJbkJrdEJYLEFBQTZELGdCQUE3QyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBQUFBLE1BQU0sQW1CMXRCaEUsT0FBTyxBQVNMLE1BQU07SW5CaXRCWCxBQUE2RCxnQkFBN0MsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQUFBQSxNQUFNLEFtQnp0QmhFLE9BQU8sQUFNTCxNQUFNO0luQm10QlgsQUFBNkQsZ0JBQTdDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFBQUEsTUFBTSxBbUJ6dEJoRSxPQUFPLEFBT0wsTUFBTTtJbkJrdEJYLEFBQTZELGdCQUE3QyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBQUFBLE1BQU0sQW1CenRCaEUsT0FBTyxBQVFMLE1BQU07SUFQVCxBbkJ3dEIyRCxLbUJ4dEJ0RDtJbkJ3dEJQLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBQUFBLE1BQU0sQW1CeHRCeEQsZ0JBQWdCLEFBS3RCLE1BQU07SUFMVCxBbkJ3dEIyRCxLbUJ4dEJ0RDtJbkJ3dEJQLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBQUFBLE1BQU0sQW1CeHRCeEQsZ0JBQWdCLEFBTXRCLE1BQU07SUFOVCxBbkJ3dEIyRCxLbUJ4dEJ0RDtJbkJ3dEJQLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBQUFBLE1BQU0sQW1CeHRCeEQsZ0JBQWdCLEFBT3RCLE1BQU0sQ0FBQztNQUNOLEtBQUssRWpCZ0lzQixJQUFJO01pQi9IL0IsZ0JBQWdCLEVBQUUsT0FBTTtNQUNwQixZQUFZLEVBQUUsT0FBTSxHQUN6QjtFbkI0c0JMLEFBQWdELGdCQUFoQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBbUIxc0IxRCxPQUFPLEVuQjBzQlYsQUFBZ0QsZ0JBQWhDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFtQnpzQjFELE9BQU87RUFDUixBbkJ3c0I4QyxLbUJ4c0J6QyxHbkJ3c0JQLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBbUJ4c0JsRCxnQkFBZ0I7RW5CeXNCM0IsQUFBNkQsZ0JBQTdDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFBQUEsTUFBTSxBbUIzc0JoRSxPQUFPO0VuQjJzQlYsQUFBNkQsZ0JBQTdDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFBQUEsTUFBTSxBbUIxc0JoRSxPQUFPO0VBQ1IsQW5CeXNCMkQsS21CenNCdEQ7RW5CeXNCUCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQUFBQSxNQUFNLEFtQnpzQnhELGdCQUFnQixDQUFDO0lBQ3hCLGdCQUFnQixFQUFFLElBQUssR0FDeEI7RW5Cc3NCSCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CcnNCMUQsU0FBUyxBQUdQLE1BQU0sRW5Ca3NCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CcnNCMUQsU0FBUyxBQUlQLE1BQU0sRW5CaXNCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQW1CcnNCMUQsU0FBUyxBQUtQLE1BQU0sRW5CZ3NCWCxBQUFnRCxnQkFBaEMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQ21CcHNCMUQsQUFBQSxRQUFDLEFBQUEsQ0FFQyxNQUFNLEVuQmtzQlgsQUFBZ0QsZ0JBQWhDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLENtQnBzQjFELEFBQUEsUUFBQyxBQUFBLENBR0MsTUFBTSxFbkJpc0JYLEFBQWdELGdCQUFoQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxDbUJwc0IxRCxBQUFBLFFBQUMsQUFBQSxDQUlDLE1BQU07RUFIVCxBbkJtc0I4QyxRbUJuc0J0QyxDQUFBLEFBQUEsUUFBQyxBQUFBLEVuQm1zQlgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFtQmxzQnhELE1BQU07RUFEVCxBbkJtc0I4QyxRbUJuc0J0QyxDQUFBLEFBQUEsUUFBQyxBQUFBLEVuQm1zQlgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFtQmpzQnhELE1BQU07RUFGVCxBbkJtc0I4QyxRbUJuc0J0QyxDQUFBLEFBQUEsUUFBQyxBQUFBLEVuQm1zQlgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFtQmhzQnhELE1BQU07RW5CaXNCWCxBQUE2RCxnQkFBN0MsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQUFBQSxNQUFNLEFtQnRzQmhFLFNBQVMsQUFHUCxNQUFNO0VuQm1zQlgsQUFBNkQsZ0JBQTdDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFBQUEsTUFBTSxBbUJ0c0JoRSxTQUFTLEFBSVAsTUFBTTtFbkJrc0JYLEFBQTZELGdCQUE3QyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBQUFBLE1BQU0sQW1CdHNCaEUsU0FBUyxBQUtQLE1BQU07RW5CaXNCWCxBQUE2RCxnQkFBN0MsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQUFBQSxNQUFNLENtQnJzQmhFLEFBQUEsUUFBQyxBQUFBLENBRUMsTUFBTTtFbkJtc0JYLEFBQTZELGdCQUE3QyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBQUFBLE1BQU0sQ21CcnNCaEUsQUFBQSxRQUFDLEFBQUEsQ0FHQyxNQUFNO0VuQmtzQlgsQUFBNkQsZ0JBQTdDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFBQUEsTUFBTSxDbUJyc0JoRSxBQUFBLFFBQUMsQUFBQSxDQUlDLE1BQU07RUFIVCxBbkJvc0IyRCxRbUJwc0JuRCxDQUFBLEFBQUEsUUFBQyxBQUFBO0VuQm9zQlgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxhQUFhLEFBQUEsTUFBTSxBbUJuc0I5RCxNQUFNO0VBRFQsQW5Cb3NCMkQsUW1CcHNCbkQsQ0FBQSxBQUFBLFFBQUMsQUFBQTtFbkJvc0JYLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsYUFBYSxBQUFBLE1BQU0sQW1CbHNCOUQsTUFBTTtFQUZULEFuQm9zQjJELFFtQnBzQm5ELENBQUEsQUFBQSxRQUFDLEFBQUE7RW5Cb3NCWCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQUFBQSxNQUFNLEFtQmpzQjlELE1BQU0sQ0FBQztJQUNOLGdCQUFnQixFakI3QkUsT0FBTztJaUI4QnJCLFlBQVksRWpCaUhXLE9BQU0sR2lCaEhsQztFbkI2ckJMLEFtQjFyQkUsZ0JuQjByQmMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQ21CMXJCM0QsTUFBTTtFbkIyckJSLEFtQjNyQkUsZ0JuQjJyQmMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGFBQWEsQUFBQSxNQUFNLENtQjNyQmpFLE1BQU0sQ0FBQztJQUNMLEtBQUssRWpCbkNlLE9BQU87SWlCb0MzQixnQkFBZ0IsRWpCeUdhLElBQUksR2lCeEdsQzs7QW5COHJCSCxXQUFXO0FBQ1gsQUFBQSxVQUFVLENBQUE7RUFDUixPQUFPLEVBQUUsZUFBZ0IsR0FDMUI7O0FBRUQsQUFBTSxNQUFBLEFBQUEseUJBQXlCLENBQUE7RUFDN0IsV0FBVyxFQUFFLGlDQUFrQztFQUMvQyxPQUFPLEVBQUUsWUFBYSxHQUN2Qjs7QUFFRCxBQUErQixNQUF6QixBQUFBLHlCQUF5QixBQUFBLE1BQU0sQ0FBQztFQUNsQyxPQUFPLEVBQUUsT0FBUSxHQUNwQjs7QUFDRDs7Ozs7Ozs7O0VBU0UiLAoJIm5hbWVzIjogW10KfQ== */
\ No newline at end of file
diff --git a/xos/core/static/xosNgLib.css b/xos/core/static/xosNgLib.css
deleted file mode 100644
index bf12ee3..0000000
--- a/xos/core/static/xosNgLib.css
+++ /dev/null
@@ -1,269 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-@keyframes slideInRight {
-  from {
-    transform: translate3d(100%, 0, 0);
-    visibility: visible; }
-  to {
-    transform: translate3d(0, 0, 0); } }
-
-@keyframes slideOutRight {
-  from {
-    transform: translate3d(0, 0, 0); }
-  to {
-    visibility: hidden;
-    transform: translate3d(100%, 0, 0); } }
-
-@keyframes fadeInUp {
-  from {
-    opacity: 0;
-    transform: translate3d(0, 100%, 0); }
-  to {
-    opacity: 1;
-    transform: none; } }
-
-@keyframes fadeOutDown {
-  from {
-    opacity: 1; }
-  to {
-    opacity: 0;
-    transform: translate3d(0, 100%, 0); } }
-
-.loader {
-  font-size: 10px;
-  margin: 0 auto;
-  text-indent: -9999em;
-  width: 11em;
-  height: 11em;
-  border-radius: 50%;
-  background: #ffffff;
-  background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
-  position: relative;
-  animation: loaderSpinner 1.4s infinite linear;
-  transform: translateZ(0); }
-
-.loader:before {
-  width: 50%;
-  height: 50%;
-  background: #337ab7;
-  border-radius: 100% 0 0 0;
-  position: absolute;
-  top: 0;
-  left: 0;
-  content: ''; }
-
-.loader:after {
-  background: #fff;
-  width: 75%;
-  height: 75%;
-  border-radius: 50%;
-  content: '';
-  margin: auto;
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0; }
-
-@keyframes loaderSpinner {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg); }
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg); } }
-
-@keyframes slideInRight {
-  from {
-    transform: translate3d(100%, 0, 0);
-    visibility: visible; }
-  to {
-    transform: translate3d(0, 0, 0); } }
-
-@keyframes slideOutRight {
-  from {
-    transform: translate3d(0, 0, 0); }
-  to {
-    visibility: hidden;
-    transform: translate3d(100%, 0, 0); } }
-
-@keyframes fadeInUp {
-  from {
-    opacity: 0;
-    transform: translate3d(0, 100%, 0); }
-  to {
-    opacity: 1;
-    transform: none; } }
-
-@keyframes fadeOutDown {
-  from {
-    opacity: 1; }
-  to {
-    opacity: 0;
-    transform: translate3d(0, 100%, 0); } }
-
-xos-table {
-  display: block; }
-  xos-table tr.ng-move,
-  xos-table tr.ng-enter,
-  xos-table tr.ng-leave {
-    transition: all linear 0.5s; }
-  xos-table tr.ng-leave.ng-leave-active,
-  xos-table tr.ng-move,
-  xos-table tr.ng-enter {
-    opacity: 0;
-    animation: 0.5s slideOutRight ease-in-out; }
-  xos-table tr.ng-leave,
-  xos-table tr.ng-move.ng-move-active,
-  xos-table tr.ng-enter.ng-enter-active {
-    opacity: 1;
-    animation: 0.5s slideInRight ease-in-out; }
-  xos-table td dl {
-    margin-bottom: 0; }
-    xos-table td dl dt {
-      width: auto !important;
-      margin-right: 10px; }
-    xos-table td dl dt:after {
-      /*display: block;*/
-      content: ':'; }
-    xos-table td dl dd {
-      margin-left: 0 !important; }
-
-@keyframes slideInRight {
-  from {
-    transform: translate3d(100%, 0, 0);
-    visibility: visible; }
-  to {
-    transform: translate3d(0, 0, 0); } }
-
-@keyframes slideOutRight {
-  from {
-    transform: translate3d(0, 0, 0); }
-  to {
-    visibility: hidden;
-    transform: translate3d(100%, 0, 0); } }
-
-@keyframes fadeInUp {
-  from {
-    opacity: 0;
-    transform: translate3d(0, 100%, 0); }
-  to {
-    opacity: 1;
-    transform: none; } }
-
-@keyframes fadeOutDown {
-  from {
-    opacity: 1; }
-  to {
-    opacity: 0;
-    transform: translate3d(0, 100%, 0); } }
-
-xos-alert {
-  margin-top: 15px;
-  display: block;
-  /* when hiding */
-  /* when showing */ }
-  xos-alert .ng-hide-add {
-    animation: 0.5s fadeOutDown ease-in-out; }
-  xos-alert .ng-hide-remove {
-    animation: 0.5s fadeInUp ease-in-out; }
-
-@keyframes slideInRight {
-  from {
-    transform: translate3d(100%, 0, 0);
-    visibility: visible; }
-  to {
-    transform: translate3d(0, 0, 0); } }
-
-@keyframes slideOutRight {
-  from {
-    transform: translate3d(0, 0, 0); }
-  to {
-    visibility: hidden;
-    transform: translate3d(100%, 0, 0); } }
-
-@keyframes fadeInUp {
-  from {
-    opacity: 0;
-    transform: translate3d(0, 100%, 0); }
-  to {
-    opacity: 1;
-    transform: none; } }
-
-@keyframes fadeOutDown {
-  from {
-    opacity: 1; }
-  to {
-    opacity: 0;
-    transform: translate3d(0, 100%, 0); } }
-
-input + xos-validation {
-  margin-top: 15px;
-  display: block; }
-
-xos-field {
-  display: block; }
-
-@keyframes slideInRight {
-  from {
-    transform: translate3d(100%, 0, 0);
-    visibility: visible; }
-  to {
-    transform: translate3d(0, 0, 0); } }
-
-@keyframes slideOutRight {
-  from {
-    transform: translate3d(0, 0, 0); }
-  to {
-    visibility: hidden;
-    transform: translate3d(100%, 0, 0); } }
-
-@keyframes fadeInUp {
-  from {
-    opacity: 0;
-    transform: translate3d(0, 100%, 0); }
-  to {
-    opacity: 1;
-    transform: none; } }
-
-@keyframes fadeOutDown {
-  from {
-    opacity: 1; }
-  to {
-    opacity: 0;
-    transform: translate3d(0, 100%, 0); } }
-
-xos-form button {
-  margin-bottom: 15px; }
-
-xos-form button + button {
-  margin-left: 15px; }
-
-[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
-  display: none !important; }
-
-.row + .row {
-  /* TODO move in xos.scss*/
-  margin-top: 15px; }
-
-/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG9zTmdMaWIuY3NzIiwic291cmNlcyI6WyJtYWluLnNjc3MiLCJhbmltYXRpb25zLnNjc3MiLCIuLi8uLi8uLi8uLi9zdHlsZS9zYXNzL2Jvb3RzdHJhcC9ib290c3RyYXAvX3ZhcmlhYmxlcy5zY3NzIiwibG9hZGVyLnNjc3MiLCIuLi91aV9jb21wb25lbnRzL2R1bWJDb21wb25lbnRzL3RhYmxlL3RhYmxlLnNjc3MiLCIuLi91aV9jb21wb25lbnRzL2R1bWJDb21wb25lbnRzL2FsZXJ0L2FsZXJ0LnNjc3MiLCIuLi91aV9jb21wb25lbnRzL2R1bWJDb21wb25lbnRzL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi5zY3NzIiwiLi4vdWlfY29tcG9uZW50cy9kdW1iQ29tcG9uZW50cy9maWVsZC9maWVsZC5zY3NzIiwiLi4vdWlfY29tcG9uZW50cy9kdW1iQ29tcG9uZW50cy9mb3JtL2Zvcm0uc2NzcyIsIi4uL3VpX2NvbXBvbmVudHMvc21hcnRDb21wb25lbnRzL3NtYXJ0VGFibGUvc21hcnRUYWJsZS5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgJy4vYW5pbWF0aW9ucy5zY3NzJztcbkBpbXBvcnQgJy4uLy4uLy4uLy4uLy4uL3ZpZXdzL3N0eWxlL3Nhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fdmFyaWFibGVzLnNjc3MnO1xuQGltcG9ydCAnLi9sb2FkZXIuc2Nzcyc7XG5cbkBpbXBvcnQgJy4uL3VpX2NvbXBvbmVudHMvZHVtYkNvbXBvbmVudHMvdGFibGUvdGFibGUuc2Nzcyc7XG5AaW1wb3J0ICcuLi91aV9jb21wb25lbnRzL2R1bWJDb21wb25lbnRzL2FsZXJ0L2FsZXJ0LnNjc3MnO1xuQGltcG9ydCAnLi4vdWlfY29tcG9uZW50cy9kdW1iQ29tcG9uZW50cy92YWxpZGF0aW9uL3ZhbGlkYXRpb24uc2Nzcyc7XG5AaW1wb3J0ICcuLi91aV9jb21wb25lbnRzL2R1bWJDb21wb25lbnRzL2ZpZWxkL2ZpZWxkLnNjc3MnO1xuQGltcG9ydCAnLi4vdWlfY29tcG9uZW50cy9kdW1iQ29tcG9uZW50cy9mb3JtL2Zvcm0uc2Nzcyc7XG5cbkBpbXBvcnQgJy4uL3VpX2NvbXBvbmVudHMvc21hcnRDb21wb25lbnRzL3NtYXJ0VGFibGUvc21hcnRUYWJsZS5zY3NzJztcblxuW25nXFw6Y2xvYWtdLCBbbmctY2xvYWtdLCBbZGF0YS1uZy1jbG9ha10sIFt4LW5nLWNsb2FrXSwgLm5nLWNsb2FrLCAueC1uZy1jbG9hayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnJvdyArIC5yb3cge1xuICAvKiBUT0RPIG1vdmUgaW4geG9zLnNjc3MqLyBcbiAgbWFyZ2luLXRvcDogJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTtcbn0iLCJAa2V5ZnJhbWVzIHNsaWRlSW5SaWdodCB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgfVxuXG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgc2xpZGVPdXRSaWdodCB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICB0byB7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBmYWRlSW5VcCB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAxMDAlLCAwKTtcbiAgfVxuXG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGZhZGVPdXREb3duIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIHRvIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMTAwJSwgMCk7XG4gIH1cbn0iLCIkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyOiBmYWxzZSAhZGVmYXVsdDtcbi8vXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy89PSBDb2xvcnNcbi8vXG4vLyMjIEdyYXkgYW5kIGJyYW5kIGNvbG9ycyBmb3IgdXNlIGFjcm9zcyBCb290c3RyYXAuXG5cbiRncmF5LWJhc2U6ICAgICAgICAgICAgICAjMDAwICFkZWZhdWx0O1xuJGdyYXktZGFya2VyOiAgICAgICAgICAgIGxpZ2h0ZW4oJGdyYXktYmFzZSwgMTMuNSUpICFkZWZhdWx0OyAvLyAjMjIyXG4kZ3JheS1kYXJrOiAgICAgICAgICAgICAgbGlnaHRlbigkZ3JheS1iYXNlLCAyMCUpICFkZWZhdWx0OyAgIC8vICMzMzNcbiRncmF5OiAgICAgICAgICAgICAgICAgICBsaWdodGVuKCRncmF5LWJhc2UsIDMzLjUlKSAhZGVmYXVsdDsgLy8gIzU1NVxuJGdyYXktbGlnaHQ6ICAgICAgICAgICAgIGxpZ2h0ZW4oJGdyYXktYmFzZSwgNDYuNyUpICFkZWZhdWx0OyAvLyAjNzc3XG4kZ3JheS1saWdodGVyOiAgICAgICAgICAgbGlnaHRlbigkZ3JheS1iYXNlLCA5My41JSkgIWRlZmF1bHQ7IC8vICNlZWVcblxuJGJyYW5kLXByaW1hcnk6ICAgICAgICAgZGFya2VuKCM0MjhiY2EsIDYuNSUpICFkZWZhdWx0OyAvLyAjMzM3YWI3XG4kYnJhbmQtc3VjY2VzczogICAgICAgICAjNWNiODVjICFkZWZhdWx0O1xuJGJyYW5kLWluZm86ICAgICAgICAgICAgIzViYzBkZSAhZGVmYXVsdDtcbiRicmFuZC13YXJuaW5nOiAgICAgICAgICNmMGFkNGUgIWRlZmF1bHQ7XG4kYnJhbmQtZGFuZ2VyOiAgICAgICAgICAjZDk1MzRmICFkZWZhdWx0O1xuXG5cbi8vPT0gU2NhZmZvbGRpbmdcbi8vXG4vLyMjIFNldHRpbmdzIGZvciBzb21lIG9mIHRoZSBtb3N0IGdsb2JhbCBzdHlsZXMuXG5cbi8vKiogQmFja2dyb3VuZCBjb2xvciBmb3IgYDxib2R5PmAuXG4kYm9keS1iZzogICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBHbG9iYWwgdGV4dCBjb2xvciBvbiBgPGJvZHk+YC5cbiR0ZXh0LWNvbG9yOiAgICAgICAgICAgICRncmF5LWRhcmsgIWRlZmF1bHQ7XG5cbi8vKiogR2xvYmFsIHRleHR1YWwgbGluayBjb2xvci5cbiRsaW5rLWNvbG9yOiAgICAgICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuLy8qKiBMaW5rIGhvdmVyIGNvbG9yIHNldCB2aWEgYGRhcmtlbigpYCBmdW5jdGlvbi5cbiRsaW5rLWhvdmVyLWNvbG9yOiAgICAgIGRhcmtlbigkbGluay1jb2xvciwgMTUlKSAhZGVmYXVsdDtcbi8vKiogTGluayBob3ZlciBkZWNvcmF0aW9uLlxuJGxpbmstaG92ZXItZGVjb3JhdGlvbjogdW5kZXJsaW5lICFkZWZhdWx0O1xuXG5cbi8vPT0gVHlwb2dyYXBoeVxuLy9cbi8vIyMgRm9udCwgbGluZS1oZWlnaHQsIGFuZCBjb2xvciBmb3IgYm9keSB0ZXh0LCBoZWFkaW5ncywgYW5kIG1vcmUuXG5cbiRmb250LWZhbWlseS1zYW5zLXNlcmlmOiAgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmICFkZWZhdWx0O1xuJGZvbnQtZmFtaWx5LXNlcmlmOiAgICAgICBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiLCBUaW1lcywgc2VyaWYgIWRlZmF1bHQ7XG4vLyoqIERlZmF1bHQgbW9ub3NwYWNlIGZvbnRzIGZvciBgPGNvZGU+YCwgYDxrYmQ+YCwgYW5kIGA8cHJlPmAuXG4kZm9udC1mYW1pbHktbW9ub3NwYWNlOiAgIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcbiRmb250LWZhbWlseS1iYXNlOiAgICAgICAgJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYgIWRlZmF1bHQ7XG5cbiRmb250LXNpemUtYmFzZTogICAgICAgICAgMTRweCAhZGVmYXVsdDtcbiRmb250LXNpemUtbGFyZ2U6ICAgICAgICAgY2VpbCgoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkpICFkZWZhdWx0OyAvLyB+MThweFxuJGZvbnQtc2l6ZS1zbWFsbDogICAgICAgICBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiAwLjg1KSkgIWRlZmF1bHQ7IC8vIH4xMnB4XG5cbiRmb250LXNpemUtaDE6ICAgICAgICAgICAgZmxvb3IoKCRmb250LXNpemUtYmFzZSAqIDIuNikpICFkZWZhdWx0OyAvLyB+MzZweFxuJGZvbnQtc2l6ZS1oMjogICAgICAgICAgICBmbG9vcigoJGZvbnQtc2l6ZS1iYXNlICogMi4xNSkpICFkZWZhdWx0OyAvLyB+MzBweFxuJGZvbnQtc2l6ZS1oMzogICAgICAgICAgICBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiAxLjcpKSAhZGVmYXVsdDsgLy8gfjI0cHhcbiRmb250LXNpemUtaDQ6ICAgICAgICAgICAgY2VpbCgoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkpICFkZWZhdWx0OyAvLyB+MThweFxuJGZvbnQtc2l6ZS1oNTogICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgIWRlZmF1bHQ7XG4kZm9udC1zaXplLWg2OiAgICAgICAgICAgIGNlaWwoKCRmb250LXNpemUtYmFzZSAqIDAuODUpKSAhZGVmYXVsdDsgLy8gfjEycHhcblxuLy8qKiBVbml0LWxlc3MgYGxpbmUtaGVpZ2h0YCBmb3IgdXNlIGluIGNvbXBvbmVudHMgbGlrZSBidXR0b25zLlxuJGxpbmUtaGVpZ2h0LWJhc2U6ICAgICAgICAxLjQyODU3MTQyOSAhZGVmYXVsdDsgLy8gMjAvMTRcbi8vKiogQ29tcHV0ZWQgXCJsaW5lLWhlaWdodFwiIChgZm9udC1zaXplYCAqIGBsaW5lLWhlaWdodGApIGZvciB1c2Ugd2l0aCBgbWFyZ2luYCwgYHBhZGRpbmdgLCBldGMuXG4kbGluZS1oZWlnaHQtY29tcHV0ZWQ6ICAgIGZsb29yKCgkZm9udC1zaXplLWJhc2UgKiAkbGluZS1oZWlnaHQtYmFzZSkpICFkZWZhdWx0OyAvLyB+MjBweFxuXG4vLyoqIEJ5IGRlZmF1bHQsIHRoaXMgaW5oZXJpdHMgZnJvbSB0aGUgYDxib2R5PmAuXG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICAgIGluaGVyaXQgIWRlZmF1bHQ7XG4kaGVhZGluZ3MtZm9udC13ZWlnaHQ6ICAgIDUwMCAhZGVmYXVsdDtcbiRoZWFkaW5ncy1saW5lLWhlaWdodDogICAgMS4xICFkZWZhdWx0O1xuJGhlYWRpbmdzLWNvbG9yOiAgICAgICAgICBpbmhlcml0ICFkZWZhdWx0O1xuXG5cbi8vPT0gSWNvbm9ncmFwaHlcbi8vXG4vLyMjIFNwZWNpZnkgY3VzdG9tIGxvY2F0aW9uIGFuZCBmaWxlbmFtZSBvZiB0aGUgaW5jbHVkZWQgR2x5cGhpY29ucyBpY29uIGZvbnQuIFVzZWZ1bCBmb3IgdGhvc2UgaW5jbHVkaW5nIEJvb3RzdHJhcCB2aWEgQm93ZXIuXG5cbi8vKiogTG9hZCBmb250cyBmcm9tIHRoaXMgZGlyZWN0b3J5LlxuXG4vLyBbY29udmVydGVyXSBJZiAkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyIGlmIHVzZWQsIHByb3ZpZGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgYXNzZXRzIGxvYWQgcGF0aC5cbi8vIFtjb252ZXJ0ZXJdIFRoaXMgaXMgYmVjYXVzZSBzb21lIGFzc2V0IGhlbHBlcnMsIHN1Y2ggYXMgU3Byb2NrZXRzLCBkbyBub3Qgd29yayB3aXRoIGZpbGUtcmVsYXRpdmUgcGF0aHMuXG4kaWNvbi1mb250LXBhdGg6IGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIFwiYm9vdHN0cmFwL1wiLCBcIi4uL2ZvbnRzL2Jvb3RzdHJhcC9cIikgIWRlZmF1bHQ7XG5cbi8vKiogRmlsZSBuYW1lIGZvciBhbGwgZm9udCBmaWxlcy5cbiRpY29uLWZvbnQtbmFtZTogICAgICAgICAgXCJnbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyXCIgIWRlZmF1bHQ7XG4vLyoqIEVsZW1lbnQgSUQgd2l0aGluIFNWRyBpY29uIGZpbGUuXG4kaWNvbi1mb250LXN2Zy1pZDogICAgICAgIFwiZ2x5cGhpY29uc19oYWxmbGluZ3NyZWd1bGFyXCIgIWRlZmF1bHQ7XG5cblxuLy89PSBDb21wb25lbnRzXG4vL1xuLy8jIyBEZWZpbmUgY29tbW9uIHBhZGRpbmcgYW5kIGJvcmRlciByYWRpdXMgc2l6ZXMgYW5kIG1vcmUuIFZhbHVlcyBiYXNlZCBvbiAxNHB4IHRleHQgYW5kIDEuNDI4IGxpbmUtaGVpZ2h0ICh+MjBweCB0byBzdGFydCkuXG5cbiRwYWRkaW5nLWJhc2UtdmVydGljYWw6ICAgICA2cHggIWRlZmF1bHQ7XG4kcGFkZGluZy1iYXNlLWhvcml6b250YWw6ICAgMTJweCAhZGVmYXVsdDtcblxuJHBhZGRpbmctbGFyZ2UtdmVydGljYWw6ICAgIDEwcHggIWRlZmF1bHQ7XG4kcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsOiAgMTZweCAhZGVmYXVsdDtcblxuJHBhZGRpbmctc21hbGwtdmVydGljYWw6ICAgIDVweCAhZGVmYXVsdDtcbiRwYWRkaW5nLXNtYWxsLWhvcml6b250YWw6ICAxMHB4ICFkZWZhdWx0O1xuXG4kcGFkZGluZy14cy12ZXJ0aWNhbDogICAgICAgMXB4ICFkZWZhdWx0O1xuJHBhZGRpbmcteHMtaG9yaXpvbnRhbDogICAgIDVweCAhZGVmYXVsdDtcblxuJGxpbmUtaGVpZ2h0LWxhcmdlOiAgICAgICAgIDEuMzMzMzMzMyAhZGVmYXVsdDsgLy8gZXh0cmEgZGVjaW1hbHMgZm9yIFdpbiA4LjEgQ2hyb21lXG4kbGluZS1oZWlnaHQtc21hbGw6ICAgICAgICAgMS41ICFkZWZhdWx0O1xuXG4kYm9yZGVyLXJhZGl1cy1iYXNlOiAgICAgICAgNHB4ICFkZWZhdWx0O1xuJGJvcmRlci1yYWRpdXMtbGFyZ2U6ICAgICAgIDZweCAhZGVmYXVsdDtcbiRib3JkZXItcmFkaXVzLXNtYWxsOiAgICAgICAzcHggIWRlZmF1bHQ7XG5cbi8vKiogR2xvYmFsIGNvbG9yIGZvciBhY3RpdmUgaXRlbXMgKGUuZy4sIG5hdnMgb3IgZHJvcGRvd25zKS5cbiRjb21wb25lbnQtYWN0aXZlLWNvbG9yOiAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBHbG9iYWwgYmFja2dyb3VuZCBjb2xvciBmb3IgYWN0aXZlIGl0ZW1zIChlLmcuLCBuYXZzIG9yIGRyb3Bkb3ducykuXG4kY29tcG9uZW50LWFjdGl2ZS1iZzogICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG5cbi8vKiogV2lkdGggb2YgdGhlIGBib3JkZXJgIGZvciBnZW5lcmF0aW5nIGNhcmV0cyB0aGF0IGluZGljYXRvciBkcm9wZG93bnMuXG4kY2FyZXQtd2lkdGgtYmFzZTogICAgICAgICAgNHB4ICFkZWZhdWx0O1xuLy8qKiBDYXJldHMgaW5jcmVhc2Ugc2xpZ2h0bHkgaW4gc2l6ZSBmb3IgbGFyZ2VyIGNvbXBvbmVudHMuXG4kY2FyZXQtd2lkdGgtbGFyZ2U6ICAgICAgICAgNXB4ICFkZWZhdWx0O1xuXG5cbi8vPT0gVGFibGVzXG4vL1xuLy8jIyBDdXN0b21pemVzIHRoZSBgLnRhYmxlYCBjb21wb25lbnQgd2l0aCBiYXNpYyB2YWx1ZXMsIGVhY2ggdXNlZCBhY3Jvc3MgYWxsIHRhYmxlIHZhcmlhdGlvbnMuXG5cbi8vKiogUGFkZGluZyBmb3IgYDx0aD5gcyBhbmQgYDx0ZD5gcy5cbiR0YWJsZS1jZWxsLXBhZGRpbmc6ICAgICAgICAgICAgOHB4ICFkZWZhdWx0O1xuLy8qKiBQYWRkaW5nIGZvciBjZWxscyBpbiBgLnRhYmxlLWNvbmRlbnNlZGAuXG4kdGFibGUtY29uZGVuc2VkLWNlbGwtcGFkZGluZzogIDVweCAhZGVmYXVsdDtcblxuLy8qKiBEZWZhdWx0IGJhY2tncm91bmQgY29sb3IgdXNlZCBmb3IgYWxsIHRhYmxlcy5cbiR0YWJsZS1iZzogICAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQgIWRlZmF1bHQ7XG4vLyoqIEJhY2tncm91bmQgY29sb3IgdXNlZCBmb3IgYC50YWJsZS1zdHJpcGVkYC5cbiR0YWJsZS1iZy1hY2NlbnQ6ICAgICAgICAgICAgICAgI2Y5ZjlmOSAhZGVmYXVsdDtcbi8vKiogQmFja2dyb3VuZCBjb2xvciB1c2VkIGZvciBgLnRhYmxlLWhvdmVyYC5cbiR0YWJsZS1iZy1ob3ZlcjogICAgICAgICAgICAgICAgI2Y1ZjVmNSAhZGVmYXVsdDtcbiR0YWJsZS1iZy1hY3RpdmU6ICAgICAgICAgICAgICAgJHRhYmxlLWJnLWhvdmVyICFkZWZhdWx0O1xuXG4vLyoqIEJvcmRlciBjb2xvciBmb3IgdGFibGUgYW5kIGNlbGwgYm9yZGVycy5cbiR0YWJsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcblxuXG4vLz09IEJ1dHRvbnNcbi8vXG4vLyMjIEZvciBlYWNoIG9mIEJvb3RzdHJhcCdzIGJ1dHRvbnMsIGRlZmluZSB0ZXh0LCBiYWNrZ3JvdW5kIGFuZCBib3JkZXIgY29sb3IuXG5cbiRidG4tZm9udC13ZWlnaHQ6ICAgICAgICAgICAgICAgIG5vcm1hbCAhZGVmYXVsdDtcblxuJGJ0bi1kZWZhdWx0LWNvbG9yOiAgICAgICAgICAgICAgIzMzMyAhZGVmYXVsdDtcbiRidG4tZGVmYXVsdC1iZzogICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYnRuLWRlZmF1bHQtYm9yZGVyOiAgICAgICAgICAgICAjY2NjICFkZWZhdWx0O1xuXG4kYnRuLXByaW1hcnktY29sb3I6ICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi1wcmltYXJ5LWJnOiAgICAgICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4kYnRuLXByaW1hcnktYm9yZGVyOiAgICAgICAgICAgICBkYXJrZW4oJGJ0bi1wcmltYXJ5LWJnLCA1JSkgIWRlZmF1bHQ7XG5cbiRidG4tc3VjY2Vzcy1jb2xvcjogICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYnRuLXN1Y2Nlc3MtYmc6ICAgICAgICAgICAgICAgICAkYnJhbmQtc3VjY2VzcyAhZGVmYXVsdDtcbiRidG4tc3VjY2Vzcy1ib3JkZXI6ICAgICAgICAgICAgIGRhcmtlbigkYnRuLXN1Y2Nlc3MtYmcsIDUlKSAhZGVmYXVsdDtcblxuJGJ0bi1pbmZvLWNvbG9yOiAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRidG4taW5mby1iZzogICAgICAgICAgICAgICAgICAgICRicmFuZC1pbmZvICFkZWZhdWx0O1xuJGJ0bi1pbmZvLWJvcmRlcjogICAgICAgICAgICAgICAgZGFya2VuKCRidG4taW5mby1iZywgNSUpICFkZWZhdWx0O1xuXG4kYnRuLXdhcm5pbmctY29sb3I6ICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi13YXJuaW5nLWJnOiAgICAgICAgICAgICAgICAgJGJyYW5kLXdhcm5pbmcgIWRlZmF1bHQ7XG4kYnRuLXdhcm5pbmctYm9yZGVyOiAgICAgICAgICAgICBkYXJrZW4oJGJ0bi13YXJuaW5nLWJnLCA1JSkgIWRlZmF1bHQ7XG5cbiRidG4tZGFuZ2VyLWNvbG9yOiAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYnRuLWRhbmdlci1iZzogICAgICAgICAgICAgICAgICAkYnJhbmQtZGFuZ2VyICFkZWZhdWx0O1xuJGJ0bi1kYW5nZXItYm9yZGVyOiAgICAgICAgICAgICAgZGFya2VuKCRidG4tZGFuZ2VyLWJnLCA1JSkgIWRlZmF1bHQ7XG5cbiRidG4tbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuXG4vLyBBbGxvd3MgZm9yIGN1c3RvbWl6aW5nIGJ1dHRvbiByYWRpdXMgaW5kZXBlbmRlbnRseSBmcm9tIGdsb2JhbCBib3JkZXIgcmFkaXVzXG4kYnRuLWJvcmRlci1yYWRpdXMtYmFzZTogICAgICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuJGJ0bi1ib3JkZXItcmFkaXVzLWxhcmdlOiAgICAgICAgJGJvcmRlci1yYWRpdXMtbGFyZ2UgIWRlZmF1bHQ7XG4kYnRuLWJvcmRlci1yYWRpdXMtc21hbGw6ICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbWFsbCAhZGVmYXVsdDtcblxuXG4vLz09IEZvcm1zXG4vL1xuLy8jI1xuXG4vLyoqIGA8aW5wdXQ+YCBiYWNrZ3JvdW5kIGNvbG9yXG4kaW5wdXQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBgPGlucHV0IGRpc2FibGVkPmAgYmFja2dyb3VuZCBjb2xvclxuJGlucHV0LWJnLWRpc2FibGVkOiAgICAgICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcblxuLy8qKiBUZXh0IGNvbG9yIGZvciBgPGlucHV0PmBzXG4kaW5wdXQtY29sb3I6ICAgICAgICAgICAgICAgICAgICAkZ3JheSAhZGVmYXVsdDtcbi8vKiogYDxpbnB1dD5gIGJvcmRlciBjb2xvclxuJGlucHV0LWJvcmRlcjogICAgICAgICAgICAgICAgICAgI2NjYyAhZGVmYXVsdDtcblxuLy8gVE9ETzogUmVuYW1lIGAkaW5wdXQtYm9yZGVyLXJhZGl1c2AgdG8gYCRpbnB1dC1ib3JkZXItcmFkaXVzLWJhc2VgIGluIHY0XG4vLyoqIERlZmF1bHQgYC5mb3JtLWNvbnRyb2xgIGJvcmRlciByYWRpdXNcbi8vIFRoaXMgaGFzIG5vIGVmZmVjdCBvbiBgPHNlbGVjdD5gcyBpbiBzb21lIGJyb3dzZXJzLCBkdWUgdG8gdGhlIGxpbWl0ZWQgc3R5bGFiaWxpdHkgb2YgYDxzZWxlY3Q+YHMgaW4gQ1NTLlxuJGlucHV0LWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcbi8vKiogTGFyZ2UgYC5mb3JtLWNvbnRyb2xgIGJvcmRlciByYWRpdXNcbiRpbnB1dC1ib3JkZXItcmFkaXVzLWxhcmdlOiAgICAgICRib3JkZXItcmFkaXVzLWxhcmdlICFkZWZhdWx0O1xuLy8qKiBTbWFsbCBgLmZvcm0tY29udHJvbGAgYm9yZGVyIHJhZGl1c1xuJGlucHV0LWJvcmRlci1yYWRpdXMtc21hbGw6ICAgICAgJGJvcmRlci1yYWRpdXMtc21hbGwgIWRlZmF1bHQ7XG5cbi8vKiogQm9yZGVyIGNvbG9yIGZvciBpbnB1dHMgb24gZm9jdXNcbiRpbnB1dC1ib3JkZXItZm9jdXM6ICAgICAgICAgICAgICM2NmFmZTkgIWRlZmF1bHQ7XG5cbi8vKiogUGxhY2Vob2xkZXIgdGV4dCBjb2xvclxuJGlucHV0LWNvbG9yLXBsYWNlaG9sZGVyOiAgICAgICAgIzk5OSAhZGVmYXVsdDtcblxuLy8qKiBEZWZhdWx0IGAuZm9ybS1jb250cm9sYCBoZWlnaHRcbiRpbnB1dC1oZWlnaHQtYmFzZTogICAgICAgICAgICAgICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgKyAoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCAqIDIpICsgMikgIWRlZmF1bHQ7XG4vLyoqIExhcmdlIGAuZm9ybS1jb250cm9sYCBoZWlnaHRcbiRpbnB1dC1oZWlnaHQtbGFyZ2U6ICAgICAgICAgICAgIChjZWlsKCRmb250LXNpemUtbGFyZ2UgKiAkbGluZS1oZWlnaHQtbGFyZ2UpICsgKCRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsICogMikgKyAyKSAhZGVmYXVsdDtcbi8vKiogU21hbGwgYC5mb3JtLWNvbnRyb2xgIGhlaWdodFxuJGlucHV0LWhlaWdodC1zbWFsbDogICAgICAgICAgICAgKGZsb29yKCRmb250LXNpemUtc21hbGwgKiAkbGluZS1oZWlnaHQtc21hbGwpICsgKCRwYWRkaW5nLXNtYWxsLXZlcnRpY2FsICogMikgKyAyKSAhZGVmYXVsdDtcblxuLy8qKiBgLmZvcm0tZ3JvdXBgIG1hcmdpblxuJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTogICAgICAgMTVweCAhZGVmYXVsdDtcblxuJGxlZ2VuZC1jb2xvcjogICAgICAgICAgICAgICAgICAgJGdyYXktZGFyayAhZGVmYXVsdDtcbiRsZWdlbmQtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICNlNWU1ZTUgIWRlZmF1bHQ7XG5cbi8vKiogQmFja2dyb3VuZCBjb2xvciBmb3IgdGV4dHVhbCBpbnB1dCBhZGRvbnNcbiRpbnB1dC1ncm91cC1hZGRvbi1iZzogICAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4vLyoqIEJvcmRlciBjb2xvciBmb3IgdGV4dHVhbCBpbnB1dCBhZGRvbnNcbiRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICRpbnB1dC1ib3JkZXIgIWRlZmF1bHQ7XG5cbi8vKiogRGlzYWJsZWQgY3Vyc29yIGZvciBmb3JtIGNvbnRyb2xzIGFuZCBidXR0b25zLlxuJGN1cnNvci1kaXNhYmxlZDogICAgICAgICAgICAgICAgbm90LWFsbG93ZWQgIWRlZmF1bHQ7XG5cblxuLy89PSBEcm9wZG93bnNcbi8vXG4vLyMjIERyb3Bkb3duIG1lbnUgY29udGFpbmVyIGFuZCBjb250ZW50cy5cblxuLy8qKiBCYWNrZ3JvdW5kIGZvciB0aGUgZHJvcGRvd24gbWVudS5cbiRkcm9wZG93bi1iZzogICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIERyb3Bkb3duIG1lbnUgYGJvcmRlci1jb2xvcmAuXG4kZHJvcGRvd24tYm9yZGVyOiAgICAgICAgICAgICAgICByZ2JhKDAsMCwwLC4xNSkgIWRlZmF1bHQ7XG4vLyoqIERyb3Bkb3duIG1lbnUgYGJvcmRlci1jb2xvcmAgKipmb3IgSUU4KiouXG4kZHJvcGRvd24tZmFsbGJhY2stYm9yZGVyOiAgICAgICAjY2NjICFkZWZhdWx0O1xuLy8qKiBEaXZpZGVyIGNvbG9yIGZvciBiZXR3ZWVuIGRyb3Bkb3duIGl0ZW1zLlxuJGRyb3Bkb3duLWRpdmlkZXItYmc6ICAgICAgICAgICAgI2U1ZTVlNSAhZGVmYXVsdDtcblxuLy8qKiBEcm9wZG93biBsaW5rIHRleHQgY29sb3IuXG4kZHJvcGRvd24tbGluay1jb2xvcjogICAgICAgICAgICAkZ3JheS1kYXJrICFkZWZhdWx0O1xuLy8qKiBIb3ZlciBjb2xvciBmb3IgZHJvcGRvd24gbGlua3MuXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogICAgICBkYXJrZW4oJGdyYXktZGFyaywgNSUpICFkZWZhdWx0O1xuLy8qKiBIb3ZlciBiYWNrZ3JvdW5kIGZvciBkcm9wZG93biBsaW5rcy5cbiRkcm9wZG93bi1saW5rLWhvdmVyLWJnOiAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG5cbi8vKiogQWN0aXZlIGRyb3Bkb3duIG1lbnUgaXRlbSB0ZXh0IGNvbG9yLlxuJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4vLyoqIEFjdGl2ZSBkcm9wZG93biBtZW51IGl0ZW0gYmFja2dyb3VuZCBjb2xvci5cbiRkcm9wZG93bi1saW5rLWFjdGl2ZS1iZzogICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuXG4vLyoqIERpc2FibGVkIGRyb3Bkb3duIG1lbnUgaXRlbSBiYWNrZ3JvdW5kIGNvbG9yLlxuJGRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG5cbi8vKiogVGV4dCBjb2xvciBmb3IgaGVhZGVycyB3aXRoaW4gZHJvcGRvd24gbWVudXMuXG4kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcblxuLy8qKiBEZXByZWNhdGVkIGAkZHJvcGRvd24tY2FyZXQtY29sb3JgIGFzIG9mIHYzLjEuMFxuJGRyb3Bkb3duLWNhcmV0LWNvbG9yOiAgICAgICAgICAgIzAwMCAhZGVmYXVsdDtcblxuXG4vLy0tIFotaW5kZXggbWFzdGVyIGxpc3Rcbi8vXG4vLyBXYXJuaW5nOiBBdm9pZCBjdXN0b21pemluZyB0aGVzZSB2YWx1ZXMuIFRoZXkncmUgdXNlZCBmb3IgYSBiaXJkJ3MgZXllIHZpZXdcbi8vIG9mIGNvbXBvbmVudHMgZGVwZW5kZW50IG9uIHRoZSB6LWF4aXMgYW5kIGFyZSBkZXNpZ25lZCB0byBhbGwgd29yayB0b2dldGhlci5cbi8vXG4vLyBOb3RlOiBUaGVzZSB2YXJpYWJsZXMgYXJlIG5vdCBnZW5lcmF0ZWQgaW50byB0aGUgQ3VzdG9taXplci5cblxuJHppbmRleC1uYXZiYXI6ICAgICAgICAgICAgMTAwMCAhZGVmYXVsdDtcbiR6aW5kZXgtZHJvcGRvd246ICAgICAgICAgIDEwMDAgIWRlZmF1bHQ7XG4kemluZGV4LXBvcG92ZXI6ICAgICAgICAgICAxMDYwICFkZWZhdWx0O1xuJHppbmRleC10b29sdGlwOiAgICAgICAgICAgMTA3MCAhZGVmYXVsdDtcbiR6aW5kZXgtbmF2YmFyLWZpeGVkOiAgICAgIDEwMzAgIWRlZmF1bHQ7XG4kemluZGV4LW1vZGFsLWJhY2tncm91bmQ6ICAxMDQwICFkZWZhdWx0O1xuJHppbmRleC1tb2RhbDogICAgICAgICAgICAgMTA1MCAhZGVmYXVsdDtcblxuXG4vLz09IE1lZGlhIHF1ZXJpZXMgYnJlYWtwb2ludHNcbi8vXG4vLyMjIERlZmluZSB0aGUgYnJlYWtwb2ludHMgYXQgd2hpY2ggeW91ciBsYXlvdXQgd2lsbCBjaGFuZ2UsIGFkYXB0aW5nIHRvIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMuXG5cbi8vIEV4dHJhIHNtYWxsIHNjcmVlbiAvIHBob25lXG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4teHNgIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi14czogICAgICAgICAgICAgICAgICA0ODBweCAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi14cy1taW5gIGFzIG9mIHYzLjIuMFxuJHNjcmVlbi14cy1taW46ICAgICAgICAgICAgICAkc2NyZWVuLXhzICFkZWZhdWx0O1xuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLXBob25lYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tcGhvbmU6ICAgICAgICAgICAgICAgJHNjcmVlbi14cy1taW4gIWRlZmF1bHQ7XG5cbi8vIFNtYWxsIHNjcmVlbiAvIHRhYmxldFxuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLXNtYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tc206ICAgICAgICAgICAgICAgICAgNzY4cHggIWRlZmF1bHQ7XG4kc2NyZWVuLXNtLW1pbjogICAgICAgICAgICAgICRzY3JlZW4tc20gIWRlZmF1bHQ7XG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4tdGFibGV0YCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tdGFibGV0OiAgICAgICAgICAgICAgJHNjcmVlbi1zbS1taW4gIWRlZmF1bHQ7XG5cbi8vIE1lZGl1bSBzY3JlZW4gLyBkZXNrdG9wXG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4tbWRgIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi1tZDogICAgICAgICAgICAgICAgICA5OTJweCAhZGVmYXVsdDtcbiRzY3JlZW4tbWQtbWluOiAgICAgICAgICAgICAgJHNjcmVlbi1tZCAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1kZXNrdG9wYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tZGVza3RvcDogICAgICAgICAgICAgJHNjcmVlbi1tZC1taW4gIWRlZmF1bHQ7XG5cbi8vIExhcmdlIHNjcmVlbiAvIHdpZGUgZGVza3RvcFxuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLWxnYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tbGc6ICAgICAgICAgICAgICAgICAgMTIwMHB4ICFkZWZhdWx0O1xuJHNjcmVlbi1sZy1taW46ICAgICAgICAgICAgICAkc2NyZWVuLWxnICFkZWZhdWx0O1xuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLWxnLWRlc2t0b3BgIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi1sZy1kZXNrdG9wOiAgICAgICAgICAkc2NyZWVuLWxnLW1pbiAhZGVmYXVsdDtcblxuLy8gU28gbWVkaWEgcXVlcmllcyBkb24ndCBvdmVybGFwIHdoZW4gcmVxdWlyZWQsIHByb3ZpZGUgYSBtYXhpbXVtXG4kc2NyZWVuLXhzLW1heDogICAgICAgICAgICAgICgkc2NyZWVuLXNtLW1pbiAtIDEpICFkZWZhdWx0O1xuJHNjcmVlbi1zbS1tYXg6ICAgICAgICAgICAgICAoJHNjcmVlbi1tZC1taW4gLSAxKSAhZGVmYXVsdDtcbiRzY3JlZW4tbWQtbWF4OiAgICAgICAgICAgICAgKCRzY3JlZW4tbGctbWluIC0gMSkgIWRlZmF1bHQ7XG5cblxuLy89PSBHcmlkIHN5c3RlbVxuLy9cbi8vIyMgRGVmaW5lIHlvdXIgY3VzdG9tIHJlc3BvbnNpdmUgZ3JpZC5cblxuLy8qKiBOdW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZC5cbiRncmlkLWNvbHVtbnM6ICAgICAgICAgICAgICAxMiAhZGVmYXVsdDtcbi8vKiogUGFkZGluZyBiZXR3ZWVuIGNvbHVtbnMuIEdldHMgZGl2aWRlZCBpbiBoYWxmIGZvciB0aGUgbGVmdCBhbmQgcmlnaHQuXG4kZ3JpZC1ndXR0ZXItd2lkdGg6ICAgICAgICAgMzBweCAhZGVmYXVsdDtcbi8vIE5hdmJhciBjb2xsYXBzZVxuLy8qKiBQb2ludCBhdCB3aGljaCB0aGUgbmF2YmFyIGJlY29tZXMgdW5jb2xsYXBzZWQuXG4kZ3JpZC1mbG9hdC1icmVha3BvaW50OiAgICAgJHNjcmVlbi1zbS1taW4gIWRlZmF1bHQ7XG4vLyoqIFBvaW50IGF0IHdoaWNoIHRoZSBuYXZiYXIgYmVnaW5zIGNvbGxhcHNpbmcuXG4kZ3JpZC1mbG9hdC1icmVha3BvaW50LW1heDogKCRncmlkLWZsb2F0LWJyZWFrcG9pbnQgLSAxKSAhZGVmYXVsdDtcblxuXG4vLz09IENvbnRhaW5lciBzaXplc1xuLy9cbi8vIyMgRGVmaW5lIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGAuY29udGFpbmVyYCBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcy5cblxuLy8gU21hbGwgc2NyZWVuIC8gdGFibGV0XG4kY29udGFpbmVyLXRhYmxldDogICAgICAgICAgICAgKDcyMHB4ICsgJGdyaWQtZ3V0dGVyLXdpZHRoKSAhZGVmYXVsdDtcbi8vKiogRm9yIGAkc2NyZWVuLXNtLW1pbmAgYW5kIHVwLlxuJGNvbnRhaW5lci1zbTogICAgICAgICAgICAgICAgICRjb250YWluZXItdGFibGV0ICFkZWZhdWx0O1xuXG4vLyBNZWRpdW0gc2NyZWVuIC8gZGVza3RvcFxuJGNvbnRhaW5lci1kZXNrdG9wOiAgICAgICAgICAgICg5NDBweCArICRncmlkLWd1dHRlci13aWR0aCkgIWRlZmF1bHQ7XG4vLyoqIEZvciBgJHNjcmVlbi1tZC1taW5gIGFuZCB1cC5cbiRjb250YWluZXItbWQ6ICAgICAgICAgICAgICAgICAkY29udGFpbmVyLWRlc2t0b3AgIWRlZmF1bHQ7XG5cbi8vIExhcmdlIHNjcmVlbiAvIHdpZGUgZGVza3RvcFxuJGNvbnRhaW5lci1sYXJnZS1kZXNrdG9wOiAgICAgICgxMTQwcHggKyAkZ3JpZC1ndXR0ZXItd2lkdGgpICFkZWZhdWx0O1xuLy8qKiBGb3IgYCRzY3JlZW4tbGctbWluYCBhbmQgdXAuXG4kY29udGFpbmVyLWxnOiAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci1sYXJnZS1kZXNrdG9wICFkZWZhdWx0O1xuXG5cbi8vPT0gTmF2YmFyXG4vL1xuLy8jI1xuXG4vLyBCYXNpY3Mgb2YgYSBuYXZiYXJcbiRuYXZiYXItaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgNTBweCAhZGVmYXVsdDtcbiRuYXZiYXItbWFyZ2luLWJvdHRvbTogICAgICAgICAgICAgJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICFkZWZhdWx0O1xuJG5hdmJhci1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw6ICAgICAgICBmbG9vcigoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikpICFkZWZhdWx0O1xuJG5hdmJhci1wYWRkaW5nLXZlcnRpY2FsOiAgICAgICAgICAoKCRuYXZiYXItaGVpZ2h0IC0gJGxpbmUtaGVpZ2h0LWNvbXB1dGVkKSAvIDIpICFkZWZhdWx0O1xuJG5hdmJhci1jb2xsYXBzZS1tYXgtaGVpZ2h0OiAgICAgICAzNDBweCAhZGVmYXVsdDtcblxuJG5hdmJhci1kZWZhdWx0LWNvbG9yOiAgICAgICAgICAgICAjNzc3ICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWJnOiAgICAgICAgICAgICAgICAjZjhmOGY4ICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWJvcmRlcjogICAgICAgICAgICBkYXJrZW4oJG5hdmJhci1kZWZhdWx0LWJnLCA2LjUlKSAhZGVmYXVsdDtcblxuLy8gTmF2YmFyIGxpbmtzXG4kbmF2YmFyLWRlZmF1bHQtbGluay1jb2xvcjogICAgICAgICAgICAgICAgIzc3NyAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICAjMzMzICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgICM1NTUgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAgZGFya2VuKCRuYXZiYXItZGVmYXVsdC1iZywgNi41JSkgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAgI2NjYyAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWJnOiAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuLy8gTmF2YmFyIGJyYW5kIGxhYmVsXG4kbmF2YmFyLWRlZmF1bHQtYnJhbmQtY29sb3I6ICAgICAgICAgICAgICAgJG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3IgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtYnJhbmQtaG92ZXItY29sb3I6ICAgICAgICAgZGFya2VuKCRuYXZiYXItZGVmYXVsdC1icmFuZC1jb2xvciwgMTAlKSAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1icmFuZC1ob3Zlci1iZzogICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuLy8gTmF2YmFyIHRvZ2dsZVxuJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1ob3Zlci1iZzogICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWljb24tYmFyLWJnOiAgICAgICAgIzg4OCAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC10b2dnbGUtYm9yZGVyLWNvbG9yOiAgICAgICAjZGRkICFkZWZhdWx0O1xuXG5cbi8vPT09IEludmVydGVkIG5hdmJhclxuLy8gUmVzZXQgaW52ZXJ0ZWQgbmF2YmFyIGJhc2ljc1xuJG5hdmJhci1pbnZlcnNlLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICBsaWdodGVuKCRncmF5LWxpZ2h0LCAxNSUpICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAjMjIyICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWJvcmRlcjogICAgICAgICAgICAgICAgICAgICBkYXJrZW4oJG5hdmJhci1pbnZlcnNlLWJnLCAxMCUpICFkZWZhdWx0O1xuXG4vLyBJbnZlcnRlZCBuYXZiYXIgbGlua3NcbiRuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yOiAgICAgICAgICAgICAgICAgbGlnaHRlbigkZ3JheS1saWdodCwgMTUlKSAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWJnOiAgICAgICAgICAgICAgdHJhbnNwYXJlbnQgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICAgICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAgICBkYXJrZW4oJG5hdmJhci1pbnZlcnNlLWJnLCAxMCUpICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAgICAjNDQ0ICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtYmc6ICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuLy8gSW52ZXJ0ZWQgbmF2YmFyIGJyYW5kIGxhYmVsXG4kbmF2YmFyLWludmVyc2UtYnJhbmQtY29sb3I6ICAgICAgICAgICAgICAgICRuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWJyYW5kLWhvdmVyLWNvbG9yOiAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWJyYW5kLWhvdmVyLWJnOiAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuLy8gSW52ZXJ0ZWQgbmF2YmFyIHRvZ2dsZVxuJG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1ob3Zlci1iZzogICAgICAgICAgICAjMzMzICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1pY29uLWJhci1iZzogICAgICAgICAjZmZmICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1ib3JkZXItY29sb3I6ICAgICAgICAjMzMzICFkZWZhdWx0O1xuXG5cbi8vPT0gTmF2c1xuLy9cbi8vIyNcblxuLy89PT0gU2hhcmVkIG5hdiBzdHlsZXNcbiRuYXYtbGluay1wYWRkaW5nOiAgICAgICAgICAgICAgICAgICAgICAgICAgMTBweCAxNXB4ICFkZWZhdWx0O1xuJG5hdi1saW5rLWhvdmVyLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuXG4kbmF2LWRpc2FibGVkLWxpbmstY29sb3I6ICAgICAgICAgICAgICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuJG5hdi1kaXNhYmxlZC1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcblxuLy89PSBUYWJzXG4kbmF2LXRhYnMtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG5cbiRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjogICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcblxuJG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWJnOiAgICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcbiRuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1jb2xvcjogICAgICAgICAgJGdyYXkgIWRlZmF1bHQ7XG4kbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiAgICNkZGQgIWRlZmF1bHQ7XG5cbiRuYXYtdGFicy1qdXN0aWZpZWQtbGluay1ib3JkZXItY29sb3I6ICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcbiRuYXYtdGFicy1qdXN0aWZpZWQtYWN0aXZlLWxpbmstYm9yZGVyLWNvbG9yOiAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XG5cbi8vPT0gUGlsbHNcbiRuYXYtcGlsbHMtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcbiRuYXYtcGlsbHMtYWN0aXZlLWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XG4kbmF2LXBpbGxzLWFjdGl2ZS1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuXG5cbi8vPT0gUGFnaW5hdGlvblxuLy9cbi8vIyNcblxuJHBhZ2luYXRpb24tY29sb3I6ICAgICAgICAgICAgICAgICAgICAgJGxpbmstY29sb3IgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1iZzogICAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tYm9yZGVyOiAgICAgICAgICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcblxuJHBhZ2luYXRpb24taG92ZXItY29sb3I6ICAgICAgICAgICAgICAgJGxpbmstaG92ZXItY29sb3IgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1ob3Zlci1iZzogICAgICAgICAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuJHBhZ2luYXRpb24taG92ZXItYm9yZGVyOiAgICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcblxuJHBhZ2luYXRpb24tYWN0aXZlLWNvbG9yOiAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWFjdGl2ZS1iZzogICAgICAgICAgICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tYWN0aXZlLWJvcmRlcjogICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG5cbiRwYWdpbmF0aW9uLWRpc2FibGVkLWNvbG9yOiAgICAgICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlcjogICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG5cblxuLy89PSBQYWdlclxuLy9cbi8vIyNcblxuJHBhZ2VyLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2luYXRpb24tYmcgIWRlZmF1bHQ7XG4kcGFnZXItYm9yZGVyOiAgICAgICAgICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1ib3JkZXIgIWRlZmF1bHQ7XG4kcGFnZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICAxNXB4ICFkZWZhdWx0O1xuXG4kcGFnZXItaG92ZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1ob3Zlci1iZyAhZGVmYXVsdDtcblxuJHBhZ2VyLWFjdGl2ZS1iZzogICAgICAgICAgICAgICAgICAgICAgJHBhZ2luYXRpb24tYWN0aXZlLWJnICFkZWZhdWx0O1xuJHBhZ2VyLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICAgICAgICAgJHBhZ2luYXRpb24tYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuXG4kcGFnZXItZGlzYWJsZWQtY29sb3I6ICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvciAhZGVmYXVsdDtcblxuXG4vLz09IEp1bWJvdHJvblxuLy9cbi8vIyNcblxuJGp1bWJvdHJvbi1wYWRkaW5nOiAgICAgICAgICAgICAgMzBweCAhZGVmYXVsdDtcbiRqdW1ib3Ryb24tY29sb3I6ICAgICAgICAgICAgICAgIGluaGVyaXQgIWRlZmF1bHQ7XG4kanVtYm90cm9uLWJnOiAgICAgICAgICAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuJGp1bWJvdHJvbi1oZWFkaW5nLWNvbG9yOiAgICAgICAgaW5oZXJpdCAhZGVmYXVsdDtcbiRqdW1ib3Ryb24tZm9udC1zaXplOiAgICAgICAgICAgIGNlaWwoKCRmb250LXNpemUtYmFzZSAqIDEuNSkpICFkZWZhdWx0O1xuJGp1bWJvdHJvbi1oZWFkaW5nLWZvbnQtc2l6ZTogICAgY2VpbCgoJGZvbnQtc2l6ZS1iYXNlICogNC41KSkgIWRlZmF1bHQ7XG5cblxuLy89PSBGb3JtIHN0YXRlcyBhbmQgYWxlcnRzXG4vL1xuLy8jIyBEZWZpbmUgY29sb3JzIGZvciBmb3JtIGZlZWRiYWNrIHN0YXRlcyBhbmQsIGJ5IGRlZmF1bHQsIGFsZXJ0cy5cblxuJHN0YXRlLXN1Y2Nlc3MtdGV4dDogICAgICAgICAgICAgIzNjNzYzZCAhZGVmYXVsdDtcbiRzdGF0ZS1zdWNjZXNzLWJnOiAgICAgICAgICAgICAgICNkZmYwZDggIWRlZmF1bHQ7XG4kc3RhdGUtc3VjY2Vzcy1ib3JkZXI6ICAgICAgICAgICBkYXJrZW4oYWRqdXN0LWh1ZSgkc3RhdGUtc3VjY2Vzcy1iZywgLTEwKSwgNSUpICFkZWZhdWx0O1xuXG4kc3RhdGUtaW5mby10ZXh0OiAgICAgICAgICAgICAgICAjMzE3MDhmICFkZWZhdWx0O1xuJHN0YXRlLWluZm8tYmc6ICAgICAgICAgICAgICAgICAgI2Q5ZWRmNyAhZGVmYXVsdDtcbiRzdGF0ZS1pbmZvLWJvcmRlcjogICAgICAgICAgICAgIGRhcmtlbihhZGp1c3QtaHVlKCRzdGF0ZS1pbmZvLWJnLCAtMTApLCA3JSkgIWRlZmF1bHQ7XG5cbiRzdGF0ZS13YXJuaW5nLXRleHQ6ICAgICAgICAgICAgICM4YTZkM2IgIWRlZmF1bHQ7XG4kc3RhdGUtd2FybmluZy1iZzogICAgICAgICAgICAgICAjZmNmOGUzICFkZWZhdWx0O1xuJHN0YXRlLXdhcm5pbmctYm9yZGVyOiAgICAgICAgICAgZGFya2VuKGFkanVzdC1odWUoJHN0YXRlLXdhcm5pbmctYmcsIC0xMCksIDUlKSAhZGVmYXVsdDtcblxuJHN0YXRlLWRhbmdlci10ZXh0OiAgICAgICAgICAgICAgI2E5NDQ0MiAhZGVmYXVsdDtcbiRzdGF0ZS1kYW5nZXItYmc6ICAgICAgICAgICAgICAgICNmMmRlZGUgIWRlZmF1bHQ7XG4kc3RhdGUtZGFuZ2VyLWJvcmRlcjogICAgICAgICAgICBkYXJrZW4oYWRqdXN0LWh1ZSgkc3RhdGUtZGFuZ2VyLWJnLCAtMTApLCA1JSkgIWRlZmF1bHQ7XG5cblxuLy89PSBUb29sdGlwc1xuLy9cbi8vIyNcblxuLy8qKiBUb29sdGlwIG1heCB3aWR0aFxuJHRvb2x0aXAtbWF4LXdpZHRoOiAgICAgICAgICAgMjAwcHggIWRlZmF1bHQ7XG4vLyoqIFRvb2x0aXAgdGV4dCBjb2xvclxuJHRvb2x0aXAtY29sb3I6ICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogVG9vbHRpcCBiYWNrZ3JvdW5kIGNvbG9yXG4kdG9vbHRpcC1iZzogICAgICAgICAgICAgICAgICAjMDAwICFkZWZhdWx0O1xuJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XG5cbi8vKiogVG9vbHRpcCBhcnJvdyB3aWR0aFxuJHRvb2x0aXAtYXJyb3ctd2lkdGg6ICAgICAgICAgNXB4ICFkZWZhdWx0O1xuLy8qKiBUb29sdGlwIGFycm93IGNvbG9yXG4kdG9vbHRpcC1hcnJvdy1jb2xvcjogICAgICAgICAkdG9vbHRpcC1iZyAhZGVmYXVsdDtcblxuXG4vLz09IFBvcG92ZXJzXG4vL1xuLy8jI1xuXG4vLyoqIFBvcG92ZXIgYm9keSBiYWNrZ3JvdW5kIGNvbG9yXG4kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIFBvcG92ZXIgbWF4aW11bSB3aWR0aFxuJHBvcG92ZXItbWF4LXdpZHRoOiAgICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBib3JkZXIgY29sb3JcbiRwb3BvdmVyLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgcmdiYSgwLDAsMCwuMikgIWRlZmF1bHQ7XG4vLyoqIFBvcG92ZXIgZmFsbGJhY2sgYm9yZGVyIGNvbG9yXG4kcG9wb3Zlci1mYWxsYmFjay1ib3JkZXItY29sb3I6ICAgICAgICNjY2MgIWRlZmF1bHQ7XG5cbi8vKiogUG9wb3ZlciB0aXRsZSBiYWNrZ3JvdW5kIGNvbG9yXG4kcG9wb3Zlci10aXRsZS1iZzogICAgICAgICAgICAgICAgICAgIGRhcmtlbigkcG9wb3Zlci1iZywgMyUpICFkZWZhdWx0O1xuXG4vLyoqIFBvcG92ZXIgYXJyb3cgd2lkdGhcbiRwb3BvdmVyLWFycm93LXdpZHRoOiAgICAgICAgICAgICAgICAgMTBweCAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBhcnJvdyBjb2xvclxuJHBvcG92ZXItYXJyb3ctY29sb3I6ICAgICAgICAgICAgICAgICAkcG9wb3Zlci1iZyAhZGVmYXVsdDtcblxuLy8qKiBQb3BvdmVyIG91dGVyIGFycm93IHdpZHRoXG4kcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDogICAgICAgICAgICgkcG9wb3Zlci1hcnJvdy13aWR0aCArIDEpICFkZWZhdWx0O1xuLy8qKiBQb3BvdmVyIG91dGVyIGFycm93IGNvbG9yXG4kcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjogICAgICAgICAgIGZhZGVfaW4oJHBvcG92ZXItYm9yZGVyLWNvbG9yLCAwLjA1KSAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBvdXRlciBhcnJvdyBmYWxsYmFjayBjb2xvclxuJHBvcG92ZXItYXJyb3ctb3V0ZXItZmFsbGJhY2stY29sb3I6ICBkYXJrZW4oJHBvcG92ZXItZmFsbGJhY2stYm9yZGVyLWNvbG9yLCAyMCUpICFkZWZhdWx0O1xuXG5cbi8vPT0gTGFiZWxzXG4vL1xuLy8jI1xuXG4vLyoqIERlZmF1bHQgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLWRlZmF1bHQtYmc6ICAgICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4vLyoqIFByaW1hcnkgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLXByaW1hcnktYmc6ICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4vLyoqIFN1Y2Nlc3MgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLXN1Y2Nlc3MtYmc6ICAgICAgICAgICAgJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XG4vLyoqIEluZm8gbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLWluZm8tYmc6ICAgICAgICAgICAgICAgJGJyYW5kLWluZm8gIWRlZmF1bHQ7XG4vLyoqIFdhcm5pbmcgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLXdhcm5pbmctYmc6ICAgICAgICAgICAgJGJyYW5kLXdhcm5pbmcgIWRlZmF1bHQ7XG4vLyoqIERhbmdlciBsYWJlbCBiYWNrZ3JvdW5kIGNvbG9yXG4kbGFiZWwtZGFuZ2VyLWJnOiAgICAgICAgICAgICAkYnJhbmQtZGFuZ2VyICFkZWZhdWx0O1xuXG4vLyoqIERlZmF1bHQgbGFiZWwgdGV4dCBjb2xvclxuJGxhYmVsLWNvbG9yOiAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogRGVmYXVsdCB0ZXh0IGNvbG9yIG9mIGEgbGlua2VkIGxhYmVsXG4kbGFiZWwtbGluay1ob3Zlci1jb2xvcjogICAgICAjZmZmICFkZWZhdWx0O1xuXG5cbi8vPT0gTW9kYWxzXG4vL1xuLy8jI1xuXG4vLyoqIFBhZGRpbmcgYXBwbGllZCB0byB0aGUgbW9kYWwgYm9keVxuJG1vZGFsLWlubmVyLXBhZGRpbmc6ICAgICAgICAgMTVweCAhZGVmYXVsdDtcblxuLy8qKiBQYWRkaW5nIGFwcGxpZWQgdG8gdGhlIG1vZGFsIHRpdGxlXG4kbW9kYWwtdGl0bGUtcGFkZGluZzogICAgICAgICAxNXB4ICFkZWZhdWx0O1xuLy8qKiBNb2RhbCB0aXRsZSBsaW5lLWhlaWdodFxuJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0OiAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogQmFja2dyb3VuZCBjb2xvciBvZiBtb2RhbCBjb250ZW50IGFyZWFcbiRtb2RhbC1jb250ZW50LWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogTW9kYWwgY29udGVudCBib3JkZXIgY29sb3JcbiRtb2RhbC1jb250ZW50LWJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgICAgcmdiYSgwLDAsMCwuMikgIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIGNvbnRlbnQgYm9yZGVyIGNvbG9yICoqZm9yIElFOCoqXG4kbW9kYWwtY29udGVudC1mYWxsYmFjay1ib3JkZXItY29sb3I6ICAgICAgICAgICM5OTkgIWRlZmF1bHQ7XG5cbi8vKiogTW9kYWwgYmFja2Ryb3AgYmFja2dyb3VuZCBjb2xvclxuJG1vZGFsLWJhY2tkcm9wLWJnOiAgICAgICAgICAgIzAwMCAhZGVmYXVsdDtcbi8vKiogTW9kYWwgYmFja2Ryb3Agb3BhY2l0eVxuJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHk6ICAgICAgLjUgIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIGhlYWRlciBib3JkZXIgY29sb3JcbiRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yOiAgICNlNWU1ZTUgIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIGZvb3RlciBib3JkZXIgY29sb3JcbiRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xuXG4kbW9kYWwtbGc6ICAgICAgICAgICAgICAgICAgICA5MDBweCAhZGVmYXVsdDtcbiRtb2RhbC1tZDogICAgICAgICAgICAgICAgICAgIDYwMHB4ICFkZWZhdWx0O1xuJG1vZGFsLXNtOiAgICAgICAgICAgICAgICAgICAgMzAwcHggIWRlZmF1bHQ7XG5cblxuLy89PSBBbGVydHNcbi8vXG4vLyMjIERlZmluZSBhbGVydCBjb2xvcnMsIGJvcmRlciByYWRpdXMsIGFuZCBwYWRkaW5nLlxuXG4kYWxlcnQtcGFkZGluZzogICAgICAgICAgICAgICAxNXB4ICFkZWZhdWx0O1xuJGFsZXJ0LWJvcmRlci1yYWRpdXM6ICAgICAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcbiRhbGVydC1saW5rLWZvbnQtd2VpZ2h0OiAgICAgIGJvbGQgIWRlZmF1bHQ7XG5cbiRhbGVydC1zdWNjZXNzLWJnOiAgICAgICAgICAgICRzdGF0ZS1zdWNjZXNzLWJnICFkZWZhdWx0O1xuJGFsZXJ0LXN1Y2Nlc3MtdGV4dDogICAgICAgICAgJHN0YXRlLXN1Y2Nlc3MtdGV4dCAhZGVmYXVsdDtcbiRhbGVydC1zdWNjZXNzLWJvcmRlcjogICAgICAgICRzdGF0ZS1zdWNjZXNzLWJvcmRlciAhZGVmYXVsdDtcblxuJGFsZXJ0LWluZm8tYmc6ICAgICAgICAgICAgICAgJHN0YXRlLWluZm8tYmcgIWRlZmF1bHQ7XG4kYWxlcnQtaW5mby10ZXh0OiAgICAgICAgICAgICAkc3RhdGUtaW5mby10ZXh0ICFkZWZhdWx0O1xuJGFsZXJ0LWluZm8tYm9yZGVyOiAgICAgICAgICAgJHN0YXRlLWluZm8tYm9yZGVyICFkZWZhdWx0O1xuXG4kYWxlcnQtd2FybmluZy1iZzogICAgICAgICAgICAkc3RhdGUtd2FybmluZy1iZyAhZGVmYXVsdDtcbiRhbGVydC13YXJuaW5nLXRleHQ6ICAgICAgICAgICRzdGF0ZS13YXJuaW5nLXRleHQgIWRlZmF1bHQ7XG4kYWxlcnQtd2FybmluZy1ib3JkZXI6ICAgICAgICAkc3RhdGUtd2FybmluZy1ib3JkZXIgIWRlZmF1bHQ7XG5cbiRhbGVydC1kYW5nZXItYmc6ICAgICAgICAgICAgICRzdGF0ZS1kYW5nZXItYmcgIWRlZmF1bHQ7XG4kYWxlcnQtZGFuZ2VyLXRleHQ6ICAgICAgICAgICAkc3RhdGUtZGFuZ2VyLXRleHQgIWRlZmF1bHQ7XG4kYWxlcnQtZGFuZ2VyLWJvcmRlcjogICAgICAgICAkc3RhdGUtZGFuZ2VyLWJvcmRlciAhZGVmYXVsdDtcblxuXG4vLz09IFByb2dyZXNzIGJhcnNcbi8vXG4vLyMjXG5cbi8vKiogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgd2hvbGUgcHJvZ3Jlc3MgY29tcG9uZW50XG4kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuLy8qKiBQcm9ncmVzcyBiYXIgdGV4dCBjb2xvclxuJHByb2dyZXNzLWJhci1jb2xvcjogICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogVmFyaWFibGUgZm9yIHNldHRpbmcgcm91bmRlZCBjb3JuZXJzIG9uIHByb2dyZXNzIGJhci5cbiRwcm9ncmVzcy1ib3JkZXItcmFkaXVzOiAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogRGVmYXVsdCBwcm9ncmVzcyBiYXIgY29sb3JcbiRwcm9ncmVzcy1iYXItYmc6ICAgICAgICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuLy8qKiBTdWNjZXNzIHByb2dyZXNzIGJhciBjb2xvclxuJHByb2dyZXNzLWJhci1zdWNjZXNzLWJnOiAgICAgJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XG4vLyoqIFdhcm5pbmcgcHJvZ3Jlc3MgYmFyIGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLXdhcm5pbmctYmc6ICAgICAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcbi8vKiogRGFuZ2VyIHByb2dyZXNzIGJhciBjb2xvclxuJHByb2dyZXNzLWJhci1kYW5nZXItYmc6ICAgICAgJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcbi8vKiogSW5mbyBwcm9ncmVzcyBiYXIgY29sb3JcbiRwcm9ncmVzcy1iYXItaW5mby1iZzogICAgICAgICRicmFuZC1pbmZvICFkZWZhdWx0O1xuXG5cbi8vPT0gTGlzdCBncm91cFxuLy9cbi8vIyNcblxuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9uIGAubGlzdC1ncm91cC1pdGVtYFxuJGxpc3QtZ3JvdXAtYmc6ICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBgLmxpc3QtZ3JvdXAtaXRlbWAgYm9yZGVyIGNvbG9yXG4kbGlzdC1ncm91cC1ib3JkZXI6ICAgICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG4vLyoqIExpc3QgZ3JvdXAgYm9yZGVyIHJhZGl1c1xuJGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1czogICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuXG4vLyoqIEJhY2tncm91bmQgY29sb3Igb2Ygc2luZ2xlIGxpc3QgaXRlbXMgb24gaG92ZXJcbiRsaXN0LWdyb3VwLWhvdmVyLWJnOiAgICAgICAgICAgI2Y1ZjVmNSAhZGVmYXVsdDtcbi8vKiogVGV4dCBjb2xvciBvZiBhY3RpdmUgbGlzdCBpdGVtc1xuJGxpc3QtZ3JvdXAtYWN0aXZlLWNvbG9yOiAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcbi8vKiogQmFja2dyb3VuZCBjb2xvciBvZiBhY3RpdmUgbGlzdCBpdGVtc1xuJGxpc3QtZ3JvdXAtYWN0aXZlLWJnOiAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcbi8vKiogQm9yZGVyIGNvbG9yIG9mIGFjdGl2ZSBsaXN0IGVsZW1lbnRzXG4kbGlzdC1ncm91cC1hY3RpdmUtYm9yZGVyOiAgICAgICRsaXN0LWdyb3VwLWFjdGl2ZS1iZyAhZGVmYXVsdDtcbi8vKiogVGV4dCBjb2xvciBmb3IgY29udGVudCB3aXRoaW4gYWN0aXZlIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWFjdGl2ZS10ZXh0LWNvbG9yOiAgbGlnaHRlbigkbGlzdC1ncm91cC1hY3RpdmUtYmcsIDQwJSkgIWRlZmF1bHQ7XG5cbi8vKiogVGV4dCBjb2xvciBvZiBkaXNhYmxlZCBsaXN0IGl0ZW1zXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcjogICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogQmFja2dyb3VuZCBjb2xvciBvZiBkaXNhYmxlZCBsaXN0IGl0ZW1zXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1iZzogICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuLy8qKiBUZXh0IGNvbG9yIGZvciBjb250ZW50IHdpdGhpbiBkaXNhYmxlZCBsaXN0IGl0ZW1zXG4kbGlzdC1ncm91cC1kaXNhYmxlZC10ZXh0LWNvbG9yOiAkbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvciAhZGVmYXVsdDtcblxuJGxpc3QtZ3JvdXAtbGluay1jb2xvcjogICAgICAgICAjNTU1ICFkZWZhdWx0O1xuJGxpc3QtZ3JvdXAtbGluay1ob3Zlci1jb2xvcjogICAkbGlzdC1ncm91cC1saW5rLWNvbG9yICFkZWZhdWx0O1xuJGxpc3QtZ3JvdXAtbGluay1oZWFkaW5nLWNvbG9yOiAjMzMzICFkZWZhdWx0O1xuXG5cbi8vPT0gUGFuZWxzXG4vL1xuLy8jI1xuXG4kcGFuZWwtYmc6ICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJHBhbmVsLWJvZHktcGFkZGluZzogICAgICAgICAgMTVweCAhZGVmYXVsdDtcbiRwYW5lbC1oZWFkaW5nLXBhZGRpbmc6ICAgICAgIDEwcHggMTVweCAhZGVmYXVsdDtcbiRwYW5lbC1mb290ZXItcGFkZGluZzogICAgICAgICRwYW5lbC1oZWFkaW5nLXBhZGRpbmcgIWRlZmF1bHQ7XG4kcGFuZWwtYm9yZGVyLXJhZGl1czogICAgICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuXG4vLyoqIEJvcmRlciBjb2xvciBmb3IgZWxlbWVudHMgd2l0aGluIHBhbmVsc1xuJHBhbmVsLWlubmVyLWJvcmRlcjogICAgICAgICAgI2RkZCAhZGVmYXVsdDtcbiRwYW5lbC1mb290ZXItYmc6ICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG5cbiRwYW5lbC1kZWZhdWx0LXRleHQ6ICAgICAgICAgICRncmF5LWRhcmsgIWRlZmF1bHQ7XG4kcGFuZWwtZGVmYXVsdC1ib3JkZXI6ICAgICAgICAjZGRkICFkZWZhdWx0O1xuJHBhbmVsLWRlZmF1bHQtaGVhZGluZy1iZzogICAgI2Y1ZjVmNSAhZGVmYXVsdDtcblxuJHBhbmVsLXByaW1hcnktdGV4dDogICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRwYW5lbC1wcmltYXJ5LWJvcmRlcjogICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuJHBhbmVsLXByaW1hcnktaGVhZGluZy1iZzogICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG5cbiRwYW5lbC1zdWNjZXNzLXRleHQ6ICAgICAgICAgICRzdGF0ZS1zdWNjZXNzLXRleHQgIWRlZmF1bHQ7XG4kcGFuZWwtc3VjY2Vzcy1ib3JkZXI6ICAgICAgICAkc3RhdGUtc3VjY2Vzcy1ib3JkZXIgIWRlZmF1bHQ7XG4kcGFuZWwtc3VjY2Vzcy1oZWFkaW5nLWJnOiAgICAkc3RhdGUtc3VjY2Vzcy1iZyAhZGVmYXVsdDtcblxuJHBhbmVsLWluZm8tdGV4dDogICAgICAgICAgICAgJHN0YXRlLWluZm8tdGV4dCAhZGVmYXVsdDtcbiRwYW5lbC1pbmZvLWJvcmRlcjogICAgICAgICAgICRzdGF0ZS1pbmZvLWJvcmRlciAhZGVmYXVsdDtcbiRwYW5lbC1pbmZvLWhlYWRpbmctYmc6ICAgICAgICRzdGF0ZS1pbmZvLWJnICFkZWZhdWx0O1xuXG4kcGFuZWwtd2FybmluZy10ZXh0OiAgICAgICAgICAkc3RhdGUtd2FybmluZy10ZXh0ICFkZWZhdWx0O1xuJHBhbmVsLXdhcm5pbmctYm9yZGVyOiAgICAgICAgJHN0YXRlLXdhcm5pbmctYm9yZGVyICFkZWZhdWx0O1xuJHBhbmVsLXdhcm5pbmctaGVhZGluZy1iZzogICAgJHN0YXRlLXdhcm5pbmctYmcgIWRlZmF1bHQ7XG5cbiRwYW5lbC1kYW5nZXItdGV4dDogICAgICAgICAgICRzdGF0ZS1kYW5nZXItdGV4dCAhZGVmYXVsdDtcbiRwYW5lbC1kYW5nZXItYm9yZGVyOiAgICAgICAgICRzdGF0ZS1kYW5nZXItYm9yZGVyICFkZWZhdWx0O1xuJHBhbmVsLWRhbmdlci1oZWFkaW5nLWJnOiAgICAgJHN0YXRlLWRhbmdlci1iZyAhZGVmYXVsdDtcblxuXG4vLz09IFRodW1ibmFpbHNcbi8vXG4vLyMjXG5cbi8vKiogUGFkZGluZyBhcm91bmQgdGhlIHRodW1ibmFpbCBpbWFnZVxuJHRodW1ibmFpbC1wYWRkaW5nOiAgICAgICAgICAgNHB4ICFkZWZhdWx0O1xuLy8qKiBUaHVtYm5haWwgYmFja2dyb3VuZCBjb2xvclxuJHRodW1ibmFpbC1iZzogICAgICAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XG4vLyoqIFRodW1ibmFpbCBib3JkZXIgY29sb3JcbiR0aHVtYm5haWwtYm9yZGVyOiAgICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG4vLyoqIFRodW1ibmFpbCBib3JkZXIgcmFkaXVzXG4kdGh1bWJuYWlsLWJvcmRlci1yYWRpdXM6ICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuXG4vLyoqIEN1c3RvbSB0ZXh0IGNvbG9yIGZvciB0aHVtYm5haWwgY2FwdGlvbnNcbiR0aHVtYm5haWwtY2FwdGlvbi1jb2xvcjogICAgICR0ZXh0LWNvbG9yICFkZWZhdWx0O1xuLy8qKiBQYWRkaW5nIGFyb3VuZCB0aGUgdGh1bWJuYWlsIGNhcHRpb25cbiR0aHVtYm5haWwtY2FwdGlvbi1wYWRkaW5nOiAgIDlweCAhZGVmYXVsdDtcblxuXG4vLz09IFdlbGxzXG4vL1xuLy8jI1xuXG4kd2VsbC1iZzogICAgICAgICAgICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuJHdlbGwtYm9yZGVyOiAgICAgICAgICAgICAgICAgZGFya2VuKCR3ZWxsLWJnLCA3JSkgIWRlZmF1bHQ7XG5cblxuLy89PSBCYWRnZXNcbi8vXG4vLyMjXG5cbiRiYWRnZS1jb2xvcjogICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIExpbmtlZCBiYWRnZSB0ZXh0IGNvbG9yIG9uIGhvdmVyXG4kYmFkZ2UtbGluay1ob3Zlci1jb2xvcjogICAgICAjZmZmICFkZWZhdWx0O1xuJGJhZGdlLWJnOiAgICAgICAgICAgICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG5cbi8vKiogQmFkZ2UgdGV4dCBjb2xvciBpbiBhY3RpdmUgbmF2IGxpbmtcbiRiYWRnZS1hY3RpdmUtY29sb3I6ICAgICAgICAgICRsaW5rLWNvbG9yICFkZWZhdWx0O1xuLy8qKiBCYWRnZSBiYWNrZ3JvdW5kIGNvbG9yIGluIGFjdGl2ZSBuYXYgbGlua1xuJGJhZGdlLWFjdGl2ZS1iZzogICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcblxuJGJhZGdlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgYm9sZCAhZGVmYXVsdDtcbiRiYWRnZS1saW5lLWhlaWdodDogICAgICAgICAgIDEgIWRlZmF1bHQ7XG4kYmFkZ2UtYm9yZGVyLXJhZGl1czogICAgICAgICAxMHB4ICFkZWZhdWx0O1xuXG5cbi8vPT0gQnJlYWRjcnVtYnNcbi8vXG4vLyMjXG5cbiRicmVhZGNydW1iLXBhZGRpbmctdmVydGljYWw6ICAgOHB4ICFkZWZhdWx0O1xuJGJyZWFkY3J1bWItcGFkZGluZy1ob3Jpem9udGFsOiAxNXB4ICFkZWZhdWx0O1xuLy8qKiBCcmVhZGNydW1iIGJhY2tncm91bmQgY29sb3JcbiRicmVhZGNydW1iLWJnOiAgICAgICAgICAgICAgICAgI2Y1ZjVmNSAhZGVmYXVsdDtcbi8vKiogQnJlYWRjcnVtYiB0ZXh0IGNvbG9yXG4kYnJlYWRjcnVtYi1jb2xvcjogICAgICAgICAgICAgICNjY2MgIWRlZmF1bHQ7XG4vLyoqIFRleHQgY29sb3Igb2YgY3VycmVudCBwYWdlIGluIHRoZSBicmVhZGNydW1iXG4kYnJlYWRjcnVtYi1hY3RpdmUtY29sb3I6ICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuLy8qKiBUZXh0dWFsIHNlcGFyYXRvciBmb3IgYmV0d2VlbiBicmVhZGNydW1iIGVsZW1lbnRzXG4kYnJlYWRjcnVtYi1zZXBhcmF0b3I6ICAgICAgICAgIFwiL1wiICFkZWZhdWx0O1xuXG5cbi8vPT0gQ2Fyb3VzZWxcbi8vXG4vLyMjXG5cbiRjYXJvdXNlbC10ZXh0LXNoYWRvdzogICAgICAgICAgICAgICAgICAgICAgICAwIDFweCAycHggcmdiYSgwLDAsMCwuNikgIWRlZmF1bHQ7XG5cbiRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAgIDE1JSAhZGVmYXVsdDtcbiRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHk6ICAgICAgICAgICAgICAgICAgICAuNSAhZGVmYXVsdDtcbiRjYXJvdXNlbC1jb250cm9sLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAyMHB4ICFkZWZhdWx0O1xuXG4kY2Fyb3VzZWwtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRjYXJvdXNlbC1pbmRpY2F0b3ItYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuXG4kY2Fyb3VzZWwtY2FwdGlvbi1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcblxuXG4vLz09IENsb3NlXG4vL1xuLy8jI1xuXG4kY2xvc2UtZm9udC13ZWlnaHQ6ICAgICAgICAgICBib2xkICFkZWZhdWx0O1xuJGNsb3NlLWNvbG9yOiAgICAgICAgICAgICAgICAgIzAwMCAhZGVmYXVsdDtcbiRjbG9zZS10ZXh0LXNoYWRvdzogICAgICAgICAgIDAgMXB4IDAgI2ZmZiAhZGVmYXVsdDtcblxuXG4vLz09IENvZGVcbi8vXG4vLyMjXG5cbiRjb2RlLWNvbG9yOiAgICAgICAgICAgICAgICAgICNjNzI1NGUgIWRlZmF1bHQ7XG4kY29kZS1iZzogICAgICAgICAgICAgICAgICAgICAjZjlmMmY0ICFkZWZhdWx0O1xuXG4ka2JkLWNvbG9yOiAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGtiZC1iZzogICAgICAgICAgICAgICAgICAgICAgIzMzMyAhZGVmYXVsdDtcblxuJHByZS1iZzogICAgICAgICAgICAgICAgICAgICAgI2Y1ZjVmNSAhZGVmYXVsdDtcbiRwcmUtY29sb3I6ICAgICAgICAgICAgICAgICAgICRncmF5LWRhcmsgIWRlZmF1bHQ7XG4kcHJlLWJvcmRlci1jb2xvcjogICAgICAgICAgICAjY2NjICFkZWZhdWx0O1xuJHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ6ICAgMzQwcHggIWRlZmF1bHQ7XG5cblxuLy89PSBUeXBlXG4vL1xuLy8jI1xuXG4vLyoqIEhvcml6b250YWwgb2Zmc2V0IGZvciBmb3JtcyBhbmQgbGlzdHMuXG4kY29tcG9uZW50LW9mZnNldC1ob3Jpem9udGFsOiAxODBweCAhZGVmYXVsdDtcbi8vKiogVGV4dCBtdXRlZCBjb2xvclxuJHRleHQtbXV0ZWQ6ICAgICAgICAgICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4vLyoqIEFiYnJldmlhdGlvbnMgYW5kIGFjcm9ueW1zIGJvcmRlciBjb2xvclxuJGFiYnItYm9yZGVyLWNvbG9yOiAgICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4vLyoqIEhlYWRpbmdzIHNtYWxsIGNvbG9yXG4kaGVhZGluZ3Mtc21hbGwtY29sb3I6ICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogQmxvY2txdW90ZSBzbWFsbCBjb2xvclxuJGJsb2NrcXVvdGUtc21hbGwtY29sb3I6ICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4vLyoqIEJsb2NrcXVvdGUgZm9udCBzaXplXG4kYmxvY2txdW90ZS1mb250LXNpemU6ICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XG4vLyoqIEJsb2NrcXVvdGUgYm9yZGVyIGNvbG9yXG4kYmxvY2txdW90ZS1ib3JkZXItY29sb3I6ICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuLy8qKiBQYWdlIGhlYWRlciBib3JkZXIgY29sb3JcbiRwYWdlLWhlYWRlci1ib3JkZXItY29sb3I6ICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4vLyoqIFdpZHRoIG9mIGhvcml6b250YWwgZGVzY3JpcHRpb24gbGlzdCB0aXRsZXNcbiRkbC1ob3Jpem9udGFsLW9mZnNldDogICAgICAgICRjb21wb25lbnQtb2Zmc2V0LWhvcml6b250YWwgIWRlZmF1bHQ7XG4vLyoqIFBvaW50IGF0IHdoaWNoIC5kbC1ob3Jpem9udGFsIGJlY29tZXMgaG9yaXpvbnRhbFxuJGRsLWhvcml6b250YWwtYnJlYWtwb2ludDogICAgJGdyaWQtZmxvYXQtYnJlYWtwb2ludCAhZGVmYXVsdDtcbi8vKiogSG9yaXpvbnRhbCBsaW5lIGNvbG9yLlxuJGhyLWJvcmRlcjogICAgICAgICAgICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcbiIsIi5sb2FkZXIge1xuICBmb250LXNpemU6IDEwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICB0ZXh0LWluZGVudDogLTk5OTllbTtcbiAgd2lkdGg6IDExZW07XG4gIGhlaWdodDogMTFlbTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudChsZWZ0LCAjZmZmZmZmIDEwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA0MiUpO1xuICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LCAjZmZmZmZmIDEwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA0MiUpO1xuICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgI2ZmZmZmZiAxMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgNDIlKTtcbiAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudChsZWZ0LCAjZmZmZmZmIDEwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA0MiUpO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNmZmZmZmYgMTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDQyJSk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBsb2FkZXJTcGlubmVyIDEuNHMgaW5maW5pdGUgbGluZWFyO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG59XG4ubG9hZGVyOmJlZm9yZSB7XG4gIHdpZHRoOiA1MCU7XG4gIGhlaWdodDogNTAlO1xuICBiYWNrZ3JvdW5kOiAkYnJhbmQtcHJpbWFyeTtcbiAgYm9yZGVyLXJhZGl1czogMTAwJSAwIDAgMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGNvbnRlbnQ6ICcnO1xufVxuLmxvYWRlcjphZnRlciB7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIHdpZHRoOiA3NSU7XG4gIGhlaWdodDogNzUlO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGNvbnRlbnQ6ICcnO1xuICBtYXJnaW46IGF1dG87XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xufVxuXG5Aa2V5ZnJhbWVzIGxvYWRlclNwaW5uZXIge1xuICAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxufSIsIkBpbXBvcnQgJy4uLy4uLy4uL3N0eWxlcy9hbmltYXRpb25zLnNjc3MnO1xuXG54b3MtdGFibGUge1xuXG4gIGRpc3BsYXk6IGJsb2NrO1xuXG4gIHRyLm5nLW1vdmUsXG4gIHRyLm5nLWVudGVyLFxuICB0ci5uZy1sZWF2ZSB7XG4gICAgdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7XG4gIH1cblxuICB0ci5uZy1sZWF2ZS5uZy1sZWF2ZS1hY3RpdmUsXG4gIHRyLm5nLW1vdmUsXG4gIHRyLm5nLWVudGVyIHtcbiAgICBvcGFjaXR5OjA7XG4gICAgYW5pbWF0aW9uOiAwLjVzIHNsaWRlT3V0UmlnaHQgZWFzZS1pbi1vdXQ7XG4gIH1cblxuICB0ci5uZy1sZWF2ZSxcbiAgdHIubmctbW92ZS5uZy1tb3ZlLWFjdGl2ZSxcbiAgdHIubmctZW50ZXIubmctZW50ZXItYWN0aXZlIHtcbiAgICBvcGFjaXR5OjE7XG4gICAgYW5pbWF0aW9uOiAwLjVzIHNsaWRlSW5SaWdodCBlYXNlLWluLW91dDtcbiAgfVxuXG4gIHRkIGRsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgZHQge1xuICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICB9XG4gICAgXG4gICAgZHQ6YWZ0ZXIge1xuICAgICAgLypkaXNwbGF5OiBibG9jazsqL1xuICAgICAgY29udGVudDogJzonO1xuICAgIH1cblxuICAgIGRkIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG59IiwiQGltcG9ydCAnLi4vLi4vLi4vc3R5bGVzL2FuaW1hdGlvbnMuc2Nzcyc7XG5cbnhvcy1hbGVydCB7XG4gIG1hcmdpbi10b3A6ICRmb3JtLWdyb3VwLW1hcmdpbi1ib3R0b207XG4gIGRpc3BsYXk6IGJsb2NrO1xuXG4gIC8qIHdoZW4gaGlkaW5nICovXG4gIC5uZy1oaWRlLWFkZCAgICAgICAgIHsgYW5pbWF0aW9uOjAuNXMgZmFkZU91dERvd24gZWFzZS1pbi1vdXQ7IH1cblxuICAvKiB3aGVuIHNob3dpbmcgKi9cbiAgLm5nLWhpZGUtcmVtb3ZlICAgICAgeyBhbmltYXRpb246MC41cyBmYWRlSW5VcCBlYXNlLWluLW91dDsgfVxufSIsIkBpbXBvcnQgJy4uLy4uLy4uL3N0eWxlcy9hbmltYXRpb25zLnNjc3MnO1xuQGltcG9ydCAnLi4vLi4vLi4vLi4vLi4vLi4vc3R5bGUvc2Fzcy9ib290c3RyYXAvYm9vdHN0cmFwL192YXJpYWJsZXMuc2Nzcyc7XG5cbmlucHV0ICsgeG9zLXZhbGlkYXRpb24ge1xuICBtYXJnaW4tdG9wOiAkZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tO1xuICBkaXNwbGF5OiBibG9jaztcbn0iLCJ4b3MtZmllbGQge1xuICBkaXNwbGF5OiBibG9jaztcbn0iLCJAaW1wb3J0ICcuLi8uLi8uLi9zdHlsZXMvYW5pbWF0aW9ucy5zY3NzJztcbkBpbXBvcnQgJy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlL3Nhc3MvYm9vdHN0cmFwL2Jvb3RzdHJhcC9fdmFyaWFibGVzLnNjc3MnO1xuXG54b3MtZm9ybSB7XG4gIGJ1dHRvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTtcbiAgfVxuXG4gIGJ1dHRvbiArIGJ1dHRvbiB7XG4gICBtYXJnaW4tbGVmdDogJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTsgXG4gIH1cbn0iLCJ4b3Mtc21hcnQtdGFibGV7XG4gIFxufSJdLCJtYXBwaW5ncyI6IkFDQUEsVUFBVSxDQUFDLEFBQUEsWUFBWTtFQUNyQixBQUFBLElBQUk7SUFDRixTQUFTLEVBQUUsdUJBQVc7SUFDdEIsVUFBVSxFQUFFLE9BQVE7RUFHdEIsQUFBQSxFQUFFO0lBQ0EsU0FBUyxFQUFFLG9CQUFXOztBQUkxQixVQUFVLENBQUMsQUFBQSxhQUFhO0VBQ3RCLEFBQUEsSUFBSTtJQUNGLFNBQVMsRUFBRSxvQkFBVztFQUd4QixBQUFBLEVBQUU7SUFDQSxVQUFVLEVBQUUsTUFBTztJQUNuQixTQUFTLEVBQUUsdUJBQVc7O0FBSTFCLFVBQVUsQ0FBQyxBQUFBLFFBQVE7RUFDakIsQUFBQSxJQUFJO0lBQ0YsT0FBTyxFQUFFLENBQUU7SUFDWCxTQUFTLEVBQUUsdUJBQVc7RUFHeEIsQUFBQSxFQUFFO0lBQ0EsT0FBTyxFQUFFLENBQUU7SUFDWCxTQUFTLEVBQUUsSUFBSzs7QUFJcEIsVUFBVSxDQUFDLEFBQUEsV0FBVztFQUNwQixBQUFBLElBQUk7SUFDRixPQUFPLEVBQUUsQ0FBRTtFQUdiLEFBQUEsRUFBRTtJQUNBLE9BQU8sRUFBRSxDQUFFO0lBQ1gsU0FBUyxFQUFFLHVCQUFXOztBRXpDMUIsQUFBQSxPQUFPLENBQUM7RUFDTixTQUFTLEVBQUUsSUFBSztFQUNoQixNQUFNLEVBQUUsTUFBTztFQUNmLFdBQVcsRUFBRSxPQUFRO0VBQ3JCLEtBQUssRUFBRSxJQUFLO0VBQ1osTUFBTSxFQUFFLElBQUs7RUFDYixhQUFhLEVBQUUsR0FBSTtFQUNuQixVQUFVLEVBQUUsT0FBUTtFQUNwQixVQUFVLEVBQUUsbUVBQW9CO0VBQ2hDLFVBQVUsRUFBRSxzRUFBdUI7RUFDbkMsVUFBVSxFQUFFLGlFQUFrQjtFQUM5QixVQUFVLEVBQUUsa0VBQW1CO0VBQy9CLFVBQVUsRUFBRSxrRUFBZTtFQUMzQixRQUFRLEVBQUUsUUFBUztFQUNuQixTQUFTLEVBQUUsa0NBQW1DO0VBQzlDLFNBQVMsRUFBRSxhQUFVLEdBQ3RCOztBQUNELEFBQU8sT0FBQSxBQUFBLE9BQU8sQ0FBQztFQUNiLEtBQUssRUFBRSxHQUFJO0VBQ1gsTUFBTSxFQUFFLEdBQUk7RUFDWixVQUFVLEVESFksT0FBTTtFQ0k1QixhQUFhLEVBQUUsVUFBVztFQUMxQixRQUFRLEVBQUUsUUFBUztFQUNuQixHQUFHLEVBQUUsQ0FBRTtFQUNQLElBQUksRUFBRSxDQUFFO0VBQ1IsT0FBTyxFQUFFLEVBQUcsR0FDYjs7QUFDRCxBQUFPLE9BQUEsQUFBQSxNQUFNLENBQUM7RUFDWixVQUFVLEVBQUUsSUFBSztFQUNqQixLQUFLLEVBQUUsR0FBSTtFQUNYLE1BQU0sRUFBRSxHQUFJO0VBQ1osYUFBYSxFQUFFLEdBQUk7RUFDbkIsT0FBTyxFQUFFLEVBQUc7RUFDWixNQUFNLEVBQUUsSUFBSztFQUNiLFFBQVEsRUFBRSxRQUFTO0VBQ25CLEdBQUcsRUFBRSxDQUFFO0VBQ1AsSUFBSSxFQUFFLENBQUU7RUFDUixNQUFNLEVBQUUsQ0FBRTtFQUNWLEtBQUssRUFBRSxDQUFFLEdBQ1Y7O0FBRUQsVUFBVSxDQUFDLEFBQUEsYUFBYTtFQUN0QixBQUFBLEVBQUU7SUFDQSxpQkFBaUIsRUFBRSxZQUFNO0lBQ3pCLFNBQVMsRUFBRSxZQUFNO0VBRW5CLEFBQUEsSUFBSTtJQUNGLGlCQUFpQixFQUFFLGNBQU07SUFDekIsU0FBUyxFQUFFLGNBQU07O0FGaERyQixVQUFVLENBQUMsQUFBQSxZQUFZO0VBQ3JCLEFBQUEsSUFBSTtJQUNGLFNBQVMsRUFBRSx1QkFBVztJQUN0QixVQUFVLEVBQUUsT0FBUTtFQUd0QixBQUFBLEVBQUU7SUFDQSxTQUFTLEVBQUUsb0JBQVc7O0FBSTFCLFVBQVUsQ0FBQyxBQUFBLGFBQWE7RUFDdEIsQUFBQSxJQUFJO0lBQ0YsU0FBUyxFQUFFLG9CQUFXO0VBR3hCLEFBQUEsRUFBRTtJQUNBLFVBQVUsRUFBRSxNQUFPO0lBQ25CLFNBQVMsRUFBRSx1QkFBVzs7QUFJMUIsVUFBVSxDQUFDLEFBQUEsUUFBUTtFQUNqQixBQUFBLElBQUk7SUFDRixPQUFPLEVBQUUsQ0FBRTtJQUNYLFNBQVMsRUFBRSx1QkFBVztFQUd4QixBQUFBLEVBQUU7SUFDQSxPQUFPLEVBQUUsQ0FBRTtJQUNYLFNBQVMsRUFBRSxJQUFLOztBQUlwQixVQUFVLENBQUMsQUFBQSxXQUFXO0VBQ3BCLEFBQUEsSUFBSTtJQUNGLE9BQU8sRUFBRSxDQUFFO0VBR2IsQUFBQSxFQUFFO0lBQ0EsT0FBTyxFQUFFLENBQUU7SUFDWCxTQUFTLEVBQUUsdUJBQVc7O0FHdkMxQixBQUFBLFNBQVMsQ0FBQztFQUVSLE9BQU8sRUFBRSxLQUFNLEdBdUNoQjtFQXpDRCxBQUlJLFNBSkssQ0FJUCxFQUFFLEFBQUEsUUFBUTtFQUpaLEFBS0ksU0FMSyxDQUtQLEVBQUUsQUFBQSxTQUFTO0VBTGIsQUFNSSxTQU5LLENBTVAsRUFBRSxBQUFBLFNBQVMsQ0FBQztJQUNWLFVBQVUsRUFBQyxlQUFnQixHQUM1QjtFQVJILEFBVWEsU0FWSixDQVVQLEVBQUUsQUFBQSxTQUFTLEFBQUEsZ0JBQWdCO0VBVjdCLEFBV0ksU0FYSyxDQVdQLEVBQUUsQUFBQSxRQUFRO0VBWFosQUFZSSxTQVpLLENBWVAsRUFBRSxBQUFBLFNBQVMsQ0FBQztJQUNWLE9BQU8sRUFBQyxDQUFFO0lBQ1YsU0FBUyxFQUFFLDhCQUErQixHQUMzQztFQWZILEFBaUJJLFNBakJLLENBaUJQLEVBQUUsQUFBQSxTQUFTO0VBakJiLEFBa0JZLFNBbEJILENBa0JQLEVBQUUsQUFBQSxRQUFRLEFBQUEsZUFBZTtFQWxCM0IsQUFtQmEsU0FuQkosQ0FtQlAsRUFBRSxBQUFBLFNBQVMsQUFBQSxnQkFBZ0IsQ0FBQztJQUMxQixPQUFPLEVBQUMsQ0FBRTtJQUNWLFNBQVMsRUFBRSw2QkFBOEIsR0FDMUM7RUF0QkgsQUF3QkssU0F4QkksQ0F3QlAsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNKLGFBQWEsRUFBRSxDQUFFLEdBZWxCO0lBeENILEFBMkJJLFNBM0JLLENBd0JQLEVBQUUsQ0FBQyxFQUFFLENBR0gsRUFBRSxDQUFDO01BQ0QsS0FBSyxFQUFFLGVBQWdCO01BQ3ZCLFlBQVksRUFBRSxJQUFLLEdBQ3BCO0lBOUJMLEFBZ0NNLFNBaENHLENBd0JQLEVBQUUsQ0FBQyxFQUFFLENBUUgsRUFBRSxBQUFBLE1BQU0sQ0FBQztNQUNQLG1CQUFtQjtNQUNuQixPQUFPLEVBQUUsR0FBSSxHQUNkO0lBbkNMLEFBcUNJLFNBckNLLENBd0JQLEVBQUUsQ0FBQyxFQUFFLENBYUgsRUFBRSxDQUFDO01BQ0QsV0FBVyxFQUFFLFlBQWEsR0FDM0I7O0FIekNMLFVBQVUsQ0FBQyxBQUFBLFlBQVk7RUFDckIsQUFBQSxJQUFJO0lBQ0YsU0FBUyxFQUFFLHVCQUFXO0lBQ3RCLFVBQVUsRUFBRSxPQUFRO0VBR3RCLEFBQUEsRUFBRTtJQUNBLFNBQVMsRUFBRSxvQkFBVzs7QUFJMUIsVUFBVSxDQUFDLEFBQUEsYUFBYTtFQUN0QixBQUFBLElBQUk7SUFDRixTQUFTLEVBQUUsb0JBQVc7RUFHeEIsQUFBQSxFQUFFO0lBQ0EsVUFBVSxFQUFFLE1BQU87SUFDbkIsU0FBUyxFQUFFLHVCQUFXOztBQUkxQixVQUFVLENBQUMsQUFBQSxRQUFRO0VBQ2pCLEFBQUEsSUFBSTtJQUNGLE9BQU8sRUFBRSxDQUFFO0lBQ1gsU0FBUyxFQUFFLHVCQUFXO0VBR3hCLEFBQUEsRUFBRTtJQUNBLE9BQU8sRUFBRSxDQUFFO0lBQ1gsU0FBUyxFQUFFLElBQUs7O0FBSXBCLFVBQVUsQ0FBQyxBQUFBLFdBQVc7RUFDcEIsQUFBQSxJQUFJO0lBQ0YsT0FBTyxFQUFFLENBQUU7RUFHYixBQUFBLEVBQUU7SUFDQSxPQUFPLEVBQUUsQ0FBRTtJQUNYLFNBQVMsRUFBRSx1QkFBVzs7QUl2QzFCLEFBQUEsU0FBUyxDQUFDO0VBQ1IsVUFBVSxFSHlOcUIsSUFBSTtFR3hObkMsT0FBTyxFQUFFLEtBQU07RUFFZixpQkFBaUI7RUFHakIsa0JBQWtCLEVBRW5CO0VBVEQsQUFLRSxTQUxPLENBS1AsWUFBWSxDQUFTO0lBQUUsU0FBUyxFQUFDLDRCQUE2QixHQUFJO0VBTHBFLEFBUUUsU0FSTyxDQVFQLGVBQWUsQ0FBTTtJQUFFLFNBQVMsRUFBQyx5QkFBMEIsR0FBSTs7QUpWakUsVUFBVSxDQUFDLEFBQUEsWUFBWTtFQUNyQixBQUFBLElBQUk7SUFDRixTQUFTLEVBQUUsdUJBQVc7SUFDdEIsVUFBVSxFQUFFLE9BQVE7RUFHdEIsQUFBQSxFQUFFO0lBQ0EsU0FBUyxFQUFFLG9CQUFXOztBQUkxQixVQUFVLENBQUMsQUFBQSxhQUFhO0VBQ3RCLEFBQUEsSUFBSTtJQUNGLFNBQVMsRUFBRSxvQkFBVztFQUd4QixBQUFBLEVBQUU7SUFDQSxVQUFVLEVBQUUsTUFBTztJQUNuQixTQUFTLEVBQUUsdUJBQVc7O0FBSTFCLFVBQVUsQ0FBQyxBQUFBLFFBQVE7RUFDakIsQUFBQSxJQUFJO0lBQ0YsT0FBTyxFQUFFLENBQUU7SUFDWCxTQUFTLEVBQUUsdUJBQVc7RUFHeEIsQUFBQSxFQUFFO0lBQ0EsT0FBTyxFQUFFLENBQUU7SUFDWCxTQUFTLEVBQUUsSUFBSzs7QUFJcEIsVUFBVSxDQUFDLEFBQUEsV0FBVztFQUNwQixBQUFBLElBQUk7SUFDRixPQUFPLEVBQUUsQ0FBRTtFQUdiLEFBQUEsRUFBRTtJQUNBLE9BQU8sRUFBRSxDQUFFO0lBQ1gsU0FBUyxFQUFFLHVCQUFXOztBS3RDMUIsQUFBUSxLQUFILEdBQUcsY0FBYyxDQUFDO0VBQ3JCLFVBQVUsRUp3TnFCLElBQUk7RUl2Tm5DLE9BQU8sRUFBRSxLQUFNLEdBQ2hCOztBQ05ELEFBQUEsU0FBUyxDQUFDO0VBQ1IsT0FBTyxFQUFFLEtBQU0sR0FDaEI7O0FORkQsVUFBVSxDQUFDLEFBQUEsWUFBWTtFQUNyQixBQUFBLElBQUk7SUFDRixTQUFTLEVBQUUsdUJBQVc7SUFDdEIsVUFBVSxFQUFFLE9BQVE7RUFHdEIsQUFBQSxFQUFFO0lBQ0EsU0FBUyxFQUFFLG9CQUFXOztBQUkxQixVQUFVLENBQUMsQUFBQSxhQUFhO0VBQ3RCLEFBQUEsSUFBSTtJQUNGLFNBQVMsRUFBRSxvQkFBVztFQUd4QixBQUFBLEVBQUU7SUFDQSxVQUFVLEVBQUUsTUFBTztJQUNuQixTQUFTLEVBQUUsdUJBQVc7O0FBSTFCLFVBQVUsQ0FBQyxBQUFBLFFBQVE7RUFDakIsQUFBQSxJQUFJO0lBQ0YsT0FBTyxFQUFFLENBQUU7SUFDWCxTQUFTLEVBQUUsdUJBQVc7RUFHeEIsQUFBQSxFQUFFO0lBQ0EsT0FBTyxFQUFFLENBQUU7SUFDWCxTQUFTLEVBQUUsSUFBSzs7QUFJcEIsVUFBVSxDQUFDLEFBQUEsV0FBVztFQUNwQixBQUFBLElBQUk7SUFDRixPQUFPLEVBQUUsQ0FBRTtFQUdiLEFBQUEsRUFBRTtJQUNBLE9BQU8sRUFBRSxDQUFFO0lBQ1gsU0FBUyxFQUFFLHVCQUFXOztBT3RDMUIsQUFDRSxRQURNLENBQ04sTUFBTSxDQUFDO0VBQ0wsYUFBYSxFTnVOZ0IsSUFBSSxHTXRObEM7O0FBSEgsQUFLVyxRQUxILENBS04sTUFBTSxHQUFHLE1BQU0sQ0FBQztFQUNmLFdBQVcsRU5tTm1CLElBQUksR01sTmxDOztDUkVILEFBQUEsQUFBVSxTQUFULEFBQUEsSUFBWSxBQUFBLEFBQVMsUUFBUixBQUFBLElBQVcsQUFBQSxBQUFjLGFBQWIsQUFBQSxJQUFnQixBQUFBLEFBQVcsVUFBVixBQUFBLEdBQWEsQUFBQSxTQUFTLEVBQUUsQUFBQSxXQUFXLENBQUM7RUFDN0UsT0FBTyxFQUFFLGVBQWdCLEdBQzFCOztBQUVELEFBQU8sSUFBSCxHQUFHLElBQUksQ0FBQztFQUNWLDBCQUEwQjtFQUMxQixVQUFVLEVFME1xQixJQUFJLEdGek1wQyIsIm5hbWVzIjpbXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */
diff --git a/xos/core/static/xos_graphs.js b/xos/core/static/xos_graphs.js
deleted file mode 100644
index cb6e300..0000000
--- a/xos/core/static/xos_graphs.js
+++ /dev/null
@@ -1,138 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-google.load('visualization', '1', {'packages' : ['controls','table','corechart','geochart']});
-
-function renderChart(newStyle, dialog, container, dataSourceUrl, yColumn, xColumn, aggFunc, options) {
-    if ( newStyle ) {
-        $(dialog).dialog("open");
-    }
-    else {
-        $(container).empty();
-        $(dialog).modal('show');
-        $('.modal-body').scrollTop(0);
-    }
-
-    startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options)
-}
-
-function startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options) {
-    var query = new google.visualization.Query(dataSourceUrl);
-    query && query.abort();
-    query.send(function(response) {handleResponse_psg(container, dataSourceUrl, response, yColumn, xColumn, aggFunc, options);});
-}
-
-// NOTE: appended _psg to showLine() and handleResponse() to prevent conflict
-//       with Sapan's analytics page.
-
-function agg_bandwidth(arr) {
-        var ret = 0;
-        for (var i = 0; i < arr.length; i++) {
-                ret+=arr[i]*8.0/1024.0/1024.0/1024.0;
-        }
-        return ret;
-}
-
-function showLine_psg(container, dt, options) {
-    var base_options = {
-            'width': 520,
-            'height': 300,
-  	    'pages': true,
-	    'numRows': 9,
-            'backgroundColor': 'transparent',
-            'titleTextStyle': {"color": "black"},
-            'legend': 'none',
-            'hAxis': {"baselineColor": "darkBlue",
-                      "textStyle": {"color": "black"}},
-            'vAxis': {"baselineColor": "darkBlue",
-                      "textStyle": {"color": "black"}},
-          }
-
-    options = $.extend(true, {}, base_options, options);
-
-    var lineChart = new google.visualization.ChartWrapper({
-          'chartType': 'LineChart',
-          'containerId': container.substring(1),
-          'view': {'columns': [0, 1]},
-          'options': options
-        });
-        lineChart.setDataTable(dt);
-        lineChart.draw();
-
-}
-
-function fixDate(unixDate) {
-    return new Date(unixDate*1000);
-}
-
-function fixDate2(unixDate) {
-    return new Date(unixDate);
-}
-
-function handleResponse_psg(container, dataSourceUrl, response, yColumn, xColumn, aggFunc, options) {
-    var supportedClasses = {
-                    'Table':google.visualization.Table,
-                    'LineChart':google.visualization.LineChart,
-                    'ScatterChart':google.visualization.ScatterChart,
-                    'ColumnChart':google.visualization.ColumnChart,
-                    'GeoChart':google.visualization.GeoChart,
-                    'PieChart':google.visualization.PieChart,
-                    'Histogram':google.visualization.Histogram};
-
-    if (response.isError()) {
-        //console.log("retry chart");
-        setTimeout(function () { startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options) }, 5000);
-        return
-    }
-
-    var proxy = new google.visualization.ChartWrapper({
-      'chartType': 'Table',
-      'containerId': 'graph_work',
-      'options': {
-        'width': 800,
-        'height': 300,
-         pageSize:5,
-         page:'enable',
-        'legend': 'none',
-        'title': 'Nodes'
-      },
-      'view': {'columns': [0,1]}
-    });
-
-    google.visualization.events.addListener(proxy, 'ready', function () {
-        var dt = proxy.getDataTable();
-        var groupedData1 = google.visualization.data.group(dt, [{
-           column: yColumn,
-           type: 'datetime',
-           modifier: fixDate2,
-           }],
-           [{
-            column: xColumn,
-            type: 'number',
-            label: dt.getColumnLabel(xColumn),
-            aggregation: aggFunc}]);
-
-        showLine_psg(container, groupedData1, options);
-    });
-
-    proxy.setDataTable(response.getDataTable());
-
-    proxy.draw();
-}
-
-
diff --git a/xos/core/templates/slice_instance_tab.html b/xos/core/templates/slice_instance_tab.html
deleted file mode 100644
index c06c770..0000000
--- a/xos/core/templates/slice_instance_tab.html
+++ /dev/null
@@ -1,100 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% if slice_id %}
-
-<a href="/admin/core/instance/add/?_to_field=id&slice={{ slice_id }}" id="add_instance_advanced"
-onclick="return addInstanceClicked(this);">
-Add Instance
-</a>
-<input type="hidden" id="instance_advanced" name="instance_advanced" onchange="console.log('changed');" value="initial">
-
-<script>
-
-// ugly - poll for django to change "instance_advanced", and it it does, then refresh the
-// page so the instance list gets updated.
-var last_instance_advanced = $("#instance_advanced").val();
-checkInstanceAdvanced = function() {
-    cur = $("#instance_advanced").val();
-    if (cur != last_instance_advanced) {
-        last_instance_advanced = cur;
-        location.reload();
-   }
-};
-
-setInterval(function() { checkInstanceAdvanced(); }, 1000);
-
-function showAddInstancePopup(triggeringLink) {
-    var name = triggeringLink.id.replace(/^add_/, '');
-    name = id_to_windowname(name);
-    var href = triggeringLink.href;
-    if (href.indexOf('?') == -1) {
-        href += '?_popup=1';
-    } else {
-        href  += '&_popup=1';
-    }
-    var win = window.open(href, name, 'height=500,width=1080,resizable=yes,scrollbars=yes');
-    win.focus();
-    return false;
-}
-
-function formIsDirty(form) {
-  console.log(form);
-  for (var i = 0; i < form.elements.length; i++) {

-    var element = form.elements[i];

-    var type = element.type;

-    if (type == "checkbox" || type == "radio") {

-      if (element.checked != element.defaultChecked) {

-        return true;

-      }

-    }

-    else if (type == "hidden" || type == "password" ||

-             type == "text" || type == "textarea") {

-      if (element.value != element.defaultValue) {

-        return true;

-      }

-    }

-    else if (type == "select-one" || type == "select-multiple") {

-      for (var j = 0; j < element.options.length; j++) {

-        if (element.options[j].selected !=

-            element.options[j].defaultSelected) {

-          return true;

-        }

-      }

-    }

-  }

-  return false;

-}
-
-function addInstanceClicked(link) {
-    if (formIsDirty($("#slice_form")[0])) {
-        console.log("dirty!!");
-        alert("Slice has modified fields. Please save the slice before adding instances.");
-        return false;
-    } else {
-        return showAddInstancePopup(link);
-    }
-}
-
-</script>
-
-{% else %}
-
-Please save this slice before adding Instances.
-
-{% endif %}
diff --git a/xos/core/templatetags/__init__.py b/xos/core/templatetags/__init__.py
deleted file mode 100644
index d4e8062..0000000
--- a/xos/core/templatetags/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
diff --git a/xos/core/templatetags/core_tags.py b/xos/core/templatetags/core_tags.py
deleted file mode 100644
index 517125f..0000000
--- a/xos/core/templatetags/core_tags.py
+++ /dev/null
@@ -1,50 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from django import template
-# import sys
-from core.models import DashboardView
-from itertools import chain
-from core.dashboard.views.home import DashboardDynamicView
-
-register = template.Library()
-
-
-@register.inclusion_tag('admin/tags/dashboard_list.html', takes_context=True)
-def dashboard_list(context):
-    request = context['request']
-    if request.user.is_authenticated():
-        dashboards = request.user.get_dashboards()
-        customize = DashboardView.objects.filter(name="Customize")
-        dashboards_list = list(chain(dashboards, customize))
-    else:
-        dashboards_list = []
-
-    active = None
-    for d in dashboards_list:
-        if str(d.id) in request.path and "admin/dashboard" in request.path:
-            active = d.id
-
-    if active is None and ("/admin/" == request.path or "/" == request.path):
-        active = dashboards[0].id
-
-    return {'dashboards': dashboards_list, 'active': active}
-
-
-@register.inclusion_tag('admin/tags/notification.html', takes_context=True)
-def notification(context):
-    template = DashboardDynamicView.readTemplate(DashboardDynamicView(), "xosSynchronizerNotifier")
-    return {'template': template}
diff --git a/xos/core/views/__init__.py b/xos/core/views/__init__.py
deleted file mode 100644
index d4e8062..0000000
--- a/xos/core/views/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
diff --git a/xos/core/views/mCordServiceGrid.py b/xos/core/views/mCordServiceGrid.py
deleted file mode 100644
index 5a36faa..0000000
--- a/xos/core/views/mCordServiceGrid.py
+++ /dev/null
@@ -1,110 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from django.http import HttpResponse
-from django.views.generic import TemplateView, View
-from django import template
-from django.shortcuts import render
-from core.models import *
-import json
-import os
-import time
-import tempfile
-
-
-class ServiceGridView(TemplateView):
-    head_template = r"""{% extends "admin/dashboard/dashboard_base.html" %}
-       {% load admin_static %}
-       {% block content %}
-    """
-
-    # I hate myself for doing this
-    script = """
-    <script type="text/javascript">
-        $(window).ready(function(){
-            $('.kind-container').on('click', function(){
-                $(this).toggleClass('active')
-            });
-        })
-    </script>
-    <style>
-        .kind-container.row {
-            height: 60px;
-            overflow-y: hidden;
-            transition: all .5s ease-in-out;
-        }
-
-        .kind-container.row > .col-xs-12 {
-            margin-bottom:10px;
-            background: darkred;
-            color: #fff;
-            border-radius: 10px;
-        }
-
-        .kind-container.row.active {
-            height: 230px;
-        }
-
-        .kind-container img {
-            margin: 0 auto;
-        }
-    </style>
-    """
-
-    tail_template = r"{% endblock %}"
-
-    def get(self, request, name="root", *args, **kwargs):
-        head_template = self.head_template
-        tail_template = self.tail_template
-        html = self.script
-        html = html + '<div class="col-xs-12 m-cord">'
-
-        # Select the unique kind of services
-        for kind in Service.objects.values('kind').distinct():
-
-            html = html + '<div class="kind-container row">'
-            html = html + '<div class="col-xs-12"><h2>%s</h2></div>' % (kind["kind"])
-
-            # for each kind select services
-            for service in Service.objects.filter(kind=kind["kind"]):
-                image_url = service.icon_url
-                if (not image_url):
-                    image_url = "/static/mCordServices/service_common.png"
-                #if service.view_url.startswith("http"):
-                #    target = 'target="_blank"'
-                #else:
-                #    target = ''
-                target = ''
-
-                html = html + '<div class="col-xs-4 text-center service-container">'
-                html = html + '<a href="%s" %s>' % (service.view_url.replace("$id$", str(service.id)), target)
-                html = html + '<img class="img-responsive" src="%s">' % (image_url)
-                html = html + "<h4>" + service.name + "</h4>"
-                html = html + '</a>'
-                html = html + "</div>"
-
-            html = html + "</div>"
-
-        html = html + "</div>"
-        t = template.Template(head_template + html + self.tail_template)
-
-        response_kwargs = {}
-        response_kwargs.setdefault('content_type', self.content_type)
-        return self.response_class(
-            request=request,
-            template=t,
-            **response_kwargs
-        )
diff --git a/xos/core/views/mcordview.py b/xos/core/views/mcordview.py
deleted file mode 100644
index 33c9145..0000000
--- a/xos/core/views/mcordview.py
+++ /dev/null
@@ -1,122 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from django.http import HttpResponse
-from django.views.generic import TemplateView, View
-from django import template
-from core.models import *
-import json
-import os
-import time
-import tempfile
-
-
-class MCordView(TemplateView):
-    head_template = r"""{% extends "admin/dashboard/dashboard_base.html" %}
-       {% load admin_static %}
-       {% block content %}
-    """
-
-    tail_template = r"{% endblock %}"
-
-    def get(self, request, name="root", *args, **kwargs):
-        head_template = self.head_template
-        tail_template = self.tail_template
-
-        title = request.GET.get('service', '')
-        url = "/mcord/?service=%s" % (title)
-
-        form = """
-        <h2 class="content-title">Change %s Service</h2>
-        <div id="content-main">
-            <form class="form-horizontal">
-                <div class="tab-content tab-content-main">
-                    <div class="suit-include suit-tab suit-tab-administration hide">
-                        <div class="left-nav">
-                            <ul>
-                                <li><a href="/admin/ceilometer/monitoringchannel/">Monitoring Channels</a></li>
-                            </ul>
-                        </div>
-                    </div>
-                    <fieldset class="module aligned suit-tab suit-tab-general show">
-                        <div class="panel fieldset-body">
-                            <div class="form-group field-backend_status_text ">
-                                <label class="control-label col-xs-12 col-sm-2"><label>Backend status text:</label></label>
-                                <div class="form-column col-xs-12 col-sm-8 col-md-6 col-lg-4">
-                                    <p><img src="/static/admin/img/icon_clock.gif"> Pending sync, last_status = 0 - Provisioning in progress</p>
-                                </div>
-                            </div>
-                            <div class="form-group field-name ">
-                                <label class="control-label col-xs-12 col-sm-2"><label class="required" for="id_name">Name:</label></label>
-                                <div class="form-column widget-AdminTextInputWidget col-xs-12 col-sm-8 col-md-6 col-lg-4">
-                                    <input class="vTextField form-control" id="id_name" maxlength="30" name="name" type="text" value="%s">
-                                    <div class="help-block">Service Name</div>
-                                </div>
-                            </div>
-                            <div class="form-group field-enabled ">
-                                <label class="control-label col-xs-12 col-sm-2"><label class="vCheckboxLabel" for="id_enabled">Enabled</label></label>
-                                <div class="form-column widget-CheckboxInput col-xs-12 col-sm-8 col-md-6 col-lg-4">
-                                    <input checked="checked" id="id_enabled" name="enabled" type="checkbox">
-                                </div>
-                            </div>
-                            <div class="form-group field-versionNumber ">
-                                <label class="control-label col-xs-12 col-sm-2"><label class="required" for="id_versionNumber">VersionNumber:</label></label>
-                                <div class="form-column widget-AdminTextInputWidget col-xs-12 col-sm-8 col-md-6 col-lg-4">
-                                    <input class="vTextField form-control" id="id_versionNumber" maxlength="30" name="versionNumber" type="text">
-                                    <div class="help-block">Version of Service Definition</div>
-                                </div>
-                            </div>
-                            <div class="form-group field-description ">
-                                <label class="control-label col-xs-12 col-sm-2"><label for="id_description">Description:</label></label>
-                                <div class="form-column widget-AdminTextareaWidget col-xs-12 col-sm-8 col-md-6 col-lg-4">
-                                    <textarea class="vLargeTextField form-control" cols="40" id="id_description" maxlength="254" name="description" rows="10"></textarea>
-                                    <div class="help-block">Description of Service</div>
-                                </div>
-                            </div>
-                            <div class="form-group field-view_url ">
-                                <label class="control-label col-xs-12 col-sm-2"><label for="id_view_url">View url:</label></label>
-                                <div class="form-column widget-AdminTextInputWidget col-xs-12 col-sm-8 col-md-6 col-lg-4">
-                                    <input class="vTextField form-control" id="id_view_url" maxlength="1024" name="view_url" type="text" value="%s">
-                                </div>
-                            </div>
-                            <div class="form-group field-icon_url ">
-                                <label class="control-label col-xs-12 col-sm-2"><label for="id_icon_url">Icon url:</label></label>
-                                <div class="form-column widget-AdminTextInputWidget col-xs-12 col-sm-8 col-md-6 col-lg-4">
-                                    <input class="vTextField form-control" id="id_icon_url" maxlength="1024" name="icon_url" type="text">
-                                </div>
-                            </div>
-                        </div>
-                    </fieldset>
-                </div>
-            </form>
-            <div class="form-buttons clearfix">
-                <button type="submit" class="btn btn-high btn-success" name="_save">Save</button>
-                <button type="submit" name="_continue" class=" btn btn-high btn-info">Save and continue editing</button>
-                <button type="submit" name="_addanother" class="btn btn-info">Save and add another</button>
-                <a href="delete/" class="text-error deletelink">Delete</a>
-            </div>
-        </div>
-        """ % (title, title, url)
-
-        t = template.Template(head_template + form + tail_template)
-
-        response_kwargs = {}
-        response_kwargs.setdefault('content_type', self.content_type)
-        return self.response_class(
-            request=request,
-            template=t,
-            **response_kwargs
-        )
diff --git a/xos/core/xoslib/.eslintignore b/xos/core/xoslib/.eslintignore
deleted file mode 100644
index aaad650..0000000
--- a/xos/core/xoslib/.eslintignore
+++ /dev/null
@@ -1,5 +0,0 @@
-node_modules/**/*.js
-xos-builder/node_modules/**/*.js
-static/js/vendor/**/*.js
-spec/helpers/*.js
-coverage/**/*
\ No newline at end of file
diff --git a/xos/core/xoslib/.yo-rc.json b/xos/core/xoslib/.yo-rc.json
deleted file mode 100644
index 33606db..0000000
--- a/xos/core/xoslib/.yo-rc.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "generator-xos": {
-    "name": "sampleView",
-    "folder": "ngXosViews"
-  }
-}
\ No newline at end of file
diff --git a/xos/core/xoslib/__init__.py b/xos/core/xoslib/__init__.py
deleted file mode 100644
index 65fdf5b..0000000
--- a/xos/core/xoslib/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-
diff --git a/xos/core/xoslib/dashboards/xosCeilometerDashboard.html b/xos/core/xoslib/dashboards/xosCeilometerDashboard.html
deleted file mode 100644
index 3462956..0000000
--- a/xos/core/xoslib/dashboards/xosCeilometerDashboard.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta name="viewport" content="width=device-width, initial-scale=1, max-scale=1">
-<!-- browserSync -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosCeilometerDashboard.css">
-<!-- endinject -->
-<div ng-app="xos.ceilometerDashboard" id="xosCeilometerDashboard">
-  <div ui-view ng-class="stateName"></div>
-</div>
-
-<!-- endjs -->
-
-<!-- inject:js -->
-<script src="/static/vendor/xosCeilometerDashboardVendor.js"></script>
-<script src="/static/js/xosCeilometerDashboard.js"></script>
-<!-- endinject -->
diff --git a/xos/core/xoslib/dashboards/xosContentProvider.html b/xos/core/xoslib/dashboards/xosContentProvider.html
deleted file mode 100644
index 98c0f23..0000000
--- a/xos/core/xoslib/dashboards/xosContentProvider.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosContentProvider.css">
-<!-- endinject -->
-
-<div ng-app="xos.contentProvider" id="xosContentProvider">
-    <div ui-view></div>
-</div>
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/js/xosContentProvider.js"></script>
-<!-- endinject -->
diff --git a/xos/core/xoslib/dashboards/xosDashboardManager.html b/xos/core/xoslib/dashboards/xosDashboardManager.html
deleted file mode 100644
index cb79918..0000000
--- a/xos/core/xoslib/dashboards/xosDashboardManager.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosDashboardManager.css">
-<!-- endinject -->
-
-<div ng-app="xos.dashboardManager" id="xosDashboardManager" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/vendor/xosDashboardManagerVendor.js"></script>
-<script src="/static/js/xosDashboardManager.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosDeveloper.html b/xos/core/xoslib/dashboards/xosDeveloper.html
deleted file mode 100644
index bd34345..0000000
--- a/xos/core/xoslib/dashboards/xosDeveloper.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosDeveloper.css">
-<!-- endinject -->
-
-<div ng-app="xos.developer" id="xosDeveloper" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/js/xosDeveloper.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosDiagnostic.html b/xos/core/xoslib/dashboards/xosDiagnostic.html
deleted file mode 100644
index 9dda760..0000000
--- a/xos/core/xoslib/dashboards/xosDiagnostic.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosDiagnostic.css">
-<!-- endinject -->
-
-<div ng-app="xos.diagnostic" id="xosDiagnostic">
-    <div ui-view></div>
-</div>
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/js/xosDiagnostic.js"></script>
-<!-- endinject -->
diff --git a/xos/core/xoslib/dashboards/xosEcordTopology.html b/xos/core/xoslib/dashboards/xosEcordTopology.html
deleted file mode 100644
index f8a4363..0000000
--- a/xos/core/xoslib/dashboards/xosEcordTopology.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosEcordTopology.css">
-<!-- endinject -->
-
-<div ng-app="xos.ecordTopology" id="xosEcordTopology" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/js/vendor/xosEcordTopologyVendor.js"></script>
-<script src="/static/js/xosEcordTopology.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosGlobalXos.html b/xos/core/xoslib/dashboards/xosGlobalXos.html
deleted file mode 100644
index 9257a9b..0000000
--- a/xos/core/xoslib/dashboards/xosGlobalXos.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosGlobalXos.css">
-<!-- endinject -->
-
-<div ng-app="xos.globalXos" id="xosGlobalXos" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/vendor/xosGlobalXosVendor.js"></script>
-<script src="/static/js/xosGlobalXos.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosHpc.html b/xos/core/xoslib/dashboards/xosHpc.html
deleted file mode 100644
index 195b64a..0000000
--- a/xos/core/xoslib/dashboards/xosHpc.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosHpc.css">
-<!-- endinject -->
-
-<div ng-app="xos.hpc" id="xosHpc" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/js/xosHpc.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosMcord-slicing.html b/xos/core/xoslib/dashboards/xosMcord-slicing.html
deleted file mode 100644
index 10203fc..0000000
--- a/xos/core/xoslib/dashboards/xosMcord-slicing.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosMcord-slicing.css">
-<!-- endinject -->
-
-<div ng-app="xos.mcord-slicing" id="xosMcord-slicing" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/vendor/xosMcord-slicingVendor.js"></script>
-<script src="/static/js/xosMcord-slicing.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosMcordTopology.html b/xos/core/xoslib/dashboards/xosMcordTopology.html
deleted file mode 100644
index 9e6a1f9..0000000
--- a/xos/core/xoslib/dashboards/xosMcordTopology.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosMcordTopology.css">
-<!-- endinject -->
-
-<div ng-app="xos.mcordTopology" id="xosMcordTopology" class="container-fluid">
-    <div ui-view></div>
-</div>
-
-
-<!-- inject:js -->
-<script src="/static/vendor/xosMcordTopologyVendor.js"></script>
-<script src="/static/js/xosMcordTopology.js"></script>
-<!-- endinject -->
diff --git a/xos/core/xoslib/dashboards/xosOpenVPNDashboard.html b/xos/core/xoslib/dashboards/xosOpenVPNDashboard.html
deleted file mode 100644
index cb34b7f..0000000
--- a/xos/core/xoslib/dashboards/xosOpenVPNDashboard.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosOpenVPNDashboard.css">
-<!-- endinject -->
-
-<div ng-app="xos.openVPNDashboard" id="xosOpenVPNDashboard">
-    <div ui-view></div>
-</div>
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/js/xosOpenVPNDashboard.js"></script>
-<!-- endinject -->
diff --git a/xos/core/xoslib/dashboards/xosServiceGrid.html b/xos/core/xoslib/dashboards/xosServiceGrid.html
deleted file mode 100644
index 46e645d..0000000
--- a/xos/core/xoslib/dashboards/xosServiceGrid.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosServiceGrid.css">
-<!-- endinject -->
-
-<div ng-app="xos.serviceGrid" id="xosServiceGrid" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/vendor/xosServiceGridVendor.js"></script>
-<script src="/static/js/xosServiceGrid.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosSubscribers.html b/xos/core/xoslib/dashboards/xosSubscribers.html
deleted file mode 100644
index 7032ad0..0000000
--- a/xos/core/xoslib/dashboards/xosSubscribers.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosSubscribers.css">
-<!-- endinject -->
-
-<div ng-app="xos.subscribers" id="xosSubscribers" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/js/xosSubscribers.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosSynchronizerNotifier.html b/xos/core/xoslib/dashboards/xosSynchronizerNotifier.html
deleted file mode 100644
index 9574bf4..0000000
--- a/xos/core/xoslib/dashboards/xosSynchronizerNotifier.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosSynchronizerNotifier.css">
-<!-- endinject -->
-
-<div id="xosSynchronizerNotifier">
-  <sync-status></sync-status>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/js/xosSynchronizerNotifier.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosTenant.html b/xos/core/xoslib/dashboards/xosTenant.html
deleted file mode 100644
index 180ce7e..0000000
--- a/xos/core/xoslib/dashboards/xosTenant.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosTenant.css">
-<!-- endinject -->
-
-
-<div ng-app="xos.tenant" id="xosTenant" class="container-fluid">
-   <div ui-view></div>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/js/xosTenant.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosTruckroll.html b/xos/core/xoslib/dashboards/xosTruckroll.html
deleted file mode 100644
index 4288a00..0000000
--- a/xos/core/xoslib/dashboards/xosTruckroll.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosTruckroll.css">
-<!-- endinject -->
-
-<div ng-app="xos.truckroll" id="xosTruckroll" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/js/xosTruckroll.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/dashboards/xosUITutorial.html b/xos/core/xoslib/dashboards/xosUITutorial.html
deleted file mode 100644
index f5ce322..0000000
--- a/xos/core/xoslib/dashboards/xosUITutorial.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<!-- browserSync -->
-
-<!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosUITutorial.css">
-<!-- endinject -->
-
-<div ng-app="xos.UITutorial" id="xosUITutorial" class="container-fluid">
-  <div ui-view></div>
-</div>
-
-
-<!-- endjs -->
-<!-- inject:js -->
-<script src="/static/vendor/xosUITutorialVendor.js"></script>
-<script src="/static/js/xosUITutorial.js"></script>
-<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/jsdoc.conf.json b/xos/core/xoslib/jsdoc.conf.json
deleted file mode 100644
index 3352b79..0000000
--- a/xos/core/xoslib/jsdoc.conf.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "tags": {
-    "allowUnknownTags": true
-  },
-  "plugins": ["plugins/markdown"],
-  "templates": {
-    "cleverLinks": false,
-    "monospaceLinks": false,
-    "dateFormat": "ddd MMM Do YYYY",
-    "outputSourceFiles": true,
-    "outputSourcePath": true,
-    "systemName": "XOS Lib",
-    "footer": "",
-    "copyright": "DocStrap Copyright © 2012-2014 The contributors to the JSDoc3 and DocStrap projects.",
-    "navType": "vertical",
-    "theme": "cosmo",
-    "linenums": true,
-    "collapseSymbols": false,
-    "inverseNav": true,
-    "highlightTutorialCode": true,
-    "protocol": "html://"
-  },
-  "markdown": {
-    "parser": "gfm",
-    "hardwrap": true
-  },
-  "opts": {
-    "template": "./node_modules/ink-docstrap/template/"
-  }
-}
diff --git a/xos/core/xoslib/karma.conf.js b/xos/core/xoslib/karma.conf.js
deleted file mode 100644
index ce986db..0000000
--- a/xos/core/xoslib/karma.conf.js
+++ /dev/null
@@ -1,121 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: [
-      'static/js/vendor/jquery-1.11.3.js',
-      'static/js/vendor/underscore-min.js',
-      'static/js/vendor/backbone.js',
-      'static/js/vendor/backbone.wreqr.js',
-      'static/js/vendor/backbone.babysitter.js',
-      'static/js/vendor/backbone.marionette.js',
-      'static/js/vendor/backbone.syphon.js',
-      'static/js/xoslib/*.js',
-
-      'spec/helpers/jasmine-jquery.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-
-      'spec/**/*.html',
-
-      //ng stuff
-      // 'static/js/xosContentProvider.js'
-    ],
-
-
-    // list of files to exclude
-    exclude: [
-      // '**/xos-utils.test.js', //skip this test, useful in dev, comment before commit
-      // '**/xos-backbone.test.js',
-      // '**/xoslib/**/*.js'
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'spec/**/*.test.js': ['babel'],
-      'static/js/xoslib/*.js': ['coverage'],
-      'static/js/*.js': ['coverage']
-    },
-
-    ngHtml2JsPreprocessor: {
-      prependPrefix: '../../', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    coverageReporter: {
-      type: 'html',
-      dir: 'coverage/'
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha', 'coverage'],
-
-
-    // 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
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/xos/core/xoslib/methods/__init__.py b/xos/core/xoslib/methods/__init__.py
deleted file mode 100644
index bf52612..0000000
--- a/xos/core/xoslib/methods/__init__.py
+++ /dev/null
@@ -1,75 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from django.views.generic import View
-from django.conf.urls import patterns, url
-from rest_framework.routers import DefaultRouter
-import os, sys
-import inspect
-import importlib
-
-# XXX based on core/dashboard/views/__init__.py
-
-# Find all modules in the current directory that have descendents of the View
-# object, and add them as globals to this module. Also, build up a list of urls
-# based on the "url" field of the view classes.
-
-urlpatterns=[]
-
-sys_path_save = sys.path
-try:
-    # __import__() and importlib.import_module() both import modules from
-    # sys.path. So we make sure that the path where we can find the views is
-    # the first thing in sys.path.
-    view_dir = os.path.dirname(os.path.abspath(__file__))
-    sys.path = [view_dir] + sys.path
-    view_urls = []
-    for fn in os.listdir(view_dir):
-        pathname = os.path.join(view_dir,fn)
-        if os.path.isfile(pathname) and fn.endswith(".py") and (fn!="__init__.py"):
-            module = __import__(fn[:-3])
-            for classname in dir(module):
-                c = getattr(module, classname, None)
-
-                if inspect.isclass(c) and issubclass(c, View) and (classname not in globals()):
-                    globals()[classname] = c
-
-                    method_kind = getattr(c, "method_kind", None)
-                    method_name = getattr(c, "method_name", None)
-                    if method_kind and method_name:
-                        view_urls.append( (method_kind, method_name, classname, c) )
-
-    for view_url in view_urls:
-        if view_url[0] == "list":
-           urlpatterns.append(url(r'^' + view_url[1] + '/$',  view_url[3].as_view(), name=view_url[1]+'list'))
-        elif view_url[0] == "detail":
-           urlpatterns.append(url(r'^' + view_url[1] + '/(?P<pk>[a-zA-Z0-9\-]+)/$',  view_url[3].as_view(), name=view_url[1]+'detail'))
-        elif view_url[0] == "viewset":
-           viewset = view_url[3]
-
-           urlpatterns.extend(viewset.get_urlpatterns())
-
-           #urlpatterns.append(url(r'^' + view_url[1] + '/$', viewset.as_view({'get': 'list'}), name=view_url[1]+'list'))
-           #urlpatterns.append(url(r'^' + view_url[1] + '/(?P<pk>[a-zA-Z0-9\-]+)/$', viewset.as_view({'get': 'retrieve', 'put': 'update', 'post': 'create', 'delete': 'destroy', 'patch': 'partial_update'}), name=view_url[1]+'detail'))
-           #urlpatterns.extend(
-
-           #router = DefaultRouter()
-           #router.register(r'^' + view_url[1], view_url[3], base_name="foo")
-           #urlpatterns.extend(router.urls)
-           #urlpatterns.append(url(r'^' + view_url[1], view_url[3]))
-
-finally:
-    sys.path = sys_path_save
diff --git a/xos/core/xoslib/methods/loginview.py b/xos/core/xoslib/methods/loginview.py
deleted file mode 100644
index ce64ec5..0000000
--- a/xos/core/xoslib/methods/loginview.py
+++ /dev/null
@@ -1,116 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework.views import APIView
-from core.models import *
-from django.forms import widgets
-from django.forms.models import model_to_dict
-from django.core.exceptions import PermissionDenied
-from django.contrib.contenttypes.models import ContentType
-import json
-import socket
-import time
-import django.middleware.csrf
-from xos.exceptions import *
-from django.contrib.sessions.backends.db import SessionStore
-from django.contrib.sessions.models import Session
-from django.contrib.auth import authenticate
-
-def date_handler(obj):
-    return obj.isoformat() if hasattr(obj, 'isoformat') else obj
-
-def serialize_user(model):
-    serialized = model_to_dict(model)
-    del serialized['timezone']
-    del serialized['password']
-    return json.dumps(serialized, default=date_handler)
-
-class LoginView(APIView):
-    method_kind = "list"
-    method_name = "login"
-
-    def do_login(self, request, username, password):
-        if not username:
-            raise XOSMissingField("No username specified")
-
-        if not password:
-            raise XOSMissingField("No password specified")
-
-        u=authenticate(username=username, password=password)
-        if not u:
-            raise PermissionDenied("Failed to authenticate user %s" % username)
-
-        auth = {"username": username, "password": password}
-        request.session["auth"] = auth
-        request.session['_auth_user_id'] = u.pk
-        request.session['_auth_user_backend'] = u.backend
-        request.session.save()
-
-        return Response({
-            "xoscsrftoken": django.middleware.csrf.get_token(request),
-            "xossessionid": request.session.session_key,
-            "user": serialize_user(u)
-        })
-
-    def get(self, request, format=None):
-        username = request.GET.get("username", None)
-        password = request.GET.get("password", None)
-
-        return self.do_login(request, username, password)
-
-    def post(self, request, format=None):
-        username = request.data.get("username", None)
-        password = request.data.get("password", None)
-
-        return self.do_login(request, username, password)
-
-class LogoutView(APIView):
-    method_kind = "list"
-    method_name = "logout"
-
-    def do_logout(self, request, sessionid):
-        if not sessionid:
-            raise XOSMissingField("No xossessionid specified")
-
-        # Make sure the session exists. This prevents us from accidentally
-        # creating empty sessions with SessionStore()
-        session = Session.objects.filter(session_key=sessionid)
-        if not session:
-            # session doesn't exist
-            raise PermissionDenied("Session does not exist")
-
-        session = SessionStore(session_key=sessionid)
-        if "auth" in session:
-            del session["auth"]
-            session.save()
-        if "_auth_user_id" in session:
-            del session["_auth_user_id"]
-            session.save()
-
-        return Response("Logged Out")
-
-    def get(self, request, format=None):
-        sessionid = request.GET.get("xossessionid", None)
-        return self.do_logout(request, sessionid)
-
-    def post(self, request, format=None):
-        sessionid = request.data.get("xossessionid", None)
-        return self.do_logout(request, sessionid)
diff --git a/xos/core/xoslib/methods/plus.py b/xos/core/xoslib/methods/plus.py
deleted file mode 100644
index 6b9f41c..0000000
--- a/xos/core/xoslib/methods/plus.py
+++ /dev/null
@@ -1,67 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework import generics
-from rest_framework import serializers
-from rest_framework.response import Response
-from rest_framework import status
-from xos.apibase import XOSRetrieveUpdateDestroyAPIView, XOSListCreateAPIView
-from rest_framework import viewsets
-from django.conf.urls import patterns, url
-
-""" PlusSerializerMixin
-
-    Implements Serializer fields that are common to all OpenCloud objects. For
-    example, stuff related to backend fields.
-"""
-
-class PlusSerializerMixin():
-    backendIcon = serializers.SerializerMethodField("getBackendIcon")
-    backendHtml = serializers.SerializerMethodField("getBackendHtml")
-
-    # This will cause a descendant class to pull in the methods defined
-    # above. See rest_framework/serializers.py: _get_declared_fields().
-    base_fields = {"backendIcon": backendIcon, "backendHtml": backendHtml}
-    # Rest_framework 3.0 uses _declared_fields instead of base_fields
-    _declared_fields = {"backendIcon": backendIcon, "backendHtml": backendHtml}
-
-    def getBackendIcon(self, obj):
-        return obj.getBackendIcon()
-
-    def getBackendHtml(self, obj):
-        return obj.getBackendHtml()
-
-class XOSViewSet(viewsets.ModelViewSet):
-    @classmethod
-    def detail_url(self, pattern, viewdict, name):
-        return url(r'^' + self.method_name + r'/(?P<pk>[a-zA-Z0-9\-]+)/' + pattern,
-                   self.as_view(viewdict),
-                   name=self.base_name+"_"+name)
-
-    @classmethod
-    def list_url(self, pattern, viewdict, name):
-        return url(r'^' + self.method_name + r'/' + pattern,
-                   self.as_view(viewdict),
-                   name=self.base_name+"_"+name)
-
-    @classmethod
-    def get_urlpatterns(self):
-        patterns = []
-
-        patterns.append(url(r'^' + self.method_name + '/$', self.as_view({'get': 'list'}), name=self.base_name+'_list'))
-        patterns.append(url(r'^' + self.method_name + '/(?P<pk>[a-zA-Z0-9\-]+)/$', self.as_view({'get': 'retrieve', 'put': 'update', 'post': 'update', 'delete': 'destroy', 'patch': 'partial_update'}), name=self.base_name+'_detail'))
-
-        return patterns
diff --git a/xos/core/xoslib/methods/portforwarding.py b/xos/core/xoslib/methods/portforwarding.py
deleted file mode 100644
index eef1e39..0000000
--- a/xos/core/xoslib/methods/portforwarding.py
+++ /dev/null
@@ -1,75 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework.views import APIView
-from core.models import *
-from django.forms import widgets
-from django.core.exceptions import PermissionDenied
-from xos.exceptions import XOSNotFound
-
-class PortForwardingList(APIView):
-    method_kind = "list"
-    method_name = "portforwarding"
-
-    def get(self, request, format=None):
-        ports=[]
-        for port in self.get_queryset().all():
-            if port.network and port.network.ports and port.instance and port.instance.node and port.ip:
-                ports.append( {"id": port.id,
-                               "ip": port.ip,
-                               "ports": port.network.ports,
-                               "hostname": port.instance.node.name} )
-
-        return Response(ports)
-
-    def get_queryset(self):
-        queryset = queryset=Port.objects.all()
-
-        node_name = self.request.query_params.get('node_name', None)
-        if node_name is not None:
-            queryset = queryset.filter(instance__node__name = node_name)
-
-        return queryset
-
-class PortForwardingDetail(APIView):
-    method_kind = "detail"
-    method_name = "portforwarding"
-
-    def get(self, request, format=None, pk=0):
-        ports = self.get_queryset().filter(id=pk)
-        if not ports:
-            raise XOSNotFound("didn't find port for port_id %s" % pk)
-
-        port = ports[0]
-        return Response( {"id": port.id,
-                          "ip": port.ip,
-                          "ports": port.network.ports,
-                          "hostname": port.instance.node.name} )
-
-    def get_queryset(self):
-        queryset = queryset=Port.objects.all()
-
-        node_name = self.request.query_params.get('node_name', None)
-        if node_name is not None:
-            queryset = queryset.filter(instance__node__name = node_name)
-
-        return queryset
-
diff --git a/xos/core/xoslib/methods/sliceplus.py b/xos/core/xoslib/methods/sliceplus.py
deleted file mode 100644
index 4a0d5f8..0000000
--- a/xos/core/xoslib/methods/sliceplus.py
+++ /dev/null
@@ -1,134 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from core.models import *
-from django.forms import widgets
-from core.xoslib.objects.sliceplus import SlicePlus
-from plus import PlusSerializerMixin
-from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
-import json
-
-if hasattr(serializers, "ReadOnlyField"):
-    # rest_framework 3.x
-    IdField = serializers.ReadOnlyField
-    WritableField = serializers.Field
-    DictionaryField = serializers.DictField
-    ListField = serializers.ListField
-else:
-    # rest_framework 2.x
-    IdField = serializers.Field
-    WritableField = serializers.WritableField
-
-    class DictionaryField(WritableField):   # note: maybe just Field in rest_framework 3.x instead of WritableField
-        def to_representation(self, obj):
-            return json.dumps(obj)
-
-        def to_internal_value(self, data):
-            return json.loads(data)
-
-    class ListField(WritableField):   # note: maybe just Field in rest_framework 3.x instead of WritableField
-        def to_representation(self, obj):
-            return json.dumps(obj)
-
-        def to_internal_value(self, data):
-            return json.loads(data)
-
-class SlicePlusIdSerializer(serializers.ModelSerializer, PlusSerializerMixin):
-        id = IdField()
-
-        sliceInfo = serializers.SerializerMethodField("getSliceInfo")
-        humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-        network_ports = serializers.CharField(required=False)
-        site_allocation = DictionaryField(required=False)
-        site_ready = DictionaryField(required=False)
-        users = ListField(required=False)
-        user_names = ListField(required=False) # readonly = True ?
-        current_user_can_see = serializers.SerializerMethodField("getCurrentUserCanSee")
-
-        def getCurrentUserCanSee(self, slice):
-            # user can 'see' the slice if he is the creator or he has a role
-            current_user = self.context['request'].user
-            if (slice.creator and slice.creator==current_user):
-                return True;
-            return (len(slice.getSliceInfo(current_user)["roles"]) > 0)
-
-        def getSliceInfo(self, slice):
-            return slice.getSliceInfo(user=self.context['request'].user)
-
-        def getHumanReadableName(self, obj):
-            return str(obj)
-
-        networks = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
-
-        class Meta:
-            model = SlicePlus
-            fields = ('humanReadableName', 'id','created','updated','enacted','name','enabled','omf_friendly','description','slice_url','site','max_instances','service','network','mount_data_sets',
-                      'default_image', 'default_flavor',
-                      'serviceClass','creator','networks','sliceInfo','network_ports','backendIcon','backendHtml','site_allocation','site_ready','users',"user_names","current_user_can_see")
-
-class SlicePlusList(XOSListCreateAPIView):
-    queryset = SlicePlus.objects.select_related().all()
-    serializer_class = SlicePlusIdSerializer
-
-    method_kind = "list"
-    method_name = "slicesplus"
-
-    def get_queryset(self):
-        current_user_can_see = self.request.query_params.get('current_user_can_see', False)
-        site_filter = self.request.query_params.get('site', False)
-
-        if (not self.request.user.is_authenticated()):
-            raise XOSPermissionDenied("You must be authenticated in order to use this API")
-
-        slices = SlicePlus.select_by_user(self.request.user)
-
-        if (site_filter and not current_user_can_see):
-            slices = SlicePlus.objects.filter(site=site_filter)
-
-        # If current_user_can_see is set, then filter the queryset to return
-        # only those slices that the user is either creator or has privilege
-        # on.
-        if (current_user_can_see):
-            slice_ids = []
-            for slice in slices:
-                if (self.request.user == slice.creator) or (len(slice.getSliceInfo(self.request.user)["roles"]) > 0):
-                    slice_ids.append(slice.id)
-            if (site_filter):
-                slices = SlicePlus.objects.filter(id__in=slice_ids, site=site_filter)
-            else:
-                slices = SlicePlus.objects.filter(id__in=slice_ids)
-
-        return slices
-
-
-class SlicePlusDetail(XOSRetrieveUpdateDestroyAPIView):
-    queryset = SlicePlus.objects.select_related().all()
-    serializer_class = SlicePlusIdSerializer
-
-    method_kind = "detail"
-    method_name = "slicesplus"
-
-    def get_queryset(self):
-        if (not self.request.user.is_authenticated()):
-            raise XOSPermissionDenied("You must be authenticated in order to use this API")
-        return SlicePlus.select_by_user(self.request.user)
-
-
diff --git a/xos/core/xoslib/methods/sshkeys.py b/xos/core/xoslib/methods/sshkeys.py
deleted file mode 100644
index f873518..0000000
--- a/xos/core/xoslib/methods/sshkeys.py
+++ /dev/null
@@ -1,71 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework.views import APIView
-from core.models import *
-from django.forms import widgets
-from django.core.exceptions import PermissionDenied
-from xos.exceptions import XOSNotFound
-
-class SSHKeyList(APIView):
-    method_kind = "list"
-    method_name = "sshkeys"
-
-    def get(self, request, format=None):
-        instances=[]
-        for instance in self.get_queryset().all():
-            if instance.instance_id:
-                instances.append( {"id": instance.instance_id,
-                                   "public_keys": instance.get_public_keys(),
-                                   "node_name": instance.node.name } )
-
-        return Response(instances)
-
-    def get_queryset(self):
-        queryset = queryset=Instance.objects.all()
-
-        node_name = self.request.query_params.get('node_name', None)
-        if node_name is not None:
-            queryset = queryset.filter(node__name = node_name)
-
-        return queryset
-
-class SSHKeyDetail(APIView):
-    method_kind = "detail"
-    method_name = "sshkeys"
-
-    def get(self, request, format=None, pk=0):
-        instances = self.get_queryset().filter(instance_id=pk)
-        if not instances:
-            raise XOSNotFound("didn't find instance for instance %s" % pk)
-        return Response( [ {"id": instances[0].instance_id,
-                            "public_keys": instances[0].get_public_keys(),
-                            "node_name": instances[0].node.name } ])
-
-    def get_queryset(self):
-        queryset = queryset=Instance.objects.all()
-
-        node_name = self.request.query_params.get('node_name', None)
-        if node_name is not None:
-            queryset = queryset.filter(node__name = node_name)
-
-        return queryset
-
diff --git a/xos/core/xoslib/methods/tenantview.py b/xos/core/xoslib/methods/tenantview.py
deleted file mode 100644
index 121b946..0000000
--- a/xos/core/xoslib/methods/tenantview.py
+++ /dev/null
@@ -1,134 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework.views import APIView
-from core.models import *
-from django.forms import widgets
-from services.syndicate_storage.models import Volume
-from django.core.exceptions import PermissionDenied
-
-# This REST API endpoint contains a bunch of misc information that the
-# tenant view needs to display
-
-def getTenantViewDict(user):
-    # compute blessed_deployments by looking for the tenant view, and seeing what
-    # deployments are attached to it.
-    blessed_deployments=[]
-    for dash in DashboardView.objects.all():
-        if (dash.url=="template:xosTenant"):
-            for deployment in dash.deployments.all():
-                if deployment not in blessed_deployments:
-                    blessed_deployments.append(deployment)
-
-    blessed_deployment_ids = [d.id for d in blessed_deployments]
-
-    blessed_sites = []
-    for site in Site.objects.all():
-        good=False
-        for deployment in site.deployments.all():
-            if deployment.id in blessed_deployment_ids:
-                # only bless sites that have at least one node in the deployment
-                sitedeployments = SiteDeployment.objects.filter(site=site, deployment=deployment)
-                for sd in sitedeployments.all():
-                    if sd.nodes.count()>0:
-                        good=True
-        if good:
-            blessed_sites.append(site)
-
-    blessed_images=[]
-    for image in Image.objects.all():
-        good = False
-        for deployment in image.deployments.all():
-            if deployment.id in blessed_deployment_ids:
-                 good=True
-        if good:
-            blessed_images.append(image)
-
-    blessed_flavors=[]
-    for flavor in Flavor.objects.all():
-        good = False
-        for deployment in flavor.deployments.all():
-            if deployment.id in blessed_deployment_ids:
-                 good=True
-        if good:
-            blessed_flavors.append(flavor)
-
-    volumes=[]
-    for volume in Volume.objects.all():
-        if not volume.private:
-            volumes.append(volume)
-
-    site_users=[]
-    user_site_roles=[]
-    user_site_id=None
-    user_site_login_base=None
-    if not user.site:
-        pass # this is probably an error
-    else:
-        user_site_id = user.site.id
-        user_site_login_base = user.site.login_base
-        for auser in user.site.users.all():
-            site_users.append(auser)
-
-        for priv in user.site.siteprivileges.filter(user=user):
-            user_site_roles.append(priv.role.role)
-
-    blessed_service_classes = [ServiceClass.objects.get(name="Best Effort")]
-
-    return {"id": 0,
-            "blessed_deployment_names": [deployment.name for deployment in blessed_deployments],
-            "blessed_deployments": [deployment.id for deployment in blessed_deployments],
-            "blessed_site_names": [site.name for site in blessed_sites],
-            "blessed_sites": [site.id for site in blessed_sites],
-            "blessed_image_names": [image.name for image in blessed_images],
-            "blessed_images": [image.id for image in blessed_images],
-            "blessed_flavor_names": [flavor.name for flavor in blessed_flavors],
-            "blessed_flavors": [flavor.id for flavor in blessed_flavors],
-            "blessed_service_class_names": [serviceclass.name for serviceclass in blessed_service_classes],
-            "blessed_service_classes": [serviceclass.id for serviceclass in blessed_service_classes],
-            "public_volume_names": [volume.name for volume in volumes],
-            "public_volumes": [volume.id for volume in volumes],
-            "current_user_site_id": user_site_id,
-            "current_user_login_base": user_site_login_base,
-            "current_user_site_users": [auser.id for auser in site_users],
-            "current_user_site_user_names": [auser.email for auser in site_users],
-            "current_user_can_create_slice": user.is_admin or ("pi" in user_site_roles) or ("admin" in user_site_roles),
-            "current_user_id": user.id,
-            }
-
-class TenantList(APIView):
-    method_kind = "list"
-    method_name = "tenantview"
-
-    def get(self, request, format=None):
-        if (not request.user.is_authenticated()):
-            raise PermissionDenied("You must be authenticated in order to use this API")
-        return Response( getTenantViewDict(request.user) )
-
-class TenantDetail(APIView):
-    method_kind = "detail"
-    method_name = "tenantview"
-
-    def get(self, request, format=None, pk=0):
-        if (not request.user.is_authenticated()):
-            raise PermissionDenied("You must be authenticated in order to use this API")
-        return Response( [getTenantViewDict(request.user)] )
-
diff --git a/xos/core/xoslib/objects/__init__.py b/xos/core/xoslib/objects/__init__.py
deleted file mode 100644
index 65fdf5b..0000000
--- a/xos/core/xoslib/objects/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-
diff --git a/xos/core/xoslib/objects/plus.py b/xos/core/xoslib/objects/plus.py
deleted file mode 100644
index 42b200f..0000000
--- a/xos/core/xoslib/objects/plus.py
+++ /dev/null
@@ -1,44 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-""" PlusObjectMixin
-
-    Implements fields that are common to all OpenCloud objects. For example,
-    stuff related to backend icons.
-"""
-
-ICON_URLS = {"success": "/static/admin/img/icon_success.gif",
-            "clock": "/static/admin/img/icon_clock.gif",
-            "error": "/static/admin/img/icon_error.gif"}
-
-
-
-class PlusObjectMixin:
-    def getBackendIcon(self):
-        (icon, tooltip) = self.get_backend_icon()
-        icon_url = ICON_URLS.get(icon, "unknown")
-        return icon_url
-
-    def getBackendHtml(self):
-        (icon, tooltip) = self.get_backend_icon()
-        icon_url = ICON_URLS.get(icon, "unknown")
-
-        if tooltip:
-            return '<span title="%s"><img src="%s"></span>' % (tooltip, icon_url)
-        else:
-            return '<img src="%s">' % icon_url
-
-
diff --git a/xos/core/xoslib/objects/sliceplus.py b/xos/core/xoslib/objects/sliceplus.py
deleted file mode 100644
index fd53c34..0000000
--- a/xos/core/xoslib/objects/sliceplus.py
+++ /dev/null
@@ -1,309 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from core.models import Slice, Privilege, SliceRole, Instance, Site, Node, User
-from plus import PlusObjectMixin
-from operator import itemgetter, attrgetter
-from rest_framework.exceptions import APIException
-
-class SlicePlus(Slice, PlusObjectMixin):
-    class Meta:
-        proxy = True
-
-    def __init__(self, *args, **kwargs):
-        super(SlicePlus, self).__init__(*args, **kwargs)
-        self._update_users = None
-        self._sliceInfo = None
-        self.getSliceInfo()
-        self._site_allocation = self._sliceInfo["sitesUsed"]
-        self._initial_site_allocation = self._site_allocation
-        self._network_ports = self._sliceInfo["networkPorts"]
-        self._initial_network_ports = self._network_ports
-
-    def getSliceInfo(self, user=None):
-        if not self._sliceInfo:
-            used_sites = {}
-            ready_sites = {}
-            used_deployments = {}
-            instanceCount = 0
-            sshCommands = []
-            for instance in self.instances.all():
-                site = instance.node.site_deployment.site
-                deployment = instance.node.site_deployment.deployment
-                used_sites[site.name] = used_sites.get(site.name, 0) + 1
-                used_deployments[deployment.name] = used_deployments.get(deployment.name, 0) + 1
-                instanceCount = instanceCount + 1
-
-                sshCommand = instance.get_ssh_command()
-                if sshCommand:
-                    sshCommands.append(sshCommand)
-
-                    ready_sites[site.name] = ready_sites.get(site.name, 0) + 1
-
-            users = {}
-            for priv in Privilege.objects.filter(object_id=self.id, object_type='Slice', accessor_type='User'):
-                if not (priv.accessor_id in users.keys()):
-                    user = User.objects.get(pk=priv.accessor_id)
-                    users[priv.accessor_id] = {"name": user.email, "id": user.id, "roles": []}
-                users[priv.accessor_id]["roles"].append(priv.permission)
-
-            # XXX this assumes there is only one network that can have ports bound
-            # to it for a given slice. This is intended for the tenant view, which
-            # will obey this field.
-            networkPorts = ""
-            for networkSlice in self.networkslices.all():
-                network = networkSlice.network
-                if (network.owner.id != self.id):
-                    continue
-                if network.ports:
-                    networkPorts = network.ports
-
-            self._sliceInfo= {"sitesUsed": used_sites,
-                    "sitesReady": ready_sites,
-                    "deploymentsUsed": used_deployments,
-                    "instanceCount": instanceCount,
-                    "siteCount": len(used_sites.keys()),
-                    "users": users,
-                    "roles": [],
-                    "sshCommands": sshCommands,
-                    "networkPorts": networkPorts}
-
-        if user:
-            auser = self._sliceInfo["users"].get(user.id, None)
-            if (auser):
-                self._sliceInfo["roles"] = auser["roles"]
-
-        return self._sliceInfo
-
-    @property
-    def site_ready(self):
-        return self.getSliceInfo()["sitesReady"]
-
-    @site_ready.setter
-    def site_ready(self, value):
-        pass
-
-    @property
-    def site_allocation(self):
-        return self._site_allocation
-
-    @site_allocation.setter
-    def site_allocation(self, value):
-        self._site_allocation = value
-
-    @property
-    def user_names(self):
-        return [user["name"] for user in self.getSliceInfo()["users"].values()]
-
-    @user_names.setter
-    def user_names(self, value):
-        pass # it's read-only
-
-    @property
-    def users(self):
-        return [user["id"] for user in self.getSliceInfo()["users"].values()]
-
-    @users.setter
-    def users(self, value):
-        self._update_users = value
-        #print "XXX set users to", value
-
-    @property
-    def network_ports(self):
-        return self._network_ports
-
-    @network_ports.setter
-    def network_ports(self, value):
-        self._network_ports = value
-        #print "XXX set networkPorts to", value
-
-    @staticmethod
-    def select_by_user(user):
-        if user.is_admin:
-            qs = SlicePlus.objects.all()
-        else:
-            slice_ids = [sp.slice.id for sp in Privilege.objects.filter(accessor_type='User',accessor_id=user.id, object_type='Slice')]
-            qs = SlicePlus.objects.filter(id__in=slice_ids)
-        return qs
-
-    def get_node_allocation(self, siteList):
-        siteIDList = [site.id for site in siteList]
-        nodeList = []
-        for node in Node.objects.all():
-            if (node.site_deployment.site.id in siteIDList):
-                node.instanceCount = 0
-                for instance in node.instances.all():
-                     if instance.slice.id == self.id:
-                         node.instanceCount = node.instanceCount + 1
-                nodeList.append(node)
-        return nodeList
-
-    def save(self, *args, **kwargs):
-        if (not hasattr(self,"caller")) or self.caller==None:
-            raise APIException("no self.caller in SlicePlus.save")
-
-        updated_image = self.has_field_changed("default_image")
-        updated_flavor = self.has_field_changed("default_flavor")
-
-        super(SlicePlus, self).save(*args, **kwargs)
-
-        # try things out first
-
-        updated_sites = (self._site_allocation != self._initial_site_allocation) or updated_image or updated_flavor
-        if updated_sites:
-            self.save_site_allocation(noAct=True, reset=(updated_image or updated_flavor))
-
-        if self._update_users:
-            self.save_users(noAct=True)
-
-        if (self._network_ports != self._initial_network_ports):
-            self.save_network_ports(noAct=True)
-
-        # now actually save them
-
-        if updated_sites:
-            self.save_site_allocation(reset=(updated_image or updated_flavor))
-
-        if self._update_users:
-            self.save_users()
-
-        if (self._network_ports != self._initial_network_ports):
-            self.save_network_ports()
-
-    def save_site_allocation(self, noAct = False, reset=False):
-        print "save_site_allocation, reset=",reset
-
-        if (not self._site_allocation):
-            # Must be a instance that was just created, and has not site_allocation
-            # field.
-            return
-
-        all_slice_instances = self.instances.all()
-        for site_name in self._site_allocation.keys():
-            desired_allocation = self._site_allocation[site_name]
-
-            # make a list of the instances for this site
-            instances = []
-            for instance in all_slice_instances:
-                if instance.node.site_deployment.site.name == site_name:
-                    instances.append(instance)
-
-            # delete extra instances
-            while (reset and len(instances)>0) or (len(instances) > desired_allocation):
-                instance = instances.pop()
-                if (not noAct):
-                    print "deleting instance", instance
-                    instance.delete()
-                else:
-                    print "would delete instance", instance
-
-            # add more instances
-            if (len(instances) < desired_allocation):
-                site = Site.objects.get(name = site_name)
-                nodes = self.get_node_allocation([site])
-
-                if (not nodes):
-                    raise APIException(detail="no nodes in site %s" % site_name)
-
-                while (len(instances) < desired_allocation):
-                    # pick the least allocated node
-                    nodes = sorted(nodes, key=attrgetter("instanceCount"))
-                    node = nodes[0]
-
-                    instance = Instance(name=node.name,
-                            slice=self,
-                            node=node,
-                            image = self.default_image,
-                            flavor = self.default_flavor,
-                            creator = self.creator,
-                            deployment = node.site_deployment.deployment)
-                    instance.caller = self.caller
-                    instances.append(instance)
-                    if (not noAct):
-                        print "added instance", instance
-                        instance.save()
-                    else:
-                        print "would add instance", instance
-
-                    node.instanceCount = node.instanceCount + 1
-
-    def save_users(self, noAct = False):
-        new_users = self._update_users
-
-        try:
-            default_role = SliceRole.objects.get(role="access")
-        except:
-            default_role = SliceRole.objects.get(role="default")
-
-        slice_privs = Privilege.objects.filter(object_id=self.id, object_type='Slice', accessor_type='User')
-        slice_user_ids = [priv.accessor_id for priv in slice_privs]
-
-        for user_id in new_users:
-            if (user_id not in slice_user_ids):
-                priv = Privilege(object_id=self.id, accessor_id=user_id, permission='role:'+default_role, accessor_type='User', object_type='Slice')
-                priv.caller = self.caller
-                if (not noAct):
-                    priv.save()
-
-                print "added user id", user_id
-
-        for priv in slice_privs:
-             if (priv.role.id != default_role.id):
-                 # only mess with 'default' users; don't kill an admin
-                 continue
-
-             if (priv.user.id not in new_users):
-                 if (not noAct):
-                     priv.delete()
-
-                 print "deleted user id", user_id
-
-    def save_network_ports(self, noAct=False):
-        # First search for any network that already has a filled in 'ports'
-        # field. We'll assume there can only be one, so it must be the right
-        # one.
-        for networkSlice in self.networkslices.all():
-            network = networkSlice.network
-            if (network.owner.id != self.id):
-                continue
-            if network.ports:
-                network.ports = self._network_ports
-                network.caller = self.caller
-                if (not noAct):
-                    network.save()
-                return
-
-        # Now try a network that is a "NAT", since setting ports on a non-NAT
-        # network doesn't make much sense.
-        for networkSlice in self.networkslices.all():
-            network = networkSlice.network
-            if (network.owner.id != self.id):
-                continue
-            if network.template.translation=="NAT":
-                network.ports = self._network_ports
-                network.caller = self.caller
-                if (not noAct):
-                    network.save()
-                return
-
-        # uh oh, we didn't find a network
-
-        raise APIException(detail="No network was found that ports could be set on")
-
-
-
-
-
diff --git a/xos/core/xoslib/package.json b/xos/core/xoslib/package.json
deleted file mode 100644
index dd4ea4c..0000000
--- a/xos/core/xoslib/package.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-  "name": "xoslib",
-  "version": "0.0.0",
-  "description": "Add to the following in settings.py",
-  "main": "index.js",
-  "scripts": {
-    "pretest": "npm install",
-    "test": "karma start",
-    "lint": "eslint .",
-    "docs": "jsdoc static/js -r -c ./jsdoc.conf.json -d docs"
-  },
-  "author": "",
-  "license": "BSD-2-Clause",
-  "devDependencies": {
-    "eslint": "~1.6.0",
-    "eslint-config-defaults": "^7.0.1",
-    "ink-docstrap": "^0.5.2",
-    "jasmine-core": "~2.3.4",
-    "jsdoc": "^3.3.3",
-    "karma": "^0.13.14",
-    "karma-babel-preprocessor": "~5.2.2",
-    "karma-coverage": "^0.5.3",
-    "karma-jasmine": "~0.3.6",
-    "karma-mocha-reporter": "~1.1.1",
-    "karma-ng-html2js-preprocessor": "^0.2.0",
-    "karma-phantomjs-launcher": "~0.2.1",
-    "phantomjs": "~1.9.18",
-    "wiredep": "^3.0.0-beta"
-  },
-  "dependencies": {}
-}
diff --git a/xos/core/xoslib/spec/.eslintrc b/xos/core/xoslib/spec/.eslintrc
deleted file mode 100644
index eb98f18..0000000
--- a/xos/core/xoslib/spec/.eslintrc
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "ecmaFeatures": {
-    "blockBindings": true,
-    "forOf" : true,
-    "generators": true,
-    "destructuring": true,
-    "forOf": true,
-    "arrowFunctions": true,
-    "templateStrings": true,
-    "destructuring": true,
-    "forOf": true,
-    "arrowFunctions": true,
-    "templateStrings": true,
-    "generators": true
-  },
-  "env" : {
-    "browser": true,
-    "node": true,
-    "es6": true
-  },
-  "rules" : {
-    "quotes": [1, "single"],
-    "camelcase": [0],
-    "no-underscore-dangle": [0],
-    "eqeqeq": [1],
-    "no-alert": [1],
-    "no-unused-vars": [1],
-    "key-spacing": [2, {
-        "beforeColon": false,
-        "afterColon": true
-    }],
-    "indent": [2, 2],
-    "no-undef": [0],
-    "newline-after-var": [0]
-  },
-  "globals": {
-    "console": false,
-    "describe": false,
-    "xdescribe": false,
-    "it": false,
-    "xit": false,
-    "before": false,
-    "beforeEach": false,
-    "after": false,
-    "afterEach": false,
-    "expect": false,
-    "jasmine": false,
-    "spyOn": false
-  }
-}
diff --git a/xos/core/xoslib/spec/helpers/jasmine-jquery.js b/xos/core/xoslib/spec/helpers/jasmine-jquery.js
deleted file mode 100644
index 1d1ef7d3..0000000
--- a/xos/core/xoslib/spec/helpers/jasmine-jquery.js
+++ /dev/null
@@ -1,858 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/*!
-Jasmine-jQuery: a set of jQuery helpers for Jasmine tests.
-
-Version 2.1.1
-
-https://github.com/velesin/jasmine-jquery
-
-Copyright (c) 2010-2014 Wojciech Zawistowski, Travis Jeffery
-
-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 (root, factory) {
-     if (typeof module !== 'undefined' && module.exports) {
-        factory(root, root.jasmine, require('jquery'));
-    } else {
-        factory(root, root.jasmine, root.jQuery);
-    }
-}((function() {return this; })(), function (window, jasmine, $) { "use strict";
-
-  jasmine.spiedEventsKey = function (selector, eventName) {
-    return [$(selector).selector, eventName].toString()
-  }
-
-  jasmine.getFixtures = function () {
-    return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures()
-  }
-
-  jasmine.getStyleFixtures = function () {
-    return jasmine.currentStyleFixtures_ = jasmine.currentStyleFixtures_ || new jasmine.StyleFixtures()
-  }
-
-  jasmine.Fixtures = function () {
-    this.containerId = 'jasmine-fixtures'
-    this.fixturesCache_ = {}
-    this.fixturesPath = 'spec/javascripts/fixtures'
-  }
-
-  jasmine.Fixtures.prototype.set = function (html) {
-    this.cleanUp()
-    return this.createContainer_(html)
-  }
-
-  jasmine.Fixtures.prototype.appendSet= function (html) {
-    this.addToContainer_(html)
-  }
-
-  jasmine.Fixtures.prototype.preload = function () {
-    this.read.apply(this, arguments)
-  }
-
-  jasmine.Fixtures.prototype.load = function () {
-    this.cleanUp()
-    this.createContainer_(this.read.apply(this, arguments))
-  }
-
-  jasmine.Fixtures.prototype.appendLoad = function () {
-    this.addToContainer_(this.read.apply(this, arguments))
-  }
-
-  jasmine.Fixtures.prototype.read = function () {
-    var htmlChunks = []
-      , fixtureUrls = arguments
-
-    for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
-      htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]))
-    }
-
-    return htmlChunks.join('')
-  }
-
-  jasmine.Fixtures.prototype.clearCache = function () {
-    this.fixturesCache_ = {}
-  }
-
-  jasmine.Fixtures.prototype.cleanUp = function () {
-    $('#' + this.containerId).remove()
-  }
-
-  jasmine.Fixtures.prototype.sandbox = function (attributes) {
-    var attributesToSet = attributes || {}
-    return $('<div id="sandbox" />').attr(attributesToSet)
-  }
-
-  jasmine.Fixtures.prototype.createContainer_ = function (html) {
-    var container = $('<div>')
-    .attr('id', this.containerId)
-    .html(html)
-
-    $(document.body).append(container)
-    return container
-  }
-
-  jasmine.Fixtures.prototype.addToContainer_ = function (html){
-    var container = $(document.body).find('#'+this.containerId).append(html)
-
-    if (!container.length) {
-      this.createContainer_(html)
-    }
-  }
-
-  jasmine.Fixtures.prototype.getFixtureHtml_ = function (url) {
-    if (typeof this.fixturesCache_[url] === 'undefined') {
-      this.loadFixtureIntoCache_(url)
-    }
-    return this.fixturesCache_[url]
-  }
-
-  jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) {
-    var self = this
-      , url = this.makeFixtureUrl_(relativeUrl)
-      , htmlText = ''
-      , request = $.ajax({
-        async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
-        cache: false,
-        url: url,
-        dataType: 'html',
-        success: function (data, status, $xhr) {
-          htmlText = $xhr.responseText
-        }
-      }).fail(function ($xhr, status, err) {
-          console.log($xhr.responseText);
-          console.log($xhr.getAllResponseHeaders());
-          throw new Error('Fixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + err.message + ')')
-      })
-
-      var scripts = $($.parseHTML(htmlText, true)).find('script[src]') || [];
-
-      scripts.each(function(){
-        $.ajax({
-            async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
-            cache: false,
-            dataType: 'script',
-            url: $(this).attr('src'),
-            success: function (data, status, $xhr) {
-                htmlText += '<script>' + $xhr.responseText + '</script>'
-            },
-            error: function ($xhr, status, err) {
-                throw new Error('Script could not be loaded: ' + url + ' (status: ' + status + ', message: ' + err.message + ')')
-            }
-        });
-      })
-
-      self.fixturesCache_[relativeUrl] = htmlText;
-  }
-
-  jasmine.Fixtures.prototype.makeFixtureUrl_ = function (relativeUrl){
-    return this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
-  }
-
-  jasmine.Fixtures.prototype.proxyCallTo_ = function (methodName, passedArguments) {
-    return this[methodName].apply(this, passedArguments)
-  }
-
-
-  jasmine.StyleFixtures = function () {
-    this.fixturesCache_ = {}
-    this.fixturesNodes_ = []
-    this.fixturesPath = 'spec/javascripts/fixtures'
-  }
-
-  jasmine.StyleFixtures.prototype.set = function (css) {
-    this.cleanUp()
-    this.createStyle_(css)
-  }
-
-  jasmine.StyleFixtures.prototype.appendSet = function (css) {
-    this.createStyle_(css)
-  }
-
-  jasmine.StyleFixtures.prototype.preload = function () {
-    this.read_.apply(this, arguments)
-  }
-
-  jasmine.StyleFixtures.prototype.load = function () {
-    this.cleanUp()
-    this.createStyle_(this.read_.apply(this, arguments))
-  }
-
-  jasmine.StyleFixtures.prototype.appendLoad = function () {
-    this.createStyle_(this.read_.apply(this, arguments))
-  }
-
-  jasmine.StyleFixtures.prototype.cleanUp = function () {
-    while(this.fixturesNodes_.length) {
-      this.fixturesNodes_.pop().remove()
-    }
-  }
-
-  jasmine.StyleFixtures.prototype.createStyle_ = function (html) {
-    var styleText = $('<div></div>').html(html).text()
-      , style = $('<style>' + styleText + '</style>')
-
-    this.fixturesNodes_.push(style)
-    $('head').append(style)
-  }
-
-  jasmine.StyleFixtures.prototype.clearCache = jasmine.Fixtures.prototype.clearCache
-  jasmine.StyleFixtures.prototype.read_ = jasmine.Fixtures.prototype.read
-  jasmine.StyleFixtures.prototype.getFixtureHtml_ = jasmine.Fixtures.prototype.getFixtureHtml_
-  jasmine.StyleFixtures.prototype.loadFixtureIntoCache_ = jasmine.Fixtures.prototype.loadFixtureIntoCache_
-  jasmine.StyleFixtures.prototype.makeFixtureUrl_ = jasmine.Fixtures.prototype.makeFixtureUrl_
-  jasmine.StyleFixtures.prototype.proxyCallTo_ = jasmine.Fixtures.prototype.proxyCallTo_
-
-  jasmine.getJSONFixtures = function () {
-    return jasmine.currentJSONFixtures_ = jasmine.currentJSONFixtures_ || new jasmine.JSONFixtures()
-  }
-
-  jasmine.JSONFixtures = function () {
-    this.fixturesCache_ = {}
-    this.fixturesPath = 'spec/javascripts/fixtures/json'
-  }
-
-  jasmine.JSONFixtures.prototype.load = function () {
-    this.read.apply(this, arguments)
-    return this.fixturesCache_
-  }
-
-  jasmine.JSONFixtures.prototype.read = function () {
-    var fixtureUrls = arguments
-
-    for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
-      this.getFixtureData_(fixtureUrls[urlIndex])
-    }
-
-    return this.fixturesCache_
-  }
-
-  jasmine.JSONFixtures.prototype.clearCache = function () {
-    this.fixturesCache_ = {}
-  }
-
-  jasmine.JSONFixtures.prototype.getFixtureData_ = function (url) {
-    if (!this.fixturesCache_[url]) this.loadFixtureIntoCache_(url)
-    return this.fixturesCache_[url]
-  }
-
-  jasmine.JSONFixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) {
-    var self = this
-      , url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
-
-    $.ajax({
-      async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
-      cache: false,
-      dataType: 'json',
-      url: url,
-      success: function (data) {
-        self.fixturesCache_[relativeUrl] = data
-      },
-      error: function ($xhr, status, err) {
-        throw new Error('JSONFixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + err.message + ')')
-      }
-    })
-  }
-
-  jasmine.JSONFixtures.prototype.proxyCallTo_ = function (methodName, passedArguments) {
-    return this[methodName].apply(this, passedArguments)
-  }
-
-  jasmine.jQuery = function () {}
-
-  jasmine.jQuery.browserTagCaseIndependentHtml = function (html) {
-    return $('<div/>').append(html).html()
-  }
-
-  jasmine.jQuery.elementToString = function (element) {
-    return $(element).map(function () { return this.outerHTML; }).toArray().join(', ')
-  }
-
-  var data = {
-      spiedEvents: {}
-    , handlers:    []
-  }
-
-  jasmine.jQuery.events = {
-    spyOn: function (selector, eventName) {
-      var handler = function (e) {
-        var calls = (typeof data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] !== 'undefined') ? data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)].calls : 0
-        data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] = {
-          args: jasmine.util.argsToArray(arguments),
-          calls: ++calls
-        }
-      }
-
-      $(selector).on(eventName, handler)
-      data.handlers.push(handler)
-
-      return {
-        selector: selector,
-        eventName: eventName,
-        handler: handler,
-        reset: function (){
-          delete data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
-        },
-        calls: {
-          count: function () {
-              return data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] ?
-                data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)].calls : 0;
-          },
-          any: function () {
-              return data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] ?
-                !!data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)].calls : false;
-          }
-        }
-      }
-    },
-
-    args: function (selector, eventName) {
-      var actualArgs = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)].args
-
-      if (!actualArgs) {
-        throw "There is no spy for " + eventName + " on " + selector.toString() + ". Make sure to create a spy using spyOnEvent."
-      }
-
-      return actualArgs
-    },
-
-    wasTriggered: function (selector, eventName) {
-      return !!(data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)])
-    },
-
-    wasTriggeredWith: function (selector, eventName, expectedArgs, util, customEqualityTesters) {
-      var actualArgs = jasmine.jQuery.events.args(selector, eventName).slice(1)
-
-      if (Object.prototype.toString.call(expectedArgs) !== '[object Array]')
-        actualArgs = actualArgs[0]
-
-      return util.equals(actualArgs, expectedArgs, customEqualityTesters)
-    },
-
-    wasPrevented: function (selector, eventName) {
-      var spiedEvent = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
-        , args = (jasmine.util.isUndefined(spiedEvent)) ? {} : spiedEvent.args
-        , e = args ? args[0] : undefined
-
-      return e && e.isDefaultPrevented()
-    },
-
-    wasStopped: function (selector, eventName) {
-      var spiedEvent = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
-        , args = (jasmine.util.isUndefined(spiedEvent)) ? {} : spiedEvent.args
-        , e = args ? args[0] : undefined
-
-      return e && e.isPropagationStopped()
-    },
-
-    cleanUp: function () {
-      data.spiedEvents = {}
-      data.handlers    = []
-    }
-  }
-
-  var hasProperty = function (actualValue, expectedValue) {
-    if (expectedValue === undefined)
-      return actualValue !== undefined
-
-    return actualValue === expectedValue
-  }
-
-  beforeEach(function () {
-    jasmine.addMatchers({
-      toHaveClass: function () {
-        return {
-          compare: function (actual, className) {
-            return { pass: $(actual).hasClass(className) }
-          }
-        }
-      },
-
-      toHaveCss: function () {
-        return {
-          compare: function (actual, css) {
-            for (var prop in css){
-              var value = css[prop]
-              // see issue #147 on gh
-              ;if (value === 'auto' && $(actual).get(0).style[prop] === 'auto') continue
-              if ($(actual).css(prop) !== value) return { pass: false }
-            }
-            return { pass: true }
-          }
-        }
-      },
-
-      toBeVisible: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).is(':visible') }
-          }
-        }
-      },
-
-      toBeHidden: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).is(':hidden') }
-          }
-        }
-      },
-
-      toBeSelected: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).is(':selected') }
-          }
-        }
-      },
-
-      toBeChecked: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).is(':checked') }
-          }
-        }
-      },
-
-      toBeEmpty: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).is(':empty') }
-          }
-        }
-      },
-
-      toBeInDOM: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $.contains(document.documentElement, $(actual)[0]) }
-          }
-        }
-      },
-
-      toExist: function () {
-        return {
-          compare: function (actual) {
-            return { pass: $(actual).length }
-          }
-        }
-      },
-
-      toHaveLength: function () {
-        return {
-          compare: function (actual, length) {
-            return { pass: $(actual).length === length }
-          }
-        }
-      },
-
-      toHaveAttr: function () {
-        return {
-          compare: function (actual, attributeName, expectedAttributeValue) {
-            return { pass: hasProperty($(actual).attr(attributeName), expectedAttributeValue) }
-          }
-        }
-      },
-
-      toHaveProp: function () {
-        return {
-          compare: function (actual, propertyName, expectedPropertyValue) {
-            return { pass: hasProperty($(actual).prop(propertyName), expectedPropertyValue) }
-          }
-        }
-      },
-
-      toHaveId: function () {
-        return {
-          compare: function (actual, id) {
-            return { pass: $(actual).attr('id') == id }
-          }
-        }
-      },
-
-      toHaveHtml: function () {
-        return {
-          compare: function (actual, html) {
-            return { pass: $(actual).html() == jasmine.jQuery.browserTagCaseIndependentHtml(html) }
-          }
-        }
-      },
-
-      toContainHtml: function () {
-        return {
-          compare: function (actual, html) {
-            var actualHtml = $(actual).html()
-              , expectedHtml = jasmine.jQuery.browserTagCaseIndependentHtml(html)
-
-            return { pass: (actualHtml.indexOf(expectedHtml) >= 0) }
-          }
-        }
-      },
-
-      toHaveText: function () {
-        return {
-          compare: function (actual, text) {
-            var actualText = $(actual).text()
-            var trimmedText = $.trim(actualText)
-
-            if (text && $.isFunction(text.test)) {
-              return { pass: text.test(actualText) || text.test(trimmedText) }
-            } else {
-              return { pass: (actualText == text || trimmedText == text) }
-            }
-          }
-        }
-      },
-
-      toContainText: function () {
-        return {
-          compare: function (actual, text) {
-            var trimmedText = $.trim($(actual).text())
-
-            if (text && $.isFunction(text.test)) {
-              return { pass: text.test(trimmedText) }
-            } else {
-              return { pass: trimmedText.indexOf(text) != -1 }
-            }
-          }
-        }
-      },
-
-      toHaveValue: function () {
-        return {
-          compare: function (actual, value) {
-            return { pass: $(actual).val() === value }
-          }
-        }
-      },
-
-      toHaveData: function () {
-        return {
-          compare: function (actual, key, expectedValue) {
-            return { pass: hasProperty($(actual).data(key), expectedValue) }
-          }
-        }
-      },
-
-      toContainElement: function () {
-        return {
-          compare: function (actual, selector) {
-            return { pass: $(actual).find(selector).length }
-          }
-        }
-      },
-
-      toBeMatchedBy: function () {
-        return {
-          compare: function (actual, selector) {
-            return { pass: $(actual).filter(selector).length }
-          }
-        }
-      },
-
-      toBeDisabled: function () {
-        return {
-          compare: function (actual, selector) {
-            return { pass: $(actual).is(':disabled') }
-          }
-        }
-      },
-
-      toBeFocused: function (selector) {
-        return {
-          compare: function (actual, selector) {
-            return { pass: $(actual)[0] === $(actual)[0].ownerDocument.activeElement }
-          }
-        }
-      },
-
-      toHandle: function () {
-        return {
-          compare: function (actual, event) {
-            if ( !actual || actual.length === 0 ) return { pass: false };
-            var events = $._data($(actual).get(0), "events")
-
-            if (!events || !event || typeof event !== "string") {
-              return { pass: false }
-            }
-
-            var namespaces = event.split(".")
-              , eventType = namespaces.shift()
-              , sortedNamespaces = namespaces.slice(0).sort()
-              , namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)")
-
-            if (events[eventType] && namespaces.length) {
-              for (var i = 0; i < events[eventType].length; i++) {
-                var namespace = events[eventType][i].namespace
-
-                if (namespaceRegExp.test(namespace))
-                  return { pass: true }
-              }
-            } else {
-              return { pass: (events[eventType] && events[eventType].length > 0) }
-            }
-
-            return { pass: false }
-          }
-        }
-      },
-
-      toHandleWith: function () {
-        return {
-          compare: function (actual, eventName, eventHandler) {
-            if ( !actual || actual.length === 0 ) return { pass: false };
-            var normalizedEventName = eventName.split('.')[0]
-              , stack = $._data($(actual).get(0), "events")[normalizedEventName]
-
-            for (var i = 0; i < stack.length; i++) {
-              if (stack[i].handler == eventHandler) return { pass: true }
-            }
-
-            return { pass: false }
-          }
-        }
-      },
-
-      toHaveBeenTriggeredOn: function () {
-        return {
-          compare: function (actual, selector) {
-            var result = { pass: jasmine.jQuery.events.wasTriggered(selector, actual) }
-
-            result.message = result.pass ?
-              "Expected event " + $(actual) + " not to have been triggered on " + selector :
-              "Expected event " + $(actual) + " to have been triggered on " + selector
-
-            return result;
-          }
-        }
-      },
-
-      toHaveBeenTriggered: function (){
-        return {
-          compare: function (actual) {
-            var eventName = actual.eventName
-              , selector = actual.selector
-              , result = { pass: jasmine.jQuery.events.wasTriggered(selector, eventName) }
-
-            result.message = result.pass ?
-            "Expected event " + eventName + " not to have been triggered on " + selector :
-              "Expected event " + eventName + " to have been triggered on " + selector
-
-            return result
-          }
-        }
-      },
-
-      toHaveBeenTriggeredOnAndWith: function (j$, customEqualityTesters) {
-        return {
-          compare: function (actual, selector, expectedArgs) {
-            var wasTriggered = jasmine.jQuery.events.wasTriggered(selector, actual)
-              , result = { pass: wasTriggered && jasmine.jQuery.events.wasTriggeredWith(selector, actual, expectedArgs, j$, customEqualityTesters) }
-
-              if (wasTriggered) {
-                var actualArgs = jasmine.jQuery.events.args(selector, actual, expectedArgs)[1]
-                result.message = result.pass ?
-                  "Expected event " + actual + " not to have been triggered with " + jasmine.pp(expectedArgs) + " but it was triggered with " + jasmine.pp(actualArgs) :
-                  "Expected event " + actual + " to have been triggered with " + jasmine.pp(expectedArgs) + "  but it was triggered with " + jasmine.pp(actualArgs)
-
-              } else {
-                // todo check on this
-                result.message = result.pass ?
-                  "Expected event " + actual + " not to have been triggered on " + selector :
-                  "Expected event " + actual + " to have been triggered on " + selector
-              }
-
-              return result
-          }
-        }
-      },
-
-      toHaveBeenPreventedOn: function () {
-        return {
-          compare: function (actual, selector) {
-            var result = { pass: jasmine.jQuery.events.wasPrevented(selector, actual) }
-
-            result.message = result.pass ?
-              "Expected event " + actual + " not to have been prevented on " + selector :
-              "Expected event " + actual + " to have been prevented on " + selector
-
-            return result
-          }
-        }
-      },
-
-      toHaveBeenPrevented: function () {
-        return {
-          compare: function (actual) {
-            var eventName = actual.eventName
-              , selector = actual.selector
-              , result = { pass: jasmine.jQuery.events.wasPrevented(selector, eventName) }
-
-            result.message = result.pass ?
-              "Expected event " + eventName + " not to have been prevented on " + selector :
-              "Expected event " + eventName + " to have been prevented on " + selector
-
-            return result
-          }
-        }
-      },
-
-      toHaveBeenStoppedOn: function () {
-        return {
-          compare: function (actual, selector) {
-            var result = { pass: jasmine.jQuery.events.wasStopped(selector, actual) }
-
-            result.message = result.pass ?
-              "Expected event " + actual + " not to have been stopped on " + selector :
-              "Expected event " + actual + " to have been stopped on " + selector
-
-            return result;
-          }
-        }
-      },
-
-      toHaveBeenStopped: function () {
-        return {
-          compare: function (actual) {
-            var eventName = actual.eventName
-              , selector = actual.selector
-              , result = { pass: jasmine.jQuery.events.wasStopped(selector, eventName) }
-
-            result.message = result.pass ?
-              "Expected event " + eventName + " not to have been stopped on " + selector :
-              "Expected event " + eventName + " to have been stopped on " + selector
-
-            return result
-          }
-        }
-      }
-    })
-
-    jasmine.getEnv().addCustomEqualityTester(function(a, b) {
-     if (a && b) {
-       if (a instanceof $ || jasmine.isDomNode(a)) {
-         var $a = $(a)
-
-         if (b instanceof $)
-           return $a.length == b.length && a.is(b)
-
-         return $a.is(b);
-       }
-
-       if (b instanceof $ || jasmine.isDomNode(b)) {
-         var $b = $(b)
-
-         if (a instanceof $)
-           return a.length == $b.length && $b.is(a)
-
-         return $(b).is(a);
-       }
-     }
-    })
-
-    jasmine.getEnv().addCustomEqualityTester(function (a, b) {
-     if (a instanceof $ && b instanceof $ && a.size() == b.size())
-        return a.is(b)
-    })
-  })
-
-  afterEach(function () {
-    jasmine.getFixtures().cleanUp()
-    jasmine.getStyleFixtures().cleanUp()
-    jasmine.jQuery.events.cleanUp()
-  })
-
-  window.readFixtures = function () {
-    return jasmine.getFixtures().proxyCallTo_('read', arguments)
-  }
-
-  window.preloadFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('preload', arguments)
-  }
-
-  window.loadFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('load', arguments)
-  }
-
-  window.appendLoadFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('appendLoad', arguments)
-  }
-
-  window.setFixtures = function (html) {
-    return jasmine.getFixtures().proxyCallTo_('set', arguments)
-  }
-
-  window.appendSetFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('appendSet', arguments)
-  }
-
-  window.sandbox = function (attributes) {
-    return jasmine.getFixtures().sandbox(attributes)
-  }
-
-  window.spyOnEvent = function (selector, eventName) {
-    return jasmine.jQuery.events.spyOn(selector, eventName)
-  }
-
-  window.preloadStyleFixtures = function () {
-    jasmine.getStyleFixtures().proxyCallTo_('preload', arguments)
-  }
-
-  window.loadStyleFixtures = function () {
-    jasmine.getStyleFixtures().proxyCallTo_('load', arguments)
-  }
-
-  window.appendLoadStyleFixtures = function () {
-    jasmine.getStyleFixtures().proxyCallTo_('appendLoad', arguments)
-  }
-
-  window.setStyleFixtures = function (html) {
-    jasmine.getStyleFixtures().proxyCallTo_('set', arguments)
-  }
-
-  window.appendSetStyleFixtures = function (html) {
-    jasmine.getStyleFixtures().proxyCallTo_('appendSet', arguments)
-  }
-
-  window.loadJSONFixtures = function () {
-    return jasmine.getJSONFixtures().proxyCallTo_('load', arguments)
-  }
-
-  window.getJSONFixture = function (url) {
-    return jasmine.getJSONFixtures().proxyCallTo_('read', arguments)[url]
-  }
-}));
diff --git a/xos/core/xoslib/spec/smoke.test.js b/xos/core/xoslib/spec/smoke.test.js
deleted file mode 100644
index bb63170..0000000
--- a/xos/core/xoslib/spec/smoke.test.js
+++ /dev/null
@@ -1,25 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The test environment', () => {
-  it('should correctly work', () => {
-    expect(true).toBe(true);
-  });
-});
diff --git a/xos/core/xoslib/spec/xoslib/fixtures/xos-utils/make_same_width.html b/xos/core/xoslib/spec/xoslib/fixtures/xos-utils/make_same_width.html
deleted file mode 100644
index 8b09bc7..0000000
--- a/xos/core/xoslib/spec/xoslib/fixtures/xos-utils/make_same_width.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="container">
-  <div style="width: 200px"></div>
-  <div style="width: 300px"></div>
-  <div style="width: 400px"></div>
-</div>
\ No newline at end of file
diff --git a/xos/core/xoslib/spec/xoslib/fixtures/xos-utils/table_rows.html b/xos/core/xoslib/spec/xoslib/fixtures/xos-utils/table_rows.html
deleted file mode 100644
index 30bb595..0000000
--- a/xos/core/xoslib/spec/xoslib/fixtures/xos-utils/table_rows.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="container">
-  <table class="test-table" border="2">
-    <tr>
-      <td height="150">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sequi eaque voluptatum, itaque dolor ut animi ea, laboriosam nobis perspiciatis ducimus asperiores excepturi. Architecto earum, harum nesciunt libero maxime repellat dicta.</td>
-    </tr>
-    <tr>
-      <td height="150">Autem esse, accusantium adipisci, aliquid debitis inventore alias error dolores veniam nesciunt possimus animi dolorum magnam nostrum et asperiores id natus, deleniti ullam illum magni cupiditate suscipit hic. Temporibus, non?</td>
-    </tr>
-    <tr>
-      <td height="150">Tempore sapiente sed laborum commodi explicabo praesentium, molestiae repellendus sit minima magni natus doloremque eius vel voluptatem officiis, blanditiis incidunt nobis! Aut, dolorum, impedit assumenda inventore blanditiis voluptas mollitia nihil.</td>
-    </tr>
-    <tr>
-      <td height="150">Quae esse, earum tenetur, quam at iure cumque unde suscipit corporis, nemo voluptatibus. Ducimus, ratione quidem ut earum? Error, esse quae. Quis ea vero, tempore minus voluptates possimus iure deleniti.</td>
-    </tr>
-    <tr>
-      <td height="150">Asperiores sequi dignissimos doloribus commodi tenetur blanditiis eaque accusantium, hic molestias quas modi minima ratione reiciendis ut id voluptatem eveniet, culpa placeat? Dolor soluta, non cumque adipisci architecto sapiente ullam!</td>
-    </tr>
-  </table>
-</div>
\ No newline at end of file
diff --git a/xos/core/xoslib/spec/xoslib/fixtures/xos-utils/template_from_id.html b/xos/core/xoslib/spec/xoslib/fixtures/xos-utils/template_from_id.html
deleted file mode 100644
index c8c5899..0000000
--- a/xos/core/xoslib/spec/xoslib/fixtures/xos-utils/template_from_id.html
+++ /dev/null
@@ -1,25 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<script type="text/template" id="static-test">
-  <p>Test Template</p>
-</script>
-
-<script type="text/template" id="dynamic-test">
-  <p>Test <%= stuff %></p>
-</script>
\ No newline at end of file
diff --git a/xos/core/xoslib/spec/xoslib/xos-backbone.test.js b/xos/core/xoslib/spec/xoslib/xos-backbone.test.js
deleted file mode 100644
index b9a8913..0000000
--- a/xos/core/xoslib/spec/xoslib/xos-backbone.test.js
+++ /dev/null
@@ -1,389 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The Xos Backbone', () => {
-
-  beforeEach(() => {
-    $.extend(xosdefaults,{
-      test: {config: true}
-    });
-  });
-
-  describe('get_defaults mehod', () => {
-
-    it('should return default config', () => {
-      let res = get_defaults('test');
-      expect(res).toEqual({config: true});
-    });
-
-    it('should return undefined', () => {
-      let res = get_defaults('notset');
-      expect(res).toBeUndefined();
-    });
-
-  });
-
-  describe('The extend_defaults method', () => {
-
-    it('should return an extended config', () => {
-      let extended = extend_defaults('test', {extended: true});
-      expect(extended).toEqual({config: true, extended: true});
-    });
-
-    it('should return an new config', () => {
-      let extended = extend_defaults('notset', {extended: true});
-      expect(extended).toEqual({extended: true});
-    });
-
-  });
-
-  describe('The define_model method', () => {
-
-    var testLib;
-
-    beforeEach(() => {
-      var TestLibDefinition = function(){
-        /* eslint-disable no-invalid-this*/
-        this.allCollectionNames = [];
-        this.allCollections = [];
-        /* eslint-enable no-invalid-this*/
-      };
-
-      testLib = new TestLibDefinition();
-    });
-
-    it('should create a model and attach it to xos lib', () => {
-      define_model(testLib, {
-        urlRoot: 'testUrl',
-        modelName: 'testModel'
-      });
-
-      expect(testLib.allCollectionNames[0]).toEqual('testModels');
-      expect(typeof testLib['testModel']).toBe('function');
-
-    });
-
-    describe('when a model is created', () => {
-      var model;
-      beforeEach(() => {
-        define_model(testLib, {
-          urlRoot: 'testUrl',
-          modelName: 'testModel',
-          // collectionName: 'testCollection',
-          relatedCollections: {instances: 'slices'},
-          foreignCollections: ['sites'],
-          foreignFields: {slice: 'slices'},
-          m2mFields: {sites: 'sites'},
-          listFields: ['name'],
-          detailFields: ['name', 'age'],
-          addFields: ['add'],
-          inputType: {add: 'checkbox'}
-        });
-        /*eslint-disable new-cap*/
-        model = new testLib.testModel();
-        /*eslint-enable new-cap*/
-
-        // add defaults and validator for `testModel`
-        xosdefaults['testModel'] = {name: 'Scott'};
-        xosvalidators['testModel'] = {network_ports: ['portspec']};
-      });
-
-      it('should have a name', () => {
-        expect(model.modelName).toEqual('testModel');
-      });
-
-      it('should have a default collectionName', () => {
-        expect(model.collectionName).toEqual('testModels');
-      });
-
-      describe('whith a custom collectionName', () => {
-        var customCollectionName;
-        beforeEach(() => {
-          define_model(testLib, {
-            urlRoot: 'collUrl',
-            modelName: 'customCollectionName',
-            collectionName: 'myCollection'
-          });
-
-          /*eslint-disable new-cap*/
-          customCollectionName = new testLib.customCollectionName();
-          /*eslint-enable new-cap*/
-        });
-
-        it('should have the custom collectionName', () => {
-          expect(customCollectionName.collectionName).toBe('myCollection');
-        });
-
-        afterEach(() => {
-          customCollectionName = null;
-        });
-      });
-
-      it('should have a valid url', () => {
-        expect(model.url()).toEqual('testUrl/?no_hyperlinks=1');
-      });
-
-      it('should have related collections', () => {
-        expect(model.relatedCollections).toEqual({instances: 'slices'});
-      });
-
-      it('should have foreign collections', () => {
-        expect(model.foreignCollections).toEqual(['sites']);
-      });
-
-      it('should have foreign fields', () => {
-        expect(model.foreignFields).toEqual({slice: 'slices'});
-      });
-
-      it('should have m2m fields', () => {
-        expect(model.m2mFields).toEqual({sites: 'sites'});
-      });
-
-      it('should have list field', () => {
-        expect(model.listFields).toEqual(['name']);
-      });
-
-      it('should have deatil field', () => {
-        expect(model.detailFields).toEqual(['name', 'age']);
-      });
-
-      it('should have add field', () => {
-        expect(model.addFields).toEqual(['add']);
-      });
-
-      it('should have input types defined', () => {
-        expect(model.inputType).toEqual({add: 'checkbox'});
-      });
-
-      it('should have standard defaults', () => {
-        expect(model.defaults).toEqual({name: 'Scott'});
-      });
-
-      describe('when default are defined', () => {
-
-        var extendDefault;
-        beforeEach(() => {
-          define_model(testLib, {
-            urlRoot: 'collUrl',
-            modelName: 'extendDefault',
-            defaults: extend_defaults('testModel', {surname: 'Baker'})
-          });
-
-          /*eslint-disable new-cap*/
-          extendDefault = new testLib.extendDefault();
-          /*eslint-enable new-cap*/
-        });
-
-        it('should return new defaults', () => {
-          expect(extendDefault.defaults).toEqual({name: 'Scott', surname: 'Baker'});
-        });
-
-        afterEach(() => {
-          extendDefault = null;
-        });
-      });
-
-      it('should add default validators', () => {
-        expect(model.validators).toEqual({network_ports: ['portspec']});
-      });
-
-      describe('when validators are defined', () => {
-
-        var extendValidators;
-        beforeEach(() => {
-          define_model(testLib, {
-            urlRoot: 'collUrl',
-            modelName: 'testModel',
-            validators: {site: ['notBlank']}
-          });
-
-          /*eslint-disable new-cap*/
-          extendValidators = new testLib.testModel();
-          /*eslint-enable new-cap*/
-        });
-
-        it('should return extended validators', () => {
-          expect(extendValidators.validators).toEqual({network_ports: ['portspec'], site: ['notBlank']});
-        });
-
-        afterEach(() => {
-          extendValidators = null;
-        });
-      });
-
-      it('should have the default xosValidate method', () => {
-        expect(typeof model.xosValidate).toEqual('function');
-      });
-
-      describe('when xosValidate is defined', () => {
-
-        var extendXosValidate;
-        beforeEach(() => {
-          define_model(testLib, {
-            urlRoot: 'collUrl',
-            modelName: 'testModel',
-            xosValidate: {site: ['notBlank']}
-          });
-
-          /*eslint-disable new-cap*/
-          extendXosValidate = new testLib.testModel();
-          /*eslint-enable new-cap*/
-        });
-
-        // NOTE if I can override with an object a also can override with functions
-        // testing with the object is mush simpler
-
-        it('should be overwritten', () => {
-          expect(extendXosValidate.xosValidate).toEqual({site: ['notBlank']});
-        });
-
-        afterEach(() => {
-          extendXosValidate = null;
-        });
-      });
-
-      // TBT
-      // - xosValidate
-      // - Test the default
-      // - Test override
-
-    });
-  });
-
-  describe('getCookie method with no cookie', () => {
-
-    beforeEach(() => {
-      document.cookie = 'fakeCookie=true=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
-    });
-
-    it('should return null', () => {
-      let res = getCookie('fakeCookie');
-      expect(res).toBeNull();
-    });
-  });
-
-  describe('getCookie method with a fake cookie', () => {
-
-    beforeEach(() => {
-      document.cookie = 'fakeCookie=true';
-    });
-
-    it('should return a cookie value', () => {
-      let res = getCookie('fakeCookie');
-      expect(res).toEqual('true');
-    });
-  });
-});
-
-describe('The XOSModel', () => {
-
-  var model;
-
-  beforeEach(() => {
-    model = new XOSModel();
-  });
-
-  describe('url method', () => {
-    it('should set the correct url', () => {
-      const ctx = {attributes: {resource_uri: 'onlab.us'}};
-      let res = model.url.apply(ctx);
-      expect(res).toEqual('onlab.us/?no_hyperlinks=1');
-    });
-
-    it('should remove query params', () => {
-      const ctx = {attributes: {resource_uri: 'onlab.us?query=params'}};
-      let res = model.url.apply(ctx);
-      expect(res).toEqual('onlab.us/?no_hyperlinks=1');
-    });
-  });
-
-  describe('listMethods method', () => {
-
-    const instance = {
-      m1: () => {},
-      m2: () => {}
-    };
-
-    it('should list all methods in instance', () => {
-      let res = model.listMethods.apply(instance);
-      expect(res.length).toBe(2);
-      expect(res[0]).toEqual('m1');
-    });
-  });
-
-  describe('the Save method', () => {
-    const ctxPS = {
-      preSave: () => {}
-    };
-
-    const args = ['attr', 'opts'];
-
-    beforeEach(() => {
-      spyOn(ctxPS, 'preSave');
-      spyOn(Backbone.Model.prototype, 'save');
-    });
-
-    it('should call the preSave method', () => {
-      model.save.apply(ctxPS, args);
-      expect(ctxPS.preSave).toHaveBeenCalled();
-      expect(Backbone.Model.prototype.save).toHaveBeenCalledWith(args[0], args[1]);
-    });
-
-    it('should not call the preSave method', () => {
-      model.save.apply({}, args);
-      expect(ctxPS.preSave).not.toHaveBeenCalled();
-      expect(Backbone.Model.prototype.save).toHaveBeenCalledWith(args[0], args[1]);
-    });
-  });
-
-  describe('the getChoices method', () => {
-
-    const instance = {
-      m2mFields: {'flavors': 'flavors', 'sites': 'sites', 'images': 'images'}
-    };
-
-    xit('should be tested, what is this doing?', () => {
-      model.getChoices.apply(instance);
-    });
-  });
-
-  describe('the xosValidate method', () => {
-
-    const instance = {
-      validators: {'network_ports': ['portspec']}
-    };
-
-    const validAttrs = {network_ports: 'tcp 123'};
-
-    it('should call specified validator on a field and pass', () => {
-      let err = model.xosValidate.apply(instance, [validAttrs]);
-      expect(err).toBeUndefined();
-    });
-
-    // set wrong value and recall xosValidate
-    const invalidAttrs = {network_ports: 'abd 456'};
-
-    it('should call specified validator on a field and not pass', () => {
-      let err = model.xosValidate.apply(instance, [invalidAttrs]);
-      expect(err).not.toBeUndefined();
-      expect(err).toEqual({network_ports: 'must be a valid portspec (example: \'tcp 123, udp 456-789\')'});
-    });
-  });
-});
\ No newline at end of file
diff --git a/xos/core/xoslib/spec/xoslib/xos-helper.test.js b/xos/core/xoslib/spec/xoslib/xos-helper.test.js
deleted file mode 100644
index 29394d8..0000000
--- a/xos/core/xoslib/spec/xoslib/xos-helper.test.js
+++ /dev/null
@@ -1,68 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/* eslint-disable no-unused-vars*/
-'use strict';
-
-describe('The Xos Helper', () => {
-  var f;
-  beforeEach(() => {
-    f = jasmine.getFixtures();
-    f.fixturesPath = 'base/spec/xoslib/fixtures/xos-utils';
-  });
-
-  describe('XOSDetailView', () => {
-
-    describe('onFormDataInvalid', () => {
-
-      // TODO understand how to attach XOSDetailView to a custom template and test its methods
-
-      const err = {name: 'must start with mysite_'};
-      var view;
-      beforeEach(() => {
-        try{
-          f.set(`
-            <script type="text/template" id="fake-template">
-              <div>
-                <input name="name" />
-              </div>
-            </script>
-          `);
-        }
-        catch(e){
-          console.log('err: ' + e);
-        }
-
-        view = XOSDetailView.extend({
-          template: '#fake-template'
-        });
-
-      });
-
-      xit('should show an error', () => {
-
-        // view.onFormDataInvalid(err);
-        // view().onFormDataInvalid(err)
-
-        expect($('.alert').length).toBe(1);
-      });
-    });
-
-  });
-
-});
\ No newline at end of file
diff --git a/xos/core/xoslib/spec/xoslib/xos-utils.test.js b/xos/core/xoslib/spec/xoslib/xos-utils.test.js
deleted file mode 100644
index a8af07a..0000000
--- a/xos/core/xoslib/spec/xoslib/xos-utils.test.js
+++ /dev/null
@@ -1,271 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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';
-
-describe('The XOS Lib Utilities', function(){
-
-  var f;
-
-  beforeEach(() => {
-    f = jasmine.getFixtures();
-    f.fixturesPath = 'base/spec/xoslib/fixtures/xos-utils';
-  });
-
-  describe('The idInArray method', function(){
-    it('should match a string ID', () => {
-      let res = idInArray('1', [1, 2, 3]);
-      expect(res).toBeTruthy();
-    });
-
-    it('should march a number ID', () => {
-      let res = idInArray(1, [1, 2, 3]);
-      expect(res).toBeTruthy();
-    });
-
-    it('should not match this ID', () => {
-      let res = idInArray(4, [1, 2, 3]);
-      expect(res).toBeFalsy();
-    });
-  });
-
-  describe('The templateFromId method', () => {
-
-    beforeEach(() => {
-      f.load('template_from_id.html');
-    });
-
-    it('should load a static template', () => {
-      let st = templateFromId('#static-test');
-      expect($(st()).text()).toEqual('Test Template');
-    });
-
-    it('should load a dynamic template', () => {
-      let dn = templateFromId('#dynamic-test');
-      expect($(dn({stuff: 'Template'})).text()).toEqual('Test Template');
-    });
-  });
-
-  describe('The firstCharUpper', () => {
-    it('should return the first char UPPERCASE', () => {
-      let res = firstCharUpper('test');
-      expect(res).toEqual('Test');
-    });
-  });
-
-  describe('The toTitleCase', () => {
-    it('should convert all word\'s first letter to uppercase and the other to lowercase', () => {
-      let res = toTitleCase('tesT tEst');
-      expect(res).toEqual('Test Test');
-    });
-  });
-
-  describe('The fieldNameToHumanReadable method', () => {
-    it('should convert lodash to spaces and apply toTitleCase', () => {
-      let res = fieldNameToHumanReadable('tEst_fIelD');
-      expect(res).toEqual('Test Field');
-    });
-  });
-
-  describe('The limitTableRows', () => {
-
-    beforeEach(() => {
-      f.load('table_rows.html');
-    });
-
-    it('should limit the table container height', () => {
-
-      // table border = 2, td height = 150, see fixture html
-      // resulting table height: 308
-      // .conatiner height: 308 + 2 (table border top)
-
-      limitTableRows('table.test-table', 2);
-      expect($('.container')[0]).toHaveCss({height: '310px'});
-    });
-  });
-
-  describe('The validateField', () => {
-    it('should should validate notBlank', () => {
-      let res = validateField('notBlank', null);
-      expect(res).toEqual('can not be blank');
-    });
-
-    it('should validate a url', () => {
-      let res = validateField('url', 'test a fake url');
-      expect(res).toEqual('must be a valid url');
-    });
-
-    it('should validate a port', () => {
-      let res = validateField('portspec', 'i a not a port');
-      expect(res).toEqual('must be a valid portspec (example: \'tcp 123, udp 456-789\')');
-    });
-
-    it('should return true for a valid url', () => {
-      let res = validateField('url', 'www.onlab.us');
-      expect(res).toBeTruthy();
-    });
-  });
-
-  describe('The array_diff method', () => {
-    it('should return the difference between two array', () => {
-      let res = array_diff([1,2,3], [1,2,5]);
-      expect(res).toEqual(['3', '5']); //is this right?
-      console.log('convert the array to a string, can\'t we use lodash?');
-    });
-  });
-
-  describe('The array_subtract method', () => {
-    it('should substract two arrays', () => {
-      let res = array_subtract([1,2],[1,2,3]);
-      expect(res).toEqual([1,2]);
-      console.log('[1,2] - [1,2,3] = [1,2]?');
-    });
-  });
-
-  describe('The array_same_elements method', () => {
-    it('should return true if array have same elements', () => {
-      let res = array_same_elements([1,2],[2,1]);
-      expect(res).toBeTruthy();
-    });
-
-    it('should return false if array have different elements', () => {
-      let res = array_same_elements([1,2],[2,2]);
-      expect(res).toBeFalsy();
-    });
-  });
-
-  describe('The array_pair_lookup method', () => {
-    it('should return corresponding values in other array', () => {
-      let res = array_pair_lookup('Baker', ['Scott', 'Jhon'], ['Baker', 'Snow']);
-      expect(res).toEqual('Scott');
-    });
-
-    it('should return missing value', () => {
-      let res = array_pair_lookup('Larry', ['Scott', 'Jhon'], ['Baker', 'Snow']);
-      expect(res).toEqual('object #Larry');
-    });
-  });
-
-  describe('The all_options method', () => {
-
-    beforeEach(() => {
-      f.set(`
-        <select id="test-select">
-          <option value="1">1</option>
-          <option value="2">2</option>
-          <option value="3">3/option>
-        </select>
-      `);
-    });
-
-    it('should return all options from a select', () => {
-      let res = all_options('#test-select');
-      expect(res).toEqual(['1','2','3']);
-    });
-  });
-
-  describe('The make_same_width method', () => {
-
-    beforeEach(() => {
-      f.load('make_same_width.html');
-    });
-
-    it('should set elements to same width', () => {
-      make_same_width('.container', 'div');
-      $('.container div').each(function(index, item){
-        expect($(item)).toHaveCss({width: '400px'});
-      });
-    });
-  });
-
-  describe('The strip_scripts method', () => {
-    it('should strip scripts tag', () => {
-      const mockHtml = `
-        <!DOCTYPE html>
-        <html lang="en">
-          <head>
-            <meta charset="UTF-8" />
-            <title>Test</title>
-            <script src="myScript.js"></script>
-          </head>
-          <body></body>
-        </html>
-      `;
-
-      let res = strip_scripts(mockHtml);
-      expect(res.indexOf('script')).toBe(-1);
-    });
-  });
-
-  describe('The parse_portlist method', () => {
-    it('should parse space separated ports', () => {
-      let res = parse_portlist('tcp 123, tcp 124');
-      expect(res).toEqual([{l4_protocol: 'tcp', l4_port: '123'},{l4_protocol: 'tcp', l4_port: '124'}]);
-    });
-
-    it('should parse / separated ports', () => {
-      let res = parse_portlist('tcp/123, tcp/124');
-      expect(res).toEqual([{l4_protocol: 'tcp', l4_port: '123'},{l4_protocol: 'tcp', l4_port: '124'}]);
-    });
-
-    it('should parse : joined ports', () => {
-      let res = parse_portlist('tcp 123:124');
-      expect(res).toEqual([{l4_protocol: 'tcp', l4_port: '123:124'}]);
-    });
-
-    it('should parse - joined ports', () => {
-      let res = parse_portlist('tcp 123-124');
-      expect(res).toEqual([{l4_protocol: 'tcp', l4_port: '123:124'}]);
-    });
-
-    it('should throw an error for malformed separator', () => {
-      let res = () => {
-        return parse_portlist('tcp+123, tcp+124');
-      };
-      expect(res).toThrow('malformed port specifier tcp+123, format example: "tcp 123, tcp 201:206, udp 333"');
-    });
-
-    it('should should throw if unknown protocol', () => {
-      let res = () => {
-        parse_portlist('abc 123');
-      };
-      expect(res).toThrow('unknown protocol abc');
-    });
-  });
-
-  describe('The portlist_regexp', () => {
-
-    const r = portlist_regexp();
-
-    it('should not match tcp', () => {
-      expect('tcp'.match(r)).toBeNull();
-    });
-
-    it('should match tcp 123', () => {
-      expect('tcp 123'.match(r)[0]).toEqual('tcp 123');
-    });
-
-    it('should match udp 123', () => {
-      expect('udp 123'.match(r)[0]).toEqual('udp 123');
-    });
-
-    it('should match tcp 123, upd 456', () => {
-      expect('tcp 123, udp 456'.match(r)[0]).toEqual('tcp 123, udp 456');
-    });
-  });
-});
\ No newline at end of file
diff --git a/xos/core/xoslib/spec/xoslib/xoslib.test.js b/xos/core/xoslib/spec/xoslib/xoslib.test.js
deleted file mode 100644
index eb598b5..0000000
--- a/xos/core/xoslib/spec/xoslib/xoslib.test.js
+++ /dev/null
@@ -1,66 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/* eslint-disable new-cap*/
-'use strict';
-
-describe('When XOS Lib is created', () => {
-  let _slicePlus, _slice;
-
-  console.log(xos.slice, xos.slices);
-
-  beforeEach(() => {
-    _slicePlus = xos.slicesPlus;
-    _slice = xos.slices;
-
-    xos.tenantview.models.push({
-      attributes: {
-        current_user_login_base: 'test'
-      }
-    });
-  });
-
-  it('should have a slicePlus collection', () => {
-    expect(_slicePlus.modelName).toEqual('slicePlus');
-  });
-
-  it('should have a slice collection', () => {
-    // console.log(_slicePlus, '********************',_slice);
-    expect(_slice.modelName).toEqual('slice');
-  });
-
-  describe('and slicePlus model is saved', () => {
-    var _slicePlusModel;
-    beforeEach(() => {
-      _slicePlusModel = new xos.slicesPlus.model({
-        creator: 1
-      });
-    });
-
-    it('should not validate a wrong name', () => {
-      const err = _slicePlusModel.xosValidate({name: 'mysite_aaaa', description: ''});
-      expect(err).toEqual({name: 'must start with test_'});
-    });
-
-    it('should not validate a name with spaces', () => {
-      const err = _slicePlusModel.xosValidate({name: 'test_ aaaa', description: ''});
-      expect(err).toEqual({name: 'must not contain spaces'});
-    });
-  });
-
-});
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/cord.css b/xos/core/xoslib/static/css/cord.css
deleted file mode 100644
index 5f31167..0000000
--- a/xos/core/xoslib/static/css/cord.css
+++ /dev/null
@@ -1,48 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-.cord-subscriber-table-old td {
-    padding-top: 5px;
-}
-
-.cord-subscriber-table-old .xos-label-cell {
-    vertical-align: top;
-    font-weight: bold;
-}
-
-.cord-subscriber-box {
-    margin-right: 20px;
-}
-
-.cord-subscriber-table {
-    width: 100%;
-}
-
-.cord-subscriber-table td {
-    padding-top: 10px;
-    padding-bottom: 10px;
-    background-color: #f6f7f8;
-}
-
-.cord-subscriber-table .xos-label-cell {
-    vertical-align: top;
-    font-weight: bold;
-    border-bottom: 1px solid #ededed;
-    background-color: white;
-    width: 160px;
-}
diff --git a/xos/core/xoslib/static/css/xosCeilometerDashboard.css b/xos/core/xoslib/static/css/xosCeilometerDashboard.css
deleted file mode 100644
index 7cebdff..0000000
--- a/xos/core/xoslib/static/css/xosCeilometerDashboard.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosCeilometerDashboard{position:relative}.panel{margin-top:10px}.panel-body:not(:first-child){border-top:1px solid #e3e3e3}.panel-body .row{margin-top:10px}.chart{width:100%;height:300px}.btn-chart,.btn-chart:hover{color:#fff}.side-container{position:relative}.service-list{margin-top:-10px}.service-list h3{margin-top:0;margin-bottom:0}.service-list a{text-decoration:none;color:#333}.meters,.stats{margin-top:25px;position:absolute;top:0;left:0;width:100%;margin-bottom:50px}.loader{font-size:10px;margin:150px auto;text-indent:-9999em;width:11em;height:11em;border-radius:50%;background:#fff;background:linear-gradient(to right,#fff 10%,rgba(255,255,255,0) 42%);position:relative;animation:load3 1.4s infinite linear;transform:translateZ(0)}.loader:before{width:50%;height:50%;background:#105e9e;border-radius:100% 0 0;position:absolute;top:0;left:0;content:''}.loader:after{background:#fff;width:75%;height:75%;border-radius:50%;content:'';margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}[ui-view]{position:absolute;top:0;left:0;width:100%;margin-bottom:100px}[ui-view].ceilometerDashboard.ng-leave{animation:1s bounceOutLeft ease}[ui-view].samples.ng-enter{animation:1s bounceInRight ease}[ui-view].samples.ng-leave{animation:1s bounceOutRight ease}[ui-view].ceilometerDashboard.ng-enter{animation:1s bounceInLeft ease}.animate .animate-slide-left.ng-hide-remove{animation:.5s bounceInRight ease}.animate .animate-slide-left.ng-hide-add{animation:.5s bounceOutRight ease}@keyframes bounceInRight{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1.000)}from{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes bounceInLeft{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1.000)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes slideInUp{from{transform:translate3d(0,100%,0);visibility:visible}to{transform:translate3d(0,0,0)}}@keyframes bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes slideOutDown{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(0,100%,0)}}
diff --git a/xos/core/xoslib/static/css/xosContentProvider.css b/xos/core/xoslib/static/css/xosContentProvider.css
deleted file mode 100644
index e41be01..0000000
--- a/xos/core/xoslib/static/css/xosContentProvider.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
diff --git a/xos/core/xoslib/static/css/xosDashboardManager.css b/xos/core/xoslib/static/css/xosDashboardManager.css
deleted file mode 100644
index e94176f..0000000
--- a/xos/core/xoslib/static/css/xosDashboardManager.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosDashboardManager .col-xs-10+.col-xs-2.text-right{padding-top:20px}#xosDashboardManager ul[dnd-list]{min-height:42px;border:1px dashed #337ab7;padding:20px;margin-bottom:0}#xosDashboardManager ul[dnd-list] li{list-style:none}#xosDashboardManager ul[dnd-list] li:not(:last-child){margin-bottom:20px}#xosDashboardManager ul[dnd-list] li:hover{cursor:pointer}#xosDashboardManager ul[dnd-list] li.dndDraggingSource{display:none}#xosDashboardManager ul[dnd-list]>li,#xosDashboardManager .dashboard-container{display:block;border:1px solid #337ab7;padding:20px}#xosDashboardManager ul[dnd-list]>li a,#xosDashboardManager .dashboard-container a{text-decoration:none!important}#xosDashboardManager ul[dnd-list]>li a img,#xosDashboardManager .dashboard-container a img{width:20px}#xosDashboardManager ul[dnd-list]>li i,#xosDashboardManager .dashboard-container i{float:right}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosDeveloper.css b/xos/core/xoslib/static/css/xosDeveloper.css
deleted file mode 100644
index 0b00e98..0000000
--- a/xos/core/xoslib/static/css/xosDeveloper.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosDeveloper .pie-legend li{display:inline-block;white-space:nowrap;position:relative;margin-bottom:4px;border-radius:5px;padding:2px 8px 2px 28px;font-size:smaller;cursor:default}#xosDeveloper .pie-legend-icon{display:block;position:absolute;left:0;top:0;width:20px;height:20px;border-radius:5px}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosDiagnostic.css b/xos/core/xoslib/static/css/xosDiagnostic.css
deleted file mode 100644
index bf027be..0000000
--- a/xos/core/xoslib/static/css/xosDiagnostic.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosDiagnostic,[ui-view]{height:100%;min-height:700px;position:relative}diagnostic-container .form-control.small-padding{padding:6px}diagnostic-container .half-height{position:relative;height:50%}diagnostic-container .onethird-height{position:relative;height:33%;border-bottom:1px solid #999}diagnostic-container .twothird-height{position:relative;height:67%}diagnostic-container .subscriber-select{max-width:200px;position:absolute;top:20px;right:20px;z-index:1}diagnostic-container .onethird-height .well,diagnostic-container .twothird-height .well{font-weight:700;max-width:165px;text-align:center;margin-top:15px;background:#eee;border-color:steelblue;padding:10px}diagnostic-container .onethird-height .well.pull-right{position:absolute;right:0;top:-15px;cursor:pointer;z-index:200}subscriber-status-modal .row+.row{margin-top:20px}.half-height+.half-height{border-top:1px solid black}service-topology,logic-topology{height:100%;width:100%;display:block;position:absolute;top:0}logic-topology .subscriber circle,logic-topology .device circle{fill:#fff;stroke:green;stroke-width:1px}logic-topology>svg{position:absolute;top:0}logic-topology .network .cloud{fill:#fff;stroke:green;stroke-width:1px}logic-topology .node.rack>g>rect{fill:#ccc;stroke:steelblue;stroke-width:1px}logic-topology .compute-node>rect{fill:#fff;stroke:steelblue;stroke-width:1px}logic-topology .compute-node>text{font-size:16px}logic-topology .instance>rect{fill:#eee;stroke:steelblue;stroke-width:1px}logic-topology .node .instance.active rect{fill:lightsteelblue;stroke:steelblue;stroke-width:1px}logic-topology .node .instance.active.good>rect{fill:green}logic-topology .node .instance.active.provisioning>rect{fill:yellow}logic-topology .node .instance.active.bad>rect{fill:red}logic-topology .node .instance .stats-container rect{fill:white}logic-topology .node .instance .stats-container text.name{font-weight:700}logic-topology .node .instance .stats-container text.ip{font-style:italic;font-size:10px}logic-topology .node .instance .stats-container .container rect{fill:#eee;stroke:steelblue;stroke-width:1px}.legend{fill:#fff;stroke:#ccc;stroke-width:1px;position:relative}.legend text{stroke:#000}.node{cursor:pointer}.node circle,.node rect{fill:#fff;stroke:steelblue;stroke-width:1px}.node.subscriber circle,.node.subscriber rect,.node.router circle,.node.router rect{stroke:#05ffcb}.node.slice rect{stroke:#b01dff}.node.instance rect{stroke:#ccc}.node.instance rect.active{stroke:#ff8b00}.node rect.slice-detail{fill:#fff;stroke:steelblue;stroke-width:3px}.node text{font:18px sans-serif}.node .instance text{font:12px sans-serif}.node text.small{font-size:10px}.link,.device-link{fill:none;stroke:#ccc;stroke-width:2px}.link.slice{stroke:rgba(157,4,183,.29)}.link.instance{stroke:#ccc}.link.instance.active{stroke:rgba(255,138,0,.65)}.service-details{width:200px;position:absolute;top:20px;right:20px}.animate.ng-hide-remove{animation:.5s bounceInRight ease}.animate.ng-hide-add{animation:.5s bounceOutRight ease}.loader{font-size:10px;margin:150px auto;text-indent:-9999em;width:11em;height:11em;border-radius:50%;background:#fff;background:linear-gradient(to right,#fff 10%,rgba(255,255,255,0) 42%);position:relative;animation:load3 1.4s infinite linear;transform:translateZ(0)}.loader:before{width:50%;height:50%;background:#105e9e;border-radius:100% 0 0;position:absolute;top:0;left:0;content:''}.loader:after{background:#fff;width:75%;height:75%;border-radius:50%;content:'';margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.modal.fade.in{display:block}@keyframes bounceInRight{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosEcordTopology.css b/xos/core/xoslib/static/css/xosEcordTopology.css
deleted file mode 100644
index 3bc70be..0000000
--- a/xos/core/xoslib/static/css/xosEcordTopology.css
+++ /dev/null
@@ -1,26 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-elan-map{display:block;width:100%;height:380px;position:relative}elan-map svg{position:absolute;top:0;left:0}elan-map circle.elan,elan-map rect.elan{stroke:#5bc0de;stroke-width:2;fill:#fff}elan-map circle.elan,elan-map circle.uni{cursor:pointer}elan-map .node.uni circle.uni,elan-map .node.uni rect.uni{stroke:#ce5650;stroke-width:2;fill:#fff}elan-map .node.uni path{fill:#902d28}elan-map line{stroke:#ce5650;stroke-width:1}elan-map #map{background:#efebe2}elan-map .subunit{fill:#b7daff;stroke:white;stroke-width:1px}elan-map .subunit._10{fill:transparent;stroke:transparent}elan-map .exterior-boundary{fill:none;stroke:black;stroke-linejoin:round;stroke-width:1px}
-.service-container .btn{font-size:12px}.sla input.input-sm{max-width:60px;text-align:right}
-@charset "UTF-8";/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,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-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding: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-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@font-face{font-family:Glyphicons Halflings;src:url(/static/suit/bootstrap/fonts/glyphicons-halflings-regular.eot);src:url(/static/suit/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(/static/suit/bootstrap/fonts/glyphicons-halflings-regular.woff2) format("woff2"),url(/static/suit/bootstrap/fonts/glyphicons-halflings-regular.woff) format("woff"),url(/static/suit/bootstrap/fonts/glyphicons-halflings-regular.ttf) format("truetype"),url(/static/suit/bootstrap/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:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur: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"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{box-sizing:border-box}*:before,*:after{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;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{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857;background-color:#fff;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.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;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}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,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .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:300;line-height:1.4}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase,.initialism{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff}.bg-primary{background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{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,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857}dt{font-weight:700}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%}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.42857;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;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)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857;word-break:break-all;word-wrap:break-word;color:#333;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{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.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-left:15px;padding-right: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-1{width:8.33333%}.col-xs-2{width:16.66667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333%}.col-xs-5{width:41.66667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333%}.col-xs-8{width:66.66667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333%}.col-xs-11{width:91.66667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333%}.col-xs-pull-2{right:16.66667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333%}.col-xs-pull-5{right:41.66667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333%}.col-xs-pull-8{right:66.66667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333%}.col-xs-pull-11{right:91.66667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333%}.col-xs-push-2{left:16.66667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333%}.col-xs-push-5{left:41.66667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333%}.col-xs-push-8{left:66.66667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333%}.col-xs-push-11{left:91.66667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333%}.col-xs-offset-2{margin-left:16.66667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333%}.col-xs-offset-5{margin-left:41.66667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333%}.col-xs-offset-8{margin-left:66.66667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333%}.col-xs-offset-11{margin-left:91.66667%}.col-xs-offset-12{margin-left:100%}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.42857;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>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.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>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.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-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.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:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.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:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.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:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.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:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.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:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}fieldset{padding:0;margin:0;border:0;min-width: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;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \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.42857;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;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::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=radio].disabled,fieldset[disabled] input[type=radio],input[type=checkbox][disabled],input[type=checkbox].disabled,fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-sm,.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-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:30px;line-height:30px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg,.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.33333;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:46px;line-height:46px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.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,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.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,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}.form-horizontal .has-feedback .form-control-feedback{right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus{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:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus{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:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus{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:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:400;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33333;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%}.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;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.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;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.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:400;line-height:1.42857;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}.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>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.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:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn,.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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-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:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .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:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.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-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;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-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.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:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{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-bottom-right-radius:0;border-top-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-bottom-left-radius:0;border-top-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{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.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:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.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.42857;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;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.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:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}.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;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}.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{background-color:#e7e7e7;color:#555}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:hover,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.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:#090909}.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{background-color:#090909;color:#fff}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:hover,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857;background-color:#fff;border:1px solid #ddd;border-radius:4px;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus,button.list-group-item:hover,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:hover,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active,button.list-group-item-success.active:hover,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:hover,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active,button.list-group-item-info.active:hover,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:hover,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active,button.list-group-item-warning.active:hover,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:hover,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active,button.list-group-item-danger.active:hover,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{transform:translate(0,-25%);transition:transform .3s ease-out}.modal.in .modal-dialog{transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header:before,.modal-header:after{content:" ";display:table}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.tooltip{position:absolute;z-index:1070;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:transparent}.carousel-control.left{background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs{display:none!important}.visible-sm{display:none!important}.visible-md{display:none!important}.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}.visible-print{display:none!important}.visible-print-block{display:none!important}.visible-print-inline{display:none!important}.visible-print-inline-block{display:none!important}elan-map{display:block;width:100%;height:380px;position:relative}elan-map svg{position:absolute;top:0;left:0}elan-map circle.elan,elan-map rect.elan{stroke:#5bc0de;stroke-width:2;fill:#fff}elan-map circle.elan,elan-map circle.uni{cursor:pointer}elan-map .node.uni circle.uni,elan-map .node.uni rect.uni{stroke:#ce5650;stroke-width:2;fill:#fff}elan-map .node.uni path{fill:#902d28}elan-map line{stroke:#ce5650;stroke-width:1}elan-map #map{background:#efebe2}elan-map .subunit{fill:#b7daff;stroke:white;stroke-width:1px}elan-map .subunit._10{fill:transparent;stroke:transparent}elan-map .exterior-boundary{fill:none;stroke:black;stroke-linejoin:round;stroke-width:1px}.service-container .btn{font-size:12px}.sla input.input-sm,.sla .input-group-sm>input.form-control,.sla .input-group-sm>input.input-group-addon,.sla .input-group-sm>.input-group-btn>input.btn{max-width:60px;text-align:right}service-map{width:100%;height:100px;display:block}service-map .node rect{fill:#fff;stroke-width:2px}service-map .node.uni rect{stroke:#ce5650}service-map .node.uni path{fill:#902d28}service-map .node.service rect{stroke:#337ab7}service-map .node.service path{fill:#1d4568}service-map .node text{font:12px sans-serif}service-map .link{fill:none;stroke:#ccc;stroke-width:1}#xosEcordTopology .btn-primary-border{color:#337ab7;background-color:#fff;border-color:#2e6da4}#xosEcordTopology .btn-primary-border:focus,#xosEcordTopology .btn-primary-border.focus{color:#337ab7;background-color:#e6e6e6;border-color:#122b40}#xosEcordTopology .btn-primary-border:hover{color:#337ab7;background-color:#e6e6e6;border-color:#204d74}#xosEcordTopology .btn-primary-border:active,#xosEcordTopology .btn-primary-border.active,.open>#xosEcordTopology .btn-primary-border.dropdown-toggle{color:#337ab7;background-color:#e6e6e6;border-color:#204d74}#xosEcordTopology .btn-primary-border:active:hover,#xosEcordTopology .btn-primary-border:active:focus,#xosEcordTopology .btn-primary-border:active.focus,#xosEcordTopology .btn-primary-border.active:hover,#xosEcordTopology .btn-primary-border.active:focus,#xosEcordTopology .btn-primary-border.active.focus,.open>#xosEcordTopology .btn-primary-border.dropdown-toggle:hover,.open>#xosEcordTopology .btn-primary-border.dropdown-toggle:focus,.open>#xosEcordTopology .btn-primary-border.dropdown-toggle.focus{color:#337ab7;background-color:#d4d4d4;border-color:#122b40}#xosEcordTopology .btn-primary-border:active,#xosEcordTopology .btn-primary-border.active,.open>#xosEcordTopology .btn-primary-border.dropdown-toggle{background-image:none}#xosEcordTopology .btn-primary-border.disabled:hover,#xosEcordTopology .btn-primary-border.disabled:focus,#xosEcordTopology .btn-primary-border.disabled.focus,#xosEcordTopology .btn-primary-border[disabled]:hover,#xosEcordTopology .btn-primary-border[disabled]:focus,#xosEcordTopology .btn-primary-border[disabled].focus,fieldset[disabled] #xosEcordTopology .btn-primary-border:hover,fieldset[disabled] #xosEcordTopology .btn-primary-border:focus,fieldset[disabled] #xosEcordTopology .btn-primary-border.focus{background-color:#fff;border-color:#2e6da4}#xosEcordTopology .btn-primary-border .badge{color:#fff;background-color:#337ab7}@media print{*,*:before,*:after{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]: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}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.visible-print-block{display:block!important}.visible-print-inline{display:inline!important}.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}@media(min-width:768px){.lead{font-size:21px}.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}.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-1{width:8.33333%}.col-sm-2{width:16.66667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333%}.col-sm-5{width:41.66667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333%}.col-sm-8{width:66.66667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333%}.col-sm-11{width:91.66667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333%}.col-sm-pull-2{right:16.66667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333%}.col-sm-pull-5{right:41.66667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333%}.col-sm-pull-8{right:66.66667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333%}.col-sm-pull-11{right:91.66667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333%}.col-sm-push-2{left:16.66667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333%}.col-sm-push-5{left:41.66667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333%}.col-sm-push-8{left:66.66667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333%}.col-sm-push-11{left:91.66667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-offset-12{margin-left:100%}.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 .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.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;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}.navbar{border-radius:4px}.navbar-header{float:left}.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-left:0;padding-right:0}.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}.navbar-static-top{border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.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 .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.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;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;box-shadow:none}.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media(min-width:992px){.container{width:970px}.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-1{width:8.33333%}.col-md-2{width:16.66667%}.col-md-3{width:25%}.col-md-4{width:33.33333%}.col-md-5{width:41.66667%}.col-md-6{width:50%}.col-md-7{width:58.33333%}.col-md-8{width:66.66667%}.col-md-9{width:75%}.col-md-10{width:83.33333%}.col-md-11{width:91.66667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333%}.col-md-pull-2{right:16.66667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333%}.col-md-pull-5{right:41.66667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333%}.col-md-pull-8{right:66.66667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333%}.col-md-pull-11{right:91.66667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333%}.col-md-push-2{left:16.66667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333%}.col-md-push-5{left:41.66667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333%}.col-md-push-8{left:66.66667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333%}.col-md-push-11{left:91.66667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333%}.col-md-offset-2{margin-left:16.66667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333%}.col-md-offset-5{margin-left:41.66667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333%}.col-md-offset-8{margin-left:66.66667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333%}.col-md-offset-11{margin-left:91.66667%}.col-md-offset-12{margin-left:100%}.modal-lg{width:900px}}@media(min-width:1200px){.container{width:1170px}.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-1{width:8.33333%}.col-lg-2{width:16.66667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333%}.col-lg-5{width:41.66667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333%}.col-lg-8{width:66.66667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333%}.col-lg-11{width:91.66667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333%}.col-lg-pull-2{right:16.66667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333%}.col-lg-pull-5{right:41.66667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333%}.col-lg-pull-8{right:66.66667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333%}.col-lg-pull-11{right:91.66667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333%}.col-lg-push-2{left:16.66667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333%}.col-lg-push-5{left:41.66667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333%}.col-lg-push-8{left:66.66667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333%}.col-lg-push-11{left:91.66667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-offset-12{margin-left:100%}.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-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>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.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>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th: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>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th: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>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}input[type=date].input-sm,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm input[type=date],input[type=time].input-sm,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm input[type=time],input[type=datetime-local].input-sm,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm input[type=datetime-local],input[type=month].input-sm,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm input[type=month]{line-height:30px}input[type=date].input-lg,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg input[type=date],input[type=time].input-lg,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg input[type=time],input[type=datetime-local].input-lg,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg input[type=datetime-local],input[type=month].input-lg,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg input[type=month]{line-height:46px}}@media(max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}@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}.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}.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-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}.hidden-xs{display:none!important}}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{transform:translate3d(0,0,0);left:0}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}.hidden-md{display:none!important}}
-service-map{width:100%;height:100px;display:block}service-map .node rect{fill:#fff;stroke-width:2px}service-map .node.uni rect{stroke:#ce5650}service-map .node.uni path{fill:#902d28}service-map .node.service rect{stroke:#337ab7}service-map .node.service path{fill:#1d4568}service-map .node text{font:12px sans-serif}service-map .link{fill:none;stroke:#ccc;stroke-width:1}
diff --git a/xos/core/xoslib/static/css/xosGlobalXos.css b/xos/core/xoslib/static/css/xosGlobalXos.css
deleted file mode 100644
index d2b40f3..0000000
--- a/xos/core/xoslib/static/css/xosGlobalXos.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosGlobalXos ui-view,#xosGlobalXos xos-list{display:block}#xosGlobalXos .well.active{background:#337ab7;color:#fff}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosHpc.css b/xos/core/xoslib/static/css/xosHpc.css
deleted file mode 100644
index 3aec11f..0000000
--- a/xos/core/xoslib/static/css/xosHpc.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosHpc .btn.btn-reload{margin-top:20px}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosLib.css b/xos/core/xoslib/static/css/xosLib.css
deleted file mode 100644
index 7e11db1..0000000
--- a/xos/core/xoslib/static/css/xosLib.css
+++ /dev/null
@@ -1,31 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/* Style helpers for xoslib*/
-
-
-/* gives an element the same spacing as it is inside a well*/
-.margin-wells {
-  margin: 12px;
-}
-
-/* if inside a form set margin-top to align with inputs instead of labels*/
-/* TODO once scss use a form like form [class^=span] > label + &[class^=span] > .margin-wells to match only if label is set*/
-form button.margin-wells {
-  margin-top: 20px;
-}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosMcord-slicing.css b/xos/core/xoslib/static/css/xosMcord-slicing.css
deleted file mode 100644
index 0f6b05a..0000000
--- a/xos/core/xoslib/static/css/xosMcord-slicing.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosMcord-slicing,#xosMcord-slicing>[ui-view],slicing-topo{width:100%;height:100%}slicing-topo{display:block}#xosMcord-slicing .node{stroke:#337ab7;fill:white}#xosMcord-slicing .node,#xosMcord-slicing .node+text{cursor:pointer}#xosMcord-slicing text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#xosMcord-slicing .node.control{stroke-dasharray:5;stroke:#d9534f}#xosMcord-slicing .node.button{stroke-dasharray:5;stroke:#5bc0de;fill:#daf1f8}#xosMcord-slicing .node.selected{stroke-width:5px;stroke-dasharray:5}#xosMcord-slicing .node~.icon{stroke:#337ab7;fill:#337ab7}#xosMcord-slicing .node.control~.icon{stroke:#d9534f;fill:#d9534f}#xosMcord-slicing .link{stroke:#286090;stroke-width:2px;cursor:pointer}#xosMcord-slicing .link.control{stroke-dasharray:5;stroke:#d9534f}#xosMcord-slicing .link.selected{stroke-width:5px;stroke-dasharray:5}#xosMcord-slicing .dragline{stroke-dasharray:5;stroke:#286090;stroke-width:2px}#xosMcord-slicing .dragline.hidden{stroke-width:0}#xosMcord-slicing div.element-form{position:absolute;border:1px solid #5bc0de;padding:10px;background:#fff}#xosMcord-slicing .form-line{stroke:#31b0d5;stroke-width:1px}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosMcordTopology.css b/xos/core/xoslib/static/css/xosMcordTopology.css
deleted file mode 100644
index 87e2cc8..0000000
--- a/xos/core/xoslib/static/css/xosMcordTopology.css
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-
-#xosMcordTopology{height:700px}[ui-view],m-cord-topology{width:100%;height:100%;display:block}line{stroke:blue}line.big{stroke-width:2}circle,rect{fill:#fff;stroke-width:1}.fabric{stroke:none;fill:#123456;fill-rule:evenodd}.fabric-container{fill:transparent;stroke:#000;stroke-width:1}.bbu{stroke:black;fill:#ff7f0e}.rru{stroke:#000;fill:#ffbb78}.rru.antenna{stroke:#000;fill:brown}.rru-shadow{fill:#ffbb78;opacity:.4}.MME,.SGW,.PGW,.Vid{fill:purple;stroke:#000}rect.MME,rect.SGW,rect.PGW,rect.bbu,rect.Vid{fill:#fff;stroke:#fff}.bbu text,.MME text,.SGW text,.PGW text,.Vid text{font-size:10px;stroke-width:0;fill:#000}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosOpenVPNDashboard.css b/xos/core/xoslib/static/css/xosOpenVPNDashboard.css
deleted file mode 100644
index 567bbe4..0000000
--- a/xos/core/xoslib/static/css/xosOpenVPNDashboard.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosOpenVPNDashboard{width:70%;margin:auto}#xosOpenVPNDashboard .vpn-row{display:table-row}#xosOpenVPNDashboard .vpn-cell{display:table-cell;padding:5px}#xosOpenVPNDashboard .vpn-header{font-weight:700}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosServiceGrid.css b/xos/core/xoslib/static/css/xosServiceGrid.css
deleted file mode 100644
index 69d1bd7..0000000
--- a/xos/core/xoslib/static/css/xosServiceGrid.css
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-xos-side-panel .xos-side-panel-content{position:fixed;width:30%;height:100%;padding:25px;background:#fff;overflow:scroll}xos-side-panel .xos-side-panel-content.right{border-left:1px solid #555;top:0;right:0;visibility:hidden;box-shadow:-10px 0 20px -8px rgba(0,0,0,.75)}xos-side-panel .xos-side-panel-content.right.out{animation:.5s slideOutRight ease-in-out;visibility:visible}xos-side-panel .xos-side-panel-content.right.in{animation:.5s slideInRight ease-in-out;visibility:visible}@keyframes slideInRight{from{transform:translate3d(100%,0,0);visibility:visible}to{transform:translate3d(0,0,0)}}@keyframes slideOutRight{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(100%,0,0)}}#xosServiceGrid{width:100%}#xosServiceGrid service-graph{display:block;width:100%;height:600px}#xosServiceGrid .node{stroke:#337ab7;fill:white}#xosServiceGrid .node.xos{fill:#d9534f}#xosServiceGrid .link{stroke:#286090;stroke-width:2px}#xosServiceGrid .link-arrow{stroke:#286090;fill:#286090}
-xos-side-panel .xos-side-panel-content{position:fixed;width:30%;height:100%;padding:25px;background:#fff;overflow:scroll}xos-side-panel .xos-side-panel-content.right{border-left:1px solid #555;top:0;right:0;visibility:hidden;box-shadow:-10px 0 20px -8px rgba(0,0,0,.75)}xos-side-panel .xos-side-panel-content.right.out{animation:.5s slideOutRight ease-in-out;visibility:visible}xos-side-panel .xos-side-panel-content.right.in{animation:.5s slideInRight ease-in-out;visibility:visible}@keyframes slideInRight{from{transform:translate3d(100%,0,0);visibility:visible}to{transform:translate3d(0,0,0)}}@keyframes slideOutRight{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(100%,0,0)}}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosSynchronizerNotifier.css b/xos/core/xoslib/static/css/xosSynchronizerNotifier.css
deleted file mode 100644
index f62c8bd..0000000
--- a/xos/core/xoslib/static/css/xosSynchronizerNotifier.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosSynchronizerNotifier{float:left}#xosSynchronizerNotifier .alert{margin-bottom:0!important}#xosSynchronizerNotifier .sync-status-container{position:relative;z-index:200}#xosSynchronizerNotifier .notification-panel{position:absolute;width:200px}#xosSynchronizerNotifier sync-status .badge.success{background-color:#5cb85c}#xosSynchronizerNotifier sync-status .badge.warning{background-color:#f0ad4e}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosTenant.css b/xos/core/xoslib/static/css/xosTenant.css
deleted file mode 100644
index c71874b..0000000
--- a/xos/core/xoslib/static/css/xosTenant.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosTenant [ui-view]{margin-bottom:100px}#xosTenant a{margin-bottom:15px}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosTruckroll.css b/xos/core/xoslib/static/css/xosTruckroll.css
deleted file mode 100644
index fc13e98..0000000
--- a/xos/core/xoslib/static/css/xosTruckroll.css
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-
-.row+.row{margin-top:20px}.animate-vertical.ng-hide-add{animation:.5s slideOutDown ease-in-out}.animate-vertical.ng-hide-remove{animation:.5s slideInUp ease-in-out}@keyframes slideInUp{from{transform:translate3d(0,100%,0);opacity:0}to{transform:translate3d(0,0,0);opacity:1}}@keyframes slideOutDown{from{transform:translate3d(0,0,0);opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.loader{font-size:10px;margin:0 auto;text-indent:-9999em;width:11em;height:11em;border-radius:50%;background:#fff;background:linear-gradient(to right,#fff 10%,rgba(255,255,255,0) 42%);position:relative;animation:load3 1.4s infinite linear;transform:translateZ(0)}.loader:before{width:50%;height:50%;background:#105e9e;border-radius:100% 0 0;position:absolute;top:0;left:0;content:''}.loader:after{background:#fff;width:75%;height:75%;border-radius:50%;content:'';margin:auto;position:absolute;top:0;left:0;bottom:0;right:0}@keyframes load3{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosUITutorial.css b/xos/core/xoslib/static/css/xosUITutorial.css
deleted file mode 100644
index 6434da8..0000000
--- a/xos/core/xoslib/static/css/xosUITutorial.css
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-#xosUITutorial{width:100%}#xosUITutorial js-shell{display:block}#xosUITutorial js-shell #shell-panel{width:100%;height:400px;background:#002b36;padding:10px;overflow:scroll;color:#93a1a1}#xosUITutorial js-shell #shell-panel .prompt{color:#d33682}#xosUITutorial js-shell #shell-panel .input{color:#268bd2}#xosUITutorial js-shell #shell-panel .cursor{color:#2aa198}#xosUITutorial js-shell #shell-panel .error{color:#dc322f}#xosUITutorial js-shell #shell-panel #shell-view>div>div{color:#268bd2}#xosUITutorial js-shell #shell-panel #shell-view .jsonObject{white-space:nowrap}#xosUITutorial js-shell #shell-panel #shell-view .jsonCollection>.jsonObject{margin-left:10px}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/images/dashboardManager-icon-active.png b/xos/core/xoslib/static/images/dashboardManager-icon-active.png
deleted file mode 100644
index 3dba74a..0000000
--- a/xos/core/xoslib/static/images/dashboardManager-icon-active.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/xoslib/static/images/dashboardManager-icon.png b/xos/core/xoslib/static/images/dashboardManager-icon.png
deleted file mode 100644
index 1d60a9a..0000000
--- a/xos/core/xoslib/static/images/dashboardManager-icon.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/xoslib/static/images/default-icon-active.png b/xos/core/xoslib/static/images/default-icon-active.png
deleted file mode 100644
index 09c9edd..0000000
--- a/xos/core/xoslib/static/images/default-icon-active.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/xoslib/static/images/default-icon.png b/xos/core/xoslib/static/images/default-icon.png
deleted file mode 100644
index a5ad2c8..0000000
--- a/xos/core/xoslib/static/images/default-icon.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/xoslib/static/images/diagnostic-icon-active.png b/xos/core/xoslib/static/images/diagnostic-icon-active.png
deleted file mode 100644
index e5decc8..0000000
--- a/xos/core/xoslib/static/images/diagnostic-icon-active.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/xoslib/static/images/diagnostic-icon.png b/xos/core/xoslib/static/images/diagnostic-icon.png
deleted file mode 100644
index b5d91ed..0000000
--- a/xos/core/xoslib/static/images/diagnostic-icon.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/xoslib/static/images/truckroll-icon-active.png b/xos/core/xoslib/static/images/truckroll-icon-active.png
deleted file mode 100644
index 71b2a55..0000000
--- a/xos/core/xoslib/static/images/truckroll-icon-active.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/xoslib/static/images/truckroll-icon.png b/xos/core/xoslib/static/images/truckroll-icon.png
deleted file mode 100644
index fb7c7dc..0000000
--- a/xos/core/xoslib/static/images/truckroll-icon.png
+++ /dev/null
Binary files differ
diff --git a/xos/core/xoslib/static/js/vendor/xosEcordTopologyVendor.js b/xos/core/xoslib/static/js/vendor/xosEcordTopologyVendor.js
deleted file mode 100644
index 57a3208..0000000
--- a/xos/core/xoslib/static/js/vendor/xosEcordTopologyVendor.js
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-if(function(t,e){"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){function n(t){var e="length"in t&&t.length,n=Z.type(t);return"function"!==n&&!Z.isWindow(t)&&(!(1!==t.nodeType||!e)||("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t))}function i(t,e,n){if(Z.isFunction(e))return Z.grep(t,function(t,i){return!!e.call(t,i,t)!==n});if(e.nodeType)return Z.grep(t,function(t){return t===e!==n});if("string"==typeof e){if(at.test(e))return Z.filter(e,t,n);e=Z.filter(e,t)}return Z.grep(t,function(t){return z.call(e,t)>=0!==n})}function o(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}function r(t){var e=ht[t]={};return Z.each(t.match(dt)||[],function(t,n){e[n]=!0}),e}function s(){J.removeEventListener("DOMContentLoaded",s,!1),t.removeEventListener("load",s,!1),Z.ready()}function a(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=Z.expando+a.uid++}function l(t,e,n){var i;if(void 0===n&&1===t.nodeType)if(i="data-"+e.replace(xt,"-$1").toLowerCase(),n=t.getAttribute(i),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:bt.test(n)?Z.parseJSON(n):n)}catch(o){}yt.set(t,e,n)}else n=void 0;return n}function c(){return!0}function u(){return!1}function f(){try{return J.activeElement}catch(t){}}function p(t,e){return Z.nodeName(t,"table")&&Z.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function d(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function h(t){var e=Pt.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function g(t,e){for(var n=0,i=t.length;n<i;n++)vt.set(t[n],"globalEval",!e||vt.get(e[n],"globalEval"))}function m(t,e){var n,i,o,r,s,a,l,c;if(1===e.nodeType){if(vt.hasData(t)&&(r=vt.access(t),s=vt.set(e,r),c=r.events)){delete s.handle,s.events={};for(o in c)for(n=0,i=c[o].length;n<i;n++)Z.event.add(e,o,c[o][n])}yt.hasData(t)&&(a=yt.access(t),l=Z.extend({},a),yt.set(e,l))}}function v(t,e){var n=t.getElementsByTagName?t.getElementsByTagName(e||"*"):t.querySelectorAll?t.querySelectorAll(e||"*"):[];return void 0===e||e&&Z.nodeName(t,e)?Z.merge([t],n):n}function y(t,e){var n=e.nodeName.toLowerCase();"input"===n&&Et.test(t.type)?e.checked=t.checked:"input"!==n&&"textarea"!==n||(e.defaultValue=t.defaultValue)}function b(e,n){var i,o=Z(n.createElement(e)).appendTo(n.body),r=t.getDefaultComputedStyle&&(i=t.getDefaultComputedStyle(o[0]))?i.display:Z.css(o[0],"display");return o.detach(),r}function x(t){var e=J,n=Mt[t];return n||(n=b(t,e),"none"!==n&&n||(Ft=(Ft||Z("<iframe frameborder='0' width='0' height='0'/>")).appendTo(e.documentElement),e=Ft[0].contentDocument,e.write(),e.close(),n=b(t,e),Ft.detach()),Mt[t]=n),n}function w(t,e,n){var i,o,r,s,a=t.style;return n=n||Bt(t),n&&(s=n.getPropertyValue(e)||n[e]),n&&(""!==s||Z.contains(t.ownerDocument,t)||(s=Z.style(t,e)),_t.test(s)&&Wt.test(e)&&(i=a.width,o=a.minWidth,r=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=i,a.minWidth=o,a.maxWidth=r)),void 0!==s?s+"":s}function T(t,e){return{get:function(){return t()?void delete this.get:(this.get=e).apply(this,arguments)}}}function C(t,e){if(e in t)return e;for(var n=e[0].toUpperCase()+e.slice(1),i=e,o=Gt.length;o--;)if(e=Gt[o]+n,e in t)return e;return i}function E(t,e,n){var i=Vt.exec(e);return i?Math.max(0,i[1]-(n||0))+(i[2]||"px"):e}function $(t,e,n,i,o){for(var r=n===(i?"border":"content")?4:"width"===e?1:0,s=0;r<4;r+=2)"margin"===n&&(s+=Z.css(t,n+Tt[r],!0,o)),i?("content"===n&&(s-=Z.css(t,"padding"+Tt[r],!0,o)),"margin"!==n&&(s-=Z.css(t,"border"+Tt[r]+"Width",!0,o))):(s+=Z.css(t,"padding"+Tt[r],!0,o),"padding"!==n&&(s+=Z.css(t,"border"+Tt[r]+"Width",!0,o)));return s}function k(t,e,n){var i=!0,o="width"===e?t.offsetWidth:t.offsetHeight,r=Bt(t),s="border-box"===Z.css(t,"boxSizing",!1,r);if(o<=0||null==o){if(o=w(t,e,r),(o<0||null==o)&&(o=t.style[e]),_t.test(o))return o;i=s&&(Y.boxSizingReliable()||o===t.style[e]),o=parseFloat(o)||0}return o+$(t,e,n||(s?"border":"content"),i,r)+"px"}function S(t,e){for(var n,i,o,r=[],s=0,a=t.length;s<a;s++)i=t[s],i.style&&(r[s]=vt.get(i,"olddisplay"),n=i.style.display,e?(r[s]||"none"!==n||(i.style.display=""),""===i.style.display&&Ct(i)&&(r[s]=vt.access(i,"olddisplay",x(i.nodeName)))):(o=Ct(i),"none"===n&&o||vt.set(i,"olddisplay",o?n:Z.css(i,"display"))));for(s=0;s<a;s++)i=t[s],i.style&&(e&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=e?r[s]||"":"none"));return t}function N(t,e,n,i,o){return new N.prototype.init(t,e,n,i,o)}function D(){return setTimeout(function(){Yt=void 0}),Yt=Z.now()}function A(t,e){var n,i=0,o={height:t};for(e=e?1:0;i<4;i+=2-e)n=Tt[i],o["margin"+n]=o["padding"+n]=t;return e&&(o.opacity=o.width=t),o}function j(t,e,n){for(var i,o=(ne[e]||[]).concat(ne["*"]),r=0,s=o.length;r<s;r++)if(i=o[r].call(n,e,t))return i}function O(t,e,n){var i,o,r,s,a,l,c,u,f=this,p={},d=t.style,h=t.nodeType&&Ct(t),g=vt.get(t,"fxshow");n.queue||(a=Z._queueHooks(t,"fx"),null==a.unqueued&&(a.unqueued=0,l=a.empty.fire,a.empty.fire=function(){a.unqueued||l()}),a.unqueued++,f.always(function(){f.always(function(){a.unqueued--,Z.queue(t,"fx").length||a.empty.fire()})})),1===t.nodeType&&("height"in e||"width"in e)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],c=Z.css(t,"display"),u="none"===c?vt.get(t,"olddisplay")||x(t.nodeName):c,"inline"===u&&"none"===Z.css(t,"float")&&(d.display="inline-block")),n.overflow&&(d.overflow="hidden",f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in e)if(o=e[i],Kt.exec(o)){if(delete e[i],r=r||"toggle"===o,o===(h?"hide":"show")){if("show"!==o||!g||void 0===g[i])continue;h=!0}p[i]=g&&g[i]||Z.style(t,i)}else c=void 0;if(Z.isEmptyObject(p))"inline"===("none"===c?x(t.nodeName):c)&&(d.display=c);else{g?"hidden"in g&&(h=g.hidden):g=vt.access(t,"fxshow",{}),r&&(g.hidden=!h),h?Z(t).show():f.done(function(){Z(t).hide()}),f.done(function(){var e;vt.remove(t,"fxshow");for(e in p)Z.style(t,e,p[e])});for(i in p)s=j(h?g[i]:0,i,f),i in g||(g[i]=s.start,h&&(s.end=s.start,s.start="width"===i||"height"===i?1:0))}}function I(t,e){var n,i,o,r,s;for(n in t)if(i=Z.camelCase(n),o=e[i],r=t[n],Z.isArray(r)&&(o=r[1],r=t[n]=r[0]),n!==i&&(t[i]=r,delete t[n]),s=Z.cssHooks[i],s&&"expand"in s){r=s.expand(r),delete t[i];for(n in r)n in t||(t[n]=r[n],e[n]=o)}else e[i]=o}function L(t,e,n){var i,o,r=0,s=ee.length,a=Z.Deferred().always(function(){delete l.elem}),l=function(){if(o)return!1;for(var e=Yt||D(),n=Math.max(0,c.startTime+c.duration-e),i=n/c.duration||0,r=1-i,s=0,l=c.tweens.length;s<l;s++)c.tweens[s].run(r);return a.notifyWith(t,[c,r,n]),r<1&&l?n:(a.resolveWith(t,[c]),!1)},c=a.promise({elem:t,props:Z.extend({},e),opts:Z.extend(!0,{specialEasing:{}},n),originalProperties:e,originalOptions:n,startTime:Yt||D(),duration:n.duration,tweens:[],createTween:function(e,n){var i=Z.Tween(t,c.opts,e,n,c.opts.specialEasing[e]||c.opts.easing);return c.tweens.push(i),i},stop:function(e){var n=0,i=e?c.tweens.length:0;if(o)return this;for(o=!0;n<i;n++)c.tweens[n].run(1);return e?a.resolveWith(t,[c,e]):a.rejectWith(t,[c,e]),this}}),u=c.props;for(I(u,c.opts.specialEasing);r<s;r++)if(i=ee[r].call(c,t,u,c.opts))return i;return Z.map(u,j,c),Z.isFunction(c.opts.start)&&c.opts.start.call(t,c),Z.fx.timer(Z.extend(l,{elem:t,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function R(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var i,o=0,r=e.toLowerCase().match(dt)||[];if(Z.isFunction(n))for(;i=r[o++];)"+"===i[0]?(i=i.slice(1)||"*",(t[i]=t[i]||[]).unshift(n)):(t[i]=t[i]||[]).push(n)}}function P(t,e,n,i){function o(a){var l;return r[a]=!0,Z.each(t[a]||[],function(t,a){var c=a(e,n,i);return"string"!=typeof c||s||r[c]?s?!(l=c):void 0:(e.dataTypes.unshift(c),o(c),!1)}),l}var r={},s=t===be;return o(e.dataTypes[0])||!r["*"]&&o("*")}function q(t,e){var n,i,o=Z.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((o[n]?t:i||(i={}))[n]=e[n]);return i&&Z.extend(!0,t,i),t}function H(t,e,n){for(var i,o,r,s,a=t.contents,l=t.dataTypes;"*"===l[0];)l.shift(),void 0===i&&(i=t.mimeType||e.getResponseHeader("Content-Type"));if(i)for(o in a)if(a[o]&&a[o].test(i)){l.unshift(o);break}if(l[0]in n)r=l[0];else{for(o in n){if(!l[0]||t.converters[o+" "+l[0]]){r=o;break}s||(s=o)}r=r||s}if(r)return r!==l[0]&&l.unshift(r),n[r]}function F(t,e,n,i){var o,r,s,a,l,c={},u=t.dataTypes.slice();if(u[1])for(s in t.converters)c[s.toLowerCase()]=t.converters[s];for(r=u.shift();r;)if(t.responseFields[r]&&(n[t.responseFields[r]]=e),!l&&i&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l=r,r=u.shift())if("*"===r)r=l;else if("*"!==l&&l!==r){if(s=c[l+" "+r]||c["* "+r],!s)for(o in c)if(a=o.split(" "),a[1]===r&&(s=c[l+" "+a[0]]||c["* "+a[0]])){s===!0?s=c[o]:c[o]!==!0&&(r=a[0],u.unshift(a[1]));break}if(s!==!0)if(s&&t["throws"])e=s(e);else try{e=s(e)}catch(f){return{state:"parsererror",error:s?f:"No conversion from "+l+" to "+r}}}return{state:"success",data:e}}function M(t,e,n,i){var o;if(Z.isArray(e))Z.each(e,function(e,o){n||Ee.test(t)?i(t,o):M(t+"["+("object"==typeof o?e:"")+"]",o,n,i)});else if(n||"object"!==Z.type(e))i(t,e);else for(o in e)M(t+"["+o+"]",e[o],n,i)}function W(t){return Z.isWindow(t)?t:9===t.nodeType&&t.defaultView}var _=[],B=_.slice,U=_.concat,V=_.push,z=_.indexOf,X={},Q=X.toString,G=X.hasOwnProperty,Y={},J=t.document,K="2.1.4",Z=function(t,e){return new Z.fn.init(t,e)},tt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,et=/^-ms-/,nt=/-([\da-z])/gi,it=function(t,e){return e.toUpperCase()};Z.fn=Z.prototype={jquery:K,constructor:Z,selector:"",length:0,toArray:function(){return B.call(this)},get:function(t){return null!=t?t<0?this[t+this.length]:this[t]:B.call(this)},pushStack:function(t){var e=Z.merge(this.constructor(),t);return e.prevObject=this,e.context=this.context,e},each:function(t,e){return Z.each(this,t,e)},map:function(t){return this.pushStack(Z.map(this,function(e,n){return t.call(e,n,e)}))},slice:function(){return this.pushStack(B.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n<e?[this[n]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:V,sort:_.sort,splice:_.splice},Z.extend=Z.fn.extend=function(){var t,e,n,i,o,r,s=arguments[0]||{},a=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[a]||{},a++),"object"==typeof s||Z.isFunction(s)||(s={}),a===l&&(s=this,a--);a<l;a++)if(null!=(t=arguments[a]))for(e in t)n=s[e],i=t[e],s!==i&&(c&&i&&(Z.isPlainObject(i)||(o=Z.isArray(i)))?(o?(o=!1,r=n&&Z.isArray(n)?n:[]):r=n&&Z.isPlainObject(n)?n:{},s[e]=Z.extend(c,r,i)):void 0!==i&&(s[e]=i));return s},Z.extend({expando:"jQuery"+(K+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isFunction:function(t){return"function"===Z.type(t)},isArray:Array.isArray,isWindow:function(t){return null!=t&&t===t.window},isNumeric:function(t){return!Z.isArray(t)&&t-parseFloat(t)+1>=0},isPlainObject:function(t){return"object"===Z.type(t)&&!t.nodeType&&!Z.isWindow(t)&&!(t.constructor&&!G.call(t.constructor.prototype,"isPrototypeOf"))},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},type:function(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?X[Q.call(t)]||"object":typeof t},globalEval:function(t){var e,n=eval;t=Z.trim(t),t&&(1===t.indexOf("use strict")?(e=J.createElement("script"),e.text=t,J.head.appendChild(e).parentNode.removeChild(e)):n(t))},camelCase:function(t){return t.replace(et,"ms-").replace(nt,it)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e,i){var o,r=0,s=t.length,a=n(t);if(i){if(a)for(;r<s&&(o=e.apply(t[r],i),o!==!1);r++);else for(r in t)if(o=e.apply(t[r],i),o===!1)break}else if(a)for(;r<s&&(o=e.call(t[r],r,t[r]),o!==!1);r++);else for(r in t)if(o=e.call(t[r],r,t[r]),o===!1)break;return t},trim:function(t){return null==t?"":(t+"").replace(tt,"")},makeArray:function(t,e){var i=e||[];return null!=t&&(n(Object(t))?Z.merge(i,"string"==typeof t?[t]:t):V.call(i,t)),i},inArray:function(t,e,n){return null==e?-1:z.call(e,t,n)},merge:function(t,e){for(var n=+e.length,i=0,o=t.length;i<n;i++)t[o++]=e[i];return t.length=o,t},grep:function(t,e,n){for(var i,o=[],r=0,s=t.length,a=!n;r<s;r++)i=!e(t[r],r),i!==a&&o.push(t[r]);return o},map:function(t,e,i){var o,r=0,s=t.length,a=n(t),l=[];if(a)for(;r<s;r++)o=e(t[r],r,i),null!=o&&l.push(o);else for(r in t)o=e(t[r],r,i),null!=o&&l.push(o);return U.apply([],l)},guid:1,proxy:function(t,e){var n,i,o;if("string"==typeof e&&(n=t[e],e=t,t=n),Z.isFunction(t))return i=B.call(arguments,2),o=function(){return t.apply(e||this,i.concat(B.call(arguments)))},o.guid=t.guid=t.guid||Z.guid++,o},now:Date.now,support:Y}),Z.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(t,e){X["[object "+e+"]"]=e.toLowerCase()});var ot=function(t){function e(t,e,n,i){var o,r,s,a,l,c,f,d,h,g;if((e?e.ownerDocument||e:M)!==O&&j(e),e=e||O,n=n||[],a=e.nodeType,"string"!=typeof t||!t||1!==a&&9!==a&&11!==a)return n;if(!i&&L){if(11!==a&&(o=yt.exec(t)))if(s=o[1]){if(9===a){if(r=e.getElementById(s),!r||!r.parentNode)return n;if(r.id===s)return n.push(r),n}else if(e.ownerDocument&&(r=e.ownerDocument.getElementById(s))&&H(e,r)&&r.id===s)return n.push(r),n}else{if(o[2])return K.apply(n,e.getElementsByTagName(t)),n;if((s=o[3])&&w.getElementsByClassName)return K.apply(n,e.getElementsByClassName(s)),n}if(w.qsa&&(!R||!R.test(t))){if(d=f=F,h=e,g=1!==a&&t,1===a&&"object"!==e.nodeName.toLowerCase()){for(c=$(t),(f=e.getAttribute("id"))?d=f.replace(xt,"\\$&"):e.setAttribute("id",d),d="[id='"+d+"'] ",l=c.length;l--;)c[l]=d+p(c[l]);h=bt.test(t)&&u(e.parentNode)||e,g=c.join(",")}if(g)try{return K.apply(n,h.querySelectorAll(g)),n}catch(m){}finally{f||e.removeAttribute("id")}}}return S(t.replace(lt,"$1"),e,n,i)}function n(){function t(n,i){return e.push(n+" ")>T.cacheLength&&delete t[e.shift()],t[n+" "]=i}var e=[];return t}function i(t){return t[F]=!0,t}function o(t){var e=O.createElement("div");try{return!!t(e)}catch(n){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function r(t,e){for(var n=t.split("|"),i=t.length;i--;)T.attrHandle[n[i]]=e}function s(t,e){var n=e&&t,i=n&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||X)-(~t.sourceIndex||X);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function a(t){return function(e){var n=e.nodeName.toLowerCase();return"input"===n&&e.type===t}}function l(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function c(t){return i(function(e){return e=+e,i(function(n,i){for(var o,r=t([],n.length,e),s=r.length;s--;)n[o=r[s]]&&(n[o]=!(i[o]=n[o]))})})}function u(t){return t&&"undefined"!=typeof t.getElementsByTagName&&t}function f(){}function p(t){for(var e=0,n=t.length,i="";e<n;e++)i+=t[e].value;return i}function d(t,e,n){var i=e.dir,o=n&&"parentNode"===i,r=_++;return e.first?function(e,n,r){for(;e=e[i];)if(1===e.nodeType||o)return t(e,n,r)}:function(e,n,s){var a,l,c=[W,r];if(s){for(;e=e[i];)if((1===e.nodeType||o)&&t(e,n,s))return!0}else for(;e=e[i];)if(1===e.nodeType||o){if(l=e[F]||(e[F]={}),(a=l[i])&&a[0]===W&&a[1]===r)return c[2]=a[2];if(l[i]=c,c[2]=t(e,n,s))return!0}}}function h(t){return t.length>1?function(e,n,i){for(var o=t.length;o--;)if(!t[o](e,n,i))return!1;return!0}:t[0]}function g(t,n,i){for(var o=0,r=n.length;o<r;o++)e(t,n[o],i);return i}function m(t,e,n,i,o){for(var r,s=[],a=0,l=t.length,c=null!=e;a<l;a++)(r=t[a])&&(n&&!n(r,i,o)||(s.push(r),c&&e.push(a)));return s}function v(t,e,n,o,r,s){return o&&!o[F]&&(o=v(o)),r&&!r[F]&&(r=v(r,s)),i(function(i,s,a,l){var c,u,f,p=[],d=[],h=s.length,v=i||g(e||"*",a.nodeType?[a]:a,[]),y=!t||!i&&e?v:m(v,p,t,a,l),b=n?r||(i?t:h||o)?[]:s:y;if(n&&n(y,b,a,l),o)for(c=m(b,d),o(c,[],a,l),u=c.length;u--;)(f=c[u])&&(b[d[u]]=!(y[d[u]]=f));if(i){if(r||t){if(r){for(c=[],u=b.length;u--;)(f=b[u])&&c.push(y[u]=f);r(null,b=[],c,l)}for(u=b.length;u--;)(f=b[u])&&(c=r?tt(i,f):p[u])>-1&&(i[c]=!(s[c]=f))}}else b=m(b===s?b.splice(h,b.length):b),r?r(null,s,b,l):K.apply(s,b)})}function y(t){for(var e,n,i,o=t.length,r=T.relative[t[0].type],s=r||T.relative[" "],a=r?1:0,l=d(function(t){return t===e},s,!0),c=d(function(t){return tt(e,t)>-1},s,!0),u=[function(t,n,i){var o=!r&&(i||n!==N)||((e=n).nodeType?l(t,n,i):c(t,n,i));return e=null,o}];a<o;a++)if(n=T.relative[t[a].type])u=[d(h(u),n)];else{if(n=T.filter[t[a].type].apply(null,t[a].matches),n[F]){for(i=++a;i<o&&!T.relative[t[i].type];i++);return v(a>1&&h(u),a>1&&p(t.slice(0,a-1).concat({value:" "===t[a-2].type?"*":""})).replace(lt,"$1"),n,a<i&&y(t.slice(a,i)),i<o&&y(t=t.slice(i)),i<o&&p(t))}u.push(n)}return h(u)}function b(t,n){var o=n.length>0,r=t.length>0,s=function(i,s,a,l,c){var u,f,p,d=0,h="0",g=i&&[],v=[],y=N,b=i||r&&T.find.TAG("*",c),x=W+=null==y?1:Math.random()||.1,w=b.length;for(c&&(N=s!==O&&s);h!==w&&null!=(u=b[h]);h++){if(r&&u){for(f=0;p=t[f++];)if(p(u,s,a)){l.push(u);break}c&&(W=x)}o&&((u=!p&&u)&&d--,i&&g.push(u))}if(d+=h,o&&h!==d){for(f=0;p=n[f++];)p(g,v,s,a);if(i){if(d>0)for(;h--;)g[h]||v[h]||(v[h]=Y.call(l));v=m(v)}K.apply(l,v),c&&!i&&v.length>0&&d+n.length>1&&e.uniqueSort(l)}return c&&(W=x,N=y),g};return o?i(s):s}var x,w,T,C,E,$,k,S,N,D,A,j,O,I,L,R,P,q,H,F="sizzle"+1*new Date,M=t.document,W=0,_=0,B=n(),U=n(),V=n(),z=function(t,e){return t===e&&(A=!0),0},X=1<<31,Q={}.hasOwnProperty,G=[],Y=G.pop,J=G.push,K=G.push,Z=G.slice,tt=function(t,e){for(var n=0,i=t.length;n<i;n++)if(t[n]===e)return n;return-1},et="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",nt="[\\x20\\t\\r\\n\\f]",it="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ot=it.replace("w","w#"),rt="\\["+nt+"*("+it+")(?:"+nt+"*([*^$|!~]?=)"+nt+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ot+"))|)"+nt+"*\\]",st=":("+it+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+rt+")*)|.*)\\)|)",at=new RegExp(nt+"+","g"),lt=new RegExp("^"+nt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+nt+"+$","g"),ct=new RegExp("^"+nt+"*,"+nt+"*"),ut=new RegExp("^"+nt+"*([>+~]|"+nt+")"+nt+"*"),ft=new RegExp("="+nt+"*([^\\]'\"]*?)"+nt+"*\\]","g"),pt=new RegExp(st),dt=new RegExp("^"+ot+"$"),ht={ID:new RegExp("^#("+it+")"),CLASS:new RegExp("^\\.("+it+")"),TAG:new RegExp("^("+it.replace("w","w*")+")"),ATTR:new RegExp("^"+rt),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+nt+"*(even|odd|(([+-]|)(\\d*)n|)"+nt+"*(?:([+-]|)"+nt+"*(\\d+)|))"+nt+"*\\)|)","i"),bool:new RegExp("^(?:"+et+")$","i"),needsContext:new RegExp("^"+nt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+nt+"*((?:-\\d)?\\d*)"+nt+"*\\)|)(?=[^-]|$)","i")},gt=/^(?:input|select|textarea|button)$/i,mt=/^h\d$/i,vt=/^[^{]+\{\s*\[native \w/,yt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,bt=/[+~]/,xt=/'|\\/g,wt=new RegExp("\\\\([\\da-f]{1,6}"+nt+"?|("+nt+")|.)","ig"),Tt=function(t,e,n){var i="0x"+e-65536;return i!==i||n?e:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},Ct=function(){j()};try{K.apply(G=Z.call(M.childNodes),M.childNodes),G[M.childNodes.length].nodeType}catch(Et){K={apply:G.length?function(t,e){J.apply(t,Z.call(e))}:function(t,e){for(var n=t.length,i=0;t[n++]=e[i++];);t.length=n-1}}}w=e.support={},E=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},j=e.setDocument=function(t){var e,n,i=t?t.ownerDocument||t:M;return i!==O&&9===i.nodeType&&i.documentElement?(O=i,I=i.documentElement,n=i.defaultView,n&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",Ct,!1):n.attachEvent&&n.attachEvent("onunload",Ct)),L=!E(i),w.attributes=o(function(t){return t.className="i",!t.getAttribute("className")}),w.getElementsByTagName=o(function(t){return t.appendChild(i.createComment("")),!t.getElementsByTagName("*").length}),w.getElementsByClassName=vt.test(i.getElementsByClassName),w.getById=o(function(t){return I.appendChild(t).id=F,!i.getElementsByName||!i.getElementsByName(F).length}),w.getById?(T.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&L){var n=e.getElementById(t);return n&&n.parentNode?[n]:[]}},T.filter.ID=function(t){var e=t.replace(wt,Tt);return function(t){return t.getAttribute("id")===e}}):(delete T.find.ID,T.filter.ID=function(t){var e=t.replace(wt,Tt);return function(t){var n="undefined"!=typeof t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}}),T.find.TAG=w.getElementsByTagName?function(t,e){return"undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t):w.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,i=[],o=0,r=e.getElementsByTagName(t);if("*"===t){for(;n=r[o++];)1===n.nodeType&&i.push(n);return i}return r},T.find.CLASS=w.getElementsByClassName&&function(t,e){if(L)return e.getElementsByClassName(t)},P=[],R=[],(w.qsa=vt.test(i.querySelectorAll))&&(o(function(t){I.appendChild(t).innerHTML="<a id='"+F+"'></a><select id='"+F+"-\f]' msallowcapture=''><option selected=''></option></select>",t.querySelectorAll("[msallowcapture^='']").length&&R.push("[*^$]="+nt+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||R.push("\\["+nt+"*(?:value|"+et+")"),t.querySelectorAll("[id~="+F+"-]").length||R.push("~="),t.querySelectorAll(":checked").length||R.push(":checked"),t.querySelectorAll("a#"+F+"+*").length||R.push(".#.+[+~]")}),o(function(t){var e=i.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&R.push("name"+nt+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||R.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),R.push(",.*:")})),(w.matchesSelector=vt.test(q=I.matches||I.webkitMatchesSelector||I.mozMatchesSelector||I.oMatchesSelector||I.msMatchesSelector))&&o(function(t){w.disconnectedMatch=q.call(t,"div"),q.call(t,"[s!='']:x"),P.push("!=",st)}),R=R.length&&new RegExp(R.join("|")),P=P.length&&new RegExp(P.join("|")),e=vt.test(I.compareDocumentPosition),H=e||vt.test(I.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},z=e?function(t,e){if(t===e)return A=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n?n:(n=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&n||!w.sortDetached&&e.compareDocumentPosition(t)===n?t===i||t.ownerDocument===M&&H(M,t)?-1:e===i||e.ownerDocument===M&&H(M,e)?1:D?tt(D,t)-tt(D,e):0:4&n?-1:1)}:function(t,e){if(t===e)return A=!0,0;var n,o=0,r=t.parentNode,a=e.parentNode,l=[t],c=[e];if(!r||!a)return t===i?-1:e===i?1:r?-1:a?1:D?tt(D,t)-tt(D,e):0;if(r===a)return s(t,e);for(n=t;n=n.parentNode;)l.unshift(n);for(n=e;n=n.parentNode;)c.unshift(n);for(;l[o]===c[o];)o++;return o?s(l[o],c[o]):l[o]===M?-1:c[o]===M?1:0},i):O},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==O&&j(t),n=n.replace(ft,"='$1']"),w.matchesSelector&&L&&(!P||!P.test(n))&&(!R||!R.test(n)))try{var i=q.call(t,n);if(i||w.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(o){}return e(n,O,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==O&&j(t),H(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==O&&j(t);var n=T.attrHandle[e.toLowerCase()],i=n&&Q.call(T.attrHandle,e.toLowerCase())?n(t,e,!L):void 0;return void 0!==i?i:w.attributes||!L?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,n=[],i=0,o=0;if(A=!w.detectDuplicates,D=!w.sortStable&&t.slice(0),t.sort(z),A){for(;e=t[o++];)e===t[o]&&(i=n.push(o));for(;i--;)t.splice(n[i],1)}return D=null,t},C=e.getText=function(t){var e,n="",i=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=C(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[i++];)n+=C(e);return n},T=e.selectors={cacheLength:50,createPseudo:i,match:ht,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(wt,Tt),t[3]=(t[3]||t[4]||t[5]||"").replace(wt,Tt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return ht.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&pt.test(n)&&(e=$(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(wt,Tt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=B[t+" "];return e||(e=new RegExp("(^|"+nt+")"+t+"("+nt+"|$)"))&&B(t,function(t){return e.test("string"==typeof t.className&&t.className||"undefined"!=typeof t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,n,i){return function(o){var r=e.attr(o,t);return null==r?"!="===n:!n||(r+="","="===n?r===i:"!="===n?r!==i:"^="===n?i&&0===r.indexOf(i):"*="===n?i&&r.indexOf(i)>-1:"$="===n?i&&r.slice(-i.length)===i:"~="===n?(" "+r.replace(at," ")+" ").indexOf(i)>-1:"|="===n&&(r===i||r.slice(0,i.length+1)===i+"-"))}},CHILD:function(t,e,n,i,o){var r="nth"!==t.slice(0,3),s="last"!==t.slice(-4),a="of-type"===e;return 1===i&&0===o?function(t){return!!t.parentNode}:function(e,n,l){var c,u,f,p,d,h,g=r!==s?"nextSibling":"previousSibling",m=e.parentNode,v=a&&e.nodeName.toLowerCase(),y=!l&&!a;if(m){if(r){for(;g;){for(f=e;f=f[g];)if(a?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;h=g="only"===t&&!h&&"nextSibling"}return!0}if(h=[s?m.firstChild:m.lastChild],s&&y){for(u=m[F]||(m[F]={}),c=u[t]||[],d=c[0]===W&&c[1],p=c[0]===W&&c[2],f=d&&m.childNodes[d];f=++d&&f&&f[g]||(p=d=0)||h.pop();)if(1===f.nodeType&&++p&&f===e){u[t]=[W,d,p];break}}else if(y&&(c=(e[F]||(e[F]={}))[t])&&c[0]===W)p=c[1];else for(;(f=++d&&f&&f[g]||(p=d=0)||h.pop())&&((a?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++p||(y&&((f[F]||(f[F]={}))[t]=[W,p]),f!==e)););return p-=o,p===i||p%i===0&&p/i>=0}}},PSEUDO:function(t,n){var o,r=T.pseudos[t]||T.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return r[F]?r(n):r.length>1?(o=[t,t,"",n],T.setFilters.hasOwnProperty(t.toLowerCase())?i(function(t,e){for(var i,o=r(t,n),s=o.length;s--;)i=tt(t,o[s]),t[i]=!(e[i]=o[s])}):function(t){return r(t,0,o)}):r}},pseudos:{not:i(function(t){var e=[],n=[],o=k(t.replace(lt,"$1"));return o[F]?i(function(t,e,n,i){for(var r,s=o(t,null,i,[]),a=t.length;a--;)(r=s[a])&&(t[a]=!(e[a]=r))}):function(t,i,r){return e[0]=t,o(e,null,r,n),e[0]=null,!n.pop()}}),has:i(function(t){return function(n){return e(t,n).length>0}}),contains:i(function(t){return t=t.replace(wt,Tt),function(e){return(e.textContent||e.innerText||C(e)).indexOf(t)>-1}}),lang:i(function(t){return dt.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(wt,Tt).toLowerCase(),function(e){var n;do if(n=L?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===I},focus:function(t){return t===O.activeElement&&(!O.hasFocus||O.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!T.pseudos.empty(t)},header:function(t){return mt.test(t.nodeName)},input:function(t){return gt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:c(function(){return[0]}),last:c(function(t,e){return[e-1]}),eq:c(function(t,e,n){return[n<0?n+e:n]}),even:c(function(t,e){for(var n=0;n<e;n+=2)t.push(n);return t}),odd:c(function(t,e){for(var n=1;n<e;n+=2)t.push(n);return t}),lt:c(function(t,e,n){for(var i=n<0?n+e:n;--i>=0;)t.push(i);return t}),gt:c(function(t,e,n){for(var i=n<0?n+e:n;++i<e;)t.push(i);return t})}},T.pseudos.nth=T.pseudos.eq;for(x in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})T.pseudos[x]=a(x);for(x in{submit:!0,reset:!0})T.pseudos[x]=l(x);return f.prototype=T.filters=T.pseudos,T.setFilters=new f,$=e.tokenize=function(t,n){var i,o,r,s,a,l,c,u=U[t+" "];if(u)return n?0:u.slice(0);for(a=t,l=[],c=T.preFilter;a;){i&&!(o=ct.exec(a))||(o&&(a=a.slice(o[0].length)||a),l.push(r=[])),i=!1,(o=ut.exec(a))&&(i=o.shift(),r.push({value:i,type:o[0].replace(lt," ")}),a=a.slice(i.length));for(s in T.filter)!(o=ht[s].exec(a))||c[s]&&!(o=c[s](o))||(i=o.shift(),r.push({value:i,type:s,matches:o}),a=a.slice(i.length));if(!i)break}return n?a.length:a?e.error(t):U(t,l).slice(0)},k=e.compile=function(t,e){var n,i=[],o=[],r=V[t+" "];if(!r){for(e||(e=$(t)),n=e.length;n--;)r=y(e[n]),r[F]?i.push(r):o.push(r);r=V(t,b(o,i)),r.selector=t}return r},S=e.select=function(t,e,n,i){var o,r,s,a,l,c="function"==typeof t&&t,f=!i&&$(t=c.selector||t);if(n=n||[],1===f.length){if(r=f[0]=f[0].slice(0),r.length>2&&"ID"===(s=r[0]).type&&w.getById&&9===e.nodeType&&L&&T.relative[r[1].type]){if(e=(T.find.ID(s.matches[0].replace(wt,Tt),e)||[])[0],!e)return n;c&&(e=e.parentNode),t=t.slice(r.shift().value.length)}for(o=ht.needsContext.test(t)?0:r.length;o--&&(s=r[o],!T.relative[a=s.type]);)if((l=T.find[a])&&(i=l(s.matches[0].replace(wt,Tt),bt.test(r[0].type)&&u(e.parentNode)||e))){if(r.splice(o,1),t=i.length&&p(r),!t)return K.apply(n,i),n;break}}return(c||k(t,f))(i,e,!L,n,bt.test(t)&&u(e.parentNode)||e),n},w.sortStable=F.split("").sort(z).join("")===F,w.detectDuplicates=!!A,j(),w.sortDetached=o(function(t){return 1&t.compareDocumentPosition(O.createElement("div"))}),o(function(t){return t.innerHTML="<a href='#'></a>","#"===t.firstChild.getAttribute("href")})||r("type|href|height|width",function(t,e,n){if(!n)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),w.attributes&&o(function(t){return t.innerHTML="<input/>",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||r("value",function(t,e,n){if(!n&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),o(function(t){return null==t.getAttribute("disabled")})||r(et,function(t,e,n){var i;if(!n)return t[e]===!0?e.toLowerCase():(i=t.getAttributeNode(e))&&i.specified?i.value:null}),e}(t);Z.find=ot,Z.expr=ot.selectors,Z.expr[":"]=Z.expr.pseudos,Z.unique=ot.uniqueSort,Z.text=ot.getText,Z.isXMLDoc=ot.isXML,Z.contains=ot.contains;var rt=Z.expr.match.needsContext,st=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,at=/^.[^:#\[\.,]*$/;Z.filter=function(t,e,n){var i=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?Z.find.matchesSelector(i,t)?[i]:[]:Z.find.matches(t,Z.grep(e,function(t){return 1===t.nodeType}))},Z.fn.extend({find:function(t){var e,n=this.length,i=[],o=this;if("string"!=typeof t)return this.pushStack(Z(t).filter(function(){
-for(e=0;e<n;e++)if(Z.contains(o[e],this))return!0}));for(e=0;e<n;e++)Z.find(t,o[e],i);return i=this.pushStack(n>1?Z.unique(i):i),i.selector=this.selector?this.selector+" "+t:t,i},filter:function(t){return this.pushStack(i(this,t||[],!1))},not:function(t){return this.pushStack(i(this,t||[],!0))},is:function(t){return!!i(this,"string"==typeof t&&rt.test(t)?Z(t):t||[],!1).length}});var lt,ct=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ut=Z.fn.init=function(t,e){var n,i;if(!t)return this;if("string"==typeof t){if(n="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:ct.exec(t),!n||!n[1]&&e)return!e||e.jquery?(e||lt).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof Z?e[0]:e,Z.merge(this,Z.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:J,!0)),st.test(n[1])&&Z.isPlainObject(e))for(n in e)Z.isFunction(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}return i=J.getElementById(n[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=J,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):Z.isFunction(t)?"undefined"!=typeof lt.ready?lt.ready(t):t(Z):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),Z.makeArray(t,this))};ut.prototype=Z.fn,lt=Z(J);var ft=/^(?:parents|prev(?:Until|All))/,pt={children:!0,contents:!0,next:!0,prev:!0};Z.extend({dir:function(t,e,n){for(var i=[],o=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(o&&Z(t).is(n))break;i.push(t)}return i},sibling:function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n}}),Z.fn.extend({has:function(t){var e=Z(t,this),n=e.length;return this.filter(function(){for(var t=0;t<n;t++)if(Z.contains(this,e[t]))return!0})},closest:function(t,e){for(var n,i=0,o=this.length,r=[],s=rt.test(t)||"string"!=typeof t?Z(t,e||this.context):0;i<o;i++)for(n=this[i];n&&n!==e;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&Z.find.matchesSelector(n,t))){r.push(n);break}return this.pushStack(r.length>1?Z.unique(r):r)},index:function(t){return t?"string"==typeof t?z.call(Z(t),this[0]):z.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(Z.unique(Z.merge(this.get(),Z(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),Z.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return Z.dir(t,"parentNode")},parentsUntil:function(t,e,n){return Z.dir(t,"parentNode",n)},next:function(t){return o(t,"nextSibling")},prev:function(t){return o(t,"previousSibling")},nextAll:function(t){return Z.dir(t,"nextSibling")},prevAll:function(t){return Z.dir(t,"previousSibling")},nextUntil:function(t,e,n){return Z.dir(t,"nextSibling",n)},prevUntil:function(t,e,n){return Z.dir(t,"previousSibling",n)},siblings:function(t){return Z.sibling((t.parentNode||{}).firstChild,t)},children:function(t){return Z.sibling(t.firstChild)},contents:function(t){return t.contentDocument||Z.merge([],t.childNodes)}},function(t,e){Z.fn[t]=function(n,i){var o=Z.map(this,e,n);return"Until"!==t.slice(-5)&&(i=n),i&&"string"==typeof i&&(o=Z.filter(i,o)),this.length>1&&(pt[t]||Z.unique(o),ft.test(t)&&o.reverse()),this.pushStack(o)}});var dt=/\S+/g,ht={};Z.Callbacks=function(t){t="string"==typeof t?ht[t]||r(t):Z.extend({},t);var e,n,i,o,s,a,l=[],c=!t.once&&[],u=function(r){for(e=t.memory&&r,n=!0,a=o||0,o=0,s=l.length,i=!0;l&&a<s;a++)if(l[a].apply(r[0],r[1])===!1&&t.stopOnFalse){e=!1;break}i=!1,l&&(c?c.length&&u(c.shift()):e?l=[]:f.disable())},f={add:function(){if(l){var n=l.length;!function r(e){Z.each(e,function(e,n){var i=Z.type(n);"function"===i?t.unique&&f.has(n)||l.push(n):n&&n.length&&"string"!==i&&r(n)})}(arguments),i?s=l.length:e&&(o=n,u(e))}return this},remove:function(){return l&&Z.each(arguments,function(t,e){for(var n;(n=Z.inArray(e,l,n))>-1;)l.splice(n,1),i&&(n<=s&&s--,n<=a&&a--)}),this},has:function(t){return t?Z.inArray(t,l)>-1:!(!l||!l.length)},empty:function(){return l=[],s=0,this},disable:function(){return l=c=e=void 0,this},disabled:function(){return!l},lock:function(){return c=void 0,e||f.disable(),this},locked:function(){return!c},fireWith:function(t,e){return!l||n&&!c||(e=e||[],e=[t,e.slice?e.slice():e],i?c.push(e):u(e)),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!n}};return f},Z.extend({Deferred:function(t){var e=[["resolve","done",Z.Callbacks("once memory"),"resolved"],["reject","fail",Z.Callbacks("once memory"),"rejected"],["notify","progress",Z.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var t=arguments;return Z.Deferred(function(n){Z.each(e,function(e,r){var s=Z.isFunction(t[e])&&t[e];o[r[1]](function(){var t=s&&s.apply(this,arguments);t&&Z.isFunction(t.promise)?t.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[r[0]+"With"](this===i?n.promise():this,s?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?Z.extend(t,i):i}},o={};return i.pipe=i.then,Z.each(e,function(t,r){var s=r[2],a=r[3];i[r[1]]=s.add,a&&s.add(function(){n=a},e[1^t][2].disable,e[2][2].lock),o[r[0]]=function(){return o[r[0]+"With"](this===o?i:this,arguments),this},o[r[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(t){var e,n,i,o=0,r=B.call(arguments),s=r.length,a=1!==s||t&&Z.isFunction(t.promise)?s:0,l=1===a?t:Z.Deferred(),c=function(t,n,i){return function(o){n[t]=this,i[t]=arguments.length>1?B.call(arguments):o,i===e?l.notifyWith(n,i):--a||l.resolveWith(n,i)}};if(s>1)for(e=new Array(s),n=new Array(s),i=new Array(s);o<s;o++)r[o]&&Z.isFunction(r[o].promise)?r[o].promise().done(c(o,i,r)).fail(l.reject).progress(c(o,n,e)):--a;return a||l.resolveWith(i,r),l.promise()}});var gt;Z.fn.ready=function(t){return Z.ready.promise().done(t),this},Z.extend({isReady:!1,readyWait:1,holdReady:function(t){t?Z.readyWait++:Z.ready(!0)},ready:function(t){(t===!0?--Z.readyWait:Z.isReady)||(Z.isReady=!0,t!==!0&&--Z.readyWait>0||(gt.resolveWith(J,[Z]),Z.fn.triggerHandler&&(Z(J).triggerHandler("ready"),Z(J).off("ready"))))}}),Z.ready.promise=function(e){return gt||(gt=Z.Deferred(),"complete"===J.readyState?setTimeout(Z.ready):(J.addEventListener("DOMContentLoaded",s,!1),t.addEventListener("load",s,!1))),gt.promise(e)},Z.ready.promise();var mt=Z.access=function(t,e,n,i,o,r,s){var a=0,l=t.length,c=null==n;if("object"===Z.type(n)){o=!0;for(a in n)Z.access(t,e,a,n[a],!0,r,s)}else if(void 0!==i&&(o=!0,Z.isFunction(i)||(s=!0),c&&(s?(e.call(t,i),e=null):(c=e,e=function(t,e,n){return c.call(Z(t),n)})),e))for(;a<l;a++)e(t[a],n,s?i:i.call(t[a],a,e(t[a],n)));return o?t:c?e.call(t):l?e(t[0],n):r};Z.acceptData=function(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType},a.uid=1,a.accepts=Z.acceptData,a.prototype={key:function(t){if(!a.accepts(t))return 0;var e={},n=t[this.expando];if(!n){n=a.uid++;try{e[this.expando]={value:n},Object.defineProperties(t,e)}catch(i){e[this.expando]=n,Z.extend(t,e)}}return this.cache[n]||(this.cache[n]={}),n},set:function(t,e,n){var i,o=this.key(t),r=this.cache[o];if("string"==typeof e)r[e]=n;else if(Z.isEmptyObject(r))Z.extend(this.cache[o],e);else for(i in e)r[i]=e[i];return r},get:function(t,e){var n=this.cache[this.key(t)];return void 0===e?n:n[e]},access:function(t,e,n){var i;return void 0===e||e&&"string"==typeof e&&void 0===n?(i=this.get(t,e),void 0!==i?i:this.get(t,Z.camelCase(e))):(this.set(t,e,n),void 0!==n?n:e)},remove:function(t,e){var n,i,o,r=this.key(t),s=this.cache[r];if(void 0===e)this.cache[r]={};else{Z.isArray(e)?i=e.concat(e.map(Z.camelCase)):(o=Z.camelCase(e),e in s?i=[e,o]:(i=o,i=i in s?[i]:i.match(dt)||[])),n=i.length;for(;n--;)delete s[i[n]]}},hasData:function(t){return!Z.isEmptyObject(this.cache[t[this.expando]]||{})},discard:function(t){t[this.expando]&&delete this.cache[t[this.expando]]}};var vt=new a,yt=new a,bt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,xt=/([A-Z])/g;Z.extend({hasData:function(t){return yt.hasData(t)||vt.hasData(t)},data:function(t,e,n){return yt.access(t,e,n)},removeData:function(t,e){yt.remove(t,e)},_data:function(t,e,n){return vt.access(t,e,n)},_removeData:function(t,e){vt.remove(t,e)}}),Z.fn.extend({data:function(t,e){var n,i,o,r=this[0],s=r&&r.attributes;if(void 0===t){if(this.length&&(o=yt.get(r),1===r.nodeType&&!vt.get(r,"hasDataAttrs"))){for(n=s.length;n--;)s[n]&&(i=s[n].name,0===i.indexOf("data-")&&(i=Z.camelCase(i.slice(5)),l(r,i,o[i])));vt.set(r,"hasDataAttrs",!0)}return o}return"object"==typeof t?this.each(function(){yt.set(this,t)}):mt(this,function(e){var n,i=Z.camelCase(t);if(r&&void 0===e){if(n=yt.get(r,t),void 0!==n)return n;if(n=yt.get(r,i),void 0!==n)return n;if(n=l(r,i,void 0),void 0!==n)return n}else this.each(function(){var n=yt.get(this,i);yt.set(this,i,e),t.indexOf("-")!==-1&&void 0!==n&&yt.set(this,t,e)})},null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each(function(){yt.remove(this,t)})}}),Z.extend({queue:function(t,e,n){var i;if(t)return e=(e||"fx")+"queue",i=vt.get(t,e),n&&(!i||Z.isArray(n)?i=vt.access(t,e,Z.makeArray(n)):i.push(n)),i||[]},dequeue:function(t,e){e=e||"fx";var n=Z.queue(t,e),i=n.length,o=n.shift(),r=Z._queueHooks(t,e),s=function(){Z.dequeue(t,e)};"inprogress"===o&&(o=n.shift(),i--),o&&("fx"===e&&n.unshift("inprogress"),delete r.stop,o.call(t,s,r)),!i&&r&&r.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return vt.get(t,n)||vt.access(t,n,{empty:Z.Callbacks("once memory").add(function(){vt.remove(t,[e+"queue",n])})})}}),Z.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length<n?Z.queue(this[0],t):void 0===e?this:this.each(function(){var n=Z.queue(this,t,e);Z._queueHooks(this,t),"fx"===t&&"inprogress"!==n[0]&&Z.dequeue(this,t)})},dequeue:function(t){return this.each(function(){Z.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||"fx",[])},promise:function(t,e){var n,i=1,o=Z.Deferred(),r=this,s=this.length,a=function(){--i||o.resolveWith(r,[r])};for("string"!=typeof t&&(e=t,t=void 0),t=t||"fx";s--;)n=vt.get(r[s],t+"queueHooks"),n&&n.empty&&(i++,n.empty.add(a));return a(),o.promise(e)}});var wt=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Tt=["Top","Right","Bottom","Left"],Ct=function(t,e){return t=e||t,"none"===Z.css(t,"display")||!Z.contains(t.ownerDocument,t)},Et=/^(?:checkbox|radio)$/i;!function(){var t=J.createDocumentFragment(),e=t.appendChild(J.createElement("div")),n=J.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),e.appendChild(n),Y.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",Y.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var $t="undefined";Y.focusinBubbles="onfocusin"in t;var kt=/^key/,St=/^(?:mouse|pointer|contextmenu)|click/,Nt=/^(?:focusinfocus|focusoutblur)$/,Dt=/^([^.]*)(?:\.(.+)|)$/;Z.event={global:{},add:function(t,e,n,i,o){var r,s,a,l,c,u,f,p,d,h,g,m=vt.get(t);if(m)for(n.handler&&(r=n,n=r.handler,o=r.selector),n.guid||(n.guid=Z.guid++),(l=m.events)||(l=m.events={}),(s=m.handle)||(s=m.handle=function(e){return typeof Z!==$t&&Z.event.triggered!==e.type?Z.event.dispatch.apply(t,arguments):void 0}),e=(e||"").match(dt)||[""],c=e.length;c--;)a=Dt.exec(e[c])||[],d=g=a[1],h=(a[2]||"").split(".").sort(),d&&(f=Z.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=Z.event.special[d]||{},u=Z.extend({type:d,origType:g,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&Z.expr.match.needsContext.test(o),namespace:h.join(".")},r),(p=l[d])||(p=l[d]=[],p.delegateCount=0,f.setup&&f.setup.call(t,i,h,s)!==!1||t.addEventListener&&t.addEventListener(d,s,!1)),f.add&&(f.add.call(t,u),u.handler.guid||(u.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,u):p.push(u),Z.event.global[d]=!0)},remove:function(t,e,n,i,o){var r,s,a,l,c,u,f,p,d,h,g,m=vt.hasData(t)&&vt.get(t);if(m&&(l=m.events)){for(e=(e||"").match(dt)||[""],c=e.length;c--;)if(a=Dt.exec(e[c])||[],d=g=a[1],h=(a[2]||"").split(".").sort(),d){for(f=Z.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,p=l[d]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=r=p.length;r--;)u=p[r],!o&&g!==u.origType||n&&n.guid!==u.guid||a&&!a.test(u.namespace)||i&&i!==u.selector&&("**"!==i||!u.selector)||(p.splice(r,1),u.selector&&p.delegateCount--,f.remove&&f.remove.call(t,u));s&&!p.length&&(f.teardown&&f.teardown.call(t,h,m.handle)!==!1||Z.removeEvent(t,d,m.handle),delete l[d])}else for(d in l)Z.event.remove(t,d+e[c],n,i,!0);Z.isEmptyObject(l)&&(delete m.handle,vt.remove(t,"events"))}},trigger:function(e,n,i,o){var r,s,a,l,c,u,f,p=[i||J],d=G.call(e,"type")?e.type:e,h=G.call(e,"namespace")?e.namespace.split("."):[];if(s=a=i=i||J,3!==i.nodeType&&8!==i.nodeType&&!Nt.test(d+Z.event.triggered)&&(d.indexOf(".")>=0&&(h=d.split("."),d=h.shift(),h.sort()),c=d.indexOf(":")<0&&"on"+d,e=e[Z.expando]?e:new Z.Event(d,"object"==typeof e&&e),e.isTrigger=o?2:3,e.namespace=h.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),n=null==n?[e]:Z.makeArray(n,[e]),f=Z.event.special[d]||{},o||!f.trigger||f.trigger.apply(i,n)!==!1)){if(!o&&!f.noBubble&&!Z.isWindow(i)){for(l=f.delegateType||d,Nt.test(l+d)||(s=s.parentNode);s;s=s.parentNode)p.push(s),a=s;a===(i.ownerDocument||J)&&p.push(a.defaultView||a.parentWindow||t)}for(r=0;(s=p[r++])&&!e.isPropagationStopped();)e.type=r>1?l:f.bindType||d,u=(vt.get(s,"events")||{})[e.type]&&vt.get(s,"handle"),u&&u.apply(s,n),u=c&&s[c],u&&u.apply&&Z.acceptData(s)&&(e.result=u.apply(s,n),e.result===!1&&e.preventDefault());return e.type=d,o||e.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!Z.acceptData(i)||c&&Z.isFunction(i[d])&&!Z.isWindow(i)&&(a=i[c],a&&(i[c]=null),Z.event.triggered=d,i[d](),Z.event.triggered=void 0,a&&(i[c]=a)),e.result}},dispatch:function(t){t=Z.event.fix(t);var e,n,i,o,r,s=[],a=B.call(arguments),l=(vt.get(this,"events")||{})[t.type]||[],c=Z.event.special[t.type]||{};if(a[0]=t,t.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,t)!==!1){for(s=Z.event.handlers.call(this,t,l),e=0;(o=s[e++])&&!t.isPropagationStopped();)for(t.currentTarget=o.elem,n=0;(r=o.handlers[n++])&&!t.isImmediatePropagationStopped();)t.namespace_re&&!t.namespace_re.test(r.namespace)||(t.handleObj=r,t.data=r.data,i=((Z.event.special[r.origType]||{}).handle||r.handler).apply(o.elem,a),void 0!==i&&(t.result=i)===!1&&(t.preventDefault(),t.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(t,e){var n,i,o,r,s=[],a=e.delegateCount,l=t.target;if(a&&l.nodeType&&(!t.button||"click"!==t.type))for(;l!==this;l=l.parentNode||this)if(l.disabled!==!0||"click"!==t.type){for(i=[],n=0;n<a;n++)r=e[n],o=r.selector+" ",void 0===i[o]&&(i[o]=r.needsContext?Z(o,this).index(l)>=0:Z.find(o,this,null,[l]).length),i[o]&&i.push(r);i.length&&s.push({elem:l,handlers:i})}return a<e.length&&s.push({elem:this,handlers:e.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(t,e){return null==t.which&&(t.which=null!=e.charCode?e.charCode:e.keyCode),t}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(t,e){var n,i,o,r=e.button;return null==t.pageX&&null!=e.clientX&&(n=t.target.ownerDocument||J,i=n.documentElement,o=n.body,t.pageX=e.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),t.pageY=e.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)),t.which||void 0===r||(t.which=1&r?1:2&r?3:4&r?2:0),t}},fix:function(t){if(t[Z.expando])return t;var e,n,i,o=t.type,r=t,s=this.fixHooks[o];for(s||(this.fixHooks[o]=s=St.test(o)?this.mouseHooks:kt.test(o)?this.keyHooks:{}),i=s.props?this.props.concat(s.props):this.props,t=new Z.Event(r),e=i.length;e--;)n=i[e],t[n]=r[n];return t.target||(t.target=J),3===t.target.nodeType&&(t.target=t.target.parentNode),s.filter?s.filter(t,r):t},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==f()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===f()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&Z.nodeName(this,"input"))return this.click(),!1},_default:function(t){return Z.nodeName(t.target,"a")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}},simulate:function(t,e,n,i){var o=Z.extend(new Z.Event,n,{type:t,isSimulated:!0,originalEvent:{}});i?Z.event.trigger(o,null,e):Z.event.dispatch.call(e,o),o.isDefaultPrevented()&&n.preventDefault()}},Z.removeEvent=function(t,e,n){t.removeEventListener&&t.removeEventListener(e,n,!1)},Z.Event=function(t,e){return this instanceof Z.Event?(t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&t.returnValue===!1?c:u):this.type=t,e&&Z.extend(this,e),this.timeStamp=t&&t.timeStamp||Z.now(),void(this[Z.expando]=!0)):new Z.Event(t,e)},Z.Event.prototype={isDefaultPrevented:u,isPropagationStopped:u,isImmediatePropagationStopped:u,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=c,t&&t.preventDefault&&t.preventDefault()},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=c,t&&t.stopPropagation&&t.stopPropagation()},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=c,t&&t.stopImmediatePropagation&&t.stopImmediatePropagation(),this.stopPropagation()}},Z.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(t,e){Z.event.special[t]={delegateType:e,bindType:e,handle:function(t){var n,i=this,o=t.relatedTarget,r=t.handleObj;return o&&(o===i||Z.contains(i,o))||(t.type=r.origType,n=r.handler.apply(this,arguments),t.type=e),n}}}),Y.focusinBubbles||Z.each({focus:"focusin",blur:"focusout"},function(t,e){var n=function(t){Z.event.simulate(e,t.target,Z.event.fix(t),!0)};Z.event.special[e]={setup:function(){var i=this.ownerDocument||this,o=vt.access(i,e);o||i.addEventListener(t,n,!0),vt.access(i,e,(o||0)+1)},teardown:function(){var i=this.ownerDocument||this,o=vt.access(i,e)-1;o?vt.access(i,e,o):(i.removeEventListener(t,n,!0),vt.remove(i,e))}}}),Z.fn.extend({on:function(t,e,n,i,o){var r,s;if("object"==typeof t){"string"!=typeof e&&(n=n||e,e=void 0);for(s in t)this.on(s,e,n,t[s],o);return this}if(null==n&&null==i?(i=e,n=e=void 0):null==i&&("string"==typeof e?(i=n,n=void 0):(i=n,n=e,e=void 0)),i===!1)i=u;else if(!i)return this;return 1===o&&(r=i,i=function(t){return Z().off(t),r.apply(this,arguments)},i.guid=r.guid||(r.guid=Z.guid++)),this.each(function(){Z.event.add(this,t,i,n,e)})},one:function(t,e,n,i){return this.on(t,e,n,i,1)},off:function(t,e,n){var i,o;if(t&&t.preventDefault&&t.handleObj)return i=t.handleObj,Z(t.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof t){for(o in t)this.off(o,e,t[o]);return this}return e!==!1&&"function"!=typeof e||(n=e,e=void 0),n===!1&&(n=u),this.each(function(){Z.event.remove(this,t,n,e)})},trigger:function(t,e){return this.each(function(){Z.event.trigger(t,e,this)})},triggerHandler:function(t,e){var n=this[0];if(n)return Z.event.trigger(t,e,n,!0)}});var At=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jt=/<([\w:]+)/,Ot=/<|&#?\w+;/,It=/<(?:script|style|link)/i,Lt=/checked\s*(?:[^=]|=\s*.checked.)/i,Rt=/^$|\/(?:java|ecma)script/i,Pt=/^true\/(.*)/,qt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Ht={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Ht.optgroup=Ht.option,Ht.tbody=Ht.tfoot=Ht.colgroup=Ht.caption=Ht.thead,Ht.th=Ht.td,Z.extend({clone:function(t,e,n){var i,o,r,s,a=t.cloneNode(!0),l=Z.contains(t.ownerDocument,t);if(!(Y.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||Z.isXMLDoc(t)))for(s=v(a),r=v(t),i=0,o=r.length;i<o;i++)y(r[i],s[i]);if(e)if(n)for(r=r||v(t),s=s||v(a),i=0,o=r.length;i<o;i++)m(r[i],s[i]);else m(t,a);return s=v(a,"script"),s.length>0&&g(s,!l&&v(t,"script")),a},buildFragment:function(t,e,n,i){for(var o,r,s,a,l,c,u=e.createDocumentFragment(),f=[],p=0,d=t.length;p<d;p++)if(o=t[p],o||0===o)if("object"===Z.type(o))Z.merge(f,o.nodeType?[o]:o);else if(Ot.test(o)){for(r=r||u.appendChild(e.createElement("div")),s=(jt.exec(o)||["",""])[1].toLowerCase(),a=Ht[s]||Ht._default,r.innerHTML=a[1]+o.replace(At,"<$1></$2>")+a[2],c=a[0];c--;)r=r.lastChild;Z.merge(f,r.childNodes),r=u.firstChild,r.textContent=""}else f.push(e.createTextNode(o));for(u.textContent="",p=0;o=f[p++];)if((!i||Z.inArray(o,i)===-1)&&(l=Z.contains(o.ownerDocument,o),r=v(u.appendChild(o),"script"),l&&g(r),n))for(c=0;o=r[c++];)Rt.test(o.type||"")&&n.push(o);return u},cleanData:function(t){for(var e,n,i,o,r=Z.event.special,s=0;void 0!==(n=t[s]);s++){if(Z.acceptData(n)&&(o=n[vt.expando],o&&(e=vt.cache[o]))){if(e.events)for(i in e.events)r[i]?Z.event.remove(n,i):Z.removeEvent(n,i,e.handle);vt.cache[o]&&delete vt.cache[o]}delete yt.cache[n[yt.expando]]}}}),Z.fn.extend({text:function(t){return mt(this,function(t){return void 0===t?Z.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=p(this,t);e.appendChild(t)}})},prepend:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=p(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var n,i=t?Z.filter(t,this):this,o=0;null!=(n=i[o]);o++)e||1!==n.nodeType||Z.cleanData(v(n)),n.parentNode&&(e&&Z.contains(n.ownerDocument,n)&&g(v(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(Z.cleanData(v(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return Z.clone(this,t,e)})},html:function(t){return mt(this,function(t){var e=this[0]||{},n=0,i=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!It.test(t)&&!Ht[(jt.exec(t)||["",""])[1].toLowerCase()]){t=t.replace(At,"<$1></$2>");try{for(;n<i;n++)e=this[n]||{},1===e.nodeType&&(Z.cleanData(v(e,!1)),e.innerHTML=t);e=0}catch(o){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=arguments[0];return this.domManip(arguments,function(e){t=this.parentNode,Z.cleanData(v(this)),t&&t.replaceChild(e,this)}),t&&(t.length||t.nodeType)?this:this.remove()},detach:function(t){return this.remove(t,!0)},domManip:function(t,e){t=U.apply([],t);var n,i,o,r,s,a,l=0,c=this.length,u=this,f=c-1,p=t[0],g=Z.isFunction(p);if(g||c>1&&"string"==typeof p&&!Y.checkClone&&Lt.test(p))return this.each(function(n){var i=u.eq(n);g&&(t[0]=p.call(this,n,i.html())),i.domManip(t,e)});if(c&&(n=Z.buildFragment(t,this[0].ownerDocument,!1,this),i=n.firstChild,1===n.childNodes.length&&(n=i),i)){for(o=Z.map(v(n,"script"),d),r=o.length;l<c;l++)s=n,l!==f&&(s=Z.clone(s,!0,!0),r&&Z.merge(o,v(s,"script"))),e.call(this[l],s,l);if(r)for(a=o[o.length-1].ownerDocument,Z.map(o,h),l=0;l<r;l++)s=o[l],Rt.test(s.type||"")&&!vt.access(s,"globalEval")&&Z.contains(a,s)&&(s.src?Z._evalUrl&&Z._evalUrl(s.src):Z.globalEval(s.textContent.replace(qt,"")))}return this}}),Z.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){Z.fn[t]=function(t){for(var n,i=[],o=Z(t),r=o.length-1,s=0;s<=r;s++)n=s===r?this:this.clone(!0),Z(o[s])[e](n),V.apply(i,n.get());return this.pushStack(i)}});var Ft,Mt={},Wt=/^margin/,_t=new RegExp("^("+wt+")(?!px)[a-z%]+$","i"),Bt=function(e){return e.ownerDocument.defaultView.opener?e.ownerDocument.defaultView.getComputedStyle(e,null):t.getComputedStyle(e,null)};!function(){function e(){s.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",s.innerHTML="",o.appendChild(r);var e=t.getComputedStyle(s,null);n="1%"!==e.top,i="4px"===e.width,o.removeChild(r)}var n,i,o=J.documentElement,r=J.createElement("div"),s=J.createElement("div");s.style&&(s.style.backgroundClip="content-box",s.cloneNode(!0).style.backgroundClip="",Y.clearCloneStyle="content-box"===s.style.backgroundClip,r.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",r.appendChild(s),t.getComputedStyle&&Z.extend(Y,{pixelPosition:function(){return e(),n},boxSizingReliable:function(){return null==i&&e(),i},reliableMarginRight:function(){var e,n=s.appendChild(J.createElement("div"));return n.style.cssText=s.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",n.style.marginRight=n.style.width="0",s.style.width="1px",o.appendChild(r),e=!parseFloat(t.getComputedStyle(n,null).marginRight),o.removeChild(r),s.removeChild(n),e}}))}(),Z.swap=function(t,e,n,i){var o,r,s={};for(r in e)s[r]=t.style[r],t.style[r]=e[r];o=n.apply(t,i||[]);for(r in e)t.style[r]=s[r];return o};var Ut=/^(none|table(?!-c[ea]).+)/,Vt=new RegExp("^("+wt+")(.*)$","i"),zt=new RegExp("^([+-])=("+wt+")","i"),Xt={position:"absolute",visibility:"hidden",display:"block"},Qt={letterSpacing:"0",fontWeight:"400"},Gt=["Webkit","O","Moz","ms"];Z.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=w(t,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(t,e,n,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var o,r,s,a=Z.camelCase(e),l=t.style;return e=Z.cssProps[a]||(Z.cssProps[a]=C(l,a)),s=Z.cssHooks[e]||Z.cssHooks[a],void 0===n?s&&"get"in s&&void 0!==(o=s.get(t,!1,i))?o:l[e]:(r=typeof n,"string"===r&&(o=zt.exec(n))&&(n=(o[1]+1)*o[2]+parseFloat(Z.css(t,e)),r="number"),null!=n&&n===n&&("number"!==r||Z.cssNumber[a]||(n+="px"),Y.clearCloneStyle||""!==n||0!==e.indexOf("background")||(l[e]="inherit"),s&&"set"in s&&void 0===(n=s.set(t,n,i))||(l[e]=n)),void 0)}},css:function(t,e,n,i){var o,r,s,a=Z.camelCase(e);return e=Z.cssProps[a]||(Z.cssProps[a]=C(t.style,a)),s=Z.cssHooks[e]||Z.cssHooks[a],s&&"get"in s&&(o=s.get(t,!0,n)),void 0===o&&(o=w(t,e,i)),"normal"===o&&e in Qt&&(o=Qt[e]),""===n||n?(r=parseFloat(o),n===!0||Z.isNumeric(r)?r||0:o):o}}),Z.each(["height","width"],function(t,e){Z.cssHooks[e]={get:function(t,n,i){if(n)return Ut.test(Z.css(t,"display"))&&0===t.offsetWidth?Z.swap(t,Xt,function(){return k(t,e,i)}):k(t,e,i)},set:function(t,n,i){var o=i&&Bt(t);return E(t,n,i?$(t,e,i,"border-box"===Z.css(t,"boxSizing",!1,o),o):0)}}}),Z.cssHooks.marginRight=T(Y.reliableMarginRight,function(t,e){if(e)return Z.swap(t,{display:"inline-block"},w,[t,"marginRight"])}),Z.each({margin:"",padding:"",border:"Width"},function(t,e){Z.cssHooks[t+e]={expand:function(n){for(var i=0,o={},r="string"==typeof n?n.split(" "):[n];i<4;i++)o[t+Tt[i]+e]=r[i]||r[i-2]||r[0];return o}},Wt.test(t)||(Z.cssHooks[t+e].set=E)}),Z.fn.extend({css:function(t,e){return mt(this,function(t,e,n){var i,o,r={},s=0;if(Z.isArray(e)){for(i=Bt(t),o=e.length;s<o;s++)r[e[s]]=Z.css(t,e[s],!1,i);return r}return void 0!==n?Z.style(t,e,n):Z.css(t,e)},t,e,arguments.length>1)},show:function(){return S(this,!0)},hide:function(){return S(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){Ct(this)?Z(this).show():Z(this).hide()})}}),Z.Tween=N,N.prototype={constructor:N,init:function(t,e,n,i,o,r){this.elem=t,this.prop=n,this.easing=o||"swing",this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=r||(Z.cssNumber[n]?"":"px")},cur:function(){var t=N.propHooks[this.prop];return t&&t.get?t.get(this):N.propHooks._default.get(this)},run:function(t){var e,n=N.propHooks[this.prop];return this.options.duration?this.pos=e=Z.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):N.propHooks._default.set(this),this}},N.prototype.init.prototype=N.prototype,N.propHooks={_default:{get:function(t){var e;return null==t.elem[t.prop]||t.elem.style&&null!=t.elem.style[t.prop]?(e=Z.css(t.elem,t.prop,""),e&&"auto"!==e?e:0):t.elem[t.prop]},set:function(t){Z.fx.step[t.prop]?Z.fx.step[t.prop](t):t.elem.style&&(null!=t.elem.style[Z.cssProps[t.prop]]||Z.cssHooks[t.prop])?Z.style(t.elem,t.prop,t.now+t.unit):t.elem[t.prop]=t.now}}},N.propHooks.scrollTop=N.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},Z.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2}},Z.fx=N.prototype.init,Z.fx.step={};var Yt,Jt,Kt=/^(?:toggle|show|hide)$/,Zt=new RegExp("^(?:([+-])=|)("+wt+")([a-z%]*)$","i"),te=/queueHooks$/,ee=[O],ne={"*":[function(t,e){var n=this.createTween(t,e),i=n.cur(),o=Zt.exec(e),r=o&&o[3]||(Z.cssNumber[t]?"":"px"),s=(Z.cssNumber[t]||"px"!==r&&+i)&&Zt.exec(Z.css(n.elem,t)),a=1,l=20;if(s&&s[3]!==r){r=r||s[3],o=o||[],s=+i||1;do a=a||".5",s/=a,Z.style(n.elem,t,s+r);while(a!==(a=n.cur()/i)&&1!==a&&--l)}return o&&(s=n.start=+s||+i||0,n.unit=r,n.end=o[1]?s+(o[1]+1)*o[2]:+o[2]),n}]};Z.Animation=Z.extend(L,{tweener:function(t,e){Z.isFunction(t)?(e=t,t=["*"]):t=t.split(" ");for(var n,i=0,o=t.length;i<o;i++)n=t[i],ne[n]=ne[n]||[],ne[n].unshift(e)},prefilter:function(t,e){e?ee.unshift(t):ee.push(t)}}),Z.speed=function(t,e,n){var i=t&&"object"==typeof t?Z.extend({},t):{complete:n||!n&&e||Z.isFunction(t)&&t,duration:t,easing:n&&e||e&&!Z.isFunction(e)&&e};return i.duration=Z.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in Z.fx.speeds?Z.fx.speeds[i.duration]:Z.fx.speeds._default,null!=i.queue&&i.queue!==!0||(i.queue="fx"),i.old=i.complete,i.complete=function(){Z.isFunction(i.old)&&i.old.call(this),i.queue&&Z.dequeue(this,i.queue)},i},Z.fn.extend({fadeTo:function(t,e,n,i){return this.filter(Ct).css("opacity",0).show().end().animate({opacity:e},t,n,i)},animate:function(t,e,n,i){var o=Z.isEmptyObject(t),r=Z.speed(e,n,i),s=function(){var e=L(this,Z.extend({},t),r);(o||vt.get(this,"finish"))&&e.stop(!0)};return s.finish=s,o||r.queue===!1?this.each(s):this.queue(r.queue,s)},stop:function(t,e,n){var i=function(t){var e=t.stop;delete t.stop,e(n)};return"string"!=typeof t&&(n=e,e=t,t=void 0),e&&t!==!1&&this.queue(t||"fx",[]),this.each(function(){var e=!0,o=null!=t&&t+"queueHooks",r=Z.timers,s=vt.get(this);if(o)s[o]&&s[o].stop&&i(s[o]);else for(o in s)s[o]&&s[o].stop&&te.test(o)&&i(s[o]);for(o=r.length;o--;)r[o].elem!==this||null!=t&&r[o].queue!==t||(r[o].anim.stop(n),e=!1,r.splice(o,1));!e&&n||Z.dequeue(this,t)})},finish:function(t){return t!==!1&&(t=t||"fx"),this.each(function(){var e,n=vt.get(this),i=n[t+"queue"],o=n[t+"queueHooks"],r=Z.timers,s=i?i.length:0;for(n.finish=!0,Z.queue(this,t,[]),o&&o.stop&&o.stop.call(this,!0),e=r.length;e--;)r[e].elem===this&&r[e].queue===t&&(r[e].anim.stop(!0),r.splice(e,1));
-for(e=0;e<s;e++)i[e]&&i[e].finish&&i[e].finish.call(this);delete n.finish})}}),Z.each(["toggle","show","hide"],function(t,e){var n=Z.fn[e];Z.fn[e]=function(t,i,o){return null==t||"boolean"==typeof t?n.apply(this,arguments):this.animate(A(e,!0),t,i,o)}}),Z.each({slideDown:A("show"),slideUp:A("hide"),slideToggle:A("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){Z.fn[t]=function(t,n,i){return this.animate(e,t,n,i)}}),Z.timers=[],Z.fx.tick=function(){var t,e=0,n=Z.timers;for(Yt=Z.now();e<n.length;e++)t=n[e],t()||n[e]!==t||n.splice(e--,1);n.length||Z.fx.stop(),Yt=void 0},Z.fx.timer=function(t){Z.timers.push(t),t()?Z.fx.start():Z.timers.pop()},Z.fx.interval=13,Z.fx.start=function(){Jt||(Jt=setInterval(Z.fx.tick,Z.fx.interval))},Z.fx.stop=function(){clearInterval(Jt),Jt=null},Z.fx.speeds={slow:600,fast:200,_default:400},Z.fn.delay=function(t,e){return t=Z.fx?Z.fx.speeds[t]||t:t,e=e||"fx",this.queue(e,function(e,n){var i=setTimeout(e,t);n.stop=function(){clearTimeout(i)}})},function(){var t=J.createElement("input"),e=J.createElement("select"),n=e.appendChild(J.createElement("option"));t.type="checkbox",Y.checkOn=""!==t.value,Y.optSelected=n.selected,e.disabled=!0,Y.optDisabled=!n.disabled,t=J.createElement("input"),t.value="t",t.type="radio",Y.radioValue="t"===t.value}();var ie,oe,re=Z.expr.attrHandle;Z.fn.extend({attr:function(t,e){return mt(this,Z.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){Z.removeAttr(this,t)})}}),Z.extend({attr:function(t,e,n){var i,o,r=t.nodeType;if(t&&3!==r&&8!==r&&2!==r)return typeof t.getAttribute===$t?Z.prop(t,e,n):(1===r&&Z.isXMLDoc(t)||(e=e.toLowerCase(),i=Z.attrHooks[e]||(Z.expr.match.bool.test(e)?oe:ie)),void 0===n?i&&"get"in i&&null!==(o=i.get(t,e))?o:(o=Z.find.attr(t,e),null==o?void 0:o):null!==n?i&&"set"in i&&void 0!==(o=i.set(t,n,e))?o:(t.setAttribute(e,n+""),n):void Z.removeAttr(t,e))},removeAttr:function(t,e){var n,i,o=0,r=e&&e.match(dt);if(r&&1===t.nodeType)for(;n=r[o++];)i=Z.propFix[n]||n,Z.expr.match.bool.test(n)&&(t[i]=!1),t.removeAttribute(n)},attrHooks:{type:{set:function(t,e){if(!Y.radioValue&&"radio"===e&&Z.nodeName(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}}}),oe={set:function(t,e,n){return e===!1?Z.removeAttr(t,n):t.setAttribute(n,n),n}},Z.each(Z.expr.match.bool.source.match(/\w+/g),function(t,e){var n=re[e]||Z.find.attr;re[e]=function(t,e,i){var o,r;return i||(r=re[e],re[e]=o,o=null!=n(t,e,i)?e.toLowerCase():null,re[e]=r),o}});var se=/^(?:input|select|textarea|button)$/i;Z.fn.extend({prop:function(t,e){return mt(this,Z.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[Z.propFix[t]||t]})}}),Z.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(t,e,n){var i,o,r,s=t.nodeType;if(t&&3!==s&&8!==s&&2!==s)return r=1!==s||!Z.isXMLDoc(t),r&&(e=Z.propFix[e]||e,o=Z.propHooks[e]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:t[e]=n:o&&"get"in o&&null!==(i=o.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){return t.hasAttribute("tabindex")||se.test(t.nodeName)||t.href?t.tabIndex:-1}}}}),Y.optSelected||(Z.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null}}),Z.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){Z.propFix[this.toLowerCase()]=this});var ae=/[\t\r\n\f]/g;Z.fn.extend({addClass:function(t){var e,n,i,o,r,s,a="string"==typeof t&&t,l=0,c=this.length;if(Z.isFunction(t))return this.each(function(e){Z(this).addClass(t.call(this,e,this.className))});if(a)for(e=(t||"").match(dt)||[];l<c;l++)if(n=this[l],i=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(ae," "):" ")){for(r=0;o=e[r++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");s=Z.trim(i),n.className!==s&&(n.className=s)}return this},removeClass:function(t){var e,n,i,o,r,s,a=0===arguments.length||"string"==typeof t&&t,l=0,c=this.length;if(Z.isFunction(t))return this.each(function(e){Z(this).removeClass(t.call(this,e,this.className))});if(a)for(e=(t||"").match(dt)||[];l<c;l++)if(n=this[l],i=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(ae," "):"")){for(r=0;o=e[r++];)for(;i.indexOf(" "+o+" ")>=0;)i=i.replace(" "+o+" "," ");s=t?Z.trim(i):"",n.className!==s&&(n.className=s)}return this},toggleClass:function(t,e){var n=typeof t;return"boolean"==typeof e&&"string"===n?e?this.addClass(t):this.removeClass(t):Z.isFunction(t)?this.each(function(n){Z(this).toggleClass(t.call(this,n,this.className,e),e)}):this.each(function(){if("string"===n)for(var e,i=0,o=Z(this),r=t.match(dt)||[];e=r[i++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else n!==$t&&"boolean"!==n||(this.className&&vt.set(this,"__className__",this.className),this.className=this.className||t===!1?"":vt.get(this,"__className__")||"")})},hasClass:function(t){for(var e=" "+t+" ",n=0,i=this.length;n<i;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(ae," ").indexOf(e)>=0)return!0;return!1}});var le=/\r/g;Z.fn.extend({val:function(t){var e,n,i,o=this[0];{if(arguments.length)return i=Z.isFunction(t),this.each(function(n){var o;1===this.nodeType&&(o=i?t.call(this,n,Z(this).val()):t,null==o?o="":"number"==typeof o?o+="":Z.isArray(o)&&(o=Z.map(o,function(t){return null==t?"":t+""})),e=Z.valHooks[this.type]||Z.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))});if(o)return e=Z.valHooks[o.type]||Z.valHooks[o.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(n=e.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(le,""):null==n?"":n)}}}),Z.extend({valHooks:{option:{get:function(t){var e=Z.find.attr(t,"value");return null!=e?e:Z.trim(Z.text(t))}},select:{get:function(t){for(var e,n,i=t.options,o=t.selectedIndex,r="select-one"===t.type||o<0,s=r?null:[],a=r?o+1:i.length,l=o<0?a:r?o:0;l<a;l++)if(n=i[l],(n.selected||l===o)&&(Y.optDisabled?!n.disabled:null===n.getAttribute("disabled"))&&(!n.parentNode.disabled||!Z.nodeName(n.parentNode,"optgroup"))){if(e=Z(n).val(),r)return e;s.push(e)}return s},set:function(t,e){for(var n,i,o=t.options,r=Z.makeArray(e),s=o.length;s--;)i=o[s],(i.selected=Z.inArray(i.value,r)>=0)&&(n=!0);return n||(t.selectedIndex=-1),r}}}}),Z.each(["radio","checkbox"],function(){Z.valHooks[this]={set:function(t,e){if(Z.isArray(e))return t.checked=Z.inArray(Z(t).val(),e)>=0}},Y.checkOn||(Z.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}),Z.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){Z.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),Z.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)},bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,i){return this.on(e,t,n,i)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",n)}});var ce=Z.now(),ue=/\?/;Z.parseJSON=function(t){return JSON.parse(t+"")},Z.parseXML=function(t){var e,n;if(!t||"string"!=typeof t)return null;try{n=new DOMParser,e=n.parseFromString(t,"text/xml")}catch(i){e=void 0}return e&&!e.getElementsByTagName("parsererror").length||Z.error("Invalid XML: "+t),e};var fe=/#.*$/,pe=/([?&])_=[^&]*/,de=/^(.*?):[ \t]*([^\r\n]*)$/gm,he=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ge=/^(?:GET|HEAD)$/,me=/^\/\//,ve=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,ye={},be={},xe="*/".concat("*"),we=t.location.href,Te=ve.exec(we.toLowerCase())||[];Z.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:we,type:"GET",isLocal:he.test(Te[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":xe,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":Z.parseJSON,"text xml":Z.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?q(q(t,Z.ajaxSettings),e):q(Z.ajaxSettings,t)},ajaxPrefilter:R(ye),ajaxTransport:R(be),ajax:function(t,e){function n(t,e,n,s){var l,u,v,y,x,T=e;2!==b&&(b=2,a&&clearTimeout(a),i=void 0,r=s||"",w.readyState=t>0?4:0,l=t>=200&&t<300||304===t,n&&(y=H(f,w,n)),y=F(f,y,w,l),l?(f.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(Z.lastModified[o]=x),x=w.getResponseHeader("etag"),x&&(Z.etag[o]=x)),204===t||"HEAD"===f.type?T="nocontent":304===t?T="notmodified":(T=y.state,u=y.data,v=y.error,l=!v)):(v=T,!t&&T||(T="error",t<0&&(t=0))),w.status=t,w.statusText=(e||T)+"",l?h.resolveWith(p,[u,T,w]):h.rejectWith(p,[w,T,v]),w.statusCode(m),m=void 0,c&&d.trigger(l?"ajaxSuccess":"ajaxError",[w,f,l?u:v]),g.fireWith(p,[w,T]),c&&(d.trigger("ajaxComplete",[w,f]),--Z.active||Z.event.trigger("ajaxStop")))}"object"==typeof t&&(e=t,t=void 0),e=e||{};var i,o,r,s,a,l,c,u,f=Z.ajaxSetup({},e),p=f.context||f,d=f.context&&(p.nodeType||p.jquery)?Z(p):Z.event,h=Z.Deferred(),g=Z.Callbacks("once memory"),m=f.statusCode||{},v={},y={},b=0,x="canceled",w={readyState:0,getResponseHeader:function(t){var e;if(2===b){if(!s)for(s={};e=de.exec(r);)s[e[1].toLowerCase()]=e[2];e=s[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===b?r:null},setRequestHeader:function(t,e){var n=t.toLowerCase();return b||(t=y[n]=y[n]||t,v[t]=e),this},overrideMimeType:function(t){return b||(f.mimeType=t),this},statusCode:function(t){var e;if(t)if(b<2)for(e in t)m[e]=[m[e],t[e]];else w.always(t[w.status]);return this},abort:function(t){var e=t||x;return i&&i.abort(e),n(0,e),this}};if(h.promise(w).complete=g.add,w.success=w.done,w.error=w.fail,f.url=((t||f.url||we)+"").replace(fe,"").replace(me,Te[1]+"//"),f.type=e.method||e.type||f.method||f.type,f.dataTypes=Z.trim(f.dataType||"*").toLowerCase().match(dt)||[""],null==f.crossDomain&&(l=ve.exec(f.url.toLowerCase()),f.crossDomain=!(!l||l[1]===Te[1]&&l[2]===Te[2]&&(l[3]||("http:"===l[1]?"80":"443"))===(Te[3]||("http:"===Te[1]?"80":"443")))),f.data&&f.processData&&"string"!=typeof f.data&&(f.data=Z.param(f.data,f.traditional)),P(ye,f,e,w),2===b)return w;c=Z.event&&f.global,c&&0===Z.active++&&Z.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!ge.test(f.type),o=f.url,f.hasContent||(f.data&&(o=f.url+=(ue.test(o)?"&":"?")+f.data,delete f.data),f.cache===!1&&(f.url=pe.test(o)?o.replace(pe,"$1_="+ce++):o+(ue.test(o)?"&":"?")+"_="+ce++)),f.ifModified&&(Z.lastModified[o]&&w.setRequestHeader("If-Modified-Since",Z.lastModified[o]),Z.etag[o]&&w.setRequestHeader("If-None-Match",Z.etag[o])),(f.data&&f.hasContent&&f.contentType!==!1||e.contentType)&&w.setRequestHeader("Content-Type",f.contentType),w.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+xe+"; q=0.01":""):f.accepts["*"]);for(u in f.headers)w.setRequestHeader(u,f.headers[u]);if(f.beforeSend&&(f.beforeSend.call(p,w,f)===!1||2===b))return w.abort();x="abort";for(u in{success:1,error:1,complete:1})w[u](f[u]);if(i=P(be,f,e,w)){w.readyState=1,c&&d.trigger("ajaxSend",[w,f]),f.async&&f.timeout>0&&(a=setTimeout(function(){w.abort("timeout")},f.timeout));try{b=1,i.send(v,n)}catch(T){if(!(b<2))throw T;n(-1,T)}}else n(-1,"No Transport");return w},getJSON:function(t,e,n){return Z.get(t,e,n,"json")},getScript:function(t,e){return Z.get(t,void 0,e,"script")}}),Z.each(["get","post"],function(t,e){Z[e]=function(t,n,i,o){return Z.isFunction(n)&&(o=o||i,i=n,n=void 0),Z.ajax({url:t,type:e,dataType:o,data:n,success:i})}}),Z._evalUrl=function(t){return Z.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},Z.fn.extend({wrapAll:function(t){var e;return Z.isFunction(t)?this.each(function(e){Z(this).wrapAll(t.call(this,e))}):(this[0]&&(e=Z(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this)},wrapInner:function(t){return Z.isFunction(t)?this.each(function(e){Z(this).wrapInner(t.call(this,e))}):this.each(function(){var e=Z(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=Z.isFunction(t);return this.each(function(n){Z(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(){return this.parent().each(function(){Z.nodeName(this,"body")||Z(this).replaceWith(this.childNodes)}).end()}}),Z.expr.filters.hidden=function(t){return t.offsetWidth<=0&&t.offsetHeight<=0},Z.expr.filters.visible=function(t){return!Z.expr.filters.hidden(t)};var Ce=/%20/g,Ee=/\[\]$/,$e=/\r?\n/g,ke=/^(?:submit|button|image|reset|file)$/i,Se=/^(?:input|select|textarea|keygen)/i;Z.param=function(t,e){var n,i=[],o=function(t,e){e=Z.isFunction(e)?e():null==e?"":e,i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=Z.ajaxSettings&&Z.ajaxSettings.traditional),Z.isArray(t)||t.jquery&&!Z.isPlainObject(t))Z.each(t,function(){o(this.name,this.value)});else for(n in t)M(n,t[n],e,o);return i.join("&").replace(Ce,"+")},Z.fn.extend({serialize:function(){return Z.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=Z.prop(this,"elements");return t?Z.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!Z(this).is(":disabled")&&Se.test(this.nodeName)&&!ke.test(t)&&(this.checked||!Et.test(t))}).map(function(t,e){var n=Z(this).val();return null==n?null:Z.isArray(n)?Z.map(n,function(t){return{name:e.name,value:t.replace($e,"\r\n")}}):{name:e.name,value:n.replace($e,"\r\n")}}).get()}}),Z.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(t){}};var Ne=0,De={},Ae={0:200,1223:204},je=Z.ajaxSettings.xhr();t.attachEvent&&t.attachEvent("onunload",function(){for(var t in De)De[t]()}),Y.cors=!!je&&"withCredentials"in je,Y.ajax=je=!!je,Z.ajaxTransport(function(t){var e;if(Y.cors||je&&!t.crossDomain)return{send:function(n,i){var o,r=t.xhr(),s=++Ne;if(r.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(o in t.xhrFields)r[o]=t.xhrFields[o];t.mimeType&&r.overrideMimeType&&r.overrideMimeType(t.mimeType),t.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(o in n)r.setRequestHeader(o,n[o]);e=function(t){return function(){e&&(delete De[s],e=r.onload=r.onerror=null,"abort"===t?r.abort():"error"===t?i(r.status,r.statusText):i(Ae[r.status]||r.status,r.statusText,"string"==typeof r.responseText?{text:r.responseText}:void 0,r.getAllResponseHeaders()))}},r.onload=e(),r.onerror=e("error"),e=De[s]=e("abort");try{r.send(t.hasContent&&t.data||null)}catch(a){if(e)throw a}},abort:function(){e&&e()}}}),Z.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(t){return Z.globalEval(t),t}}}),Z.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),Z.ajaxTransport("script",function(t){if(t.crossDomain){var e,n;return{send:function(i,o){e=Z("<script>").prop({async:!0,charset:t.scriptCharset,src:t.url}).on("load error",n=function(t){e.remove(),n=null,t&&o("error"===t.type?404:200,t.type)}),J.head.appendChild(e[0])},abort:function(){n&&n()}}}});var Oe=[],Ie=/(=)\?(?=&|$)|\?\?/;Z.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=Oe.pop()||Z.expando+"_"+ce++;return this[t]=!0,t}}),Z.ajaxPrefilter("json jsonp",function(e,n,i){var o,r,s,a=e.jsonp!==!1&&(Ie.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ie.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return o=e.jsonpCallback=Z.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ie,"$1"+o):e.jsonp!==!1&&(e.url+=(ue.test(e.url)?"&":"?")+e.jsonp+"="+o),e.converters["script json"]=function(){return s||Z.error(o+" was not called"),s[0]},e.dataTypes[0]="json",r=t[o],t[o]=function(){s=arguments},i.always(function(){t[o]=r,e[o]&&(e.jsonpCallback=n.jsonpCallback,Oe.push(o)),s&&Z.isFunction(r)&&r(s[0]),s=r=void 0}),"script"}),Z.parseHTML=function(t,e,n){if(!t||"string"!=typeof t)return null;"boolean"==typeof e&&(n=e,e=!1),e=e||J;var i=st.exec(t),o=!n&&[];return i?[e.createElement(i[1])]:(i=Z.buildFragment([t],e,o),o&&o.length&&Z(o).remove(),Z.merge([],i.childNodes))};var Le=Z.fn.load;Z.fn.load=function(t,e,n){if("string"!=typeof t&&Le)return Le.apply(this,arguments);var i,o,r,s=this,a=t.indexOf(" ");return a>=0&&(i=Z.trim(t.slice(a)),t=t.slice(0,a)),Z.isFunction(e)?(n=e,e=void 0):e&&"object"==typeof e&&(o="POST"),s.length>0&&Z.ajax({url:t,type:o,dataType:"html",data:e}).done(function(t){r=arguments,s.html(i?Z("<div>").append(Z.parseHTML(t)).find(i):t)}).complete(n&&function(t,e){s.each(n,r||[t.responseText,e,t])}),this},Z.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){Z.fn[e]=function(t){return this.on(e,t)}}),Z.expr.filters.animated=function(t){return Z.grep(Z.timers,function(e){return t===e.elem}).length};var Re=t.document.documentElement;Z.offset={setOffset:function(t,e,n){var i,o,r,s,a,l,c,u=Z.css(t,"position"),f=Z(t),p={};"static"===u&&(t.style.position="relative"),a=f.offset(),r=Z.css(t,"top"),l=Z.css(t,"left"),c=("absolute"===u||"fixed"===u)&&(r+l).indexOf("auto")>-1,c?(i=f.position(),s=i.top,o=i.left):(s=parseFloat(r)||0,o=parseFloat(l)||0),Z.isFunction(e)&&(e=e.call(t,n,a)),null!=e.top&&(p.top=e.top-a.top+s),null!=e.left&&(p.left=e.left-a.left+o),"using"in e?e.using.call(t,p):f.css(p)}},Z.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){Z.offset.setOffset(this,t,e)});var e,n,i=this[0],o={top:0,left:0},r=i&&i.ownerDocument;if(r)return e=r.documentElement,Z.contains(e,i)?(typeof i.getBoundingClientRect!==$t&&(o=i.getBoundingClientRect()),n=W(r),{top:o.top+n.pageYOffset-e.clientTop,left:o.left+n.pageXOffset-e.clientLeft}):o},position:function(){if(this[0]){var t,e,n=this[0],i={top:0,left:0};return"fixed"===Z.css(n,"position")?e=n.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),Z.nodeName(t[0],"html")||(i=t.offset()),i.top+=Z.css(t[0],"borderTopWidth",!0),i.left+=Z.css(t[0],"borderLeftWidth",!0)),{top:e.top-i.top-Z.css(n,"marginTop",!0),left:e.left-i.left-Z.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||Re;t&&!Z.nodeName(t,"html")&&"static"===Z.css(t,"position");)t=t.offsetParent;return t||Re})}}),Z.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var i="pageYOffset"===n;Z.fn[e]=function(o){return mt(this,function(e,o,r){var s=W(e);return void 0===r?s?s[n]:e[o]:void(s?s.scrollTo(i?t.pageXOffset:r,i?r:t.pageYOffset):e[o]=r)},e,o,arguments.length,null)}}),Z.each(["top","left"],function(t,e){Z.cssHooks[e]=T(Y.pixelPosition,function(t,n){if(n)return n=w(t,e),_t.test(n)?Z(t).position()[e]+"px":n})}),Z.each({Height:"height",Width:"width"},function(t,e){Z.each({padding:"inner"+t,content:e,"":"outer"+t},function(n,i){Z.fn[i]=function(i,o){var r=arguments.length&&(n||"boolean"!=typeof i),s=n||(i===!0||o===!0?"margin":"border");return mt(this,function(e,n,i){var o;return Z.isWindow(e)?e.document.documentElement["client"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body["scroll"+t],o["scroll"+t],e.body["offset"+t],o["offset"+t],o["client"+t])):void 0===i?Z.css(e,n,s):Z.style(e,n,i,s)},e,r?i:void 0,r,null)}})}),Z.fn.size=function(){return this.length},Z.fn.andSelf=Z.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return Z});var Pe=t.jQuery,qe=t.$;return Z.noConflict=function(e){return t.$===Z&&(t.$=qe),e&&t.jQuery===Z&&(t.jQuery=Pe),Z},typeof e===$t&&(t.jQuery=t.$=Z),Z}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}t.fn.emulateTransitionEnd=function(e){var n=!1,i=this;t(this).one("bsTransitionEnd",function(){n=!0});var o=function(){n||t(i).trigger(t.support.transition.end)};return setTimeout(o,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var n=t(this),o=n.data("bs.alert");o||n.data("bs.alert",o=new i(this)),"string"==typeof e&&o[e].call(n)})}var n='[data-dismiss="alert"]',i=function(e){t(e).on("click",n,this.close)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.prototype.close=function(e){function n(){s.detach().trigger("closed.bs.alert").remove()}var o=t(this),r=o.attr("data-target");r||(r=o.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var s=t("#"===r?[]:r);e&&e.preventDefault(),s.length||(s=o.closest(".alert")),s.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",n).emulateTransitionEnd(i.TRANSITION_DURATION):n())};var o=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=o,this},t(document).on("click.bs.alert.data-api",n,i.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),o=i.data("bs.button"),r="object"==typeof e&&e;o||i.data("bs.button",o=new n(this,r)),"toggle"==e?o.toggle():e&&o.setState(e)})}var n=function(e,i){this.$element=t(e),this.options=t.extend({},n.DEFAULTS,i),this.isLoading=!1};n.VERSION="3.3.7",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(e){var n="disabled",i=this.$element,o=i.is("input")?"val":"html",r=i.data();e+="Text",null==r.resetText&&i.data("resetText",i[o]()),setTimeout(t.proxy(function(){i[o](null==r[e]?this.options[e]:r[e]),"loadingText"==e?(this.isLoading=!0,i.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,i.removeClass(n).removeAttr(n).prop(n,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),t&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=e,t.fn.button.Constructor=n,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(n){var i=t(n.target).closest(".btn");e.call(i,"toggle"),t(n.target).is('input[type="radio"], input[type="checkbox"]')||(n.preventDefault(),i.is("input,button")?i.trigger("focus"):i.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),o=i.data("bs.carousel"),r=t.extend({},n.DEFAULTS,i.data(),"object"==typeof e&&e),s="string"==typeof e?e:r.slide;o||i.data("bs.carousel",o=new n(this,r)),"number"==typeof e?o.to(e):s?o[s]():r.interval&&o.pause().cycle()})}var n=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};n.VERSION="3.3.7",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},n.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},n.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},n.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e),i="prev"==t&&0===n||"next"==t&&n==this.$items.length-1;if(i&&!this.options.wrap)return e;var o="prev"==t?-1:1,r=(n+o)%this.$items.length;return this.$items.eq(r)},n.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",this.$items.eq(t))},n.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){if(!this.sliding)return this.slide("next")},n.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},n.prototype.slide=function(e,i){var o=this.$element.find(".item.active"),r=i||this.getItemForDirection(e,o),s=this.interval,a="next"==e?"left":"right",l=this;if(r.hasClass("active"))return this.sliding=!1;var c=r[0],u=t.Event("slide.bs.carousel",{relatedTarget:c,direction:a});if(this.$element.trigger(u),!u.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var f=t(this.$indicators.children()[this.getItemIndex(r)]);f&&f.addClass("active")}var p=t.Event("slid.bs.carousel",{relatedTarget:c,direction:a});return t.support.transition&&this.$element.hasClass("slide")?(r.addClass(e),r[0].offsetWidth,o.addClass(a),r.addClass(a),o.one("bsTransitionEnd",function(){r.removeClass([e,a].join(" ")).addClass("active"),o.removeClass(["active",a].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(p)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(o.removeClass("active"),r.addClass("active"),this.sliding=!1,this.$element.trigger(p)),s&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=n,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this};var o=function(n){var i,o=t(this),r=t(o.attr("data-target")||(i=o.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""));if(r.hasClass("carousel")){var s=t.extend({},r.data(),o.data()),a=o.attr("data-slide-to");a&&(s.interval=!1),e.call(r,s),a&&r.data("bs.carousel").to(a),n.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",o).on("click.bs.carousel.data-api","[data-slide-to]",o),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var n=t(this);e.call(n,n.data())})})}(jQuery),+function(t){"use strict";function e(e){var n,i=e.attr("data-target")||(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return t(i)}function n(e){return this.each(function(){var n=t(this),o=n.data("bs.collapse"),r=t.extend({},i.DEFAULTS,n.data(),"object"==typeof e&&e);!o&&r.toggle&&/show|hide/.test(e)&&(r.toggle=!1),o||n.data("bs.collapse",o=new i(this,r)),"string"==typeof e&&o[e]()})}var i=function(e,n){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,n),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.3.7",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,o=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(o&&o.length&&(e=o.data("bs.collapse"),e&&e.transitioning))){var r=t.Event("show.bs.collapse");if(this.$element.trigger(r),!r.isDefaultPrevented()){o&&o.length&&(n.call(o,"hide"),e||o.data("bs.collapse",null));var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var a=function(){this.$element.removeClass("collapsing").addClass("collapse in")[s](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return a.call(this);var l=t.camelCase(["scroll",s].join("-"));this.$element.one("bsTransitionEnd",t.proxy(a,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[s](this.$element[0][l])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[n](0).one("bsTransitionEnd",t.proxy(o,this)).emulateTransitionEnd(i.TRANSITION_DURATION):o.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(n,i){var o=t(i);this.addAriaAndCollapsedClass(e(o),o)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass("in");t.attr("aria-expanded",n),e.toggleClass("collapsed",!n).attr("aria-expanded",n)};var o=t.fn.collapse;t.fn.collapse=n,t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=o,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var o=t(this);o.attr("data-target")||i.preventDefault();var r=e(o),s=r.data("bs.collapse"),a=s?"toggle":o.data();n.call(r,a)})}(jQuery),+function(t){"use strict";function e(e){var n=e.attr("data-target");n||(n=e.attr("href"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i=n&&t(n);return i&&i.length?i:e.parent()}function n(n){n&&3===n.which||(t(o).remove(),t(r).each(function(){var i=t(this),o=e(i),r={relatedTarget:this};o.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(o[0],n.target)||(o.trigger(n=t.Event("hide.bs.dropdown",r)),n.isDefaultPrevented()||(i.attr("aria-expanded","false"),o.removeClass("open").trigger(t.Event("hidden.bs.dropdown",r)))));
-}))}function i(e){return this.each(function(){var n=t(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new s(this)),"string"==typeof e&&i[e].call(n)})}var o=".dropdown-backdrop",r='[data-toggle="dropdown"]',s=function(e){t(e).on("click.bs.dropdown",this.toggle)};s.VERSION="3.3.7",s.prototype.toggle=function(i){var o=t(this);if(!o.is(".disabled, :disabled")){var r=e(o),s=r.hasClass("open");if(n(),!s){"ontouchstart"in document.documentElement&&!r.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",n);var a={relatedTarget:this};if(r.trigger(i=t.Event("show.bs.dropdown",a)),i.isDefaultPrevented())return;o.trigger("focus").attr("aria-expanded","true"),r.toggleClass("open").trigger(t.Event("shown.bs.dropdown",a))}return!1}},s.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var i=t(this);if(n.preventDefault(),n.stopPropagation(),!i.is(".disabled, :disabled")){var o=e(i),s=o.hasClass("open");if(!s&&27!=n.which||s&&27==n.which)return 27==n.which&&o.find(r).trigger("focus"),i.trigger("click");var a=" li:not(.disabled):visible a",l=o.find(".dropdown-menu"+a);if(l.length){var c=l.index(n.target);38==n.which&&c>0&&c--,40==n.which&&c<l.length-1&&c++,~c||(c=0),l.eq(c).trigger("focus")}}}};var a=t.fn.dropdown;t.fn.dropdown=i,t.fn.dropdown.Constructor=s,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=a,this},t(document).on("click.bs.dropdown.data-api",n).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",r,s.prototype.toggle).on("keydown.bs.dropdown.data-api",r,s.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",s.prototype.keydown)}(jQuery),+function(t){"use strict";function e(e,i){return this.each(function(){var o=t(this),r=o.data("bs.modal"),s=t.extend({},n.DEFAULTS,o.data(),"object"==typeof e&&e);r||o.data("bs.modal",r=new n(this,s)),"string"==typeof e?r[e](i):s.show&&r.show(i)})}var n=function(e,n){this.options=n,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};n.VERSION="3.3.7",n.TRANSITION_DURATION=300,n.BACKDROP_TRANSITION_DURATION=150,n.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},n.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},n.prototype.show=function(e){var i=this,o=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(o),this.isShown||o.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){i.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(i.$element)&&(i.ignoreBackdropClick=!0)})}),this.backdrop(function(){var o=t.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),o&&i.$element[0].offsetWidth,i.$element.addClass("in"),i.enforceFocus();var r=t.Event("shown.bs.modal",{relatedTarget:e});o?i.$dialog.one("bsTransitionEnd",function(){i.$element.trigger("focus").trigger(r)}).emulateTransitionEnd(n.TRANSITION_DURATION):i.$element.trigger("focus").trigger(r)}))},n.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(n.TRANSITION_DURATION):this.hideModal())},n.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},n.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},n.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},n.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},n.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},n.prototype.backdrop=function(e){var i=this,o=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var r=t.support.transition&&o;if(this.$backdrop=t(document.createElement("div")).addClass("modal-backdrop "+o).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),r&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;r?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var s=function(){i.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",s).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):s()}else e&&e()},n.prototype.handleUpdate=function(){this.adjustDialog()},n.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},n.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},n.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},n.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},n.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var i=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=n,t.fn.modal.noConflict=function(){return t.fn.modal=i,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(n){var i=t(this),o=i.attr("href"),r=t(i.attr("data-target")||o&&o.replace(/.*(?=#[^\s]+$)/,"")),s=r.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(o)&&o},r.data(),i.data());i.is("a")&&n.preventDefault(),r.one("show.bs.modal",function(t){t.isDefaultPrevented()||r.one("hidden.bs.modal",function(){i.is(":visible")&&i.trigger("focus")})}),e.call(r,s,this)})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),o=i.data("bs.tooltip"),r="object"==typeof e&&e;!o&&/destroy|hide/.test(e)||(o||i.data("bs.tooltip",o=new n(this,r)),"string"==typeof e&&o[e]())})}var n=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};n.VERSION="3.3.7",n.TRANSITION_DURATION=150,n.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},n.prototype.init=function(e,n,i){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),r=o.length;r--;){var s=o[r];if("click"==s)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",l="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},n.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,function(t,i){n[t]!=i&&(e[t]=i)}),e},n.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusin"==e.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState?void(n.hoverState="in"):(clearTimeout(n.timeout),n.hoverState="in",n.options.delay&&n.options.delay.show?void(n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)):n.show())},n.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},n.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusout"==e.type?"focus":"hover"]=!1),!n.isInStateTrue())return clearTimeout(n.timeout),n.hoverState="out",n.options.delay&&n.options.delay.hide?void(n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)):n.hide()},n.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var i=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!i)return;var o=this,r=this.tip(),s=this.getUID(this.type);this.setContent(),r.attr("id",s),this.$element.attr("aria-describedby",s),this.options.animation&&r.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,r[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,c=l.test(a);c&&(a=a.replace(l,"")||"top"),r.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?r.appendTo(this.options.container):r.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),f=r[0].offsetWidth,p=r[0].offsetHeight;if(c){var d=a,h=this.getPosition(this.$viewport);a="bottom"==a&&u.bottom+p>h.bottom?"top":"top"==a&&u.top-p<h.top?"bottom":"right"==a&&u.right+f>h.width?"left":"left"==a&&u.left-f<h.left?"right":a,r.removeClass(d).addClass(a)}var g=this.getCalculatedOffset(a,u,f,p);this.applyPlacement(g,a);var m=function(){var t=o.hoverState;o.$element.trigger("shown.bs."+o.type),o.hoverState=null,"out"==t&&o.leave(o)};t.support.transition&&this.$tip.hasClass("fade")?r.one("bsTransitionEnd",m).emulateTransitionEnd(n.TRANSITION_DURATION):m()}},n.prototype.applyPlacement=function(e,n){var i=this.tip(),o=i[0].offsetWidth,r=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),a=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),e.top+=s,e.left+=a,t.offset.setOffset(i[0],t.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),i.addClass("in");var l=i[0].offsetWidth,c=i[0].offsetHeight;"top"==n&&c!=r&&(e.top=e.top+r-c);var u=this.getViewportAdjustedDelta(n,e,l,c);u.left?e.left+=u.left:e.top+=u.top;var f=/top|bottom/.test(n),p=f?2*u.left-o+l:2*u.top-r+c,d=f?"offsetWidth":"offsetHeight";i.offset(e),this.replaceArrow(p,i[0][d],f)},n.prototype.replaceArrow=function(t,e,n){this.arrow().css(n?"left":"top",50*(1-t/e)+"%").css(n?"top":"left","")},n.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},n.prototype.hide=function(e){function i(){"in"!=o.hoverState&&r.detach(),o.$element&&o.$element.removeAttr("aria-describedby").trigger("hidden.bs."+o.type),e&&e()}var o=this,r=t(this.$tip),s=t.Event("hide.bs."+this.type);if(this.$element.trigger(s),!s.isDefaultPrevented())return r.removeClass("in"),t.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",i).emulateTransitionEnd(n.TRANSITION_DURATION):i(),this.hoverState=null,this},n.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},n.prototype.hasContent=function(){return this.getTitle()},n.prototype.getPosition=function(e){e=e||this.$element;var n=e[0],i="BODY"==n.tagName,o=n.getBoundingClientRect();null==o.width&&(o=t.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var r=window.SVGElement&&n instanceof window.SVGElement,s=i?{top:0,left:0}:r?null:e.offset(),a={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},l=i?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},o,a,l,s)},n.prototype.getCalculatedOffset=function(t,e,n,i){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-n/2}:"top"==t?{top:e.top-i,left:e.left+e.width/2-n/2}:"left"==t?{top:e.top+e.height/2-i/2,left:e.left-n}:{top:e.top+e.height/2-i/2,left:e.left+e.width}},n.prototype.getViewportAdjustedDelta=function(t,e,n,i){var o={top:0,left:0};if(!this.$viewport)return o;var r=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(t)){var a=e.top-r-s.scroll,l=e.top+r-s.scroll+i;a<s.top?o.top=s.top-a:l>s.top+s.height&&(o.top=s.top+s.height-l)}else{var c=e.left-r,u=e.left+r+n;c<s.left?o.left=s.left-c:u>s.right&&(o.left=s.left+s.width-u)}return o},n.prototype.getTitle=function(){var t,e=this.$element,n=this.options;return t=e.attr("data-original-title")||("function"==typeof n.title?n.title.call(e[0]):n.title)},n.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},n.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},n.prototype.enable=function(){this.enabled=!0},n.prototype.disable=function(){this.enabled=!1},n.prototype.toggleEnabled=function(){this.enabled=!this.enabled},n.prototype.toggle=function(e){var n=this;e&&(n=t(e.currentTarget).data("bs."+this.type),n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},n.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var i=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=n,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),o=i.data("bs.popover"),r="object"==typeof e&&e;!o&&/destroy|hide/.test(e)||(o||i.data("bs.popover",o=new n(this,r)),"string"==typeof e&&o[e]())})}var n=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");n.VERSION="3.3.7",n.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),n.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),n.prototype.constructor=n,n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof n?"html":"append":"text"](n),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},n.prototype.hasContent=function(){return this.getTitle()||this.getContent()},n.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=n,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(jQuery),+function(t){"use strict";function e(n,i){this.$body=t(document.body),this.$scrollElement=t(t(n).is(document.body)?window:n),this.options=t.extend({},e.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var i=t(this),o=i.data("bs.scrollspy"),r="object"==typeof n&&n;o||i.data("bs.scrollspy",o=new e(this,r)),"string"==typeof n&&o[n]()})}e.VERSION="3.3.7",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),o=e.data("target")||e.attr("href"),r=/^#./.test(o)&&t(o);return r&&r.length&&r.is(":visible")&&[[r[n]().top+i,o]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),i=this.options.offset+n-this.$scrollElement.height(),o=this.offsets,r=this.targets,s=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),e>=i)return s!=(t=r[r.length-1])&&this.activate(t);if(s&&e<o[0])return this.activeTarget=null,this.clear();for(t=o.length;t--;)s!=r[t]&&e>=o[t]&&(void 0===o[t+1]||e<o[t+1])&&this.activate(r[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var n=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',i=t(n).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=t.fn.scrollspy;t.fn.scrollspy=n,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=i,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);n.call(e,e.data())})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),o=i.data("bs.tab");o||i.data("bs.tab",o=new n(this)),"string"==typeof e&&o[e]()})}var n=function(e){this.element=t(e)};n.VERSION="3.3.7",n.TRANSITION_DURATION=150,n.prototype.show=function(){var e=this.element,n=e.closest("ul:not(.dropdown-menu)"),i=e.data("target");if(i||(i=e.attr("href"),i=i&&i.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var o=n.find(".active:last a"),r=t.Event("hide.bs.tab",{relatedTarget:e[0]}),s=t.Event("show.bs.tab",{relatedTarget:o[0]});if(o.trigger(r),e.trigger(s),!s.isDefaultPrevented()&&!r.isDefaultPrevented()){var a=t(i);this.activate(e.closest("li"),n),this.activate(a,a.parent(),function(){o.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:o[0]})})}}},n.prototype.activate=function(e,i,o){function r(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),a?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),o&&o()}var s=i.find("> .active"),a=o&&t.support.transition&&(s.length&&s.hasClass("fade")||!!i.find("> .fade").length);s.length&&a?s.one("bsTransitionEnd",r).emulateTransitionEnd(n.TRANSITION_DURATION):r(),s.removeClass("in")};var i=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=n,t.fn.tab.noConflict=function(){return t.fn.tab=i,this};var o=function(n){n.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',o).on("click.bs.tab.data-api",'[data-toggle="pill"]',o)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),o=i.data("bs.affix"),r="object"==typeof e&&e;o||i.data("bs.affix",o=new n(this,r)),"string"==typeof e&&o[e]()})}var n=function(e,i){this.options=t.extend({},n.DEFAULTS,i),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION="3.3.7",n.RESET="affix affix-top affix-bottom",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(t,e,n,i){var o=this.$target.scrollTop(),r=this.$element.offset(),s=this.$target.height();if(null!=n&&"top"==this.affixed)return o<n&&"top";if("bottom"==this.affixed)return null!=n?!(o+this.unpin<=r.top)&&"bottom":!(o+s<=t-i)&&"bottom";var a=null==this.affixed,l=a?o:r.top,c=a?s:e;return null!=n&&o<=n?"top":null!=i&&l+c>=t-i&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},n.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),i=this.options.offset,o=i.top,r=i.bottom,s=Math.max(t(document).height(),t(document.body).height());"object"!=typeof i&&(r=o=i),"function"==typeof o&&(o=i.top(this.$element)),"function"==typeof r&&(r=i.bottom(this.$element));var a=this.getState(s,e,o,r);if(this.affixed!=a){null!=this.unpin&&this.$element.css("top","");var l="affix"+(a?"-"+a:""),c=t.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=a,this.unpin="bottom"==a?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==a&&this.$element.offset({top:s-e-r})}};var i=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=n,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var n=t(this),i=n.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),e.call(n,i)})})}(jQuery),angular.module("ui.checkbox",[]).directive("checkbox",function(){return{scope:{},require:"ngModel",restrict:"E",replace:"true",template:"<button type=\"button\" ng-style=\"stylebtn\" class=\"btn btn-default\" ng-class=\"{'btn-xs': size==='default', 'btn-sm': size==='large', 'btn-lg': size==='largest', 'checked': checked===true}\">"+'<span ng-style="styleicon" class="glyphicon" ng-class="{\'glyphicon-ok\': checked===true}"></span></button>',compile:function(t,e,n){return void 0!==e.ngClass&&(e.ngClass=e.ngClass.replace(/}\s*{/g,", ")),function(t,e,n,i){t.size="default",t.stylebtn={},t.styleicon={width:"10px",left:"-1px"},void 0!==n.large&&(t.size="large",t.stylebtn={"padding-top":"2px","padding-bottom":"2px",height:"30px"},t.styleicon={width:"8px",left:"-5px","font-size":"17px"}),void 0!==n.larger&&(t.size="larger",t.stylebtn={"padding-top":"2px","padding-bottom":"2px",height:"34px"},t.styleicon={width:"8px",left:"-8px","font-size":"22px"}),void 0!==n.largest&&(t.size="largest",t.stylebtn={"padding-top":"2px","padding-bottom":"2px",height:"45px"},t.styleicon={width:"11px",left:"-11px","font-size":"30px"});var o=!0,r=!1;void 0!==n.ngTrueValue&&(o=n.ngTrueValue),void 0!==n.ngFalseValue&&(r=n.ngFalseValue),void 0!==t.name&&(e.name=t.name),t.$watch(function(){return i.$modelValue===o||i.$modelValue===!0?i.$setViewValue(o):i.$setViewValue(r),i.$modelValue},function(e,n){t.checked=i.$modelValue===o},!0),e.bind("click",function(){t.$apply(function(){i.$modelValue===r?i.$setViewValue(o):i.$setViewValue(r)})})}}}}),!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.topojson=t.topojson||{})}(this,function(t){"use strict";function e(){}function n(t){if(!t)return e;var n,i,o=t.scale[0],r=t.scale[1],s=t.translate[0],a=t.translate[1];return function(t,e){e||(n=i=0),t[0]=(n+=t[0])*o+s,t[1]=(i+=t[1])*r+a}}function i(t){if(!t)return e;var n,i,o=t.scale[0],r=t.scale[1],s=t.translate[0],a=t.translate[1];return function(t,e){e||(n=i=0);var l=Math.round((t[0]-s)/o),c=Math.round((t[1]-a)/r);t[0]=l-n,t[1]=c-i,n=l,i=c}}function o(t,e){for(var n,i=t.length,o=i-e;o<--i;)n=t[o],t[o++]=t[i],t[i]=n}function r(t,e){for(var n=0,i=t.length;i>n;){var o=n+i>>>1;t[o]<e?n=o+1:i=o}return n}function s(t,e){return"GeometryCollection"===e.type?{type:"FeatureCollection",features:e.geometries.map(function(e){return a(t,e)})}:a(t,e)}function a(t,e){var n={type:"Feature",id:e.id,properties:e.properties||{},geometry:l(t,e)};return null==e.id&&delete n.id,n}function l(t,e){function i(t,e){e.length&&e.pop();for(var n,i=f[0>t?~t:t],r=0,s=i.length;s>r;++r)e.push(n=i[r].slice()),u(n,r);0>t&&o(e,s)}function r(t){return t=t.slice(),u(t,0),t}function s(t){for(var e=[],n=0,o=t.length;o>n;++n)i(t[n],e);return e.length<2&&e.push(e[0].slice()),e}function a(t){for(var e=s(t);e.length<4;)e.push(e[0].slice());return e}function l(t){return t.map(a)}function c(t){var e=t.type;return"GeometryCollection"===e?{type:e,geometries:t.geometries.map(c)}:e in p?{type:e,coordinates:p[e](t)}:null}var u=n(t.transform),f=t.arcs,p={Point:function(t){return r(t.coordinates)},MultiPoint:function(t){return t.coordinates.map(r)},LineString:function(t){return s(t.arcs)},MultiLineString:function(t){return t.arcs.map(s)},Polygon:function(t){return l(t.arcs)},MultiPolygon:function(t){return t.arcs.map(l)}};return c(e)}function c(t,e){function n(e){var n,i=t.arcs[0>e?~e:e],o=i[0];return t.transform?(n=[0,0],i.forEach(function(t){n[0]+=t[0],n[1]+=t[1]})):n=i[i.length-1],0>e?[n,o]:[o,n]}function i(t,e){for(var n in t){var i=t[n];delete e[i.start],delete i.start,delete i.end,i.forEach(function(t){o[0>t?~t:t]=1}),a.push(i)}}var o={},r={},s={},a=[],l=-1;return e.forEach(function(n,i){var o,r=t.arcs[0>n?~n:n];r.length<3&&!r[1][0]&&!r[1][1]&&(o=e[++l],e[l]=n,e[i]=o)}),e.forEach(function(t){var e,i,o=n(t),a=o[0],l=o[1];if(e=s[a])if(delete s[e.end],e.push(t),e.end=l,i=r[l]){delete r[i.start];var c=i===e?e:e.concat(i);r[c.start=e.start]=s[c.end=i.end]=c}else r[e.start]=s[e.end]=e;else if(e=r[l])if(delete r[e.start],e.unshift(t),e.start=a,i=s[a]){delete s[i.end];var u=i===e?e:i.concat(e);r[u.start=i.start]=s[u.end=e.end]=u}else r[e.start]=s[e.end]=e;else e=[t],r[e.start=a]=s[e.end=l]=e}),i(s,r),i(r,s),e.forEach(function(t){o[0>t?~t:t]||a.push([t])}),a}function u(t){return l(t,f.apply(this,arguments))}function f(t,e,n){function i(t){var e=0>t?~t:t;(u[e]||(u[e]=[])).push({i:t,g:l})}function o(t){t.forEach(i)}function r(t){t.forEach(o)}function s(t){"GeometryCollection"===t.type?t.geometries.forEach(s):t.type in f&&(l=t,f[t.type](t.arcs))}var a=[];if(arguments.length>1){var l,u=[],f={LineString:o,MultiLineString:r,Polygon:r,MultiPolygon:function(t){t.forEach(r)}};s(e),u.forEach(arguments.length<3?function(t){a.push(t[0].i)}:function(t){n(t[0].g,t[t.length-1].g)&&a.push(t[0].i)})}else for(var p=0,d=t.arcs.length;d>p;++p)a.push(p);return{type:"MultiLineString",arcs:c(t,a)}}function p(t){var e=t[0],n=t[1],i=t[2];return Math.abs((e[0]-i[0])*(n[1]-e[1])-(e[0]-n[0])*(i[1]-e[1]))}function d(t){for(var e,n=-1,i=t.length,o=t[i-1],r=0;++n<i;)e=o,o=t[n],r+=e[0]*o[1]-e[1]*o[0];return r/2}function h(t){return l(t,g.apply(this,arguments))}function g(t,e){function n(t){t.forEach(function(e){e.forEach(function(e){(o[e=0>e?~e:e]||(o[e]=[])).push(t)})}),r.push(t)}function i(e){return Math.abs(d(l(t,{type:"Polygon",arcs:[e]}).coordinates[0]))}var o={},r=[],s=[];return e.forEach(function(t){"Polygon"===t.type?n(t.arcs):"MultiPolygon"===t.type&&t.arcs.forEach(n)}),r.forEach(function(t){if(!t._){var e=[],n=[t];for(t._=1,s.push(e);t=n.pop();)e.push(t),t.forEach(function(t){t.forEach(function(t){o[0>t?~t:t].forEach(function(t){t._||(t._=1,n.push(t))})})})}}),r.forEach(function(t){delete t._}),{type:"MultiPolygon",arcs:s.map(function(e){var n,r=[];if(e.forEach(function(t){t.forEach(function(t){t.forEach(function(t){o[0>t?~t:t].length<2&&r.push(t)})})}),r=c(t,r),(n=r.length)>1)for(var s,a,l=1,u=i(r[0]);n>l;++l)(s=i(r[l]))>u&&(a=r[0],r[0]=r[l],r[l]=a,u=s);return r})}}function m(t){function e(t,e){t.forEach(function(t){0>t&&(t=~t);var n=o[t];n?n.push(e):o[t]=[e]})}function n(t,n){t.forEach(function(t){e(t,n)})}function i(t,e){"GeometryCollection"===t.type?t.geometries.forEach(function(t){i(t,e)}):t.type in a&&a[t.type](t.arcs,e)}var o={},s=t.map(function(){return[]}),a={LineString:e,MultiLineString:n,Polygon:n,MultiPolygon:function(t,e){t.forEach(function(t){n(t,e)})}};t.forEach(i);for(var l in o)for(var c=o[l],u=c.length,f=0;u>f;++f)for(var p=f+1;u>p;++p){var d,h=c[f],g=c[p];(d=s[h])[l=r(d,g)]!==g&&d.splice(l,0,g),(d=s[g])[l=r(d,h)]!==h&&d.splice(l,0,h)}return s}function v(t,e){return t[1][2]-e[1][2]}function y(){function t(t,e){for(;e>0;){var n=(e+1>>1)-1,o=i[n];if(v(t,o)>=0)break;i[o._=e]=o,i[t._=e=n]=t}}function e(t,e){for(;;){var n=e+1<<1,r=n-1,s=e,a=i[s];if(o>r&&v(i[r],a)<0&&(a=i[s=r]),o>n&&v(i[n],a)<0&&(a=i[s=n]),s===e)break;i[a._=e]=a,i[t._=e=s]=t}}var n={},i=[],o=0;return n.push=function(e){return t(i[e._=o]=e,o++),o},n.pop=function(){
-if(!(0>=o)){var t,n=i[0];return--o>0&&(t=i[o],e(i[t._=0]=t,0)),n}},n.remove=function(n){var r,s=n._;if(i[s]===n)return s!==--o&&(r=i[o],(v(r,n)<0?t:e)(i[r._=s]=r,s)),s},n}function b(t,e){function o(t){a.remove(t),t[1][2]=e(t),a.push(t)}var r=n(t.transform),s=i(t.transform),a=y();return e||(e=p),t.arcs.forEach(function(t){var n,i,l,c,u=[],f=0;for(i=0,l=t.length;l>i;++i)c=t[i],r(t[i]=[c[0],c[1],1/0],i);for(i=1,l=t.length-1;l>i;++i)n=t.slice(i-1,i+2),n[1][2]=e(n),u.push(n),a.push(n);for(i=0,l=u.length;l>i;++i)n=u[i],n.previous=u[i-1],n.next=u[i+1];for(;n=a.pop();){var p=n.previous,d=n.next;n[1][2]<f?n[1][2]=f:f=n[1][2],p&&(p.next=d,p[2]=n[2],o(p)),d&&(d.previous=p,d[0]=n[0],o(d))}t.forEach(s)}),t}var x="1.6.26";t.version=x,t.mesh=u,t.meshArcs=f,t.merge=h,t.mergeArcs=g,t.feature=s,t.neighbors=m,t.presimplify=b});
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosCeilometerDashboard.js b/xos/core/xoslib/static/js/xosCeilometerDashboard.js
deleted file mode 100644
index eb1a99a..0000000
--- a/xos/core/xoslib/static/js/xosCeilometerDashboard.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.ceilometerDashboard",["ngResource","ngCookies","ui.router","xos.helpers","ngAnimate","chart.js","ui.bootstrap.accordion"]).config(["$stateProvider","$urlRouterProvider",function(e,t){e.state("ceilometerDashboard",{url:"/",template:"<ceilometer-dashboard></ceilometer-dashboard>"}).state("samples",{url:"/:name/:tenant/samples",template:"<ceilometer-samples></ceilometer-samples>"}),t.otherwise("/")}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).run(["$rootScope",function(e){e.stateName="ceilometerDashboard",e.$on("$stateChangeStart",function(t,n){e.stateName=n.name})}]),angular.module("xos.ceilometerDashboard").run(["$templateCache",function(e){e.put("templates/accordion-group.html",'<div class="panel {{panelClass || \'panel-default\'}}">\n  <div class="panel-heading" ng-keypress="toggleOpen($event)">\n    <h5>\n      <a href tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" uib-accordion-transclude="heading"><span ng-class="{\'text-muted\': isDisabled}">{{heading}}</span></a>\n    </h5>\n  </div>\n  <div class="panel-collapse collapse" uib-collapse="!isOpen">\n\t  <div class="panel-body" ng-transclude></div>\n  </div>\n</div>\n'),e.put("templates/accordion.html",'<div class="panel-group" ng-transclude></div>'),e.put("templates/ceilometer-dashboard.tpl.html",'<div class="row">\n  <div class="col-sm-10">\n    <h3>XOS Monitoring Statistics</h3>\n  </div>\n  <div class="col-xs-2 text-right">\n    <a href="" class="btn btn-default" \n      ng-show="vm.selectedSlice && !vm.showStats"\n      ng-click="vm.showStats = true">\n      <i class="glyphicon glyphicon-transfer"></i>\n    </a>\n    <a href="" class="btn btn-default" \n      ng-show="vm.selectedSlice && vm.showStats"\n      ng-click="vm.showStats = false">\n      <i class="glyphicon glyphicon-transfer"></i>\n    </a>\n  </div>\n</div>\n\n<div class="row" ng-show="vm.loader">\n  <div class="col-xs-12">\n    <div class="loader">Loading</div>\n  </div>\n</div>\n\n<section ng-hide="vm.loader" ng-class="{animate: !vm.loader}">\n  <div class="row">\n    <div class="col-sm-3 service-list">\n        <h4>XOS Service: </h4>\n        <uib-accordion close-others="true" template-url="templates/accordion.html">\n          <uib-accordion-group\n            ng-repeat="service in vm.services | orderBy:\'-service\'"\n            template-url="templates/accordion-group.html"\n            is-open="vm.accordion.open[service.service]"\n            heading="{{service.service}}">\n            <h5>Slices:</h5>\n            <a ng-repeat="slice in service.slices" \n              ng-class="{active: slice.slice === vm.selectedSlice}"\n              ng-click="vm.loadSliceMeter(slice, service.service)"\n              href="#" class="list-group-item" >\n              {{slice.slice}} <i class="glyphicon glyphicon-chevron-right pull-right"></i>\n            </a>\n          </uib-accordion-group>\n        </uib-accordion>\n    </div>\n    <section class="side-container col-sm-9">\n      <div class="row">\n        <!-- STATS -->\n        <article ng-hide="!vm.showStats" class="stats animate-slide-left">\n          <div class="col-xs-12">\n            <div class="list-group">\n              <div class="list-group-item">\n                <h4>Stats</h4>\n              </div>\n              <div class="list-group-item">\n                <ceilometer-stats ng-if="vm.selectedSlice" name="vm.selectedSlice" tenant="vm.selectedTenant"></ceilometer-stats>\n              </div>\n            </div>\n          </div>\n        </article>\n        <!-- METERS -->\n        <article ng-hide="vm.showStats" class="meters animate-slide-left">\n          <div class="alert alert-danger" ng-show="vm.ceilometerError">\n            {{vm.ceilometerError}}\n          </div>\n          <div class="col-sm-4 animate-slide-left" ng-hide="!vm.selectedSlice">\n            <div class="list-group">\n              <div class="list-group-item">\n                <h4>Resources</h4>\n              </div>\n              <a href="#" \n                ng-click="vm.selectMeters(meters, resource)" \n                class="list-group-item" \n                ng-repeat="(resource, meters) in vm.selectedResources" \n                ng-class="{active: resource === vm.selectedResource}">\n                {{resource}} <i class="glyphicon glyphicon-chevron-right pull-right"></i>\n              </a>\n            </div>\n          </div>\n          <div class="col-sm-8 animate-slide-left" ng-hide="!vm.selectedMeters">\n            <div class="list-group">\n              <div class="list-group-item">\n                <h4>Meters</h4>\n              </div>\n              <div class="list-group-item">\n                <div class="row">\n                  <div class="col-xs-6">\n                    <label>Name:</label>\n                  </div>\n                  <div class="col-xs-3">\n                    <label>Unit:</label>\n                  </div>\n                  <div class="col-xs-3"></div>\n                </div>\n                <div class="row" ng-repeat="meter in vm.selectedMeters" style="margin-bottom: 10px;">\n                  <div class="col-xs-6">\n                    {{meter.name}}\n                  </div>\n                  <div class="col-xs-3">\n                    {{meter.unit}}\n                  </div>\n                  <div class="col-xs-3">\n                    <!-- tenant: meter.resource_id -->\n                    <a ui-sref="samples({name: meter.name, tenant: meter.resource_id})" class="btn btn-primary">\n                      <i class="glyphicon glyphicon-search"></i>\n                    </a>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </article>\n      </div>\n    </section>\n  </div>\n</section>\n<section ng-if="!vm.loader && vm.error">\n  <div class="alert alert-danger">\n    {{vm.error}}\n  </div>\n</section>\n'),e.put("templates/ceilometer-samples.tpl.html",'<!-- <pre>{{ vm | json}}</pre> -->\n\n<div class="row">\n  <div class="col-xs-10">\n    <h1>{{vm.name | uppercase}}</h1>\n  </div>\n  <div class="col-xs-2">\n    <a ui-sref="ceilometerDashboard" class="btn btn-primary pull-right">\n      <i class="glyphicon glyphicon-arrow-left"></i> Back to list\n    </a>\n  </div>\n</div>\n<div class="row" ng-show="vm.loader">\n  <div class="col-xs-12">\n    <div class="loader">Loading</div>\n  </div>\n</div>\n<section ng-if="!vm.loader && !vm.error">\n  <div class="row" ng-if="vm.chartType !== \'pie\'">\n    <form class="form-inline col-xs-8" ng-submit="vm.addMeterToChart(vm.addMeterValue)">\n      <select ng-model="vm.addMeterValue" class="form-control" ng-options="resource.id as resource.name for resource in vm.sampleLabels"></select>\n      <button class="btn btn-success"> \n        <i class="glyphicon glyphicon-plus"></i> Add\n      </button>\n    </form>\n    <div class="col-xs-4 text-right">\n      <a ng-click="vm.chartType = \'line\'" class="btn" ng-class="{\'btn-default\': vm.chartType != \'bar\', \'btn-primary\': vm.chartType == \'line\'}">Lines</a>\n      <a ng-click="vm.chartType = \'bar\'" class="btn" ng-class="{\'btn-default\': vm.chartType != \'line\', \'btn-primary\': vm.chartType == \'bar\'}">Bars</a>\n    </div>\n  </div>\n  <div class="row" ng-if="!vm.loader">\n    <div class="col-xs-12">\n      <canvas ng-if="vm.chartType === \'line\'" id="line" class="chart chart-line" chart-data="vm.chart.data" chart-options="{datasetFill: false}"\n        chart-labels="vm.chart.labels" chart-legend="false" chart-series="vm.chart.series">\n      </canvas>\n      <canvas ng-if="vm.chartType === \'bar\'" id="bar" class="chart chart-bar" chart-data="vm.chart.data"\n        chart-labels="vm.chart.labels" chart-legend="false" chart-series="vm.chart.series">\n      </canvas>\n    </div>\n    <!-- PIE CHART -->\n    <div class="col-xs-8" ng-if="vm.chartType === \'pie\'">\n      <canvas id="pie" class="chart chart-pie"\n        chart-data="vm.chart.data" chart-labels="vm.chart.labels" chart-options="vm.chart.options">\n      </canvas> \n    </div>\n    <div class="col-xs-4" ng-if="vm.chartType === \'pie\'">\n      <div class="row" ng-repeat="item in vm.chart.labels">\n        <div class="col-xs-12">\n          <span \n            class="btn btn-chart"\n            ng-style="{\'background-color\': vm.chartColors[$index]}">\n            {{item}}: {{vm.chart.data[$index]}}%\n          </span>\n        </div>\n      </div>\n    </div>\n    <!-- END PIE CHART -->\n  </div>\n  <div class="row" ng-if="!vm.loader">\n    <div class="col-xs-12">\n      <a ng-click="vm.removeFromChart(meter)" class="btn btn-chart" ng-style="{\'background-color\': vm.chartColors[$index]}" ng-repeat="meter in vm.chartMeters">\n        {{meter.resource_name || meter.resource_id}}\n      </a>\n    </div>\n  </div>\n</section>\n<section ng-if="!vm.loader && vm.error">\n  <div class="alert alert-danger">\n    {{vm.error}}\n  </div>\n</section>'),e.put("templates/ceilometer-stats.tpl.html",'<div ng-show="vm.loader" class="loader">Loading</div>\n\n<section ng-if="!vm.loader && !vm.error">\n\n  <div class="alert alert-danger" ng-if="vm.stats.length == 0">\n    No result\n  </div>  \n\n  <table class="table" ng-if="vm.stats.length > 0">\n    <tr>\n      <th>\n        <a ng-click="(order == \'category\') ? order = \'-category\' : order = \'category\'">Type:</a>\n      </th>\n      <th>\n        <a ng-click="(order == \'resource_name\') ? order = \'-resource_name\' : order = \'resource_name\'">Resource:</a>\n      </th>\n      <th>\n        <a ng-click="(order == \'meter\') ? order = \'-meter\' : order = \'meter\'">Meter:</a>\n      </th>\n      <th>\n        Unit:\n      </th>\n      <th>\n        Value:\n      </th>\n    </tr>\n    <!-- <tr>\n      <td>\n        <input type="text" ng-model="query.category">\n      </td>\n      <td>\n        <input type="text" ng-model="query.resource_name">\n      </td>\n      <td>\n        <input type="text" ng-model="query.meter">\n      </td>\n      <td>\n        <input type="text" ng-model="query.unit">\n      </td>\n      <td>\n        <input type="text" ng-model="query.value">\n      </td>\n    </tr> -->\n    <tr ng-repeat="item in vm.stats | orderBy:order">\n      <td>{{item.category}}</td>\n      <td>{{item.resource_name}}</td>\n      <td>{{item.meter}}</td>\n      <td>{{item.unit}}</td>\n      <td>{{item.value}}</td>\n    </tr>\n  </table>\n</section>\n\n<section ng-if="!vm.loader && vm.error">\n  <div class="alert alert-danger">\n    {{vm.error}}\n  </div>\n</section>\n'),e.put("templates/users-list.tpl.html",'<xos-table config="vm.tableConfig" data="vm.users"></xos-table>')}]),function(){angular.module("xos.ceilometerDashboard").directive("ceilometerStats",function(){return{restrict:"E",scope:{name:"=name",tenant:"=tenant"},bindToController:!0,controllerAs:"vm",templateUrl:"templates/ceilometer-stats.tpl.html",controller:["$scope","Ceilometer",function(e,t){var n=this;this.getStats=function(e){n.loader=!0,t.getStats({tenant:e}).then(function(e){e.map(function(e){return e.resource_name=e.resource_name.replace("mysite_onos_vbng","ONOS_FABRIC"),e.resource_name=e.resource_name.replace("mysite_onos_volt","ONOS_CORD"),e.resource_name=e.resource_name.replace("mysite_vbng","mysite_vRouter"),e}),n.stats=e})["catch"](function(e){n.error=e.data})["finally"](function(){n.loader=!1})},e.$watch(function(){return n.name},function(e){e&&n.getStats(n.tenant)})}]}})}(),function(){angular.module("xos.ceilometerDashboard").directive("ceilometerSamples",["_","$stateParams","$interval",function(e,t,n){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/ceilometer-samples.tpl.html",controller:["Ceilometer",function(r){var s=this;this.chartColors=["#286090","#F7464A","#46BFBD","#FDB45C","#97BBCD","#4D5360","#8c4f9f"],this.chart={series:[],labels:[],data:[]},Chart.defaults.global.colours=this.chartColors,this.chartType="line";var a=["broadview.pt.packet-trace-lag-resolution","broadview.pt.packet-trace-ecmp-resolution"],i=!1,c=6e4;if(!t.name||!t.tenant)throw new Error("Missing Name and Tenant Params!");this.name=t.name,this.tenant=t.tenant,a.indexOf(this.name)>-1&&(i=!0,this.chartType="pie",c=1e4),this.getLabels=function(e){return e.reduce(function(e,t){var n=new Date(t.timestamp);return e.push(n.getHours()+":"+((n.getMinutes()<10?"0":"")+n.getMinutes())+":"+n.getSeconds()),e},[])},this.getData=function(e){return e.reduce(function(e,t){return e.push(t.volume),e},[])},this.chartMeters=[],this.addMeterToChart=function(t){var n=e.findIndex(s.chartMeters,function(e){return e.resource_id===t});n<0?(s.chart.data.push(s.getData(e.sortBy(s.samplesList[t],"timestamp"))),s.chart.labels=s.getLabels(e.sortBy(s.samplesList[t],"timestamp")),s.chart.series.push(t),s.chartMeters.push(s.samplesList[t][0]),e.remove(s.sampleLabels,{id:t})):(s.chart.data[n]=s.getData(e.sortBy(s.samplesList[t],"timestamp")),s.chart.labels=s.getLabels(e.sortBy(s.samplesList[t],"timestamp")),s.chart.series[n]=t)},this.removeFromChart=function(t){s.chart.data.splice(s.chart.series.indexOf(t.resource_id),1),s.chart.series.splice(s.chart.series.indexOf(t.resource_id),1),s.chartMeters.splice(e.findIndex(s.chartMeters,{resource_id:t.resource_id}),1),s.sampleLabels.push({id:t.resource_id,name:t.resource_name||t.resource_id})},this.formatSamplesLabels=function(t){return e.uniq(t,"resource_id").reduce(function(e,t){return e.push({id:t.resource_id,name:t.resource_name||t.resource_id}),e},[])},this.formatPieChartData=function(t){s.chart.labels=t[0].metadata["lag-members"].replace(/\[|\]|'| /g,"").split(","),s.chart.options={legend:{display:!0}},t=e.groupBy(t,function(e){return e.metadata["dst-lag-member"]}),Chart.defaults.global.tooltipTemplate="<%if (label){%><%=label%>: <%}%><%= value %>%";var n=e.reduce(s.chart.labels,function(e,n){var r=t[n]?t[n].length:0;return e.push(r),e},[]),r=e.reduce(n,function(e,t){return e+t}),a=e.map(n,function(e){return Math.round(e/r*100)});console.log(r),s.chart.data=a},this.loader=!0,this.showSamples=function(){var t=void 0;t=i?r.getSamples(s.name,30):r.getSamples(s.name),t.then(function(t){return t.map(function(e){return e.resource_name=e.resource_name.replace("mysite_onos_vbng","ONOS_FABRIC"),e.resource_name=e.resource_name.replace("mysite_onos_volt","ONOS_CORD"),e.resource_name=e.resource_name.replace("mysite_vbng","mysite_vRouter"),e}),i?void s.formatPieChartData(t):(s.samplesList=e.groupBy(t,"resource_id"),s.sampleLabels=s.formatSamplesLabels(t),void s.addMeterToChart(s.tenant))})["catch"](function(e){s.error=e.data.detail})["finally"](function(){s.loader=!1})},n(function(){s.showSamples()},c),this.showSamples()}]}}])}(),function(){angular.module("xos.ceilometerDashboard").service("Ceilometer",["$http","$q",function(e,t){this.getMappings=function(){var n=t.defer();return e.get("/api/tenant/monitoring/dashboard/xos-slice-service-mapping/").then(function(e){n.resolve(e.data)})["catch"](function(e){n.reject(e)}),n.promise},this.getMeters=function(n){var r=t.defer();return e.get("/api/tenant/monitoring/dashboard/meters/",{cache:!0,params:n}).then(function(e){r.resolve(e.data)})["catch"](function(e){r.reject(e)}),r.promise},this.getSamples=function(n){var r=arguments.length<=1||void 0===arguments[1]?10:arguments[1],s=t.defer();return e.get("/api/tenant/monitoring/dashboard/metersamples/",{params:{meter:n,limit:r}}).then(function(e){s.resolve(e.data)})["catch"](function(e){s.reject(e)}),s.promise},this.getStats=function(n){var r=t.defer();return e.get("/api/tenant/monitoring/dashboard/meterstatistics/",{cache:!0,params:n}).then(function(e){r.resolve(e.data)})["catch"](function(e){r.reject(e)}),r.promise},this.selectedService=null,this.selectedSlice=null,this.selectedResource=null}])}(),function(){angular.module("xos.ceilometerDashboard").directive("ceilometerDashboard",["_",function(e){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/ceilometer-dashboard.tpl.html",controller:["Ceilometer",function(t){var n=this;this.showStats=!1,this.accordion={open:{}},this.openPanels=function(){t.selectedService&&(n.accordion.open[t.selectedService]=!0,t.selectedSlice&&(n.loadSliceMeter(t.selectedSlice,t.selectedService),n.selectedSlice=t.selectedSlice,t.selectedResource&&(n.selectedResource=t.selectedResource)))},this.loadMappings=function(){n.loader=!0,t.getMappings().then(function(e){e.map(function(e){return"service_ONOS_vBNG"===e.service&&(e.service="ONOS_FABRIC"),"service_ONOS_vOLT"===e.service&&(e.service="ONOS_CORD"),e.slices.map(function(e){"mysite_onos_volt"===e.slice&&(e.slice="ONOS_CORD"),"mysite_onos_vbng"===e.slice&&(e.slice="ONOS_FABRIC"),"mysite_vbng"===e.slice&&(e.slice="mysite_vRouter")}),e}),n.services=e,n.openPanels()})["catch"](function(e){n.error=e.data&&e.data.detail?e.data.detail:"An Error occurred. Please try again later."})["finally"](function(){n.loader=!1})},this.loadMappings(),this.loadSliceMeter=function(r,s){t.selectedSlice=null,t.selectedService=null,t.selectedResources=null,n.loader=!0,n.error=null,n.ceilometerError=null,t.getMeters({tenant:r.project_id}).then(function(a){n.selectedSlice=r.slice,n.selectedTenant=r.project_id,t.selectedSlice=r,t.selectedService=s,a.map(function(e){return e.resource_name=e.resource_name.replace("mysite_onos_vbng","ONOS_FABRIC"),e.resource_name=e.resource_name.replace("mysite_onos_volt","ONOS_CORD"),e.resource_name=e.resource_name.replace("mysite_vbng","mysite_vRouter"),e}),n.selectedResources=e.groupBy(a,"resource_name"),t.selectedResource&&(n.selectedMeters=n.selectedResources[t.selectedResource])})["catch"](function(e){return 503===e.status?n.ceilometerError=e.data.detail.specific_error:void(n.ceilometerError=e.data&&e.data.detail&&e.data.detail.specific_error?e.data.detail.specific_error:"An Error occurred. Please try again later.")})["finally"](function(){n.loader=!1})},this.selectedMeters=null,this.selectMeters=function(e,r){n.selectedMeters=e,t.selectedResource=r,n.selectedResource=r}}]}}])}(),angular.module("xos.ceilometerDashboard").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosContentProvider.js b/xos/core/xoslib/static/js/xosContentProvider.js
deleted file mode 100644
index a902c2f..0000000
--- a/xos/core/xoslib/static/js/xosContentProvider.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.contentProvider",["ngResource","ngCookies","xos.helpers","ui.router"]).config(["$stateProvider",function(n){n.state("list",{url:"/",template:"<content-provider-list></content-provider-list>"}).state("details",{url:"/contentProvider/:id",template:"<content-provider-detail></content-provider-detail>"}).state("cdn",{url:"/contentProvider/:id/cdn_prefix",template:"<content-provider-cdn></content-provider-cdn>"}).state("server",{url:"/contentProvider/:id/origin_server",template:"<content-provider-server></content-provider-server>"}).state("users",{url:"/contentProvider/:id/users",template:"<content-provider-users></content-provider-users>"})}]).config(["$httpProvider",function(n){n.interceptors.push("SetCSRFToken"),n.interceptors.push("NoHyperlinks")}]).service("ContentProvider",["$resource",function(n){return n("/hpcapi/contentproviders/:id/",{id:"@id"},{update:{method:"PUT"}})}]).service("ServiceProvider",["$resource",function(n){return n("/hpcapi/serviceproviders/:id/",{id:"@id"})}]).service("CdnPrefix",["$resource",function(n){return n("/hpcapi/cdnprefixs/:id/",{id:"@id"})}]).service("OriginServer",["$resource",function(n){return n("/hpcapi/originservers/:id/",{id:"@id"})}]).service("User",["$resource",function(n){return n("/xos/users/:id/",{id:"@id"})}]).directive("cpActions",["ContentProvider","$location",function(n,e){return{restrict:"E",scope:{id:"=id"},bindToController:!0,controllerAs:"vm",templateUrl:"templates/cp_actions.html",controller:function(){this.deleteCp=function(t){n["delete"]({id:t}).$promise.then(function(){e.url("/")})}}}}]).directive("contentProviderList",["ContentProvider","_",function(n,e){return{restrict:"E",controllerAs:"vm",scope:{},templateUrl:"templates/cp_list.html",controller:function(){this.tableConfig={columns:[{label:"Name",field:"humanReadableName"},{label:"Description",field:"description"},{label:"Status",field:"enabled"}],enableActions:!0};var t=this;n.query().$promise.then(function(n){t.contentProviderList=n})["catch"](function(n){throw new Error(n)}),this.deleteCp=function(s){n["delete"]({id:s}).$promise.then(function(){e.remove(t.contentProviderList,{id:s})})}}}}]).directive("contentProviderDetail",["ContentProvider","ServiceProvider","$stateParams","$location",function(n,e,t,s){return{restrict:"E",controllerAs:"vm",scope:{},templateUrl:"templates/cp_detail.html",controller:function(){this.pageName="detail";var i=this;t.id?n.get({id:t.id}).$promise.then(function(n){i.cp=n})["catch"](function(n){i.result={status:0,msg:n.data.detail}}):i.cp=new n,e.query().$promise.then(function(n){i.sp=n}),this.saveContentProvider=function(n){var e,t=!1;n.id?e=n.$update():(t=!0,n.name=n.humanReadableName,e=n.$save()),e.then(function(n){i.result={status:1,msg:"Content Provider Saved"},t&&s.url("contentProvider/"+n.id+"/")})["catch"](function(n){i.result={status:0,msg:n.data.detail}})}}}}]).directive("contentProviderCdn",["$stateParams","CdnPrefix","ContentProvider",function(n,e,t){return{restrict:"E",controllerAs:"vm",scope:{},templateUrl:"templates/cp_cdn_prefix.html",controller:["_",function(s){var i=this;this.pageName="cdn",n.id&&t.get({id:n.id}).$promise.then(function(n){i.cp=n})["catch"](function(n){i.result={status:0,msg:n.data?n.data.detail:""}}),e.query().$promise.then(function(e){i.prf=e,i.cp_prf=[],i.cp_prf.push(s.find(e,{contentProvider:parseInt(n.id)}))})["catch"](function(n){i.result={status:0,msg:n.data.detail}}),this.addPrefix=function(t){t.contentProvider=n.id;var s=new e(t);s.$save().then(function(n){i.cp_prf.push(n)})["catch"](function(n){i.result={status:0,msg:n.data.detail}})},this.removePrefix=function(n){n.$delete().then(function(){s.remove(i.cp_prf,n)})["catch"](function(n){i.result={status:0,msg:n.data.detail}})}}]}}]).directive("contentProviderServer",["$stateParams","OriginServer","ContentProvider",function(n,e,t){return{restrict:"E",controllerAs:"vm",scope:{},templateUrl:"templates/cp_origin_server.html",controller:["_",function(s){this.pageName="server",this.protocols={http:"HTTP",rtmp:"RTMP",rtp:"RTP",shout:"SHOUTcast"};var i=this;n.id&&t.get({id:n.id}).$promise.then(function(n){i.cp=n})["catch"](function(n){i.result={status:0,msg:n.data.detail}}),e.query({contentProvider:n.id}).$promise.then(function(n){i.cp_os=n})["catch"](function(n){i.result={status:0,msg:n.data.detail}}),this.addOrigin=function(t){t.contentProvider=n.id;var s=new e(t);s.$save().then(function(n){i.cp_os.push(n)})["catch"](function(n){i.result={status:0,msg:n.data.detail}})},this.removeOrigin=function(n){n.$delete().then(function(){s.remove(i.cp_os,n)})["catch"](function(n){i.result={status:0,msg:n.data.detail}})}}]}}]).directive("contentProviderUsers",["$stateParams","ContentProvider","User",function(n,e,t){return{restrict:"E",controllerAs:"vm",scope:{},templateUrl:"templates/cp_user.html",controller:["_",function(s){var i=this;this.pageName="user",this.cp_users=[],n.id&&t.query().$promise.then(function(t){return i.users=t,e.get({id:n.id}).$promise}).then(function(n){return n.users=i.populateUser(n.users,i.users),n}).then(function(n){i.cp=n})["catch"](function(n){i.result={status:0,msg:n.data.detail}}),this.populateUser=function(n,e){for(var t=0;t<n.length;t++)n[t]=s.find(e,{id:n[t]});return n},this.addUserToCp=function(n){i.cp.users.push(n)},this.removeUserFromCp=function(n){s.remove(i.cp.users,n)},this.saveContentProvider=function(n){n.users=s.map(n.users,"id"),n.$update().then(function(n){i.cp.users=i.populateUser(n.users,i.users),i.result={status:1,msg:"Content Provider Saved"}})["catch"](function(n){i.result={status:0,msg:n.data.detail}})}}]}}]),angular.module("xos.contentProvider").run(["$templateCache",function(n){n.put("templates/cp_actions.html",'<a href="#/" class="btn btn-default">\n  <i class="icon icon-arrow-left"></i>Back\n</a>\n<a href="#/contentProvider/" class="btn btn-success">\n  <i class="icon icon-plus"></i>Create\n</a>\n<a ng-click="vm.deleteCp(vm.id)" class="btn btn-danger">\n  <i class="icon icon-remove"></i>Remove\n</a>'),n.put("templates/cp_cdn_prefix.html",'<div class="row-fluid">\n  <div class="span6">\n    <h1>{$ vm.cp.humanReadableName $}</h1>\n  </div>\n  <div class="span6 text-right">\n    <cp-actions id="vm.cp.id"></cp-actions>\n  </div>\n</div>\n<hr>\n<div class="row-fluid">\n  <div class="span2">\n    <div ng-include="\'templates/cp_side_nav.html\'"></div>\n  </div>\n  <div class="span10">\n    <div ng-repeat="item in vm.cp_prf" class="well">\n      <div class="row-fluid">\n        <div class="span4">\n          {{item.humanReadableName}}\n        </div>\n        <div class="span6">\n          <!-- TODO show the name instead that id -->\n          {{item.defaultOriginServer}}\n        </div>\n        <div class="span2">\n          <a ng-click="vm.removePrefix(item)" class="btn btn-danger pull-right">\n            <i class="icon icon-remove"></i>\n          </a>\n        </div>\n      </div>\n    </div>\n    <hr>\n    <form ng-submit="vm.addPrefix(vm.new_prf)">\n      <div class="row-fluid">\n        <div class="span4">\n          <label>Prefix</label>\n          <input type="text" ng-model="vm.new_prf.prefix" required style="max-width: 90%">\n        </div>\n        <div class="span6">\n          <label>Default Origin Server</label>\n          <select ng-model="vm.new_prf.defaultOriginServer" style="max-width: 100%">\n            <option ng-repeat="prf in vm.prf" ng-value="prf.id">{$ prf.humanReadableName $}</option>\n          </select>\n        </div>\n        <div class="span2 text-right">\n          <button class="btn btn-success margin-wells">\n            <i class="icon icon-plus"></i>\n          </button>\n        </div>\n      </div>\n    </form>\n    <div class="alert" ng-show="vm.result" ng-class="{\'alert-success\': vm.result.status === 1,\'alert-error\': vm.result.status === 0}">\n      {$ vm.result.msg $}\n    </div>\n  </div>\n</div>'),n.put("templates/cp_detail.html",'<div class="row">\n  <div class="col-xs-6">\n    <h1>{$ vm.cp.humanReadableName $}</h1>\n  </div>\n  <div class="col-xs-6 text-right">\n    <cp-actions id="vm.cp.id"></cp-actions>\n  </div>\n</div>\n<hr>\n<div class="row">\n  <div ng-show="vm.cp.id" class="col-xs-2">\n    <div ng-include="\'templates/cp_side_nav.html\'"></div>\n  </div>\n  <div ng-class="{\'col-xs-10\': vm.cp.id, \'col-xs-12\': !vm.cp.id}">\n  <!-- TODO hide form on not found -->\n    <form ng-submit="vm.saveContentProvider(vm.cp)">\n      <fieldset>\n        <div class="row">\n          <div class="col-xs-6">\n            <label>Name:</label>\n            <input class="form-control" type="text" ng-model="vm.cp.humanReadableName" required/>\n          </div>\n          <div class="col-xs-6">\n            <label class="checkbox">\n              <input class="form-control" type="checkbox" ng-model="vm.cp.enabled" /> Enabled\n            </label>\n          </div>\n        </div>\n        <div class="row">\n          <div class="col-xs-12">\n            <label>Description</label>\n            <textarea class="form-control" ng-model="vm.cp.description"></textarea>\n          </div>\n        </div>\n        <div class="row">\n          <div class="col-xs-12">\n            <label>Service provider</label>\n            <select class="form-control" required ng-model="vm.cp.serviceProvider" ng-options="sp.id as sp.humanReadableName for sp in vm.sp"></select>\n          </div>\n        </div>\n        <div class="row">\n          <div class="col-xs-12">\n            <button class="btn btn-success">\n              <span ng-show="vm.cp.id">Save</span>\n              <span ng-show="!vm.cp.id">Create</span>\n            </button>\n          </div>\n        </div>\n      </fieldset>\n    </form>\n    <div class="alert" ng-show="vm.result" ng-class="{\'alert-success\': vm.result.status === 1,\'alert-danger\': vm.result.status === 0}">\n      {$ vm.result.msg $}\n    </div>\n  </div>\n</div>'),n.put("templates/cp_list.html",'<!-- <xos-table data="vm.contentProviderList" config="vm.config"/> -->\n\n<table class="table table-striped" ng-show="vm.contentProviderList.length > 0">\n  <thead>\n    <tr>\n      <th>\n        Name\n      </th>\n      <th>Description</th>\n      <th>Status</th>\n      <th></th>\n    </tr>\n  </thead>\n  <tr ng-repeat="item in vm.contentProviderList">\n    <td>\n      <a ui-sref="details({ id: item.id })">{$ item.humanReadableName $}</a>\n    </td>\n    <td>\n      {$ item.description $}\n    </td>\n    <td>\n      {$ item.enabled $}\n    </td>\n    <td class="text-right">\n      <a ng-click="vm.deleteCp(item.id)" class="btn btn-danger"><i class="glyphicon glyphicon-remove"></i></a></td>\n  </tr>\n</table>\n<div class="alert alert-error" ng-show="vm.contentProviderList.length == 0">\n  No Content Provider defined\n</div>\n\n<div class="row">\n  <div class="span12 text-right">\n    <a class="btn btn-success"href="#/contentProvider/">Create</a>\n  </div>\n</div>'),n.put("templates/cp_origin_server.html",'<div class="row-fluid">\n  <div class="span6">\n    <h1>{$ vm.cp.humanReadableName $}</h1>\n  </div>\n  <div class="span6 text-right">\n    <cp-actions id="vm.cp.id"></cp-actions>\n  </div>\n</div>\n<hr>\n<div class="row-fluid">\n  <div class="span2">\n    <div ng-include="\'templates/cp_side_nav.html\'"></div>\n  </div>\n  <div class="span10">\n    <div ng-repeat="item in vm.cp_os" class="well">\n      <div class="row-fluid">\n        <div class="span4">\n          {{item.humanReadableName}}\n        </div>\n        <div class="span6">\n          <!-- TODO shoe the name instead that url -->\n          {{item.defaultOriginServer}}\n        </div>\n        <div class="span2">\n          <a ng-click="vm.removeOrigin(item)" class="btn btn-danger pull-right">\n            <i class="icon icon-remove"></i>\n          </a>\n        </div>\n      </div>\n    </div>\n    <hr>\n    <form ng-submit="vm.addOrigin(vm.new_os)">\n      <div class="row-fluid">\n        <div class="span4">\n          <label>Protocol</label>\n          <select ng-model="vm.new_os.protocol" ng-options="k as v for (k,v) in vm.protocols" style="max-width: 100%;"></select>\n        </div>\n        <div class="span6">\n          <label>Url</label>\n          <input type="text" ng-model="vm.new_os.url" required>\n        </div>\n        <div class="span2 text-right">\n          <button class="btn btn-success margin-wells">\n            <i class="icon icon-plus"></i>\n          </button>\n        </div>\n      </div>\n    </form>\n    <div class="alert" ng-show="vm.result" ng-class="{\'alert-success\': vm.result.status === 1,\'alert-error\': vm.result.status === 0}">\n      {$ vm.result.msg $}\n    </div>\n  </div>\n</div>'),n.put("templates/cp_side_nav.html",'<ul class="nav nav-list">\n  <li>\n    <a class="btn" ng-class="{\'btn-primary\': vm.pageName == \'detail\'}" href="#/contentProvider/{$ vm.cp.id $}">Details</a>\n  </li>\n  <li>\n    <a class="btn" ng-class="{\'btn-primary\': vm.pageName == \'cdn\'}" href="#/contentProvider/{$ vm.cp.id $}/cdn_prefix">Cdn Prexix</a>\n  </li>\n  <li>\n    <a class="btn" ng-class="{\'btn-primary\': vm.pageName == \'server\'}" href="#/contentProvider/{$ vm.cp.id $}/origin_server">Origin Server</a>\n  </li>\n  <li>\n    <a class="btn" ng-class="{\'btn-primary\': vm.pageName == \'user\'}" href="#/contentProvider/{$ vm.cp.id $}/users">Users</a>\n  </li>\n</ul>'),n.put("templates/cp_user.html",'<div class="row-fluid">\n  <div class="span6">\n    <h1>{$ vm.cp.humanReadableName $}</h1>\n  </div>\n  <div class="span6 text-right">\n    <cp-actions id="vm.cp.id"></cp-actions>\n  </div>\n</div>\n<hr>\n<div class="row-fluid">\n  <div class="span2">\n    <div ng-include="\'templates/cp_side_nav.html\'"></div>\n  </div>\n  <div class="span10">\n    <div ng-repeat="item in vm.cp.users" class="well">\n      <div class="row-fluid">\n        <div class="span3">\n          {{item.firstname}}\n        </div>\n        <div class="span3">\n          {{item.lastname}}\n        </div>\n        <div class="span4">\n          {{item.email}}\n        </div>\n        <div class="span2">\n          <a ng-click="vm.removeUserFromCp(item)" class="btn btn-danger pull-right">\n            <i class="icon icon-remove"></i>\n          </a>\n        </div>\n      </div>\n    </div>\n    <hr>\n    <form ng-submit="vm.saveContentProvider(vm.cp)">\n      <div class="row-fluid">\n        <div class="span8">\n          <label>Select user:</label>\n          <select ng-model="vm.user" ng-options="u as u.username for u in vm.users" ng-change="vm.addUserToCp(vm.user)"></select>\n        </div>  \n        <div class="span4 text-right">\n          <button class="btn btn-success margin-wells">\n            Save\n          </button>\n        </div>\n      </div>\n    </form>\n    <div class="alert" ng-show="vm.result" ng-class="{\'alert-success\': vm.result.status === 1,\'alert-error\': vm.result.status === 0}">\n      {$ vm.result.msg $}\n    </div>\n  </div>\n</div>')}]),angular.module("xos.contentProvider").run(["$location",function(n){n.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosDashboardManager.js b/xos/core/xoslib/static/js/xosDashboardManager.js
deleted file mode 100644
index 8e89986..0000000
--- a/xos/core/xoslib/static/js/xosDashboardManager.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.dashboardManager",["ngResource","ngCookies","ui.router","xos.helpers","dndLists"]).config(["$stateProvider",function(e){e.state("manage-user-dashboards",{url:"/",template:"<user-dashboards></user-dashboards>"}).state("add-dashboards",{url:"/add",template:"<dashboard-form></dashboard-form>"}).state("edit-dashboards",{url:"/dashboards/:id",template:"<dashboard-form></dashboard-form>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).service("UserDashboards",["$http","$q",function(e,n){this.query=function(){var s=n.defer();return e.get("/api/utility/dashboards").then(function(e){s.resolve(e.data)})["catch"](function(e){s.reject(e)}),{$promise:s.promise}},this.update=function(s){var a=n.defer();return e.post("/api/utility/dashboards/",s).then(function(e){a.resolve(e.data)})["catch"](function(e){a.reject(e)}),{$promise:a.promise}}}]);var _slicedToArray=function(){function e(e,n){var s=[],a=!0,i=!1,o=void 0;try{for(var r,t=e[Symbol.iterator]();!(a=(r=t.next()).done)&&(s.push(r.value),!n||s.length!==n);a=!0);}catch(d){i=!0,o=d}finally{try{!a&&t["return"]&&t["return"]()}finally{if(i)throw o}}return s}return function(n,s){if(Array.isArray(n))return n;if(Symbol.iterator in Object(n))return e(n,s);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){angular.module("xos.dashboardManager").directive("userDashboards",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/user-dashboards.tpl.html",controller:["$q","_","UserDashboards","Dashboards",function(e,n,s,a){var i=this;e.all([s.query().$promise,a.query({enabled:"False"}).$promise]).then(function(e){var s=_slicedToArray(e,2),a=s[0],o=s[1];i.disabled=o,i.list={enabled:n.filter(a,{shown:!0}),disabled:n.filter(a,{shown:!1})}})["catch"](function(e){throw new Error(e)}),this.removeFromList=function(e,s){n.remove(i.list[e],{id:s})},this.addToList=function(e,n){i.list[e].push(n),location.reload()},this.isInList=function(e,s){return n.find(i.list[e],s)},this.reorderList=function(e,s,a,i){var o=n.filter(e,function(e){return e.id!==i.id&&(e.order<a||e.order>=s)});o=o.map(function(e){return e.order++,e})},this.addedToList=function(e,n,a,o,r){var t=void 0,d=i.isInList(r,a);d?(t=a.order,d.order=n,a.order=n):(a.order=i.list[r].length,a.shown=!a.shown);var l="enabled"===r?"disabled":"enabled";s.update(a).$promise.then(function(e){d?i.reorderList(i.list[r],n,t,e):(i.addToList(r,e),i.removeFromList(l,e.id))})}}]}})}(),angular.module("xos.dashboardManager").run(["$templateCache",function(e){e.put("templates/dashboard-form.tpl.html",'<div class="row">\n  <div class="col-xs-10">\n    <h1>Manage Dashboard</h1>\n  </div>\n  <div class="col-xs-2 text-right">\n    <a ui-sref="manage-user-dashboards" class="btn btn-success">Back</a>\n  </div>\n</div>\n<div class="row">\n  <div class="col-xs-12">\n    <xos-form ng-model="vm.dashboard" config="vm.formConfig"></xos-form>\n  </div>\n</div>\n<div class="row" ng-show="vm.tosca">\n  <div class="col-sm-6">\n    <div class="row">\n      <div class="col-xs-12">\n        <xos-alert show="true" config="{type: \'info\'}">\n          Include this lines in a TOSCA recipe to load the {{vm.dashboard.name}} dashboard in the system.\n        </xos-alert>\n      </div>\n      <div class="col-xs-12">\n        <pre>{{vm.tosca}}</pre>\n      </div>\n    </div>\n  </div>\n  <div class="col-sm-6">\n    <div class="row">\n      <div class="col-xs-12">\n        <xos-alert show="true" config="{type: \'info\'}">\n          Add this lines as a requirement for the user in a TOSCA recipe to assign the {{vm.dashboard.name}} to the user.\n        </xos-alert>\n      </div>\n      <div class="col-xs-12">\n        <pre>{{vm.toscaRequirements}}</pre>\n      </div>\n    </div>\n  </div>\n</div>'),e.put("templates/user-dashboards.tpl.html",'<div class="row">\n  <div class="col-xs-10">\n    <h1>Manage Your Dashboards</h1>\n  </div>\n  <div class="col-xs-2 text-right">\n    <a ui-sref="add-dashboards" class="btn btn-success">Add</a>\n  </div>\n</div>\n\n<div class="row">\n  <div class="col-xs-6">\n    <div class="panel panel-primary">\n      <div class="panel-heading">\n        <h3 class="panel-title">\n          Available Dashboards\n        </h3>\n      </div>\n      <div class="panel-body">\n        <ul dnd-list="vm.list.disabled"\n          dnd-drop="vm.addedToList(event, index, item, external, \'disabled\')">\n          <li ng-repeat="item in vm.list.disabled"\n            dnd-moved="vm.removeFromList(\'disabled\', item.id)"\n            dnd-draggable="item">\n            <a ui-sref="edit-dashboards({id: item.id,})">\n              <img src="/static/images/{{item.icon}}"></img>\n              {{item.name}}\n              <i class="glyphicon glyphicon-pencil"></i>\n            </a>\n          </li>\n        </ul>\n      </div>\n    </div>\n  </div>\n  <div class="col-xs-6">\n    <div class="panel panel-primary">\n      <div class="panel-heading">\n        <h3 class="panel-title">\n          Enabled Dashboards\n        </h3>\n      </div>\n      <div class="panel-body">\n        <ul dnd-list="vm.list.enabled"\n          dnd-drop="vm.addedToList(event, index, item, external, \'enabled\')">\n          <li ng-repeat="item in vm.list.enabled | orderBy : \'order\'"\n            dnd-moved="vm.removeFromList(\'enabled\', item.id)"\n            dnd-draggable="item">\n            <a ui-sref="edit-dashboards({id: item.id,})">\n              <img src="/static/images/{{item.icon}}"></img>\n              {{item.name}}\n              <i class="glyphicon glyphicon-pencil"></i>\n            </a>\n          </li>\n        </ul>\n      </div>\n    </div>\n  </div>\n</div>\n<div class="row" ng-show="vm.disabled.length > 0">\n  <div class="col-xs-12">\n    <h1>Disabled Dashboard</h1>\n  </div>\n  <div class="col-xs-12">\n    <div class="row">\n      <div class="col-sm-2" ng-repeat="item in vm.disabled | orderBy : \'id\'">\n        <span class="dashboard-container">\n          <a ui-sref="edit-dashboards({id: item.id,})">\n            <img src="/static/images/{{item.icon}}"></img>\n            {{item.name}}\n            <i class="glyphicon glyphicon-pencil"></i>\n          </a>\n        </span>\n      </div>\n    </div>\n  </div>\n</div>\n'),e.put("templates/users-list.tpl.html",'<xos-table config="vm.tableConfig" data="vm.users"></xos-table>')}]),function(){angular.module("xos.dashboardManager").directive("dashboardForm",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/dashboard-form.tpl.html",controller:["$stateParams","$log","Dashboards",function(e,n,s){var a=this;this.dashboard={enabled:!0},e.id&&s.get({id:e.id}).$promise.then(function(e){a.dashboard=e})["catch"](function(e){console.log(e)}),this.formConfig={exclude:["backend_register","controllers","deployments","enacted","humanReadableName","lazy_blocked","no_policy","no_sync","policed","write_protect","icon","icon_active"],actions:[{label:"Save",icon:"ok",cb:function(e,n){if(n.$valid){if(e.name&&e.url&&e.custom_icon){var s=e.url.indexOf("xos");if(s>=0){var i=e.url.slice(s+3,e.url.length).toLowerCase();e.icon=i.concat("-icon.png"),e.icon_active=i.concat("-icon-active.png")}else e.icon="default-icon.png",e.icon_active="default-icon-active.png"}else e.icon="default-icon.png",e.icon_active="default-icon-active.png";a.createOrUpdateDashboard(e)}},"class":"success"},{label:"Esport to TOSCA",icon:"export",cb:function(e){a.toTosca(e)},"class":"primary"}],formName:"dashboardForm",feedback:{show:!1,message:"Form submitted successfully !!!",type:"success"},fields:{name:{type:"string",validators:{required:!0}},url:{type:"string",validators:{required:!0}},enabled:{type:"boolean"},custom_icon:{type:"boolean"}}},this.createOrUpdateDashboard=function(e){var i=void 0;e.id?(delete e.controllers,delete e.deployments,i=e.$save()):i=s.save(e).$promise,i.then(function(e){a.formConfig.feedback.show=!0})["catch"](function(e){n.info(e),a.formConfig.feedback.show=!0,a.formConfig.feedback.message=e,a.formConfig.feedback.type="danger"})},this.toTosca=function(e){var n={};n[e.name]={type:"tosca.nodes.DashboardView",properties:{url:e.url}},a.tosca=jsyaml.dump(n).replace(/'/g,"");var s={requirements:[]},i={};i[e.name.toLowerCase()+"_dashboard"]={node:e.name,relationship:"tosca.relationships.UsesDashboard"},s.requirements.push(i),a.toscaRequirements=jsyaml.dump(s).replace(/'/g,"")}}]}})}(),angular.module("xos.dashboardManager").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosDeveloper.js b/xos/core/xoslib/static/js/xosDeveloper.js
deleted file mode 100644
index 712ea3b..0000000
--- a/xos/core/xoslib/static/js/xosDeveloper.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.developer",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(e){e.state("developer",{url:"/",template:"<developer-dashboard></developer-dashboard>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).directive("developerDashboard",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/developer-dashboard.tpl.html",controller:["$scope","$timeout","SlicesPlus","Instances","_",function(e,t,n,s,i){var r=this;this.instancePerSliceConfig={data:[],groupBy:"slice",legend:!0,classes:"instance per slice",labelFormatter:function(e){return e.map(function(e){return i.find(r.slices,{id:parseInt(e)}).name})}},this.instancePerSiteConfig={data:[],groupBy:"site",legend:!0,classes:"instance per site"},this.networkPerSliceConfig={data:[],groupBy:"name",legend:!0,classes:"network per slice"},this.tableConfig={columns:[{label:"Name",prop:"name"},{label:"Privileges",prop:"current_user_roles",type:"array"},{label:"Number of Instances (active / total)",type:"custom",formatter:function(e){return e.instance_total_ready+" / "+e.instance_total}},{label:"Active Instances per Sites",type:"object",prop:"instance_distribution_ready"},{label:"Total Instances per Sites",type:"object",prop:"instance_distribution"},{label:"Networks",type:"custom",formatter:function(e){return e.networks.length}}]},n.query().$promise.then(function(e){return r.slices=e,s.query().$promise}).then(function(e){var t=i.reduce(r.slices,function(e,t){if(t.networks.length>1)for(var n=0;n<t.networks.length;n++)e.push({id:t.id,name:t.name,network:t.networks[n]});else 1===t.networks.length&&e.push({id:t.id,name:t.name,network:t.networks[0]});return e},[]),n=i.reduce(r.slices,function(e,t){return i.forEach(Object.keys(t.instance_distribution),function(n){for(var s=0;s<t.instance_distribution[n];s++)e.push({site:n,instance:s})}),e},[]);r.sites=Object.keys(i.groupBy(n,"site")),r.instancePerSliceConfig.data=e,r.instancePerSiteConfig.data=n,r.networkPerSliceConfig.data=t})["catch"](function(e){throw new Error(e)})}]}}),angular.module("xos.developer").run(["$templateCache",function(e){e.put("templates/developer-dashboard.tpl.html",'<div class="row">\n  <div ng-class="{\'col-sm-4\': vm.sites.length > 1 || !vm.sites, \'col-sm-6\': vm.sites.length <= 1}" class="text-center">\n    <h3>Instances per Slice</h3>\n    <xos-smart-pie ng-if="vm.instancePerSliceConfig.data.length > 0" config="vm.instancePerSliceConfig"></xos-smart-pie>\n  </div>\n  <div ng-if="vm.sites.length > 1" class="col-sm-4 text-center">\n    <h3>Instances per Site</h3>\n    <xos-smart-pie ng-if="vm.instancePerSiteConfig.data.length > 0" config="vm.instancePerSiteConfig"></xos-smart-pie>\n  </div>\n  <div ng-class="{\'col-sm-4\': vm.sites.length > 1 || !vm.sites, \'col-sm-6\': vm.sites.length <= 1}" class="text-center">\n    <h3>Network per Slice</h3>\n    <xos-smart-pie ng-if="vm.networkPerSliceConfig.data.length > 0" config="vm.networkPerSliceConfig"></xos-smart-pie>\n  </div>\n</div>\n\n<xos-table config="vm.tableConfig" data="vm.slices"></xos-table>')}]),angular.module("xos.developer").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosDiagnostic.js b/xos/core/xoslib/static/js/xosDiagnostic.js
deleted file mode 100644
index 9280b33..0000000
--- a/xos/core/xoslib/static/js/xosDiagnostic.js
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";!function(){angular.module("xos.diagnostic",["ngResource","ngCookies","ngAnimate","ui.router","xos.helpers"]).config(["$stateProvider",function(e){e.state("home",{url:"/",template:"<diagnostic-container></diagnostic-container>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).run(["$log",function(e){e.info("Diagnostic Started")}])}(),angular.module("xos.diagnostic").run(["$templateCache",function(e){e.put("templates/diagnostic.tpl.html",'<div class="container-fluid">\n  <div ng-hide="vm.error && vm.loader" style="height: 900px">\n    <div class="onethird-height">\n      <div class="well">\n        Services Graph\n      </div>\n      <div class="well pull-right" ng-click="vm.reloadGlobalScope()" ng-show="vm.selectedSubscriber">\n        Reset subscriber\n      </div>\n      <service-topology service-chain="vm.serviceChain"></service-topology>\n    </div>\n    <div class="twothird-height">\n      <div class="well">\n        Logical Resources\n      </div>\n      <logic-topology ng-if="vm.subscribers" subscribers="vm.subscribers" selected="vm.selectedSubscriber"></logic-topology>\n    </div>\n  </div>\n  <div class="row" ng-if="vm.error">\n    <div class="col-xs-12">\n      <div class="alert alert-danger">\n        {{vm.error}}\n      </div>\n    </div>\n  </div>\n  <div class="row" ng-if="vm.loader">\n    <div class="col-xs-12">\n      <div class="loader">Loading</div>\n    </div>\n  </div>\n</div>'),e.put("templates/logicTopology.tpl.html",'<select-subscriber-modal open="vm.openSelectSubscriberModal" subscribers="vm.subscribers"></select-subscriber-modal>\n<subscriber-status-modal open="vm.openSubscriberStatusModal" subscriber="vm.currentSubscriber"></subscriber-status-modal>\n<div class="alert alert-danger animate" ng-hide="!vm.error">\n  {{vm.error}}\n</div>\n<!-- <div class="instances-stats animate" ng-hide="vm.hideInstanceStats">\n  <div class="row">\n    <div class="col-sm-3 col-sm-offset-8">\n      <div class="panel panel-primary" ng-repeat="instance in vm.selectedInstances">\n        <div class="panel-heading">\n          {{instance.humanReadableName}}\n        </div>\n          <ul class="list-group">\n            <li class="list-group-item">Backend Status: {{instance.backend_status}}</li>\n            <li class="list-group-item">IP Address: {{instance.ip}}</li>\n          </ul>\n          <ul class="list-group">\n            <li class="list-group-item" ng-repeat="stat in instance.stats">\n              <span class="badge">{{stat.value}}</span>\n              {{stat.meter}}\n            </li>\n          </ul>\n        </div>\n      </div>  \n    </div>\n  </div>\n</div> -->'),e.put("templates/select-subscriber-modal.tpl.html",'<div class="modal fade" ng-class="{in: vm.open}" tabindex="-1" role="dialog">\n  <div class="modal-dialog modal-sm">\n    <div class="modal-content">\n      <div class="modal-header">\n        <button ng-click="vm.close()"  type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>\n        <h4 class="modal-title">Select a subscriber:</h4>\n      </div>\n      <div class="modal-body">\n        <select class="form-control" ng-options="s as s.humanReadableName for s in vm.subscribers" ng-model="vm.selected"></select>\n      </div>\n      <div class="modal-footer">\n        <button ng-click="vm.close()" type="button" class="btn btn-default" data-dismiss="modal">Close</button>\n        <button ng-click="vm.select(vm.selected)" type="button" class="btn btn-primary">Select</button>\n      </div>\n    </div><!-- /.modal-content -->\n  </div><!-- /.modal-dialog -->\n</div><!-- /.modal -->'),e.put("templates/subscriber-status-modal.tpl.html",'<div class="modal fade" ng-class="{in: vm.open}" tabindex="-1" role="dialog">\n  <div class="modal-dialog modal-sm">\n    <div class="modal-content">\n      <div class="modal-header">\n        <button ng-click="vm.close()"  type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>\n        <h4 class="modal-title">Manage subscriber:</h4>\n      </div>\n      <form name="vm.subscriber-detail">\n        <div class="modal-body">\n          <div class="row">\n            <div class="col-xs-12">\n              <label>Status</label>\n            </div>\n            <div class="col-xs-6">\n              <a ng-click="vm.subscriber.features.status = \'enabled\'"\n                class="btn btn-block"\n                ng-class="{\'btn-primary\': vm.subscriber.features.status === \'enabled\' ,\'btn-default\': vm.subscriber.features.status !== \'enabled\'}"\n                >Enabled</a>\n            </div>\n            <div class="col-xs-6">\n              <a ng-click="vm.subscriber.features.status = \'suspended\'"\n                class="btn btn-block"\n                ng-class="{\'btn-primary\': vm.subscriber.features.status === \'suspended\' ,\'btn-default\': vm.subscriber.features.status !== \'suspended\'}"\n                >Suspended</a>\n            </div>\n          </div>\n          <div class="row">\n            <div class="col-xs-6">\n              <a ng-click="vm.subscriber.features.status = \'delinquent\'"\n                class="btn btn-block"\n                ng-class="{\'btn-primary\': vm.subscriber.features.status === \'delinquent\' ,\'btn-default\': vm.subscriber.features.status !== \'delinquent\'}"\n                >Delinquent <br> payment</a>\n            </div>\n            <div class="col-xs-6">\n              <a ng-click="vm.subscriber.features.status = \'copyrightviolation\'"\n                class="btn btn-block"\n                ng-class="{\'btn-primary\': vm.subscriber.features.status === \'copyrightviolation\' ,\'btn-default\': vm.subscriber.features.status !== \'copyrightviolation\'}"\n                >Copyright <br> violation</a>\n            </div>\n          </div>\n          <div class="row">\n            <div class="col-xs-6">\n              <label>Uplink Speed</label>\n              <div class="input-group">\n                <input type="number" class="form-control small-padding" ng-model="vm.subscriber.features.uplink_speed"/>\n                <span class="input-group-addon">Mbps</span>\n              </div>\n            </div>\n            <div class="col-xs-6">\n              <label>Downlink Speed</label>\n              <div class="input-group">\n                <input type="number" class="form-control small-padding" ng-model="vm.subscriber.features.downlink_speed"/>\n                <span class="input-group-addon">Mbps</span>\n              </div>\n            </div>\n          </div>\n          <div class="row">\n            <div class="col-xs-6">\n              <label>Enable Internet</label>\n            </div>\n            <div class="col-xs-6">\n              <a \n                ng-click="vm.subscriber.features.uverse = !vm.subscriber.features.uverse"\n                ng-class="{\'btn-success\': vm.subscriber.features.enable_uverse, \'btn-danger\': !vm.subscriber.features.enable_uverse}"\n                class="btn btn-block">\n                <span ng-show="vm.subscriber.features.uverse === true">Enabled</span>\n                <span ng-show="vm.subscriber.features.uverse !== true">Disabled</span>\n              </a>\n            </div>\n          </div>\n        </div>\n        <div class="modal-footer" ng-show="vm.success || vm.formError">\n          <div class="alert alert-success" ng-show="vm.success">\n            {{vm.success}}\n          </div>\n          <div class="alert alert-danger" ng-show="vm.formError">\n            {{vm.formError}}\n          </div>\n        </div>\n        <div class="modal-footer">\n          <button ng-click="vm.close()" type="button" class="btn btn-default" data-dismiss="modal">Close</button>\n          <button ng-click="vm.updateSubscriber(vm.subscriber)" type="button" class="btn btn-primary">Save</button>\n        </div>\n      </form>\n    </div><!-- /.modal-content -->\n  </div><!-- /.modal-dialog -->\n</div><!-- /.modal -->')}]),function(){angular.module("xos.diagnostic").directive("selectSubscriberModal",function(){return{scope:{subscribers:"=",open:"="},bindToController:!0,restrict:"E",templateUrl:"templates/select-subscriber-modal.tpl.html",controllerAs:"vm",controller:["$rootScope",function(e){var t=this;this.close=function(){t.open=!1},this.select=function(n){e.$emit("subscriber.selected",n),t.close()}}]}}).directive("subscriberStatusModal",function(){return{scope:{open:"=",subscriber:"="},bindToController:!0,restrict:"E",templateUrl:"templates/subscriber-status-modal.tpl.html",controllerAs:"vm",controller:["$log","$timeout","$scope","Subscribers",function(e,t,n,r){var i=this,a=1e6;n.$watch(function(){return i.open},function(){i.success=null,i.formError=null}),n.$watch(function(){return i.subscriber},function(e,t){i.subscriber&&(i.subscriber.features.uplink_speed=parseInt(i.subscriber.features.uplink_speed,10)/a,i.subscriber.features.downlink_speed=parseInt(i.subscriber.features.downlink_speed,10)/a)}),this.close=function(){i.open=!1},this.updateSubscriber=function(e){var n=angular.copy(e,n);n.features.uplink_speed=n.features.uplink_speed*a,n.features.downlink_speed=n.features.downlink_speed*a,delete n.related,r.update(n).$promise.then(function(e){i.success="Subscriber successfully updated!"})["catch"](function(e){i.formError=e})["finally"](function(){t(function(){i.close()},1500)})}}]}})}(),function(){angular.module("xos.diagnostic").service("ServiceTopologyHelper",["$rootScope","$window","$log","_","ServiceRelation","serviceTopologyConfig","d3",function(e,t,n,r,i,a,s){var c,o,u,l,d=0,p=function(t,n,r){var p=arguments.length<=3||void 0===arguments[3]?l:arguments[3];p&&(l=p);var f=l.clientWidth-2*a.widthMargin;c=t,o=n,u=r;var h=i.depthOf(r),m=s.svg.diagonal().projection(function(e){return[e.y,e.x]}),g=n.nodes(r).reverse(),b=n.links(g);g.forEach(function(e){var t=(f-2*a.widthMargin)/(h-1);e.y=e.depth*t});var y=t.selectAll("g.node").data(g,function(e){return e.id||(e.id=++d)}),x=y.enter().append("g").attr({"class":function(e){return"node "+e.type},transform:function(e){return e.x&&e.y?"translate("+e.y+", "+e.x+")":"translate("+r.y0+", "+r.x0+")"}}),S=x.filter(".subscriber"),w=x.filter(".router"),T=x.filter(".service");S.append("rect").attr(a.square).on("click",function(){e.$emit("subscriber.modal.open")}),w.append("rect").attr(a.square),T.append("circle").attr("r",1e-6).style("fill",function(e){return e._children?"lightsteelblue":"#fff"}).on("click",v),x.append("text").attr({x:function(e){return e.children?-a.circle.selectedRadius-5:a.circle.selectedRadius+5},dy:".35em",y:function(e){if(e.children&&e.parent)return"-5"},transform:function(e){if(e.children&&e.parent)return e.parent.x<e.x?"rotate(-30)":"rotate(30)"},"text-anchor":function(e){return e.children?"end":"start"}}).text(function(e){return e.name}).style("fill-opacity",1e-6);var _=y.transition().duration(a.duration).attr({transform:function(e){return"translate("+e.y+","+e.x+")"}});_.select("circle").attr("r",function(e){return e.selected?a.circle.selectedRadius:a.circle.radius}).style("fill",function(e){return e.selected?"lightsteelblue":"#fff"}),_.select("text").style("fill-opacity",1);var C=y.exit().transition().duration(a.duration).remove();C.select("circle").attr("r",1e-6),C.select("text").style("fill-opacity",1e-6);var k=t.selectAll("path.link").data(b,function(e){return e.target.id});k.enter().insert("path","g").attr("class",function(e){return"link "+e.target.type+" "+(e.target.active?"":"active")}).attr("d",function(e){var t={x:r.x0,y:r.y0};return m({source:t,target:t})}),k.transition().duration(a.duration).attr("d",m),k.exit().transition().duration(a.duration).attr("d",function(e){var t={x:r.x,y:r.y};return m({source:t,target:t})}).remove(),g.forEach(function(e){e.x0=e.x,e.y0=e.y})},v=function(t){return t.selected?(t.selected=!t.selected,e.$emit("instance.detail.hide",{}),p(c,o,u)):(e.$emit("instance.detail",{name:t.name,service:t.service,tenant:t.tenant}),c.selectAll("circle").each(function(e){return e.selected=!1}),t.selected=!t.selected,void p(c,o,u))};this.updateTree=p}])}(),function(){angular.module("xos.diagnostic").directive("serviceTopology",function(){return{restrict:"E",scope:{serviceChain:"="},bindToController:!0,controllerAs:"vm",template:"",controller:["$element","$window","$scope","d3","serviceTopologyConfig","ServiceRelation","Instances","Subscribers","ServiceTopologyHelper",function(e,t,n,r,i,a,s,c,o){var u=this,l=e[0];r.select(window).on("resize.service",function(){v(u.serviceChain)});var d,p,v=function(t){if(!t)return void console.error("Tree is missing");r.select(e[0]).select("svg").remove();var n=l.clientWidth-2*i.widthMargin,a=l.clientHeight-2*i.heightMargin,s=r.layout.tree().size([a,n]);p=r.select(e[0]).append("svg").style("width",l.clientWidth+"px").style("height",l.clientHeight+"px");var c=p.append("g").attr("transform","translate("+2*i.widthMargin+","+i.heightMargin+")");d=t,d.x0=a/2,d.y0=n/2,o.updateTree(c,s,d,l)};n.$watch(function(){return u.serviceChain},function(e){angular.isDefined(e)&&v(e)})}]}})}(),function(){angular.module("xos.diagnostic").service("Services",["$resource",function(e){return e("/api/core/services/:id",{id:"@id"})}]).service("Tenant",["$resource",function(e){return e("/api/core/tenants",{id:"@id"},{queryVsgInstances:{method:"GET",isArray:!0,interceptor:{response:function(e){var t=[];return angular.forEach(e.data,function(e){var n=JSON.parse(e.service_specific_attribute);n&&n.instance_id&&t.push(n.instance_id)}),t}}},getSubscriberTag:{method:"GET",isArray:!0,interceptor:{response:function(e){return JSON.parse(e.data[0].service_specific_attribute)}}}})}]).service("Ceilometer",["$http","$q","Instances",function(e,t,n){var r=this;this.getInstanceStats=function(n){var r=t.defer();return e.get("/xoslib/xos-instance-statistics",{params:{"instance-uuid":n}}).then(function(e){r.resolve(e.data)})["catch"](function(e){r.reject(e)}),r.promise},this.getInstancesStats=function(e){var i=t.defer(),a=[],s=[];return e.forEach(function(e){a.push(n.get({id:e}).$promise)}),t.all(a).then(function(e){s=e;var n=[];return s.forEach(function(e){n.push(r.getInstanceStats(e.instance_uuid))}),t.all(n)}).then(function(e){s.map(function(t,n){t.stats=e[n]}),i.resolve(s)})["catch"](i.reject),i.promise},this.getContainerStats=function(n){var r=t.defer(),i={};return e.get("/xoslib/meterstatistics",{params:{resource:n}}).then(function(t){return i.stats=t.data,e.get("/xoslib/meterstatistics",{params:{resource:n+"-eth0"}})}).then(function(t){return i.port={eth0:t.data},e.get("/xoslib/meterstatistics",{params:{resource:n+"-eth1"}})}).then(function(e){i.port.eth1=e.data,r.resolve(i)})["catch"](function(e){r.reject(e)}),r.promise}}]).service("Slice",["$resource",function(e){return e("/api/core/slices",{id:"@id"})}]).service("Instances",["$resource",function(e){return e("/api/core/instances/:id",{id:"@id"})}]).service("Node",["$resource","$q","Instances",function(e,t,n){return e("/api/core/nodes",{id:"@id"},{queryWithInstances:{method:"GET",isArray:!0,interceptor:{response:function(e){var r=t.defer(),i=[];return angular.forEach(e.data,function(e){i.push(n.query({node:e.id}).$promise)}),t.all(i).then(function(t){e.data.map(function(e,n){return e.instances=t[n],e}),r.resolve(e.data)}),r.promise}}}})}]).service("SubscribersWithDevice",["$http","$q","Subscribers",function(e,t,n){this.get=function(r){var i=t.defer(),a=void 0;return n.get({id:r.id}).$promise.then(function(t){return a=t,e.get("/api/tenant/cord/subscriber/"+a.id+"/devices/")}).then(function(e){e.data.map(function(e){return e.type="device"}),a.devices=e.data,a.type="subscriber",i.resolve(a)})["catch"](function(e){i.reject(e)}),{$promise:i.promise}}}]).service("ServiceRelation",["$q","_","Services","Tenant","Slice","Instances",function(e,t,n,r,i,a){var s=function h(e){var t=0;return e.children&&e.children.forEach(function(e){var n=h(e);n>t&&(t=n)}),1+t},c=function(e,n){return t.filter(e,function(e){return e.subscriber_service===n})},o=function(e,n){var r,e=t.filter(e,function(e){return e.provider_service===n&&e.subscriber_tenant});return e.forEach(function(e){e.service_specific_attribute&&(r=JSON.parse(e.service_specific_attribute))}),r},u=function(e,n){var r=[];return t.forEach(e,function(e){var i=t.find(n,{id:e.provider_service});r.push(i)}),r},l=function m(e,n,r,i){var a=arguments.length<=4||void 0===arguments[4]?null:arguments[4],s=t.difference(n,[r]),l=c(e,r.id),d=u(l,n);s=t.difference(s,d),r.service_specific_attribute=o(e,r.id),"service_vbng"===r.humanReadableName&&(r.humanReadableName="service_vrouter");var p={name:r.humanReadableName,parent:a,type:"service",service:r,tenant:i,children:[]};return t.forEach(d,function(n){if("service_ONOS_vBNG"!==n.humanReadableName&&"service_ONOS_vOLT"!==n.humanReadableName){var a=t.find(e,{subscriber_tenant:i.id,provider_service:n.id});p.children.push(m(e,s,n,a,r.humanReadableName))}}),0===p.children.length&&p.children.push({name:"Router",type:"router",children:[]}),p},d=function(e,n){var r=arguments.length<=2||void 0===arguments[2]?{id:1,name:"fakeSubs"}:arguments[2],i=t.find(n,{subscriber_root:r.id}),a=t.find(e,{id:i.provider_service}),s=l(n,e,a,i);return{name:r.name||r.humanReadableName,parent:null,type:"subscriber",children:[s]}},p=function(e,n){var r=function s(e,n,r){"service_vbng"===r.humanReadableName&&(r.humanReadableName="service_vrouter");var i={type:"service",name:r.humanReadableName,service:r},a=t.find(n,{subscriber_service:r.id});if(a){var c=t.find(e,{id:a.provider_service});i.children=[s(e,n,c)]}else i.children=[{name:"Router",type:"router",children:[]}];return delete r.id,i},i=t.find(e,{id:3});if(!angular.isDefined(i))return void console.error("Missing Base service!");var a={name:"Subscriber",type:"subscriber",parent:null,children:[r(e,n,i)]};return a},v=function(t){var i,a,s=e.defer();return n.query().$promise.then(function(e){return i=e,r.query().$promise}).then(function(e){a=e,s.resolve(d(i,a,t))})["catch"](function(e){throw new Error(e)}),s.promise},f=function(){var t,i,a=e.defer();return n.query().$promise.then(function(e){return t=e,r.query({kind:"coarse"}).$promise}).then(function(e){i=e,a.resolve(p(t,i))})["catch"](function(e){throw new Error(e)}),a.promise};return{get:f,buildServiceTree:p,getBySubscriber:v,buildLevel:l,buildSubscriberServiceTree:d,findLevelRelation:c,findLevelServices:u,depthOf:s,findSpecificInformation:o}}])}();var _slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(r=(s=c.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(o){i=!0,a=o}finally{try{!r&&c["return"]&&c["return"]()}finally{if(i)throw a}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){angular.module("xos.diagnostic").service("RackHelper",["serviceTopologyConfig","_",function(e,t){var n=this;this.getComputeNodeLabelSize=function(){return e.computeNode.labelHeight+2*e.instance.margin},this.getComputeNodeSize=t.memoize(function(t){var r=3*e.instance.margin+2*e.instance.width,i=Math.round(t.length/2),a=n.getComputeNodeLabelSize(),s=e.instance.height*i+e.instance.margin*(i+1)+a;return[r,s]}),this.getRackSize=function(r){var i=0,a=e.computeNode.margin;return t.forEach(r,function(t){var r=n.getComputeNodeSize(t.instances),s=_slicedToArray(r,2),c=s[0],o=s[1];i=c+2*e.computeNode.margin,a+=o+e.computeNode.margin}),[i,a]},this.getInstancePosition=function(t){var r=Math.floor(t/2),i=t%2?1:0,a=n.getComputeNodeLabelSize(),s=e.instance.margin+e.instance.width*i+e.instance.margin*i,c=a+e.instance.margin+e.instance.height*r+e.instance.margin*r;return[s,c]},this.getComputeNodePosition=function(r,i){var a=e.computeNode.margin,s=t.reduce(r.slice(0,i),function(e,t){return e+n.getComputeNodeSize(t.instances)[1]},0),c=e.computeNode.margin+e.computeNode.margin*i+s;return[a,c]}}])}();var _slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(r=(s=c.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(o){i=!0,a=o}finally{try{!r&&c["return"]&&c["return"]()}finally{if(i)throw a}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){var e={cloud:" M 79.72 49.60 C 86.00 37.29 98.57 29.01 111.96 26.42 C 124.27 24.11 137.53 26.15 148.18 32.90 C 158.08 38.78 165.39 48.87 167.65 60.20 C 176.20 57.90 185.14 56.01 194.00 57.73 C 206.08 59.59 217.92 66.01 224.37 76.66 C 227.51 81.54 228.85 87.33 229.23 93.06 C 237.59 93.33 246.22 95.10 253.04 100.19 C 256.69 103.13 259.87 107.67 258.91 112.59 C 257.95 118.43 252.78 122.38 247.78 124.82 C 235.27 130.43 220.23 130.09 207.98 123.93 C 199.33 127.88 189.76 129.43 180.30 128.57 C 173.70 139.92 161.70 147.65 148.86 149.93 C 133.10 153.26 116.06 148.15 104.42 137.08 C 92.98 143.04 78.96 143.87 66.97 139.04 C 57.75 135.41 49.70 128.00 46.60 118.43 C 43.87 109.95 45.81 100.29 51.30 93.32 C 57.38 85.18 67.10 80.44 76.99 78.89 C 74.38 69.20 74.87 58.52 79.72 49.60 Z"},t=0,n=0;angular.module("xos.diagnostic").service("NodeDrawer",["d3","serviceTopologyConfig","RackHelper","_",function(r,i,a,s){var c=this,o=this;this.addNetworks=function(t){t.selectAll("*").remove(),t.append("path").attr({d:e.cloud,transform:"translate(-100, -72), scale(0.7)","class":"cloud"}),t.append("text").attr({"text-anchor":"middle",y:-5,x:5}).text(function(e){return e.name}),t.append("text").attr({"text-anchor":"middle",y:8,x:5,"class":"small"}).text(function(e){return e.subtitle}),t.each(function(e){var t=r.select(this);"LAN-Side"===e.name&&angular.isDefined(e.subscriberTag)&&(t.append("text").attr({"text-anchor":"middle",y:50}).text(function(){return"C-Tag: "+e.subscriberTag.cTag}),t.append("text").attr({"text-anchor":"middle",y:70}).text(function(){return"S-Tag: "+e.subscriberTag.sTag})),"WAN-Side"===e.name&&angular.isDefined(e.subscriberIP)&&t.append("text").attr({"text-anchor":"middle",y:50}).text(function(){return"Public IP: "+e.subscriberIP})})},this.addRack=function(e){e.each(function(t){var n=a.getRackSize(t.computeNodes),r=_slicedToArray(n,2),s=r[0],o=r[1];e.select("g").remove();var u=e.append("g");u.attr({transform:"translate(0,0)"}).transition().duration(i.duration).attr({transform:function(){return"translate("+-(s/2)+", "+-(o/2)+")"}}),u.append("rect").attr({width:0,height:0}).transition().duration(i.duration).attr({width:s,height:o}),u.append("text").attr({"text-anchor":"middle",y:-10,x:s/2,opacity:0}).text(function(e){return e.name}).transition().duration(i.duration).attr({opacity:1}),c.drawComputeNodes(u,t.computeNodes)})},this.drawComputeNodes=function(e,n){var s=e.selectAll(".compute-nodes").data(n,function(e){return angular.isString(e.d3Id)||(e.d3Id="compute-node-"+ ++t),e.d3Id}),c=e.node().getBoundingClientRect(),u=c.width,l=c.height,d=s.enter().append("g");d.attr({transform:"translate("+u/2+", "+l/2+")","class":"compute-node"}).transition().duration(i.duration).attr({transform:function(e){return"translate("+a.getComputeNodePosition(n,e.d3Id.replace("compute-node-","")-1)+")"}}),d.append("rect").attr({width:0,height:0}).transition().duration(i.duration).attr({width:function(e){return a.getComputeNodeSize(e.instances)[0]},height:function(e){return a.getComputeNodeSize(e.instances)[1]}}),d.append("text").attr({"text-anchor":"start",y:17,x:10,opacity:0}).text(function(e){return e.humanReadableName.split(".")[0]}).transition().duration(i.duration).attr({opacity:1}),d.length>0&&d.each(function(e){o.drawInstances(r.select(this),e.instances)})};var u=function(e){return e.replace("app_","").replace("service_","").replace("mysite_","").replace("_instance","")},l=function(e){function t(e,t){return t.substring(0,e.length)===e}return t("0 - ",e.backend_status)?"provisioning":t("1 - ",e.backend_status)?"good":t("2 - ",e.backend_status)?"bad":""},d=function(e,t){var n=e.append("g").attr({"class":"container",transform:"translate("+i.instance.margin+", 115)"});n.append("rect").attr({width:250-2*i.container.margin,height:i.container.height}),n.append("text").attr({y:20,x:i.instance.margin,"class":"name"}).text(t.name);var r=["memory","memory.usage","cpu_util"];r.forEach(function(e,r){var a=s.find(t.stats,{meter:e});angular.isDefined(a)&&n.append("text").attr({y:40+15*r,x:i.instance.margin,opacity:0}).text(a.description+": "+Math.round(a.value)+" "+a.unit).transition().duration(i.duration).attr({opacity:1})});var a=["eth0","eth1"],c=[{meter:"network.incoming.bytes.rate",label:"Incoming"},{meter:"network.outgoing.bytes.rate",label:"Outgoing"}];a.forEach(function(e,r){0!==t.port[e].length&&(n.append("text").attr({y:90,x:i.instance.margin+120*r,"class":"name"}).text(t.name+"-"+e),c.forEach(function(a,c){var o=s.find(t.port[e],{meter:a.meter});angular.isDefined(o)&&n.append("text").attr({y:105+15*c,x:i.instance.margin+120*r,opacity:0}).text(a.label+": "+Math.round(o.value)+" "+o.unit).transition().duration(i.duration).attr({opacity:1})}))})},p=function(e,t){var n={"mysite_vsg-1":"200, -120","mysite_vsg-2":"-300, 30","mysite_vsg-3":"-300, -250"},a=e.append("g").attr({transform:"translate("+(n[t.humanReadableName]||n["mysite_vsg-1"])+")","class":"stats-container"}).on("click",function(e){e.fade=!e.fade;var t=void 0;t=e.fade?.1:1,r.select(this).transition().duration(i.duration).attr({opacity:t})}),c={"mysite_vsg-1":{x1:-160,y1:120,x2:0,y2:50},"mysite_vsg-2":{x1:250,y1:50,x2:300,y2:-10},"mysite_vsg-3":{x1:250,y1:50,x2:300,y2:270}};a.append("line").attr({x1:function(e){return c[e.humanReadableName].x1||c["mysite_vsg-1"].x1},y1:function(e){return c[e.humanReadableName].y1||c["mysite_vsg-1"].y1},x2:function(e){return c[e.humanReadableName].x2||c["mysite_vsg-1"].x2},y2:function(e){return c[e.humanReadableName].y2||c["mysite_vsg-1"].y2},stroke:"black",opacity:0}).transition().duration(i.duration).attr({opacity:1});var o=110,u=250;t.container&&(o+=i.container.height+2*i.container.margin);a.append("rect").attr({width:u,height:o,opacity:0}).transition().duration(i.duration).attr({opacity:1});a.append("text").attr({y:15,x:i.instance.margin,"class":"name",opacity:0}).text(t.humanReadableName).transition().duration(i.duration).attr({opacity:1}),a.append("text").attr({y:30,x:i.instance.margin,"class":"ip",opacity:0}).text(t.ip).transition().duration(i.duration).attr({opacity:1});var l=["memory","memory.usage","cpu","cpu_util"];l.forEach(function(e,n){var r=s.find(t.stats,{meter:e});r&&a.append("text").attr({y:55+15*n,x:i.instance.margin,opacity:0}).text(r.description+": "+Math.round(r.value)+" "+r.unit).transition().duration(i.duration).attr({opacity:1})}),t.container&&d(a,t.container)};this.drawInstances=function(e,t){var s=e.node().getBoundingClientRect(),c=s.width,o=s.height,d=e.selectAll(".instances").data(t,function(e){return angular.isString(e.d3Id)?e.d3Id:e.d3Id="instance-"+ ++n}),v=d.enter().append("g");v.attr({transform:"translate("+c/2+", "+o/2+")","class":function(e){return"instance "+(e.selected?"active":"")+" "+l(e)}}).transition().duration(i.duration).attr({transform:function(e,t){return"translate("+a.getInstancePosition(t)+")"}}),v.append("rect").attr({width:0,height:0}).transition().duration(i.duration).attr({width:i.instance.width,height:i.instance.height}),v.append("text").attr({"text-anchor":"middle",y:23,x:40,opacity:0}).text(function(e){return u(e.humanReadableName)}).transition().duration(i.duration).attr({opacity:1}),v.each(function(e,t){var n=r.select(this);angular.isDefined(e.stats)&&e.selected&&p(n,e,t)})},this.addPhisical=function(e){e.select("rect").remove(),e.select("text").remove(),e.append("rect").attr(i.square),e.append("text").attr({"text-anchor":"middle",y:i.square.y-10}).text(function(e){return e.name||e.humanReadableName})},this.addDevice=function(e){e.append("circle").attr(i.circle),e.append("text").attr({"text-anchor":"end",x:-i.circle.r-10,y:i.circle.r/2}).text(function(e){return e.name||e.mac})}}])}();var _slicedToArray=function(){function e(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(r=(s=c.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(o){i=!0,a=o}finally{try{!r&&c["return"]&&c["return"]()}finally{if(i)throw a}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){angular.module("xos.diagnostic").service("LogicTopologyHelper",["$window","$log","$rootScope","_","serviceTopologyConfig","NodeDrawer","ChartData",function(e,t,n,r,i,a,s){var c,o,u,l,d,p,v=this,f=0,h=s.logicTopologyData;this.computeElementPosition=function(e){var t=[],n=r.reduce(i.elWidths,function(e,t){return t+e},0),a=e-n-2*i.widthMargin,s=a/(i.elWidths.length-1);return r.forEach(i.elWidths,function(n,a){var c=0;0!==a&&(c=r.reduce(i.elWidths.slice(0,a),function(e,t){return t+e},0));var o=i.widthMargin+s*a+n/2+c;t.push(e-o)}),t};var m=function(e){var t=p.nodes(e);t.forEach(function(e){e.y=v.computeElementPosition(l)[e.depth]});var n=p.links(t);return[t,n]},g=function(e,t){var r=e.selectAll("g.node").data(t,function(e){return angular.isString(e.d3Id)||(e.d3Id="tree-"+ ++f),e.d3Id});r.enter().append("g").attr({"class":function(e){return"node "+e.type},transform:"translate("+l/2+", "+d/2+")"});a.addNetworks(r.filter(".network")),a.addRack(r.filter(".rack")),a.addPhisical(r.filter(".router")),a.addPhisical(r.filter(".subscriber")),a.addDevice(r.filter(".device")),r.filter(".subscriber").on("click",function(){n.$emit("subscriber.modal.open")});r.transition().duration(i.duration).attr({transform:function(e){return"translate("+e.y+","+e.x+")"}}),r.exit().remove()},b=function(e,t){c=d3.svg.diagonal().projection(function(e){return[e.y,e.x]});var n=e.selectAll("path.link").data(t,function(e){return e.target.d3Id});n.enter().insert("path","g").attr("class",function(e){return"link "+e.target.type}).attr("d",function(e){var t={x:d/2,y:l/2};return c({source:t,target:t})}),n.transition().duration(i.duration).attr("d",c),n.exit().remove()};this.setupTree=function(e){l=e.node().getBoundingClientRect().width,d=e.node().getBoundingClientRect().height;var t=l-2*i.widthMargin,n=d-2*i.heightMargin;p=d3.layout.tree().size([n,t])},this.updateTree=function(e){var t=m(h),n=_slicedToArray(t,2);o=n[0],u=n[1],g(e,o),b(e,u)}}])}(),function(){angular.module("xos.diagnostic").directive("logicTopology",function(){return{restrict:"E",scope:{subscribers:"=",selected:"="},bindToController:!0,controllerAs:"vm",templateUrl:"templates/logicTopology.tpl.html",controller:["$element","$log","$scope","$rootScope","$timeout","d3","LogicTopologyHelper","Node","Tenant","Ceilometer","serviceTopologyConfig","ChartData",function(e,t,n,r,i,a,s,c,o,u,l,d){var p=this;t.info("Logic Plane");var v;this.selectedInstances=[],this.hideInstanceStats=!0;var f=this,h=function(t){a.select(e[0]).select("svg").remove(),v=a.select(t).append("svg").style("width",t.clientWidth+"px").style("height",t.clientHeight+"px")},m=function(){d.getLogicTree().then(function(e){s.updateTree(v)})};m(),n.$watch(function(){return p.selected},function(e){e?(d.selectSubscriber(e),s.updateTree(v)):(d.removeSubscriber(),s.updateTree(v))}),r.$on("instance.detail.hide",function(){p.hideInstanceStats=!0,i(function(){p.selectedInstances=[],d.highlightInstances([]),s.updateTree(v)},500)}),r.$on("instance.detail",function(e,t){d.getInstanceStatus(t).then(function(e){s.updateTree(v)})["catch"](function(e){f.error="Service statistics are not available at this time. Please try again later.",i(function(){f.error=null},2e3)})}),a.select(window).on("resize.logic",function(){h(e[0]),s.setupTree(v),s.updateTree(v)}),h(e[0]),s.setupTree(v),this.selectSubscriberModal=function(){p.openSelectSubscriberModal=!0,n.$apply()},this.subscriberStatusModal=function(){p.openSubscriberStatusModal=!0,
-n.$apply()},r.$on("subscriber.modal.open",function(){d.currentSubscriber?(p.currentSubscriber=d.currentSubscriber,p.subscriberStatusModal()):p.selectSubscriberModal()})}]}})}(),function(){angular.module("xos.diagnostic").directive("diagnosticContainer",function(){return{restrict:"E",templateUrl:"templates/diagnostic.tpl.html",controllerAs:"vm",controller:["ChartData","Subscribers","SubscribersWithDevice","ServiceRelation","$rootScope",function(e,t,n,r,i){var a=this;this.loader=!0,this.error=!1;var s=function(){t.query().$promise.then(function(e){return a.subscribers=e,r.get()}).then(function(e){a.serviceChain=e})["catch"](function(e){throw new Error(e)})["finally"](function(){a.loader=!1})};s(),this.reloadGlobalScope=function(){a.selectedSubscriber=null,s()};var c=function(t){r.getBySubscriber(t).then(function(r){return a.serviceChain=r,e.currentServiceChain=r,n.get({id:t.id}).$promise}).then(function(t){a.selectedSubscriber=t,e.currentSubscriber=t})};i.$on("subscriber.selected",function(e,t){c(t)})}]}})}(),function(){angular.module("xos.diagnostic").factory("d3",["$window",function(e){return e.d3}])}(),function(){angular.module("xos.diagnostic").constant("serviceTopologyConfig",{widthMargin:60,heightMargin:30,duration:750,elWidths:[20,104,105,104,20],circle:{radius:10,r:10,selectedRadius:15},square:{width:20,height:20,x:-10,y:-10},rack:{width:105,height:50,x:-30,y:-25},computeNode:{width:50,height:20,margin:5,labelHeight:10,x:-25,y:-10},instance:{width:80,height:36,margin:5,x:-40,y:-18},container:{width:60,height:130,margin:5,x:-30,y:-15}})}(),function(){angular.module("xos.diagnostic").service("ChartData",["$rootScope","$q","_","Tenant","Node","serviceTopologyConfig","Ceilometer","Instances",function(e,t,n,r,i,a,s,c){var o=this;this.currentSubscriber=null,this.currentServiceChain=null,this.logicTopologyData={name:"Router",type:"router",children:[{name:"WAN-Side",subtitle:"Virtual Network",type:"network",children:[{name:"Compute Servers",type:"rack",computeNodes:[],children:[{name:"LAN-Side",subtitle:"Virtual Network",type:"network",children:[{name:"Subscriber",type:"subscriber"}]}]}]}]},this.getLogicTree=function(){var e=t.defer();return i.queryWithInstances().$promise.then(function(t){o.logicTopologyData.children[0].children[0].computeNodes=t,e.resolve(o.logicTopologyData)}),e.promise},this.addSubscriberTag=function(e){o.logicTopologyData.children[0].children[0].children[0].subscriberTag={cTag:e.cTag,sTag:e.sTag}},this.addSubscriber=function(e){return e.children=e.devices,o.logicTopologyData.children[0].children[0].children[0].children=[e],o.logicTopologyData},this.removeSubscriber=function(){o.logicTopologyData.children[0].children[0].children[0].children[0].humanReadableName="Subscriber",o.currentSubscriber=null,160===a.elWidths[a.elWidths.length-1]&&a.elWidths.pop(),delete o.logicTopologyData.children[0].children[0].children[0].subscriberTag,delete o.logicTopologyData.children[0].subscriberIP,o.highlightInstances([]),delete o.logicTopologyData.children[0].children[0].children[0].children[0].children},this.getSubscriberTag=function(e){var t={cTag:e.related.c_tag,sTag:e.related.s_tag};o.addSubscriberTag(t),o.currentSubscriber.tags=t},this.getSubscriberIP=function(e){o.logicTopologyData.children[0].subscriberIP=e.related.wan_container_ip},this.selectSubscriber=function(e){a.elWidths.push(160),o.addSubscriber(angular.copy(e)),o.highlightInstances([]),o.getSubscriberTag(e),o.getSubscriberIP(e)},this.highlightInstances=function(e){var t=o.logicTopologyData.children[0].children[0].computeNodes;t.map(function(e){e.instances.map(function(e){return e.selected=!1,e})}),n.forEach(e,function(e){t.map(function(t){t.instances.map(function(t){return t.id===e.id&&(t.selected=!0,t.stats=e.stats,t.container=e.container),t})})})},this.getInstanceStatus=function(e){var i=t.defer(),a=void 0;if(o.currentSubscriber){var u=void 0;try{u=JSON.parse(e.tenant.service_specific_attribute)}catch(l){u=null}if(u&&u.instance_id)!function(){var e={};a=c.get({id:u.instance_id}).$promise.then(function(t){return e=t,s.getInstanceStats(e.instance_uuid)}).then(function(t){e.stats=t;var n="vcpe-"+o.currentSubscriber.tags.sTag+"-"+o.currentSubscriber.tags.cTag;return e.container={name:n},s.getContainerStats(n)}).then(function(t){return e.container.stats=t.stats,e.container.port=t.port,[e]})}();else{var d=t.defer();d.resolve([]),a=d.promise}}else{var p={service_vsg:{kind:"vCPE"},service_vbng:{kind:"vBNG"},service_volt:{kind:"vOLT"}};a=r.queryVsgInstances(p[e.name]).$promise.then(function(e){return s.getInstancesStats(n.uniq(e))})}return a.then(function(e){o.highlightInstances(e),i.resolve(e)})["catch"](function(e){i.reject(e)}),i.promise}}])}(),angular.module("xos.diagnostic").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosEcordTopology.js b/xos/core/xoslib/static/js/xosEcordTopology.js
deleted file mode 100644
index 834cf2f..0000000
--- a/xos/core/xoslib/static/js/xosEcordTopology.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";function _toConsumableArray(n){if(Array.isArray(n)){for(var e=0,t=Array(n.length);e<n.length;e++)t[e]=n[e];return t}return Array.from(n)}function _toConsumableArray(n){if(Array.isArray(n)){for(var e=0,t=Array(n.length);e<n.length;e++)t[e]=n[e];return t}return Array.from(n)}angular.module("xos.ecordTopology",["ngResource","ngCookies","ui.router","xos.helpers","ui.checkbox"]).config(["$stateProvider",function(n){n.state("ecord-topo",{url:"/",template:"<ecord-topo></ecord-topo>"}).state("eline-create",{url:"/eline",template:"<eline-form></eline-form>"}).state("eline-details",{url:"/eline/:id",template:"<eline-details></eline-details>"})}]).config(["$httpProvider",function(n){n.interceptors.push("NoHyperlinks")}]).constant("cordIcons",{cordLogo:"M92.5,62.3l-33,33,2.5,2.5c4.1,4.1,7.4,3.6,11.2-.1L95.9,75l-4.5-4.5,4.7-4.7-3.6-3.6Zm2.6,7L98.4,66l3.3,3.3-3.3,3.3-3.3-3.3ZM94.5,60l4.9-4.9,4.9,4.9-4.9,4.9ZM36.2,36.1L18.6,53.8c-7.8,7.8-5.8,17.4-2.4,22l-2.2-2.2c-10.6-10.6-11.2-20,0-31.2L28.2,28.1L31.3,25l8,8-3.1,3.1ZM55.5,55.4l3.6-3.6L66.9,44l-8-8l-2.5,2.5-5.2,5.2l-3.6,3.6L33.2,61.6C22,72.7,22.5,82.2,33.2,92.8L35.4,95c-3.4-4.5-5.4-14.1,2.4-22L55.5,55.4ZM50.7,21.7l-8-8L35,21.2l8,8,7.6-7.6ZM62.8,9.6L55.4,17l-8-8,7.4-7.4,8,8Zm0.7,18.3-7.6,7.6-8-8,7.6-7.6,8,8Zm26.1-6.6-8.1,8.1-8-8,8.1-8.1,8,8ZM79.3,31.5l-7.4,7.4-8-8,7.4-7.4,8,8ZM45.7,45.6L54.3,37l-8-8-8.6,8.6L23.4,51.8C12.2,63,12.8,72.4,23.4,83l2.2,2.2c-3.4-4.5-5.4-14.1,2.4-22ZM34.9,80.7l20.6,20.5c2,2,4.6,4.1,7.9,3.2-2.9,2.9-8.9,1.7-11.9-1.3L35.1,86.8,35,86.6H34.9l-0.8-.8a15,15,0,0,1,.1-1.9,14.7,14.7,0,0,1,.7-3.2Zm-0.6,7.4a21.3,21.3,0,0,0,5.9,11.7l5.7,5.7c3,3,9,4.1,11.9,1.3-3.3.9-5.9-1.2-7.9-3.2L34.3,88.1Zm3.5-12.4a16.6,16.6,0,0,0-2.3,3.6L57,100.8c3,3,9,4.1,11.9,1.3-3.3.9-5.9-1.2-7.9-3.2Z",service:"M2.16,10.77l2.7-.44a0.36,0.36,0,0,0,.21-0.2c0.24-.55.47-1.1,0.69-1.65a0.42,0.42,0,0,0,0-.33c-0.5-.74-1-1.47-1.52-2.18L5.94,4.22,8.07,5.75a0.37,0.37,0,0,0,.44,0C9,5.55,9.52,5.36,10,5.16a0.36,0.36,0,0,0,.27-0.32c0.13-.87.28-1.74,0.42-2.64l0.23,0c0.66,0,1.32,0,2,0a0.25,0.25,0,0,1,.3.26c0.13,0.81.28,1.62,0.41,2.44a0.34,0.34,0,0,0,.26.3c0.52,0.2,1,.41,1.54.64a0.34,0.34,0,0,0,.4,0l1.93-1.4L18,4.22,19.76,6c-0.49.7-1,1.43-1.52,2.16a0.4,0.4,0,0,0,0,.47c0.23,0.49.43,1,.62,1.49a0.36,0.36,0,0,0,.32.27l2.66,0.43v2.45l-1.63.29c-0.36.06-.72,0.11-1.07,0.19a0.43,0.43,0,0,0-.26.22c-0.23.53-.43,1.07-0.67,1.6a0.31,0.31,0,0,0,0,.37l1.4,1.94,0.17,0.24-1.74,1.74c-0.69-.48-1.41-1-2.13-1.5a0.43,0.43,0,0,0-.52,0,13.34,13.34,0,0,1-1.43.6,0.4,0.4,0,0,0-.32.35c-0.14.86-.3,1.72-0.46,2.59H10.73c-0.14-.85-0.29-1.7-0.42-2.55A0.43,0.43,0,0,0,10,18.88c-0.5-.18-1-0.39-1.46-0.61a0.36,0.36,0,0,0-.42,0c-0.73.52-1.46,1-2.17,1.52L4.16,18.08l0.37-.52c0.39-.55.78-1.1,1.19-1.65a0.31,0.31,0,0,0,0-.37C5.52,15,5.3,14.5,5.09,14A0.34,0.34,0,0,0,4.8,13.7l-2.64-.46V10.77ZM15.43,12A3.45,3.45,0,1,0,12,15.48,3.46,3.46,0,0,0,15.43,12Z"}).directive("ecordTopo",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/ecord-topo.tpl.html",controller:["Eline","$location",function(n,e){var t=this;n.query().$promise.then(function(n){t.elines=n})["catch"](function(n){throw new Error(n)}),this.selectEline=function(n){e.path("/eline/"+n.id)}}]}}),function(){angular.module("xos.ecordTopology").service("Uni",["$resource","_",function(n,e){return n("/api/service/metronetworkservice/SCA_ETH_FPP_UNI_N/:id",{id:"@id"},{query:{isArray:!0,interceptor:{response:function(n){var t=e.map(n.data,function(n,e){var t=n.latlng,i=t.substring(1,t.indexOf(",")-1);i=i.trim();var r=t.substring(t.indexOf(",")+1,t.length-1);return r=r.trim(),n.latlng=[i,r],n});return t}}}})}])}(),angular.module("xos.ecordTopology").run(["$templateCache",function(n){n.put("templates/ecord-topo.tpl.html",'<div class="row" ng-show="vm.elines.length == 0">\n    <div class="col-xs-10 col-xs-offset-1 text-center">\n        <div class="jumbotron" style="margin-top: 100px">\n            <div class="row">\n                <div class="col-sm-4">\n                    <img ng-src="{{\'/imgs/\'+user.image+\'.jpg\'}}" class="img-responsive img-rounded">\n                </div>\n                <div class="col-sm-8">\n                    <h1>Hello, {{currentUser.name}}</h1>\n                    <p style="padding-top: 20px">\n                        Looks like you have not yet created any E-LINE!\n                    </p>\n                    <div style="margin-top: 60px">\n                        <a class="btn btn-success btn-lg" href="#/eline" role="button">Start now</a>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<div class="row" ng-show="vm.elines.length > 0">\n    <div class="col-sm-6">\n        <div class="panel panel-primary animate-vertical" ng-hide="vm.elines.length == 0">\n            <div class="panel-heading">\n                <h3 class="panel-title">E-LINES</h3>\n            </div>\n            <div class="panel-body">\n                <elan-map elan="vm.elines"></elan-map>\n            </div>\n        </div>\n    </div>\n    <div class="col-sm-6 eline-list">\n        <div class="panel panel-primary table-container" ng-show="vm.elines.length >\n        0">\n            <!-- <pre>{{elans | json}}</pre> -->\n            <table class="table">\n                <thead>\n                <tr>\n                    <th>E-LINE</th>\n                    <th>Unis</th>\n                </tr>\n                </thead>\n                <tbody>\n                <tr ng-repeat="eline in vm.elines | orderBy:\'id\'" ng-click="vm.selectEline(eline)">\n                    <td>{{eline.sid}}</td>\n                    <td>\n                <span> - </span>\n                  {{eline.uni1.location}}\n                     {{eline.uni1.pid}}\n                </span>\n                <span> - </span>\n                  {{eline.uni2.location}}\n                     {{eline.uni2.pid}}\n                </span>\n                    </td>\n                </tr>\n                </tbody>\n            </table>\n        </div>\n        <a class="btn btn-success btn-lg btn-block" href="#/eline" role="button">Create a new E-LINE!</a>\n    </div>\n</div>'),n.put("templates/eline-details.tpl.html",'<div id="home" class="container-fluid">\n    <div class="row">\n        <div class="col-sm-6">\n            <div class="panel panel-primary">\n                <div class="panel-heading">\n                    <h3 class="panel-title">E-LINE MAP</h3>\n                </div>\n                <div class="panel-body">\n                    <elan-map ng-hide="!vm.eline" elan="[vm.eline]"></elan-map>\n                </div>\n            </div>\n            <div class="panel panel-primary">\n                <div class="panel-heading">\n                    <h3 class="panel-title">E-LINE SERVICES</h3>\n                </div>\n                <div class="panel-body">\n                    <service-map ng-if="vm.eline" unis="vm.eline.SCA_ETH_Flow_Points" services="vm.activeServices"></service-map>\n                </div>\n            </div>\n        </div>\n        <div class="col-sm-6">\n            <div class="panel panel-primary service-container">\n                <div class="panel-heading">\n                    <h3 class="panel-title">Add a service:</h3>\n                </div>\n                <div class="panel-body">\n                    <div class="row" ng-repeat="(k,v) in vm.availableServices">\n                        <div class="col-xs-12">\n                            <label>{{k | uppercase}}</label>\n                        </div>\n                        <div class="col-xs-{{12/v.length}}" ng-repeat="service in v">\n                            <a ng-click="vm.toggleService(service)" class="btn btn-block"\n                               ng-class="{\'btn-primary-border\': !vm.isServiceActive(service), \'btn-primary\': vm.isServiceActive(service)}">{{service.label}}</a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class="row">\n                <div class="col-sm-6">\n                    <div class="panel panel-primary animate-vertical" ng-hide="!vm.eline.SCA_ETH_Flow_Points[0]">\n                        <div class="panel-heading">\n                            <h3 class="panel-title">{{vm.eline.SCA_ETH_Flow_Points[0].scaEthFppUniN.name}}</h3>\n                        </div>\n                        <div class="panel-body">\n                            <div class="row">\n                                <div class="col-sm-12">\n                                    <div class="input-group">\n                                        <span class="input-group-addon">CIR</span>\n                                        <input b-to-mb ng-model="vm.eline.SCA_ETH_Flow_Points[0].scaEthFppUniN.interfaceCfgIngressBwp.bwpCfgCir" ng-value="\'10\'" class="form-control" type="number" required>\n                                        <span class="input-group-addon">Gb</span>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class="row">\n                                <div class="col-sm-12">\n                                    <div class="input-group">\n                                        <span class="input-group-addon">EIR</span>\n                                        <input b-to-mb ng-model="vm.eline.SCA_ETH_Flow_Points[0].scaEthFppUniN.interfaceCfgIngressBwp.bwpCfgEir" ng-value="\'30\'" class="form-control" type="number" required>\n                                        <span class="input-group-addon">Gb</span>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <div class="col-sm-6">\n                    <div class="panel panel-primary animate-vertical" ng-hide="!vm.eline.SCA_ETH_Flow_Points[1]">\n                        <div class="panel-heading">\n                            <h3 class="panel-title">{{vm.eline.SCA_ETH_Flow_Points[1].scaEthFppUniN.name}}</h3>\n                        </div>\n                        <div class="panel-body">\n                            <div class="row">\n                                <div class="col-sm-12">\n                                    <div class="input-group">\n                                        <span class="input-group-addon">CIR</span>\n                                        <input b-to-mb ng-model="vm.eline.SCA_ETH_Flow_Points[1].scaEthFppUniN.interfaceCfgIngressBwp.bwpCfgCir" ng-value="\'10\'" class="form-control" type="number" required>\n                                        <span class="input-group-addon">Gb</span>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class="row">\n                                <div class="col-sm-12">\n                                    <div class="input-group">\n                                        <span class="input-group-addon">EIR</span>\n                                        <input b-to-mb ng-model="vm.eline.SCA_ETH_Flow_Points[1].scaEthFppUniN.interfaceCfgIngressBwp.bwpCfgEir" ng-value="\'30\'" class="form-control" type="number" required>\n                                        <span class="input-group-addon">Gb</span>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class="panel panel-primary table-container sla">\n                <table class="table">\n                    <thead>\n                    <tr>\n                        <th>SLA</th>\n                        <th>Value</th>\n                        <th>Unit</th>\n                    </tr>\n                    </thead>\n                    <tbody>\n                    <tr ng-repeat="sla in  vm.slas">\n                        <td>{{sla.name}}</td>\n                        <td class="text-right">\n                            <input class="form-control input-sm" type="text" ng-model="sla.default"></input>\n                        </td>\n                        <td>{{sla.unit}}</td>\n                    </tr>\n                    </tbody>\n                </table>\n            </div>\n            <div class="row">\n                <div class="col-xs-12">\n                    <div ng-show="!saved"ng-click="vm.saveEline()" class="btn btn-success btn-block btn-lg">Save</div>\n                    <div ng-show="saved"class="form-success btn-blockanimate-fade">Done</div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>'),n.put("templates/eline-form.tpl.html",'<!-- ELINE CREATION POINT TO POINT -->\n<div class="container-fluid eline-form">\n    <div class="row">\n        <div class="col-xs-10 col-xs-offset-1">\n            <div class="panel panel-primary animate-vertical">\n                <div class="panel-heading">\n                    <h3 class="panel-title">Create E-LINE</h3>\n                </div>\n                <form name="vm.eline" ng-submit="vm.createEline(vm.el, vm.eline)">\n                    <div class="panel-body">\n                        <div class="row">\n                            <div class="col-xs-12">\n                                <label>Name:</label>\n                                <input type="text" class="form-control input-lg" ng-model="vm.el.evcCfgidentifier" required></div>\n                        </div>\n                        <div class="row">\n                            <div class="col-xs-6">\n                                <label>Start:</label>\n                                <div class="alert alert-danger animate-vertical" ng-hide="!vm.formErrors.startError">\n                                    {{vm.formErrors.startError}}\n                                </div>\n                                <!--<pre>{{vm.startUnis | json}}</pre>-->\n                                <div class="row uni-repeat" ng-repeat="u in vm.startUnis">\n                                    <div class="col-xs-2">\n                                        <checkbox largest\n                                                  ng-class="{\'btn-primary\': !u.alreadySelected, \'btn-danger\': u.alreadySelected === true}"\n                                                  ng-model="u.selected"\n                                                  ng-change="vm.selectUni(u, \'start\')"\n                                                  required\n                                        ></checkbox>\n                                    </div>\n                                    <div class="col-xs-5">\n\n                                        <b>{{u.name || u.interfaceCfgIdentifier}}</b>\n\n                                    </div>\n                                    <div class="col-xs-5">\n                                        {{u.location}}\n                                    </div>\n                                </div>\n                            </div>\n                            <div class="col-xs-6">\n                                <label>End:</label>\n                                <div class="alert alert-danger animate-vertical" ng-hide="!vm.formErrors.endError">\n                                    {{vm.formErrors.endError}}\n                                </div>\n                                <div class="row uni-repeat" ng-repeat="u in vm.endUnis">\n                                    <div class="col-xs-2">\n                                        <checkbox largest\n                                                  ng-class="{\'btn-primary\': !u.alreadySelected, \'btn-danger\': u.alreadySelected === true}"\n                                                  ng-model="u.selected"\n                                                  ng-change="vm.selectUni(u, \'end\')"\n                                                  required\n                                        ></checkbox>\n                                    </div>\n                                    <div class="col-xs-5">\n                                        <b>{{u.name || u.interfaceCfgIdentifier}}</b>\n                                    </div>\n                                    <div class="col-xs-5">\n                                        {{u.location}}\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class="panel-footer text-right">\n                        <button ng-hide="vm.eline.$saved" type="submit" class="btn btn-success btn-lg animate-fade">Save</button>\n                        <div ng-hide="!vm.eline.$saved" class="form-success animate-fade">Done</div>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- MULTIPLE POINT CREATION -->\n<div class="container-fluid eline-form" ng-if="vm.currentUser.userId === 2">\n    <div class="row">\n        <div class="col-xs-10 col-xs-offset-1">\n            <div class="panel panel-primary animate-vertical">\n                <div class="panel-heading">\n                    <h3 class="panel-title">Create Infrastructure</h3>\n                </div>\n                <form name="vm.infrastructure" ng-submit="vm.createInfrastructure(vm.infrastructureUnis)">\n                    <div class="panel-body">\n                        <div class="row">\n                            <div class="col-sm-6 infrastructureUnis" ng-repeat="u in vm.infrastructureUnis">\n                                <div class="row uni-repeat">\n                                    <div class="col-xs-2">\n                                        <checkbox largest\n                                                  class="btn-primary"\n                                                  ng-model="u.selected"\n                                                  required\n                                        ></checkbox>\n                                    </div>\n                                    <div class="col-xs-5">\n                                        <b>{{u.name}}</b>\n                                    </div>\n                                    <div class="col-xs-5">\n                                        {{u.location}}\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class="panel-footer text-right">\n                        <button ng-hide="vm.eline.$saved" type="submit" class="btn btn-success btn-lg animate-fade">Save</button>\n                        <div ng-hide="!vm.eline.$saved" class="form-success animate-fade">Done</div>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>')}]),function(){angular.module("xos.ecordTopology").directive("serviceMap",function(){return{restrict:"E",scope:{unis:"=",services:"="},bindToController:!0,controllerAs:"vm",template:"",controller:["$element","$scope","$rootScope","$timeout","$log","cordIcons",function(n,e,t,i,r,a){var s=this,l=n[0],c=d3.layout.tree(),o=500,d=40,u=function g(n){var e=0;return n.children&&n.children.forEach(function(n){var t=g(n);t>e&&(e=t)}),1+e},v=d3.select(l).append("svg").style("width",l.clientWidth+"px").style("height",l.clientHeight+"px"),p=d3.svg.diagonal().projection(function(n){return[n.y,n.x]}),m=0,f=function(n){var e=u(n);c.size([l.clientHeight,l.clientWidth]);var t=c.nodes(n),i=c.links(t),r=(l.clientWidth-d)/(e-1);t.forEach(function(n,e){0===e?n.y=d:n.y=n.depth*r});var s=v.selectAll("g.node").data(t,function(n){return n.id||(n.id=++m)}),f=s.enter().append("g").attr({"class":function(n){return"node "+n.type},id:function(n){return n.id}}).attr("transform",function(){return"translate("+l.clientWidth/2+", 50)"});f.append("rect").attr({"class":function(n){return n.type},width:24,height:24,x:-12,y:-12}),f.filter(".uni").append("path").attr({d:a.cordLogo,transform:"translate(-10, -10),scale(0.18)"}),f.filter(".service").append("path").attr({d:a.service,transform:"translate(-12, -12)"}),f.append("text").attr({"text-anchor":"middle",x:0,y:25}).text(function(n){return n.name});var g=s.exit().transition().duration(o).remove();g.select("circle").attr("r",1e-6),g.select("text").style("fill-opacity",1e-6);var h=(s.transition().duration(o).attr("transform",function(n){return"translate("+n.y+","+n.x+")"}),v.selectAll("path.link").data(i,function(n){return n.target.id}));h.enter().insert("path","g").attr("class","link").attr("d",function(n){var e={x:n.source.x,y:n.source.y};return p({source:e,target:e})}),h.transition().duration(o).attr("d",p),h.exit().transition().duration(o).attr("d",function(n){var e={x:n.source.x,y:n.source.y};return p({source:e,target:e})}).remove(),t.forEach(function(n){n.x0=n.x,n.y0=n.y})};this.formatUni=function(n){return n.reduce(function(n,e,t){return n.push({name:e.scaEthFppUniN.name,children:[],id:"uni-"+t}),n},[])},this.addServices=function(n,e){var t=[e[0]].concat(_toConsumableArray(n),[e[1]]),i=function a(n,e){if(0===e.length)return[];var t=e.shift(),i={name:t.name||t.label,type:t.name?"uni":"service",children:a(t,e),id:t.id};return[i]},r=i({},t);return r[0]},e.$watch(function(){return s.services},function(n){n&&s.unis&&f(s.addServices(n,s.formatUni(s.unis)))},!0)}]}})}(),function(){angular.module("xos.ecordTopology").service("Eline",["$resource",function(n){return n("/api/service/metronetworkservice/SCA_ETH_FDFr_EC/:id",{id:"@id"},{query:{isArray:!0,interceptor:{response:function(n){var e=_.map(n.data,function(n,e){var t=n.uni1.latlng,i=t.substring(1,t.indexOf(",")-1);i=i.trim();var r=t.substring(t.indexOf(",")+1,t.length-1);return r=r.trim(),n.uni1.latlng=[i,r],t=n.uni2.latlng,i=t.substring(1,t.indexOf(",")-1),i=i.trim(),r=t.substring(t.indexOf(",")+1,t.length-1),r=r.trim(),n.uni2.latlng=[i,r],n});return e}}}})}])}(),function(){angular.module("xos.ecordTopology").directive("elanMap",function(){return{restrict:"E",scope:{elan:"="},bindToController:!0,controllerAs:"vm",template:"",controller:["$element","$scope","$rootScope","$timeout","_","cordIcons",function(n,e,t,i,r,a){var s,l,c=this,o=n[0];e.$watch(function(){return c.elan},function(n){n&&i(function(){v(angular.copy(n))},500)},!0);var d=d3.layout.force(),u=function(){l=d3.geo.mercator().center([-122.2,37.6]).scale(28e3).translate([o.clientWidth/2,o.clientHeight/2]);var n=d3.geo.path().projection(l),e=d3.select(o).append("svg").attr("id","map").attr("width",o.clientWidth).attr("height",o.clientHeight);d3.json("/js/json/bayarea.json",function(t,i){if(t)throw new Error(t);e.selectAll(".subunit").data(topojson.feature(i,i.objects.bayareaGEO).features).enter().append("path").attr("class",function(n,e){return"subunit _"+e}).attr("d",n)})},v=function(n){if(n[0]){d.size([o.clientWidth,o.clientHeight]).charge(-20).chargeDistance(200).linkStrength(.1),angular.element(o).children().remove(),u();var e,t,i,c=d3.select(o).append("svg").style("width",o.clientWidth+"px").style("height",o.clientHeight+"px"),v=[],p=[],m=0;r.forEach(n,function(n){var a=r.find(v,{id:n.uni1.pid});if(a)n.uni1.pid=a.id;else{n.uni1.fixed=!0;try{var s=n.uni1.latlng;("string"==typeof s||s instanceof String)&&(e=n.uni1.latlng,t=e.substring(1,e.indexOf(",")-1),t=t.trim(),i=e.substring(e.indexOf(",")+1,e.length-1),i=i.trim(),n.uni1.latlng=[t,i]);var c=l([n.uni1.latlng[0],n.uni1.latlng[1]]);n.uni1.x=c[0],n.uni1.y=c[1],n.uni1.pid=n.uni1.pid||m++,v.push(n.uni1)}catch(o){throw new Error(o)}}if(a=r.find(v,{id:n.uni2.pid}))n.uni2.pid=a.id;else{n.uni2.fixed=!0;try{var d=n.uni2.latlng;("string"==typeof d||d instanceof String)&&(e=n.uni2.latlng,t=e.substring(1,e.indexOf(",")-1),t=t.trim(),i=e.substring(e.indexOf(",")+1,e.length-1),i=i.trim(),n.uni2.latlng=[t,i]);var c=l([n.uni2.latlng[0],n.uni2.latlng[1]]);n.uni2.x=c[0],n.uni2.y=c[1],n.uni2.pid=n.uni2.pid||m++,v.push(n.uni2)}catch(o){throw new Error(o)}}p.push({source:r.findIndex(v,n.uni1),target:r.findIndex(v,n.uni2),value:1})}),d.nodes(v).links(p).start();var f=c.selectAll(".link").data(p).enter().append("line").attr({"class":"link"});s=c.selectAll(".node").data(v).enter().append("g",function(n){return n.scaEthFppUniN.interfaceCfgIdentifier}).attr({"class":function(n){return"node "+(n.type?n.type:"uni")}}),s.append("rect").attr({"class":function(n){return n.type?n.type:"uni"},width:24,height:24,x:-12,y:-12}),s.append("path").attr({d:a.cordLogo,transform:"translate(-10, -10),scale(0.18)"}),s.append("text").attr({x:0,y:25,"text-anchor":"middle"}).text(function(n){return n.pid}),d.on("tick",function(){f.attr("x1",function(n){return n.source.x}).attr("y1",function(n){return n.source.y}).attr("x2",function(n){return n.target.x}).attr("y2",function(n){return n.target.y}),s.attr("transform",function(n){return"translate("+n.x+","+n.y+")"})})}}}]}})}(),function(){angular.module("xos.ecordTopology").directive("elineForm",function(){return{restrict:"E",scope:{uni:"="},bindToController:!0,controllerAs:"vm",templateUrl:"templates/eline-form.tpl.html",controller:["$scope","$timeout","$location","_","Uni","Eline",function(n,e,t,i,r,a){var s=this,l=function(n,e){return i.findIndex(e,{id:n.id,selected:!0})!==-1},c=function(n,e){e.map(function(e){return e.id!==n.id&&(e.selected=!1,e.alreadySelected=!1),e})};this.selectUni=function(n,e){if(n.selected){c(n,s[e+"Unis"]);var t="start"===e?"end":"start";return l(n,s[t+"Unis"])?n.alreadySelected=!0:(s.formErrors[e+"Error"]=null,s.el[e]=n)}return s.el[e]=null,n.alreadySelected=!1},this.el={},r.query().$promise.then(function(n){s.startUnis=angular.copy(n),s.endUnis=angular.copy(n),s.infrastructureUnis=angular.copy(n)});var o=function(n){var e={adminstate:"activationrequested",operstate:"active",uni1:{id:n.start.id},uni2:{id:n.end.id},sid:n.evcCfgidentifier,type:"Point_To_Point"};return e};this.formErrors={},this.createEline=function(i,r){if(i.start||(s.formErrors.startError="Select a starting point"),i.end||(s.formErrors.endError="Select an ending point"),i.start&&i.end){var l=o(i);a.save(l).$promise.then(function(i){r.$saved=!0,n.$emit("elan.created",i),e(function(){t.path("/")},1e3)})["catch"](function(n){throw new Error(n)})}},n.$watch(function(){return s.el},function(n,e){n!==e&&s.eline.$saved&&(s.eline.$saved=!1)},!0),this.prepareInfrastructure=function(n,e){var t=0,i=function r(e){var i,a=[],s=e.shift(),l=e.reduce(function(e,i){var r={};return r.evcCfgidentifier=n+"-"+ ++t,r.start=s,r.end=i,e.push(o(r)),e},[]);if(a=(i=a).concat.apply(i,_toConsumableArray(l)),1===e.length)return a;var c;return(c=a).concat.apply(c,_toConsumableArray(r(e)))};return i(e)},this.createInfrastructure=function(r){r=i.filter(r,{selected:!0}),$log.info("Send request to MARC!!! - Decide the format!",r);var l=[];s.prepareInfrastructure("test",r).forEach(function(n){l.push(a().save(n).$promise)}),$q.all(l).then(function(i){i.forEach(function(e){n.$emit("elan.created",e),cordConfig.pages.push(e)}),e(function(){t.path("/home")},1e3)})}}]}})}(),function(){angular.module("xos.ecordTopology").directive("elineDetails",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/eline-details.tpl.html",controller:["$scope","$stateParams","Eline",function(n,e,t){var i=this;this.eline=null;t();t.get({id:e.id}).$promise.then(function(n){i.eline=n}),this.slas=[{name:"Latency",unit:"ms","default":300},{name:"Latency Variation",unit:"%","default":5},{name:"Packet Loss",unit:"%","default":2}],this.availableServices={performance:[{id:1,label:"WAN Accelerator"},{id:2,label:"Traffic Analytics"},{id:3,label:"Policy Control"}],security:[{id:4,label:"Firewall"},{id:5,label:"Anti-virus"},{id:6,label:"IDS"},{id:7,label:"Encryption"}],enterprise:[{id:8,label:"vRouter"},{id:9,label:"NAT"},{id:10,label:"VPN"}]},this.activeServices=[],this.toggleService=function(n){var e=i.activeServices.indexOf(n);e!==-1?i.activeServices.splice(i.activeServices.indexOf(n),1):i.activeServices.push(n)},this.isServiceActive=function(n){var e=i.activeServices.indexOf(n);return e!==-1},n.$watch(function(){return i.el},function(n,e){n!==e&&i.elineUpdate.$saved&&(i.eline.$saved=!1)},!0),this.saveEline=function(){var e=new t(i.eline);e.$save().then(function(){n.saved=!0})["catch"](function(n){console.error(n)})}}]}}).directive("bToMb",function(){return{require:"ngModel",restrict:"A",link:function(n,e,t,i){i.$parsers.push(function(n){return 1e9*n}),i.$formatters.push(function(n){return n/1e9})}}})}(),angular.module("xos.ecordTopology").run(["$location",function(n){n.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosGlobalXos.js b/xos/core/xoslib/static/js/xosGlobalXos.js
deleted file mode 100644
index 7acba5e..0000000
--- a/xos/core/xoslib/static/js/xosGlobalXos.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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 _slicedToArray=function(){function e(e,n){var o=[],t=!0,i=!1,a=void 0;try{for(var s,r=e[Symbol.iterator]();!(t=(s=r.next()).done)&&(o.push(s.value),!n||o.length!==n);t=!0);}catch(l){i=!0,a=l}finally{try{!t&&r["return"]&&r["return"]()}finally{if(i)throw a}}return o}return function(n,o){if(Array.isArray(n))return n;if(Symbol.iterator in Object(n))return e(n,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();angular.module("xos.globalXos",["ngResource","ngCookies","ui.router","xos.helpers","ui.bootstrap.modal","ui.bootstrap.tpls"]).config(["$stateProvider",function(e){e.state("xos-list",{url:"/",template:"<xos-list></xos-list>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).value("LXOS",[]).directive("xosList",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/xos-list.tpl.html",controller:["$window","$q","_","Controllers","LXOS","LocalAuth","LocalSlices","LocalUsers","$uibModal","Slices",function(e,n,o,t,i,a,s,r,l,c){var u=this,d=this;n.all([t.query({backend_type:"CORD"}).$promise,c.query().$promise]).then(function(e){var n=_slicedToArray(e,2);u.xoss=n[0],u.gSlices=n[1]}),this.openLocally=function(n){return function(o){e.open(o.xos.auth_url+"admin/core/"+n+"/"+o.id,"_blank")}};var m=function(e){l.open({animation:!0,size:"lg",templateUrl:"listInstances.html",controllerAs:"vm",resolve:{slice:function(){return{name:e.name,xos:{name:"G-XOS"}}}},controller:["$uibModalInstance","slice","LocalInstances","LocalSlices",function(e,n,t,i){var a=this;this.slice=n,this.config={columns:[{label:"Name",prop:"name"}],actions:[{label:"Add Instance",icon:"remove",color:"red",cb:function(e){console.log(e),t.deleteFromLocal(e).then(function(){o.remove(a.instances,function(n){return n.id===e.id})})}}]},i.queryFromAll(d.xoss).$promise.then(function(e){return a.slicesId=e.filter(function(e){return e.name.indexOf(a.slice.name)>-1}).reduce(function(e,n){return e[n.xos.id]=n.id,e},{}),t.queryFromAll(d.xoss).$promise}).then(function(e){a.instances=e.filter(function(e){return a.slicesId[e.xos.id]===e.slice})})["catch"](function(e){a.instances=[]}),this.close=function(){e.dismiss("cancel")}}]})},f=function(e){l.open({animation:!0,size:"lg",templateUrl:"addInstance.html",controller:["$scope","$q","$uibModalInstance","slice","LocalInstances","LocalAuth",function(e,n,i,a,r,l){var c=this;this.slice=a,this.model={};var u=void 0;t.query({backend_type:"CORD"}).$promise.then(function(e){c.xoss=e,c.config.fields.xos.options=o.map(e,function(e){return{id:e.id,label:e.name}})}),e.$watch(function(){return c.model.xos},function(){c.model.xos&&(u=o.find(c.xoss,{id:c.model.xos}),r.getLocalInfo(u).then(function(e){var o=_slicedToArray(e,4);return c.config.fields.deployment.options=o[0],c.config.fields.image.options=o[1],c.config.fields.flavor.options=o[2],c.config.fields.node.options=o[3],n.all([s.getLocalByName(u,c.slice.name),l.getUserByName(u,u.admin_user)])}).then(function(e){console.log("aaaa: ",e);var n=_slicedToArray(e,2);c.localSlice=n[0],c.user=n[1]}))}),this.config={formName:"instanceForm",order:["xos","name"],excludedFields:["xos","slice"],actions:[{label:"Save",icon:"ok",cb:function(e){e.xos=u,e.slice=c.localSlice.id,e.creator=c.user.id,r.createOnLocal(e).then(function(e){a.instance_total=a.instance_total+1,i.close()})},"class":"success"},{label:"Cancel",icon:"remove",cb:function(){i.dismiss("cancel")},"class":"warning"}],fields:{xos:{type:"select",validators:{required:!0}},name:{type:"text",validators:{required:!0}},deployment:{type:"select",validators:{required:!0}},node:{type:"select",validators:{required:!0}},image:{type:"select",validators:{required:!0}},flavor:{type:"select",validators:{required:!0}},isolation:{type:"select",options:[{id:"vm",label:"VM"},{id:"container",label:"Container"},{id:"container_vm",label:"Container in VM"}],validators:{required:!0}}}}}],controllerAs:"vm",resolve:{slice:function(){return e}}})},h=[{label:"Name",prop:"name"}],v=[{label:"Max Instances",prop:"max_instances"},{label:"Instances",prop:"instance_total"},{label:"L-XOS",type:"custom",formatter:function(e){return e.xos.name}}];this.gSliceTableCgf={columns:h,filter:"field",order:!0,actions:[{label:"Get Instances",icon:"search",cb:m},{label:"Add Instances",icon:"plus",cb:f}]},this.sliceTableCfg={columns:h.concat(v),actions:[{label:"open locally",icon:"open",cb:this.openLocally("slice")},{label:"Get Instances",icon:"search",cb:function(e){l.open({animation:!0,size:"lg",templateUrl:"listInstances.html",controllerAs:"vm",resolve:{slice:function(){return e}},controller:["$uibModalInstance","slice","LocalInstances",function(e,n,o){var t=this;this.slice=n,this.config={columns:[{label:"Name",prop:"name"},{label:"deployment",prop:"deployment"}]},o.getFromLocal(n.xos).then(function(e){t.instances=e.filter(function(e){return e.slice===n.id})}),this.close=function(){e.dismiss("cancel")}}]})}},{label:"Add Instance",icon:"plus",cb:function(e){l.open({animation:!0,size:"lg",templateUrl:"addInstance.html",controller:["$uibModalInstance","slice","LocalInstances",function(e,n,o){var t=this;this.slice=n,this.model={},console.log(n),o.getLocalInfo(n.xos).then(function(e){var n=_slicedToArray(e,4);t.config.fields.deployment.options=n[0],t.config.fields.image.options=n[1],t.config.fields.flavor.options=n[2],t.config.fields.node.options=n[3]}),this.config={formName:"instanceForm",excludedFields:["xos","slice"],actions:[{label:"Save",icon:"ok",cb:function(i){i.xos=n.xos,i.slice=n.id,i.creator=t.user.id,o.createOnLocal(i).then(function(o){n.instance_total=n.instance_total+1,e.close()})},"class":"success"},{label:"Cancel",icon:"remove",cb:function(){e.dismiss("cancel")},"class":"warning"}],fields:{name:{type:"text",validators:{required:!0}},deployment:{type:"select",validators:{required:!0}},node:{type:"select",validators:{required:!0}},image:{type:"select",validators:{required:!0}},flavor:{type:"select",validators:{required:!0}},isolation:{type:"select",options:[{id:"vm",label:"VM"},{id:"container",label:"Container"},{id:"container_vm",label:"Container in VM"}],validators:{required:!0}}}}}],controllerAs:"vm",resolve:{slice:function(){return e}}})}}],filter:"field",order:!0},this.usersTableCfg={columns:[{label:"Name",type:"custom",formatter:function(e){return e.firstname+" "+e.lastname}},{label:"E-Mail",prop:"email"},{label:"User Name",prop:"username"},{label:"Time Zone",prop:"timezone"},{label:"L-XOS",type:"custom",formatter:function(e){return e.xos.name}}],actions:[{label:"open locally",icon:"open",cb:this.openLocally("user")}],filter:"field",order:!0},this.toggleXos=function(e){o.findIndex(i,{id:e.id})>-1?(e.active=!1,o.remove(i,{id:e.id})):(e.active=!0,i.push(e)),a.login().then(function(){return n.all([s.queryFromAll().$promise,r.queryFromAll().$promise])}).then(function(e){var n=_slicedToArray(e,2);u.localSlices=n[0],u.localUsers=n[1]})["catch"](function(e){console.log(e)})}}]}}),angular.module("xos.globalXos").run(["$templateCache",function(e){e.put("templates/xos-list.tpl.html",'<div class="container">\n  <div class="row">\n    <h2>Select XOS to synch:</h2>\n  </div>\n  <div class="row">\n    <div class="col-xs-12">\n      <h2>G-XOS Slices:</h2>\n    </div>\n    <div class="col-xs-12">\n      <xos-table\n              config="vm.gSliceTableCgf"\n              data="vm.gSlices">\n      </xos-table>\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12">\n      <h2>Get L-XOS details:</h2>\n    </div>\n    <div\n      ng-repeat="xos in vm.xoss"\n      class="col-sm-2">\n      <div\n        class="well"\n        ng-class="{active: xos.active}"\n        ng-click="vm.toggleXos(xos)">\n          {{xos.humanReadableName || xos.name}}\n      </div>\n    </div>\n  </div>\n  <div class="row" ng-if="vm.localSlices.length > 0">\n    <div class="col-xs-12">\n      <h2>L-XOS Slices:</h2>\n    </div>\n    <div class="col-xs-12">\n      <xos-table\n        config="vm.sliceTableCfg"\n        data="vm.localSlices">\n      </xos-table>\n    </div>\n  </div>\n  <div class="row" ng-if="vm.localSlices.length > 0">\n    <div class="col-xs-12">\n      <h2>L-XOS Users:</h2>\n    </div>\n    <div class="col-xs-12">\n      <xos-table\n        config="vm.usersTableCfg"\n        data="vm.localUsers">\n      </xos-table>\n    </div>\n  </div>\n</div>\n<script type="text/ng-template" id="addInstance.html">\n  <div class="modal-header">\n      <h3 class="modal-title" id="modal-title">Add Instance to {{vm.slice.name}} on {{vm.slice.xos.name}}</h3>\n  </div>\n  <div class="modal-body" id="modal-body">\n    <xos-form ng-model="vm.model" config="vm.config"></xos-form>\n  </div>\n</script>\n<script type="text/ng-template" id="listInstances.html">\n  <div class="modal-header">\n    <h3 class="modal-title" id="modal-title">Get Instances from {{vm.slice.name}} on {{vm.slice.xos.name}}</h3>\n  </div>\n  <div class="modal-body" id="modal-body">\n    <xos-table data="vm.instances" config="vm.config"></xos-table>\n  </div>\n  <div class="modal-footer">\n    <a ng-click="vm.close()" class="btn btn-warning">Close</a>\n  </div>\n</script>')}]),function(){angular.module("xos.globalXos").service("Controllers",["$resource",function(e){return e("/api/core/controllers/:id",{id:"@id"})}]).service("GXOS",["$q","$resource","_","LXOS",function(e,n,o,t){var i=this;this.attachXosToItem=function(e){var n=arguments.length<=1||void 0===arguments[1]?t:arguments[1];return o.map(e,function(e,t){var i=n[t];return o.map(e,function(e){return e.xos=i,e})})},this.buildQueryEndpoint=function(a){var s=arguments.length<=1||void 0===arguments[1]?t:arguments[1];return function(){var t=e.defer(),r=[],l=[];return o.forEach(s,function(e,o){var t=n(""+e.auth_url+a,{id:"@id"},{query:{isArray:!0,headers:{Authorization:"Basic "+btoa(e.admin_user+":"+e.admin_password)}}});r.push(t),l.push(r[o].query().$promise)}),e.all(l).then(function(e){e=i.attachXosToItem(e,s),t.resolve(o.flatten(e))})["catch"](t.reject),{$promise:t.promise}}},this.buildLocalResource=function(e,o){var t={Authorization:"Basic "+btoa(o.admin_user+":"+o.admin_password)},i=n(""+o.auth_url+e,{id:"@id"},{query:{isArray:!0,headers:t}});return i}}]).service("LocalAuth",["$q","$http","_","LXOS",function(e,n,o,t){var i="api/utility/login/";this.login=function(){var a=e.defer(),s=[];return o.forEach(t,function(e,o){var t=n.post(""+e.auth_url+i,{username:e.admin_user,password:e.admin_password});s.push(t)}),e.all(s).then(function(e){o.forEach(e,function(e,n){t[n].xoscsrftoken=e.data.xoscsrftoken,t[n].xossessionid=e.data.xossessionid,t[n].user=JSON.parse(e.data.user)}),a.resolve()})["catch"](function(e){a.reject(e)}),a.promise},this.getUserByName=function(o,t){var i=e.defer();return console.log(t),n.get(o.auth_url+"api/core/users/",{params:{username:t},headers:{Authorization:"Basic "+btoa(o.admin_user+":"+o.admin_password)}}).then(function(e){i.resolve(e.data[0])})["catch"](function(e){i.reject(e)}),i.promise}}]).service("LocalSlices",["$q","$http","GXOS",function(e,n,o){var t="api/utility/slicesplus/";this.queryFromAll=function(e){return o.buildQueryEndpoint(t,e)()},this.getLocalByName=function(o,i){var a=e.defer();return n.get(""+o.auth_url+t,{headers:{Authorization:"Basic "+btoa(o.admin_user+":"+o.admin_password)}}).then(function(e){var n=_.filter(e.data,function(e){return e.name.indexOf(i)>-1});a.resolve(n[0])})["catch"](function(e){a.reject(e)}),a.promise}}]).service("LocalUsers",["GXOS",function(e){var n="api/core/users/";this.queryFromAll=e.buildQueryEndpoint(n)}]).service("LocalInstances",["$q","$http","GXOS","LocalDeployments","LocalImages","LocalFlavor","LocalNode",function(e,n,o,t,i,a,s){var r="api/core/instances/";this.queryFromAll=function(e){return o.buildQueryEndpoint(r,e)()},this.createOnLocal=function(o){var t=e.defer(),i=o.xos;return delete o.xos,n.post(""+i.auth_url+r,o,{headers:{Authorization:"Basic "+btoa(i.admin_user+":"+i.admin_password)}}).then(function(e){t.resolve(e)})["catch"](function(e){t.reject(e)}),t.promise},this.getFromLocal=function(o,t){var i=e.defer();return n.get(""+o.auth_url+r,{params:t,headers:{Authorization:"Basic "+btoa(o.admin_user+":"+o.admin_password)}}).then(function(e){i.resolve(e.data)})["catch"](function(e){i.reject(e)}),i.promise},this.deleteFromLocal=function(o){console.log("deleteFromLocal");var t=e.defer();return n["delete"](""+o.xos.auth_url+r+o.id+"/",{headers:{Authorization:"Basic "+btoa(o.xos.admin_user+":"+o.xos.admin_password)}}).then(function(e){t.resolve(e.data)})["catch"](function(e){t.reject(e)}),t.promise},this.getLocalInfo=function(n){var o=e.defer();return e.all([t.queryFromLocal(n),i.queryFromLocal(n),a.queryFromLocal(n),s.queryFromLocal(n)]).then(function(e){e=_.map(e,function(e){return _.map(e,function(e){return{id:e.id,label:e.name}})}),o.resolve(e)})["catch"](o.reject),o.promise}}]).service("LocalDeployments",["$q","$http",function(e,n){var o="api/core/deployments/";this.queryFromLocal=function(t){var i=e.defer();return n.get(""+t.auth_url+o,{headers:{Authorization:"Basic "+btoa(t.admin_user+":"+t.admin_password)}}).then(function(e){i.resolve(e.data)})["catch"](function(e){i.reject(e)}),i.promise}}]).service("LocalImages",["$q","$http",function(e,n){var o="api/core/images/";this.queryFromLocal=function(t){var i=e.defer();return n.get(""+t.auth_url+o,{headers:{Authorization:"Basic "+btoa(t.admin_user+":"+t.admin_password)}}).then(function(e){i.resolve(e.data)})["catch"](function(e){i.reject(e)}),i.promise}}]).service("LocalFlavor",["$q","$http",function(e,n){var o="api/core/flavors/";this.queryFromLocal=function(t){var i=e.defer();return n.get(""+t.auth_url+o,{headers:{Authorization:"Basic "+btoa(t.admin_user+":"+t.admin_password)}}).then(function(e){i.resolve(e.data)})["catch"](function(e){i.reject(e)}),i.promise}}]).service("LocalNode",["$q","$http",function(e,n){var o="api/core/nodes/";this.queryFromLocal=function(t){var i=e.defer();return n.get(""+t.auth_url+o,{headers:{Authorization:"Basic "+btoa(t.admin_user+":"+t.admin_password)}}).then(function(e){i.resolve(e.data)})["catch"](function(e){i.reject(e)}),i.promise}}])}(),angular.module("xos.globalXos").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosHpc.js b/xos/core/xoslib/static/js/xosHpc.js
deleted file mode 100644
index f4ed934..0000000
--- a/xos/core/xoslib/static/js/xosHpc.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.hpc",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(e){e.state("hpc-list",{url:"/",template:"<hpcs-list></hpcs-list>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).service("Hpc",["$q","$http",function(e,r){this.query=function(t){var n=e.defer();return r.get("/xoslib/hpcview",{params:t}).then(function(e){n.resolve(e.data)})["catch"](n.reject),{$promise:n.promise}}}]).directive("hpcsList",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/hpc-list.tpl.html",controller:["Hpc",function(e){var r=this,t=function(e){e=Number(e);var r=Math.floor(e/3600),t=Math.floor(e%3600/60),n=Math.floor(e%3600%60);return(r>0?r+"h "+(10>t?"0":""):"")+t+"m "+(10>n?"0":"")+n+"s"},n=function(e){return function(r){return angular.isNumber(r[e])?t(r[e]):r[e]}};this.routerConfig={filter:"field",order:!0,columns:[{label:"Name",prop:"name"},{label:"Ip Address",prop:"ip"},{label:"Record Checker",prop:"watcher.DNS.msg"},{label:"Name Servers",prop:"nameservers",type:"array"},{label:"Dns Demux Config Age",prop:"dnsdemux_config_age",type:"custom",formatter:n("dnsdemux_config_age")},{label:"Dns Redir Config Age",prop:"dnsredir_config_age",type:"custom",formatter:n("dnsredir_config_age")}]},this.cacheConfig={filter:"field",order:!0,columns:[{label:"Name",prop:"name"},{label:"Prober",prop:"watcher.HPC-hb.msg"},{label:"Fetcher",prop:"watcher.HPC-fetch.msg"},{label:"Config Age",prop:"config_age",type:"custom",formatter:n("config_age")}]},this.fetch=function(){e.query().$promise.then(function(e){r.routers=e[0].dnsdemux,r.caches=e[0].hpc})["catch"](function(e){throw new Error(e)})},this.fetch()}]}}),angular.module("xos.hpc").run(["$templateCache",function(e){e.put("templates/hpc-list.tpl.html",'<div class="container-fluid">\n    <div class="row">\n        <div class="col-xs-10">\n            <h1>Request Routers</h1>\n        </div>\n        <div class="col-xs-2 text-right">\n            <a href="" ng-click="vm.fetch()" class="btn btn-primary btn-reload">\n                <i class="glyphicon glyphicon-refresh"></i>\n                Refresh\n            </a>\n        </div>\n    </div>\n    <div class="row">\n        <div class="col-xs-12">\n            <xos-table config="vm.routerConfig" data="vm.routers"></xos-table>\n        </div>\n    </div>\n    <div class="row">\n        <div class="col-xs-12">\n            <h1>HyperCache</h1>\n        </div>\n    </div>\n    <div class="row">\n        <div class="col-xs-12">\n            <xos-table config="vm.cacheConfig" data="vm.caches"></xos-table>\n        </div>\n    </div>\n</div>')}]),angular.module("xos.hpc").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosMcord-slicing.js b/xos/core/xoslib/static/js/xosMcord-slicing.js
deleted file mode 100644
index 4bdfb75..0000000
--- a/xos/core/xoslib/static/js/xosMcord-slicing.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.mcord-slicing",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(e){e.state("slicing-topo",{url:"/",template:"<slicing-topo></slicing-topo>"}).state("node-links",{url:"/data",template:"<node-links></node-links>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).service("McordSlicingTopo",["$http","$q",function(e,t){this.query=function(){var c=t.defer();return e.get("api/service/mcord_slicing_ui/topology/").then(function(e){var t=void 0;t=e.data.hasOwnProperty("nodes")?e.data:{nodes:e.data[0],links:e.data[1]},c.resolve(t)})["catch"](function(e){c.reject(e)}),{$promise:c.promise}}}]).directive("nodeLinks",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/node-links.tpl.html",controller:["McordSlicingTopo",function(e){var t=this;this.tableConfig={columns:[{label:"Id",prop:"id"},{label:"Name",prop:"name"},{label:"Type",prop:"type"},{label:"Plane",prop:"plane"},{label:"Model Id",prop:"model_id"}]},e.query().$promise.then(function(e){t.users=e.nodes})["catch"](function(e){throw new Error(e)})}]}}),angular.module("xos.mcord-slicing").run(["$templateCache",function(e){e.put("templates/node-links.tpl.html",'<div class="row">\n  <div class="col-sm-12">\n    <xos-table config="vm.tableConfig" data="vm.users"></xos-table>\n  </div>\n  <div class="col-sm-12"></div>\n</div>'),e.put("templates/slicing-topo.tpl.html","")}]);var _slicedToArray=function(){function e(e,t){var c=[],n=!0,r=!1,o=void 0;try{for(var i,a=e[Symbol.iterator]();!(n=(i=a.next()).done)&&(c.push(i.value),!t||c.length!==t);n=!0);}catch(s){r=!0,o=s}finally{try{!n&&a["return"]&&a["return"]()}finally{if(r)throw o}}return c}return function(t,c){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,c);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){angular.module("xos.mcord-slicing").directive("slicingTopo",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/slicing-topo.tpl.html",controller:["$element","SliceGraph","McordSlicingTopo","_","NodePositioner","FormHandler","mCordSlicingIcons",function(e,t,c,n,r,o,i){var a=this,s=void 0,l=void 0,d=void 0,u=void 0,p=void 0,f=void 0,v=void 0,m=void 0,g=void 0,h=void 0,y=void 0,C=void 0,x=d3.transition().duration(500);this.activeSlices=[];var M=function(){m=null,g=null,v.classed("hidden",!0)};c.query().$promise.then(function(c){r.storeEl(e[0]),w(e[0]),t.buildGraph(c),z=t.positionGraph(e[0]),P=t.getGraphLinks(z),G()})["catch"](function(e){throw new Error(e)});var w=function(e){a.el=e,d3.select(e).select("svg").remove(),s=d3.select(e).append("svg").style("width",e.clientWidth+"px").style("height",e.clientHeight+"px"),p=s.append("g").attr({"class":"link-group"}),u=s.append("g").attr({"class":"node-group"}),f=d3.select(e).append("div").attr({"class":"form-container"}),v=s.append("svg:path").attr("class","dragline hidden").attr("d","M0,0L0,0")},b=function(){s.selectAll(".link").attr("x1",function(e){return e.source.x}).attr("y1",function(e){return e.source.y}).attr("x2",function(e){return e.target.x}).attr("y2",function(e){return e.target.y})},z=[],P=[],k=function(e){var c=t.getSliceDetail(e),n=_slicedToArray(c,2),r=n[0],o=n[1];z=z.concat(r),P=P.concat(o),G()},S=function(e){t.removeActiveSlice(e),y&&y.sliceId===e&&(y=null,C=null),z=n.filter(z,function(t){return t.sliceId!==e||"control"!==t.plane&&"button"!==t.type||(o.removeFormByParentNode(t,p,f),!1)}),z=n.map(z,function(t){return t.sliceId===e&&delete t.sliceId,t}),P=n.filter(P,function(e){return n.findIndex(z,{id:e.data.source})!==-1&&n.findIndex(z,{id:e.data.target})!==-1}),G()},F=function(e){console.log(P),n.remove(P,function(t){return t.data.id===e}),console.log(P),G()},I=function(e){console.log("exp",e),M();var t=["ran-ru","ran-cu","pgw","sgw"];t.indexOf(e.type)>-1&&"data"===e.plane&&!e.sliceId?k(e):"button"===e.type?S(e.sliceId):!e.formAttached&&e.model?(e.formAttached=!0,o.drawForm(e,p,f)):e.formAttached&&(e.formAttached=!1,o.removeFormByParentNode(e,p,f))},N=function(){if(y){if(C=t.getNodeSuccessors(y),0===C.length)return;y.selected=!1;var e=n.findIndex(z,{id:C[0].id});y=z[e],y.selected=!0;var c=t.getNodeSuccessors(y);C=c.lenght>0?t.getNodePredecessors(c[0]):null}else y=z[0],y.selected=!0;G()},A=function(){if(y){if(C=t.getNodePredecessors(y),0===C.length)return;y.selected=!1;var e=n.findIndex(z,{id:C[0].id});e<0&&(e=z.length-1),y=z[e],y.selected=!0}else y=z[0],y.selected=!0;G()},E=function(e,t){return e.y<t.y?1:e.y>t.y?-1:0},D=function(e){return n.filter(z,function(t){return"pgw"===e.type&&"button"===t.type||("button"===e.type&&"pgw"===t.type||("sgw"===e.type&&"mme"===t.type||("mme"===e.type&&"sgw"===t.type||t.type===e.type)))}).sort(E)},H=function(){if(y){y.selected=!1;var e=D(y),t=n.findIndex(e,{id:y.id})+1;t===e.length&&(t=0);var c=n.findIndex(z,{id:e[t].id});y=z[c],y.selected=!0}else y=z[0],y.selected=!0;G()},$=function(){if(y){y.selected=!1;var e=D(y),t=n.findIndex(e,{id:y.id})-1;t<0&&(t=e.length-1);var c=n.findIndex(z,{id:e[t].id});y=z[c],y.selected=!0}else y=z[0],y.selected=!0;G()},G=function O(){d3.layout.force().nodes(z).links(P).charge(-1060).gravity(.1).linkDistance(200).size([a.el.clientWidth,a.el.clientHeight]).on("tick",b).start();d=p.selectAll(".link-container").data(P,function(e){return e.data.id}).enter().insert("g").attr({"class":"link-container",opacity:0}),d.transition(x).attr({opacity:1}),d.insert("line").attr("class",function(e){return"link "+e.data.plane}).on("click",function(e){h=e,d3.selectAll(".link").classed("selected",!1),d3.select(this).classed("selected",!0)}),l=u.selectAll(".node").data(z,function(e){return e.id}).attr({"class":function(e){return"node "+e.plane+" "+e.type+" "+(e.selected?"selected":"")}}),l.enter().append("g").attr({"class":"node-container",transform:function(e){return e.transform},opacity:0}),l.transition(x).attr({opacity:1}),l.append("rect").attr({"class":function(e){return"node "+e.plane+" "+e.type+" "+(e.selected?"selected":"")},width:100,height:50,x:-50,y:-25}),l.append("text").attr({"text-anchor":"left","alignment-baseline":"middle",x:-20}).text(function(e){return""+e.name}),l.on("click",function(e){I(e)});var e=l.filter(function(e){return"ue"===e.type});e.append("path").attr({d:i.mobile,"class":"icon",transform:"translate(-40, -12.5), scale(0.5)"});var c=l.filter(function(e){return"profile"===e.type});c.append("path").attr({d:i.profile,"class":"icon",transform:"translate(-40, -12.5), scale(0.5)"});var n=l.filter(function(e){return"ran-ru"===e.type});n.append("path").attr({d:i.rru,"class":"icon",transform:"translate(-40, -12.5), scale(0.5)"});var r=l.filter(function(e){return"ran-cu"===e.type});r.append("path").attr({d:i.rcu,"class":"icon",transform:"translate(-40, -12.5), scale(0.5)"});var o=l.filter(function(e){return"sgw"===e.type});o.append("path").attr({d:i.sgw,"class":"icon",transform:"translate(-40, -12.5), scale(0.5)"});var f=l.filter(function(e){return"pgw"===e.type});f.append("path").attr({d:i.pgw,"class":"icon",transform:"translate(-40, -12.5), scale(0.5)"});var y=l.filter(function(e){return"mme"===e.type});y.append("path").attr({d:i.mme,"class":"icon",transform:"translate(-40, -12.5), scale(0.5)"}),l.on("mousedown",function(e){m=e,v.classed("hidden",!1).attr("d","M"+m.x+","+m.y+"L"+m.x+","+m.y)}).on("mouseover",function(e){m&&(g=e)}),s.on("mousemove",function(){m&&v.attr("d","M"+m.x+","+m.y+"L"+d3.mouse(this)[0]+","+d3.mouse(this)[1])}).on("mouseup",function(){if(!m||!g)return void M();var e=t.getNodeDataPlaneSuccessors(m)[0].type;return g.type!==e?void M():(P.push({source:m,target:g,data:{id:m.id+"."+g.id,source:m.id,target:g.id}}),O(),void M())}),s.selectAll(".node-container").data(z,function(e){return e.id}).exit().transition(x).attr({opacity:0}).remove(),s.selectAll(".link-container").data(P,function(e){return e.data.id}).exit().transition(x).attr({opacity:0}).remove()};d3.select("body").on("keydown",function(){"Backspace"===d3.event.code&&h&&F(h.data.id),"Enter"===d3.event.code&&y&&(d3.event.preventDefault(),I(y)),"Escape"===d3.event.code&&y&&(y.selected=!1,y=null,C=null,G()),"ArrowRight"===d3.event.code&&(d3.event.preventDefault(),N()),"ArrowLeft"===d3.event.code&&(d3.event.preventDefault(),A()),"ArrowUp"===d3.event.code&&(d3.event.preventDefault(),H()),"ArrowDown"===d3.event.code&&(d3.event.preventDefault(),$())})}]}})}(),function(){angular.module("xos.mcord-slicing").service("SliceGraph",["_","NodePositioner",function(e,t){var c=this,n=new graphlib.Graph;this.buildGraph=function(t){e.forEach(t.nodes,function(e){return n.setNode(e.id,e)}),e.forEach(t.links,function(e){return n.setEdge(e.source,e.target,e)})},this.getLinks=function(){return n.edges().map(function(e){return{source:n.node(e.v),target:n.node(e.w),data:n.edge(e)}})},this.getGraph=function(){return n},this.getNodeSuccessors=function(t){return e.map(n.successors(t.id),function(e){return n.node(e)})},this.getNodePredecessors=function(t){return e.map(n.predecessors(t.id),function(e){return n.node(e)})},this.getNodeDataPlaneSuccessors=function(t){return e.filter(c.getNodeSuccessors(t),function(e){return"data"===e.plane})},this.getUpstreamSinks=function(t){var c=e.reduce(n.sinks(),function(e,t,c){var r=n.node(t);return"upstream"===r.type&&e.push(r),e},[]);return e.map(c,function(e,n){return e.position={top:0,bottom:t.clientHeight,total:c.length,index:n+1},e})},this.positionGraph=function(n){var r=c.getUpstreamSinks(n),o=[];return e.forEach(r,function(e,t){o=o.concat(c.findPredecessor(e))}),r=r.concat(o),r=e.map(r,function(e){return t.getDataPlaneNodePos(e,n)})},this.findPredecessor=function(r){var o=n.predecessors(r.id);o=o.map(function(e,c){e=n.node(e);var i=(r.position.bottom-r.position.top)/r.position.total,a=t.getVpos(r);return e.position={top:a-i/2,bottom:a+i/2,total:o.length,index:c+1},e});var i=e.reduce(o,function(e,t){return e.concat(c.findPredecessor(t))},[]);return o.concat(i)},this.getGraphLinks=function(t){var c=[];return e.forEach(t,function(t){var r=n.inEdges(t.id);e.forEach(r,function(e){c.push({source:n.node(e.v),target:n.node(e.w),data:n.edge(e)})})}),c},this.getDataPlaneForSlice=function(e,t){var c=n.node(n.successors(e.id)[0]),r=n.node(n.successors(c.id)[0]),o=n.node(n.successors(r.id)[0]);return e.sliceId=t,c.sliceId=t,r.sliceId=t,o.sliceId=t,[e,c,r,o]},this.getControlPlaneForSlice=function(c,r){return e.reduce(c,function(e,c){var o=n.node(n.successors(c.id)[1]);if(o=t.getControlPlaneNodePos(o,c),o.sliceId=r,"sgw"===o.type){var i=n.node(n.successors(o.id)[1]);i=t.getControlPlaneNodePos(i,o),i.sliceId=r,e.push(i)}return e.concat(o)},[])},this.activeSlices=[],this.getSliceDetail=function(r){if(r.sliceId&&c.activeSlices.indexOf(r.sliceId)>-1)return[[],[]];var o=e.min(c.activeSlices)?e.min(c.activeSlices)+1:1;c.activeSlices.push(o);var i=function(e){for(var t=!0;t;){var c=e;if(t=!1,"ran-ru"===c.type)return c;var r=n.predecessors(c.id);e=n.node(r[0]),t=!0,r=void 0}}(r),a=c.getDataPlaneForSlice(i,o),s=c.getControlPlaneForSlice(a,o),l=c.getGraphLinks(s),d={name:"Close",id:"close-button-"+o,type:"button",sliceId:o};return d=t.getControlPlaneNodePos(d,s[3]),s.push(d),[s,l]},this.removeActiveSlice=function(e){c.activeSlices.splice(c.activeSlices.indexOf(e),1)}}]).service("NodePositioner",["_","sliceElOrder",function(e,t){var c=this,n=void 0;this.storeEl=function(e){n=e},this.getHpos=function(e,c){var n=t.indexOf(e.type)+1;"mme"===e.type&&(n=t.indexOf("sgw")+1),"button"===e.type&&(n=t.indexOf("pgw")+1);var r=c.clientWidth/(t.length+1)*n;return r},this.getVpos=function(e){var t=e.position.bottom-e.position.top,c=t/(e.position.total+1),n=c*e.position.index+e.position.top;return n},this.getDataPlaneNodePos=function(e){var t=c.getHpos(e,n),r=c.getVpos(e);return e.x=t,e.y=r,e.transform="translate("+t+", "+r+")",e.fixed=!0,e},this.getControlPlaneNodePos=function(e,t){var r=c.getHpos(e,n),o=t.y-75;return e.x=r,e.y=o,e.transform="translate("+r+", "+o+")",e.fixed=!0,e}}]).value("sliceElOrder",["ue","profile","ran-ru","ran-cu","sgw","pgw","upstream"]).constant("mCordSlicingIcons",{mobile:"M26.1,0c0.5,0.2,1.1,0.4,1.6,0.7C28.7,1.4,29,2.4,29,3.5c0,0.2,0,0.4,0,0.6c0,14,0,28.1,0,42.1c0,1-0.2,1.8-0.9,2.6\n  c-0.4,0.5-0.9,0.8-1.5,1c-0.2,0.1-0.3,0.1-0.5,0.2c-7.7,0-15.5,0-23.2,0c-0.5-0.2-1.1-0.4-1.5-0.7c-1-0.7-1.4-1.7-1.4-2.9\n  c0-3.8,0-7.6,0-11.4C0,24.5,0,14.1,0,3.8c0-1,0.2-1.8,0.9-2.6c0.4-0.5,0.9-0.8,1.5-1C2.6,0.1,2.7,0.1,2.9,0C10.6,0,18.4,0,26.1,0z\n   M26.7,43.7c0-12.8,0-25.6,0-38.3c-8.1,0-16.2,0-24.3,0c0,12.8,0,25.6,0,38.3C10.5,43.7,18.6,43.7,26.7,43.7z M16.2,46.6\n  c0-0.9-0.8-1.7-1.7-1.7c-0.9,0-1.7,0.8-1.7,1.7c0,0.9,0.8,1.7,1.7,1.7C15.5,48.3,16.2,47.5,16.2,46.6z M14.5,3.3c0.8,0,1.5,0,2.3,0\n  c0.4,0,0.8,0,1.2,0c0.3,0,0.4-0.1,0.5-0.4c0-0.3-0.2-0.4-0.4-0.4c-0.1,0-0.2,0-0.2,0c-2.2,0-4.4,0-6.6,0c-0.1,0-0.3,0-0.4,0.1\n  c-0.1,0.1-0.3,0.3-0.3,0.4c0,0.1,0.2,0.3,0.3,0.4c0.1,0.1,0.2,0,0.4,0C12.3,3.3,13.4,3.3,14.5,3.3z",profile:"M29,24.4c-0.6,0.2-1.2,0.3-1.8,0.5c-0.2,0-0.2,0.1-0.2,0.3c0,0.9,0.1,1.8,0,2.7c-0.1,0.8-0.7,1.4-1.6,1.4\n    c-0.8,0-1.4-0.7-1.5-1.5c0-0.4,0.1-0.9,0.1-1.3c0-4.5-3.3-8.5-7.8-9.3c-5.1-0.9-9.9,2.2-11.1,7.1C3.8,29.7,7.3,35,12.7,36\n    c0.9,0.2,1.8,0.2,2.7,0.1c0.8-0.1,1.5,0.3,1.7,1.1c0.2,0.8-0.1,1.5-0.9,1.8c-0.3,0.1-0.7,0.2-1,0.2c-0.8,0-1.5,0-2.4,0\n    c-0.2,0.6-0.3,1.3-0.5,1.9c0,0,0,0-0.1,0c-0.1,0-0.2-0.1-0.3-0.1c-0.9-0.3-1.9-0.5-2.8-0.8c0.2-0.6,0.3-1.2,0.5-1.8\n    c0.1-0.2,0-0.3-0.2-0.3c-0.4-0.2-0.8-0.4-1.2-0.6c-0.5-0.3-0.9-0.6-1.4-0.9c-0.5,0.5-0.9,1-1.4,1.4c-0.8-0.8-1.6-1.6-2.4-2.4\n    c0.5-0.5,1-0.9,1.4-1.4c-0.5-0.9-1-1.8-1.5-2.7c-0.1-0.1-0.2-0.1-0.3-0.1c-0.6,0.2-1.2,0.3-1.8,0.5c-0.1-0.5-0.2-0.9-0.4-1.4\n    C0.2,30,0,29.4-0.2,28.8c0,0,0,0,0-0.1c0.6-0.2,1.2-0.3,1.8-0.5c0.2,0,0.2-0.1,0.2-0.3c0-0.9,0-1.9,0-2.8c0-0.2,0-0.2-0.2-0.3\n    c-0.6-0.2-1.2-0.3-1.8-0.5c0,0,0,0,0-0.1c0-0.1,0.1-0.2,0.1-0.3c0.3-0.9,0.5-1.9,0.8-2.8c0.6,0.2,1.2,0.3,1.8,0.5\n    c0.2,0.1,0.3,0,0.3-0.2c0.5-0.8,1-1.6,1.4-2.5c0,0,0.1-0.1,0.1-0.2c-0.5-0.5-1-0.9-1.4-1.4c0.8-0.8,1.6-1.6,2.4-2.4\n    c0.5,0.5,0.9,1,1.3,1.4c0.9-0.5,1.8-1,2.7-1.5c0.1,0,0.1-0.2,0.1-0.3c-0.1-0.6-0.3-1.2-0.5-1.8c0.4-0.1,0.8-0.2,1.1-0.3\n    c0.7-0.2,1.4-0.4,2-0.6c0,0,0,0,0.1,0c0.2,0.6,0.3,1.2,0.5,1.8c0,0.2,0.1,0.2,0.3,0.2c0.9,0,1.9,0,2.8,0c0.2,0,0.2,0,0.3-0.2\n    c0.2-0.6,0.3-1.2,0.5-1.8c0,0,0,0,0.1,0c0.1,0,0.2,0.1,0.3,0.1c0.9,0.3,1.9,0.5,2.8,0.8c-0.2,0.6-0.3,1.2-0.5,1.8\n    c-0.1,0.2,0,0.3,0.2,0.3c0.6,0.3,1.2,0.6,1.7,0.9c0.3,0.2,0.6,0.4,0.9,0.6c0.5-0.5,1-1,1.4-1.4c0.8,0.8,1.6,1.6,2.4,2.4\n    c-0.5,0.5-1,0.9-1.4,1.4c0.5,0.9,1,1.8,1.5,2.7c0.1,0.1,0.2,0.1,0.3,0.1c0.6-0.2,1.2-0.3,1.8-0.5c0.1,0.4,0.2,0.8,0.3,1.1\n    C28.7,23,28.9,23.7,29,24.4C29,24.4,29,24.4,29,24.4z\n    M13.6,20.4c1.2-0.1,2.3-0.4,3.4,0c0.7,0.3,1.3,0.7,1.8,1.4c0.5,0.7,1.1,1.4,1.6,2.2c0.8,1.1,0.9,2.4,0.3,3.7\n    c-0.1,0.3-0.4,0.6-0.3,0.8c0,0.2,0.4,0.4,0.6,0.6c1.7,1.7,3.3,3.3,5,5c1.5,1.6,0.8,4.2-1.4,4.7c-1,0.2-1.9-0.1-2.7-0.8\n    c-1.6-1.6-3.1-3.1-4.7-4.7c-0.2-0.2-0.5-0.5-0.7-0.7c-0.1-0.2-0.3-0.2-0.5-0.1c-0.8,0.1-1.5,0.3-2.3,0.4c-1.3,0.1-2.4-0.3-3.2-1.3\n    c-0.6-0.8-1.3-1.6-1.8-2.5c-0.7-1-0.8-2.1-0.5-3.2c0.2-0.6,0.5-1.3,0.8-1.9C9,24,9.1,24,9.2,24.1c1,1.4,2.1,2.8,3.1,4.2\n    c0.4,0.5,0.6,0.6,1.2,0.4c0.5-0.2,1.1-0.3,1.6-0.5c0.4-0.1,0.7-0.3,0.9-0.7c0.3-0.5,0.7-1,1-1.5c0.3-0.4,0.3-0.7,0-1.1\n    c-1.1-1.4-2.1-2.9-3.2-4.3C13.7,20.6,13.7,20.6,13.6,20.4z",rru:"M18.4,44.2c-2.6,0-5.1,0-7.8,0c0.6-4.7,1.2-9.4,1.9-14c0.4-2.7,0.9-5.5,1.3-8.2c0.1-0.5-0.2-1.1-0.5-1.4\n    c-0.8-0.9-1-2-0.1-2.7c0.6-0.4,1.9-0.5,2.5-0.1c1,0.6,0.8,1.7,0.2,2.7c-0.4,0.6-0.6,1.5-0.5,2.2c1,7,2,13.9,3,20.9\n    C18.4,43.7,18.4,43.9,18.4,44.2z\n    M9.4,7.3c-8.5,4.5-9.5,13.8-5,19.6c1,1.2,2.3,2.3,3.6,3.2c0.9,0.6,1.3,1.2,0.5,2.1c-4.7-1.7-8.4-7-8.6-12.5\n    c-0.2-6,3.2-11.5,8.8-13.8C9,6.3,9.2,6.8,9.4,7.3z\n    M20.3,5.9c5,1.8,8.7,7.2,8.7,12.9c0,6-3.4,11.4-8.5,13.3c-0.5-0.9-0.4-1.5,0.6-2.1c8.5-5.5,8.3-16.8-0.3-22.1\n    c-0.5-0.3-0.8-1.1-1.1-1.6C19.9,6.2,20.1,6.1,20.3,5.9z\n    M9.4,28.9c-3.6-2-5.7-5-5.8-9.2C3.3,15,5.5,11.5,9.6,9.2c0.7,0.9,0.7,1.5-0.3,2.2c-5.5,4.2-5.5,11-0.2,15.4\n    c0.5,0.4,0.6,1.2,0.9,1.8C9.8,28.7,9.6,28.8,9.4,28.9z\n    M19.3,28.5c0.2-0.6,0.3-1.4,0.8-1.8c5.4-4.7,5.2-11.4-0.6-15.6c-0.1-0.1-0.3-0.2-0.5-0.4c0.1-0.5,0.3-1,0.4-1.6\n    c4,2.2,6.2,5.4,6.2,9.8c0.1,4.4-2,7.6-5.7,9.9C19.7,28.7,19.5,28.6,19.3,28.5z\n    M10.2,25.3c-4.6-3.3-4.4-10,0.9-12.4c-0.3,0.7-0.4,1.5-0.9,2.1c-2.1,2.5-2.1,5.4,0,8.1c0.4,0.5,0.4,1.3,0.6,2\n    C10.6,25.2,10.4,25.3,10.2,25.3z\n    M18.4,25c0.2-0.7,0.3-1.6,0.8-2.2c1.8-2.6,1.7-5.4-0.4-7.8c-0.8-1-0.8-1-0.2-2.3c4.6,2.9,4.8,9.1,0.4,12.4\n    C18.8,25.2,18.6,25.1,18.4,25z",rcu:"M0,35.7c0.1-0.4,0.3-0.8,0.7-0.9c0.2-0.1,0.5-0.2,0.8-0.2c2.9,0,5.8,0,8.7,0c0.1,0,0.2,0,0.4,0c0.2,0,0.2-0.1,0.2-0.2\n    c0-0.2,0-0.4,0-0.6c0.1-0.4,0.4-0.7,0.8-0.8c0.1,0,0.2,0,0.3,0c1.7,0,3.4,0,5.1,0c0.8,0,1.2,0.4,1.2,1.2c0,0.5,0,0.4,0.4,0.4\n    c2.9,0,5.8,0,8.7,0c0.9,0,1.5,0.2,1.8,1.1c0,0.2,0,0.3,0,0.5c-0.3,0.8-0.9,1.1-1.7,1.1c-2.9,0-5.8,0-8.6,0c-0.4,0-0.4,0-0.4,0.4\n    c0,0.1,0,0.1,0,0.2c0,0.6-0.4,1-1,1c-1.8,0-3.6,0-5.4,0c-0.4,0-0.7-0.1-0.8-0.5c-0.1-0.2-0.1-0.5-0.2-0.8c0-0.3,0-0.3-0.3-0.3\n    c-3,0-6,0-9,0c-0.4,0-0.7-0.1-1-0.3c-0.3-0.2-0.4-0.5-0.5-0.8C0,36,0,35.9,0,35.7z M14.5,35c-0.5,0-1,0-1.5,0c-0.1,0-0.2,0-0.2,0.2\n    c0,0.5,0,1,0,1.5c0,0.2,0,0.2,0.2,0.2c1,0,2,0,3,0c0.1,0,0.2,0,0.2-0.2c0-0.5,0-1,0-1.4c0-0.2-0.1-0.2-0.2-0.2\n    C15.5,35,15,35,14.5,35z\n    M14.5,31.4c-4,0-8.1,0-12.1,0c-0.5,0-0.9-0.1-1.2-0.5C1,30.7,1,30.4,0.9,30.2c0-0.1,0-0.2,0-0.3c0-5.7,0-11.5,0-17.2\n    c0-0.3,0.1-0.6,0.2-0.9c0.2-0.4,0.6-0.6,1-0.6c0.1,0,0.2,0,0.3,0c8.1,0,16.2,0,24.3,0c0.5,0,0.9,0.1,1.2,0.5\n    c0.1,0.2,0.2,0.4,0.3,0.7c0,0.1,0,0.2,0,0.3c0,5.8,0,11.6,0,17.3c0,0.3-0.1,0.7-0.3,1c-0.3,0.4-0.7,0.5-1.2,0.5c-2.7,0-5.4,0-8.2,0\n    C17.2,31.4,15.9,31.4,14.5,31.4z M4.4,20.6c6.8,0,13.5,0,20.3,0c0-0.1,0-0.2,0-0.2c0-1.6,0-3.3,0-4.9c0-0.2-0.1-0.3-0.3-0.3\n    c-6.6,0-13.1,0-19.7,0c-0.2,0-0.3,0.1-0.3,0.3c0,1.6,0,3.2,0,4.9C4.4,20.5,4.4,20.5,4.4,20.6z M4.4,27.3c6.8,0,13.5,0,20.2,0\n    c0-1.8,0-3.6,0-5.4c-6.8,0-13.5,0-20.2,0C4.4,23.7,4.4,25.5,4.4,27.3z\n    M23.3,16.6c0,0.1,0,0.2,0,0.2c0,0.7,0,1.5,0,2.2c0,0.2-0.1,0.3-0.3,0.3c-3.3,0-6.7,0-10,0c-2.3,0-4.7,0-7,0\n    c-0.2,0-0.3,0-0.3-0.3c0-0.7,0-1.5,0-2.2c0-0.1,0-0.2,0-0.2C11.6,16.6,17.4,16.6,23.3,16.6z M7.7,18.6c0-0.4,0-0.8,0-1.2\n    c0,0-0.1-0.1-0.1-0.1c-0.4,0-0.8,0-1.2,0c0,0.5,0,0.9,0,1.3C6.9,18.6,7.3,18.6,7.7,18.6z M8.4,17.3c0,0.5,0,0.9,0,1.3\n    c0.4,0,0.9,0,1.3,0c0-0.4,0-0.8,0-1.2c0,0-0.1-0.1-0.1-0.1C9.2,17.3,8.8,17.3,8.4,17.3z M10.4,18.6c0.5,0,0.9,0,1.3,0\n    c0-0.4,0-0.9,0-1.3c-0.4,0-0.8,0-1.2,0c0,0-0.1,0.1-0.1,0.1C10.4,17.8,10.4,18.2,10.4,18.6z\n    M14.5,23.2c2.8,0,5.7,0,8.5,0c0.3,0,0.3,0,0.3,0.3c0,0.7,0,1.4,0,2.1c0,0.2-0.1,0.3-0.3,0.3c-4.6,0-9.2,0-13.7,0\n    c-1.1,0-2.2,0-3.3,0c-0.2,0-0.3-0.1-0.3-0.3c0-0.7,0-1.5,0-2.2c0-0.2,0.1-0.3,0.3-0.3C8.8,23.2,11.7,23.2,14.5,23.2z M6.4,25.2\n    c0.4,0,0.8,0,1.2,0c0.1,0,0.1-0.1,0.1-0.1c0-0.3,0-0.7,0-1c0,0-0.1-0.1-0.1-0.1c-0.4,0-0.8,0-1.2,0C6.4,24.4,6.4,24.8,6.4,25.2z\n     M8.4,25.2c0.4,0,0.8,0,1.2,0c0,0,0.1-0.1,0.1-0.2c0-0.2,0-0.5,0-0.7c0-0.5,0.1-0.4-0.4-0.4c-0.3,0-0.6,0-0.9,0\n    C8.4,24.4,8.4,24.8,8.4,25.2z M11.7,23.9c-0.4,0-0.8,0-1.2,0c0,0-0.1,0.1-0.1,0.1c0,0.4,0,0.8,0,1.2c0.5,0,0.9,0,1.3,0\n    C11.7,24.8,11.7,24.4,11.7,23.9z",sgw:"M24.2,11.6c0.5,0.2,0.7,0.6,0.9,1.1c1.3,4.8,2.6,9.5,3.9,14.3c0,0.2,0.1,0.3,0.1,0.5c0,1.8,0,3.6,0,5.4\n    c0,0.9-0.4,1.4-1.4,1.4c-4.1,0-8.1,0-12.2,0c-0.1,0-0.2,0-0.4,0c0,1,0,1.9,0,2.9c0.1,0,0.2,0,0.4,0c3.1,0,6.1,0,9.2,0\n    c0.1,0,0.2,0,0.4,0c0.3,0,0.5,0.3,0.5,0.5c0,0.3-0.2,0.5-0.5,0.6c-0.1,0-0.2,0-0.3,0c-6.8,0-13.7,0-20.5,0c-0.5,0-0.8-0.2-0.8-0.6\n    c0-0.4,0.3-0.6,0.8-0.6c3.1,0,6.2,0,9.3,0c0.1,0,0.2,0,0.4,0c0-1,0-1.9,0-2.9c-0.1,0-0.2,0-0.4,0c-4,0-8.1,0-12.1,0\n    c-0.7,0-1.2-0.2-1.5-0.9c0-2.1,0-4.2,0-6.2c0.1-0.2,0.1-0.3,0.2-0.5C1.4,22,2.7,17.4,4,12.7c0.1-0.5,0.4-0.9,0.9-1.1\n    C11.3,11.6,17.7,11.6,24.2,11.6z M23.9,12.8c-6.2,0-12.5,0-18.7,0C4,17.3,2.7,21.7,1.5,26.1c8.7,0,17.3,0,26,0\n    C26.3,21.7,25.1,17.2,23.9,12.8z M1.2,27.3c0,2,0,3.9,0,5.8c8.9,0,17.8,0,26.7,0c0-1.9,0-3.9,0-5.8C19,27.3,10.1,27.3,1.2,27.3z\n    M12.7,21.1c0.1,0.4,0.2,0.7,0.3,0.8c0.3,0.3,0.8,0.5,1.5,0.5c0.4,0,0.8,0,1-0.1c0.5-0.2,0.7-0.5,0.7-1\n      c0-0.3-0.1-0.5-0.4-0.6c-0.2-0.1-0.6-0.3-1.1-0.4l-0.9-0.2c-0.9-0.2-1.5-0.4-1.8-0.6c-0.6-0.4-0.8-1-0.8-1.8\n      c0-0.7,0.3-1.4,0.8-1.8c0.5-0.5,1.3-0.7,2.4-0.7c0.9,0,1.6,0.2,2.3,0.7c0.6,0.5,0.9,1.1,1,2H16c0-0.5-0.3-0.8-0.7-1.1\n      c-0.3-0.1-0.6-0.2-1-0.2c-0.5,0-0.8,0.1-1.1,0.3c-0.3,0.2-0.4,0.4-0.4,0.8c0,0.3,0.1,0.5,0.4,0.7c0.2,0.1,0.5,0.2,1.1,0.3l1.4,0.3\n      c0.6,0.1,1.1,0.3,1.4,0.6c0.5,0.4,0.7,1,0.7,1.7c0,0.8-0.3,1.4-0.9,1.9c-0.6,0.5-1.4,0.7-2.5,0.7c-1.1,0-1.9-0.2-2.6-0.7\n      c-0.6-0.5-0.9-1.2-0.9-2H12.7z",pgw:"M24.2,11.6c0.5,0.2,0.7,0.6,0.9,1.1c1.3,4.8,2.6,9.5,3.9,14.3c0,0.2,0.1,0.3,0.1,0.5c0,1.8,0,3.6,0,5.4\n    c0,0.9-0.4,1.4-1.4,1.4c-4.1,0-8.1,0-12.2,0c-0.1,0-0.2,0-0.4,0c0,1,0,1.9,0,2.9c0.1,0,0.2,0,0.4,0c3.1,0,6.1,0,9.2,0\n    c0.1,0,0.2,0,0.4,0c0.3,0,0.5,0.3,0.5,0.5c0,0.3-0.2,0.5-0.5,0.6c-0.1,0-0.2,0-0.3,0c-6.8,0-13.7,0-20.5,0c-0.5,0-0.8-0.2-0.8-0.6\n    c0-0.4,0.3-0.6,0.8-0.6c3.1,0,6.2,0,9.3,0c0.1,0,0.2,0,0.4,0c0-1,0-1.9,0-2.9c-0.1,0-0.2,0-0.4,0c-4,0-8.1,0-12.1,0\n    c-0.7,0-1.2-0.2-1.5-0.9c0-2.1,0-4.2,0-6.2c0.1-0.2,0.1-0.3,0.2-0.5C1.4,22,2.7,17.4,4,12.7c0.1-0.5,0.4-0.9,0.9-1.1\n    C11.3,11.6,17.7,11.6,24.2,11.6z M23.9,12.8c-6.2,0-12.5,0-18.7,0C4,17.3,2.7,21.7,1.5,26.1c8.7,0,17.3,0,26,0\n    C26.3,21.7,25.1,17.2,23.9,12.8z M1.2,27.3c0,2,0,3.9,0,5.8c8.9,0,17.8,0,26.7,0c0-1.9,0-3.9,0-5.8C19,27.3,10.1,27.3,1.2,27.3zM17,20.1c-0.5,0.4-1.2,0.6-2.2,0.6H13v3.1h-1.8v-8.7H15c0.9,0,1.5,0.2,2.1,0.7c0.5,0.4,0.8,1.1,0.8,2.1\n      C17.8,18.9,17.6,19.6,17,20.1z M15.7,16.9c-0.2-0.2-0.6-0.3-1-0.3H13v2.6h1.6c0.4,0,0.7-0.1,1-0.3c0.2-0.2,0.3-0.5,0.3-1\n      C16,17.4,15.9,17.1,15.7,16.9z",mme:"M7.9,37.9C8.5,37,9,36.1,9.5,35.2c0.6,0.2,1.2,0.5,1.8,0.6c6.4,1.9,13-2,14.4-8.6c1.3-6.2-2.9-12.4-9.2-13.4\n    c-3.7-0.6-6.9,0.4-9.7,2.8c-0.1,0.1-0.1,0.1-0.2,0.2c0,0,0,0.1-0.1,0.1c0.8,0.8,1.6,1.6,2.5,2.5C5.9,20,3,20.5,0,21.1\n    c0.5-3,1.1-5.9,1.6-8.9c0.8,0.8,1.6,1.7,2.5,2.5c1.2-1.1,2.4-2,3.8-2.6c5.3-2.4,10.5-2.2,15.3,1.3c3.5,2.5,5.4,6,5.8,10.4\n    c0.6,6.8-3.6,13.1-10.2,15.1C15.2,40,11.6,39.7,8.2,38C8.1,38,8,37.9,7.9,37.9z\n    M21.8,27.9c-3.1,0-6.1,0-9.2,0c0-3.3,0-6.6,0-10c0.9,0,1.9,0,2.8,0c0,2.4,0,4.7,0,7.1c2.1,0,4.2,0,6.4,0\n    C21.8,26,21.8,26.9,21.8,27.9z\n    M3.5,34.4c0.9-0.6,1.7-1.2,2.6-1.8c0.5,0.5,1.1,1,1.6,1.5c-0.5,0.9-1,1.8-1.6,2.7C5.1,36.1,4.3,35.3,3.5,34.4z\n    M0.8,29.7c1.1-0.3,2.1-0.5,3.1-0.8c0.3,0.7,0.6,1.3,1,2c-0.8,0.6-1.7,1.2-2.6,1.9C1.7,31.7,1.2,30.7,0.8,29.7z\n    M3.2,24.7c0.1,0.7,0.1,1.4,0.2,2.1c-1,0.3-2,0.5-3.1,0.8c-0.1-1-0.2-1.9-0.2-2.9C1.1,24.7,2.2,24.7,3.2,24.7z"})}(),function(){angular.module("xos.mcord-slicing").service("FormHandler",["LabelFormatter","XosFormHelpers",function(e,t){var c=this,n=this,r=d3.transition().duration(500);this.drawForm=function(e,t,o){var i=t.append("line").attr({"class":"form-line",id:"form-line-"+e.type+"-"+e.id,x1:e.x+10,y1:e.y,x2:e.x+10,y2:e.y+40,opacity:0});i.transition(r).attr({opacity:1});var a=o.append("div").attr({"class":"element-form",id:"form-"+e.type+"-"+e.id}).style({opacity:0}),s=a.append("form");c.addFormfields(e,s);var l=s.append("div").attr({"class":"row"});l.append("div").attr({"class":"col-xs-6"}).append("a").attr({"class":"btn btn-danger","data-parent-node-type":e.type,"data-parent-node-id":e.id}).text("Close").on("click",function(){n.removeForm(d3.select(this).attr("data-parent-node-type"),d3.select(this).attr("data-parent-node-id"),t,o)}),l.append("div").attr({"class":"col-xs-6"}).append("button").attr({type:"button","class":"btn btn-success"}).text("Save").on("click",function(){$("#form-"+e.type+"-"+e.id+" input").each(function(){var e=$(this),t=e.val(),c=e.attr("name");console.log(c,t)})}),a.transition(r).style({opacity:1,top:e.y+95+"px",left:e.x+"px"})},this.removeForm=function(e,t,n,r){c.removeFormByParentNode({type:e,id:t},n,r)},this.removeFormByParentNode=function(e,t,c){c.selectAll("#form-"+e.type+"-"+e.id).transition(r).style({opacity:0}).remove(),t.selectAll("#form-line-"+e.type+"-"+e.id).transition(r).attr({opacity:0}).remove()},this.getFieldValue=function(e,t){return"date"===t&&(e=new Date(e),e=e.getFullYear()+"-"+("0"+e.getMonth()+1).slice(-2)+"-"+("0"+e.getDate()).slice(-2)),e||""},this.addFormField=function(n,r,o){var i=t._getFieldFormat(r);o.append("div").attr({"class":"row"}).append("div").attr({"class":"col-xs-12"}).append("label").text(n?e.format(n):"test").append("input").attr({type:i,name:n,value:c.getFieldValue(r,i),"class":"form-control"})},this.addFormfields=function(e,t){if(c.addFormField("name",e.name,t),!e.model)return c.addFormField(null,null,t);var n=Object.keys(e.model);_.forEach(n,function(n){c.addFormField(n,e.model[n],t)})}}])}(),angular.module("xos.mcord-slicing").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosMcordTopology.js b/xos/core/xoslib/static/js/xosMcordTopology.js
deleted file mode 100644
index b6f7bcf..0000000
--- a/xos/core/xoslib/static/js/xosMcordTopology.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.mcordTopology",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(t){t.state("topology",{url:"/",template:"<m-cord-topology></m-cord-topology>"})}]).config(["$httpProvider",function(t){t.interceptors.push("NoHyperlinks")}]).factory("_",["$window",function(t){return t._}]).service("Traffic",["$http","$q",function(t,n){this.get=function(){var e=n.defer();return t.get("videoLocal.txt").then(function(t){e.resolve(t.data)})["catch"](function(t){console.log(t),e.resolve(10*Math.random())}),e.promise}}]).directive("mCordTopology",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",template:"",controller:["$element","$interval","$rootScope","_","$http","TopologyElements","NodeDrawer","Traffic",function(t,n,e,r,a,i,o,c){var s=t[0],u=[],l=[],d=0,p=1,f=5,h=function(t){return r.filter(t,function(t){return t.name.indexOf("bbu")>=0})},m=function(t){return i.fakedInstance},y=function(){d3.select("svg").style("width",s.clientWidth+"px").style("height",s.clientHeight+"px"),u=i.nodes,l=i.links,c.get().then(function(t){if(d)if(t===d)p=p;else{var n=t-d;n>0?p+=n/f:p-=-1*n/f}else p=2;return.2>p&&(p=.2),d=t,a.get("/api/core/xos/instances")}).then(function(t){b(h(t.data)),w(m(t.data)),V(g,u,l)})["catch"](function(t){throw new Error(t)})},v=d3.layout.force(),g=d3.select(s).append("svg").style("width",s.clientWidth+"px").style("height",s.clientHeight+"px"),x=(g.append("g").attr({"class":"link-container"}),g.append("g").attr({"class":"node-container"}),function(t,n){return t.map(function(t){console.log(r.find);var e=r.findIndex(n,{id:t.source}),a=r.findIndex(n,{id:t.target});return{source:e,target:a,value:1,id:"link-"+e+"-"+a,type:t.source.indexOf("fabric")>=0?"big":"small"}})}),H=function(t){return r.map(t,function(t){return"fabric"!==t.type?t:(t.x=t.x*Z,t.y=t.y*M,t)})},b=function(t){var n=s.clientWidth/2/(t.length+1),e=t.map(function(t,e){return{type:"bbu",name:t.name,id:"bbu-"+t.id,fixed:!0,y:3*M,x:n*(e+1)}}),r=e.map(function(t){return{source:t.id,target:"fabric4"}});t.forEach(function(t,a){e.push({type:"rru",name:"rru",id:"rru-"+t.id,fixed:!0,y:4*M,x:n*(a+1)}),r.push({source:"rru-"+t.id,target:"bbu-"+t.id})}),u=u.concat(e),l=l.concat(r)},w=function(t){var n=s.clientWidth/2/(t.length+1),e=t.map(function(t,e){return{type:t.name.substring(0,3),name:t.name,id:t.name.substring(0,3)+"-"+t.id,fixed:!0,y:3*M,x:s.clientWidth/2+n*(e+1)}}),r=e.map(function(t){return{source:t.id,target:"fabric4"}});u=u.concat(e),l=l.concat(r)},Z=void 0,M=void 0;Z=s.clientWidth/3,M=s.clientHeight/5;var V=function(t,n,e){Z=s.clientWidth/3,M=s.clientHeight/5,e=x(e,n),n=H(n),console.log(n),v.nodes(n).links(e).size([s.clientWidth,s.clientHeight]).charge(-20).chargeDistance(200).linkDistance(80).linkStrength(.1).start();var r=d3.select(".link-container"),a=d3.select(".node-container");o.drawFabricBox(a,Z,M);var i=r.selectAll(".link").data(e,function(t){return t.id});i.enter().append("line").attr({"class":function(t){return"link "+t.type},"stroke-width":p,id:function(t){return t.id},opacity:0}).transition().duration(1e3).attr({opacity:1}),i.transition().duration(1e3).attr({"stroke-width":p,opacity:1}),i.exit().remove();var c=a.selectAll(".node").data(n,function(t){return t.id}),u=c.enter().append("g",function(t){return t.interfaceCfgIdentifier}).attr({"class":function(t){return t.type+" node"},transform:function(t){return"translate("+t.x+", "+t.y+")"}});o.drawBbus(u.filter(".bbu")),o.drawRrus(u.filter(".rru")),o.drawFabric(u.filter(".fabric")),o.drawOthers(u.filter(function(t){return console.log(t.type),"MME"===t.type||"SGW"===t.type||"PGW"===t.type||"Vid"===t.type}));var l=c.exit();o.removeElements(l),v.on("tick",function(){i.attr("x1",function(t){return t.source.x}).attr("y1",function(t){return t.source.y}).attr("x2",function(t){return t.target.x}).attr("y2",function(t){return t.target.y}),c.attr("transform",function(t){return"translate("+t.x+","+t.y+")"})})};y()}]}}),angular.module("xos.mcordTopology").run(["$templateCache",function(t){t.put("templates/users-list.tpl.html",'<div class="row">\n  <div class="col-xs-12">\n    <h1>Users List</h1>\n    <p>This is only an example view.</p>\n  </div>\n</div>\n<div class="row">\n  <div class="col-xs-4">Email</div>\n  <div class="col-xs-4">First Name</div>\n  <div class="col-xs-4">Last Name</div>\n</div>  \n<div class="row" ng-repeat="user in vm.users">\n  <div class="col-xs-4">{{user.email}}</div>\n  <div class="col-xs-4">{{user.firstname}}</div>\n  <div class="col-xs-4">{{user.lastname}}</div>\n</div>  ')}]),angular.module("xos.mcordTopology").constant("TopologyElements",{nodes:[{id:"fabric4",type:"fabric",name:"fabric4",fixed:!0,x:1.5,y:1.5}],links:[],fakedInstance:[{humanReadableName:"MME",name:"MME"},{humanReadableName:"PGW",name:"PGW"},{humanReadableName:"SGW",name:"SGW"},{humanReadableName:"Video Server",name:"Video Server"}],icons:{bbu:"M11.08,4.66H24.76l6.81,6.82H4.23Z M4.24,18.34V13.21H31.6v5.13H4.24Zm25.64-1.72V14.94H28.19v1.69h1.68Zm-13.65-1.7v1.69h1.69V14.93H16.22Zm-3.42,0v1.69h1.68V14.93H12.8Zm-3.42,0v1.69h1.68V14.93H9.38ZM6,14.93v1.69H7.64V14.93H6Z M32.8,33.23H3V11.42l0,0c1.17-1.16,2.54-2.5,3.87-3.8S9.59,5,10.72,3.87l0,0H25.08l0,0C26.25,5,27.6,6.32,28.9,7.61s2.68,2.63,3.83,3.78l0,0v0.06ZM3.3,33H32.53l0-21.43C31.36,10.39,30,9.07,28.71,7.8S26.09,5.22,25,4.1H10.86C9.75,5.21,8.41,6.52,7.12,7.77s-2.67,2.61-3.83,3.76V33Z M4.24,25.18V20.05H31.6v5.13H4.24Zm24-1.73h1.68V21.78H28.19v1.67Zm-12,0H17.9V21.78H16.21v1.68Zm-1.73-1.68H12.81v1.67h1.68V21.78Zm-3.43,1.68V21.78H9.38v1.69h1.68ZM6,23.46H7.64V21.78H6v1.68Z M31.6,26.89V32H4.24V26.89H31.6Zm-3.4,1.72V30.3h1.68V28.61H28.19Zm-10.28,0H16.22V30.3h1.68V28.62Zm-3.43,1.69V28.62H12.8v1.69h1.68Zm-3.42,0V28.62H9.38v1.69h1.68ZM7.65,28.62H6v1.67H7.65V28.62Z","switch":"M10,20a10,10,0,0,1,10-10h70a10,10,0,0,1,10,10v70a10,10,\n            0,0,1-10,10h-70a10,10,0,0,1-10-10zM60,26l12,0,0-8,18,13-18,13,0\n            -8-12,0zM60,60l12,0,0-8,18,13-18,13,0-8-12,0zM50,40l-12,0,0-8\n            -18,13,18,13,0-8,12,0zM50,74l-12,0,0-8-18,13,18,13,0-8,12,0z",rru:"M18.11,11a2.25,2.25,0,0,1,2.13,1.53A2.2,2.2,0,0,1,19.52,15a0.74,0.74,0,0,0-.3.61A7.49,7.49,0,0,0,20,19.35c2,4.55,3.94,9.13,5.89,13.7a1.14,1.14,0,0,1-.59,1.64A1.11,1.11,0,0,1,23.86,34q-0.53-1.2-1-2.41a0.38,0.38,0,0,0-.41-0.28H13.78a0.36,0.36,0,0,0-.39.26q-0.51,1.24-1.06,2.47a1.11,1.11,0,0,1-1.14.67,1.07,1.07,0,0,1-1-.89,1.47,1.47,0,0,1,.1-0.75q2.84-6.66,5.7-13.32a4.06,4.06,0,0,1,.18-0.42A6.39,6.39,0,0,0,17,15.53,0.58,0.58,0,0,0,16.74,15,2.21,2.21,0,0,1,16,12.5,2.26,2.26,0,0,1,18.11,11ZM21.74,29.1c-0.32-.74-0.61-1.43-0.92-2.12a0.35,0.35,0,0,0-.27-0.14H15.66a0.33,0.33,0,0,0-.26.11c-0.32.7-.62,1.41-0.93,2.15h7.26Zm-5.31-4.55h3.37L18.1,20.63Z M2.23,13.56A16,16,0,0,1,6.76,2.16a1.68,1.68,0,0,1,.8-0.46,1.06,1.06,0,0,1,1.18.59,1.16,1.16,0,0,1-.23,1.37A14.48,14.48,0,0,0,6.19,6.77a13.57,13.57,0,0,0,1.9,15.59l0.46,0.49a1.16,1.16,0,1,1-1.68,1.59,15.6,15.6,0,0,1-4.41-8.64C2.32,14.95,2.28,14.07,2.23,13.56Z M34,13.84a15.51,15.51,0,0,1-4.54,10.52,1.19,1.19,0,0,1-1.65.18,1.17,1.17,0,0,1,0-1.77,13.81,13.81,0,0,0,2.79-4.1,13.6,13.6,0,0,0-2.7-14.91A1.8,1.8,0,0,1,27.41,3,1.08,1.08,0,0,1,28,1.8,1.15,1.15,0,0,1,29.38,2a15.59,15.59,0,0,1,2.51,3.28A16.47,16.47,0,0,1,34,13.84Z M10.93,21.6A1.33,1.33,0,0,1,9.87,21a11.06,11.06,0,0,1-2.8-5.27A11.22,11.22,0,0,1,9.8,5.51l0.27-.28a1.16,1.16,0,1,1,1.64,1.63,8.62,8.62,0,0,0-2.06,3.22A8.87,8.87,0,0,0,11.18,19c0.18,0.23.4,0.44,0.59,0.66A1.13,1.13,0,0,1,11.95,21,1.08,1.08,0,0,1,10.93,21.6Z M29.47,13.57a11.11,11.11,0,0,1-3.27,7.64,1.18,1.18,0,0,1-1.51.21,1.13,1.13,0,0,1-.43-1.4,2.06,2.06,0,0,1,.39-0.54,8.85,8.85,0,0,0,2.49-5.89A9,9,0,0,0,24.64,7a1.85,1.85,0,0,1-.44-0.85A1,1,0,0,1,24.82,5a1.07,1.07,0,0,1,1.3.21,20.11,20.11,0,0,1,1.79,2.31A11.09,11.09,0,0,1,29.47,13.57Z M11.3,13.18a6.73,6.73,0,0,1,2-4.73,1.15,1.15,0,0,1,1.45-.2,1.12,1.12,0,0,1,.49,1.32,1.58,1.58,0,0,1-.33.53,4.49,4.49,0,0,0,0,6.26,1.16,1.16,0,1,1-1.7,1.57A6.81,6.81,0,0,1,11.3,13.18Z M24.94,13.14A6.9,6.9,0,0,1,23,18a1.16,1.16,0,1,1-1.7-1.58,4.5,4.5,0,0,0,0-6.29A1.16,1.16,0,1,1,23,8.5,6.75,6.75,0,0,1,24.94,13.14Z"}}),angular.module("xos.mcordTopology").service("NodeDrawer",["TopologyElements",function(t){var n=500,e=!1;this.drawFabricBox=function(t,n,r){if(!e){var a=t.append("g").attr({transform:"translate("+(n-25)+", "+(r-25)+")"});a.append("rect").attr({width:n+50,height:r+50,"class":"fabric-container"}),e=!0}},this.drawBbus=function(e){e.append("rect").attr({"class":function(t){return t.type},width:30,height:30,x:-15,y:-15,opacity:0}).transition().duration(n).attr({r:15,opacity:1}),e.append("path").attr({"class":function(t){return t.type+" antenna"},opacity:0,d:function(){return t.icons.bbu},transform:"translate(-18, -18)"}).transition().duration(n).attr({opacity:1}),e.append("text").attr({"text-anchor":"start",y:25,x:5,opacity:0}).text(function(t){return"vBBU "+t.name.substr(t.name.length-1,1)}).transition().duration(2*n).attr({opacity:1})},this.drawRrus=function(e){e.append("circle").attr({"class":function(t){return t.type+"-shadow"},r:0,opacity:0}).transition().duration(2*n).attr({r:40,opacity:1}),e.append("path").attr({"class":function(t){return t.type+" antenna"},opacity:0,d:function(){return t.icons.rru},transform:"translate(-18, -18)"}).transition().duration(n).attr({opacity:1})},this.drawFabric=function(e){e.append("rect").attr({width:30,height:30,x:-15,y:-15}),e.append("path").attr({"class":function(t){return t.type},opacity:0,d:function(){return t.icons["switch"]},transform:"translate(-22, -22), scale(0.4)"}).transition().duration(n).attr({opacity:1})},this.drawOthers=function(e){e.append("rect").attr({"class":function(t){return t.type},width:30,height:30,x:-15,y:-15,opacity:0}).transition().duration(n).attr({r:15,opacity:1}),e.append("path").attr({"class":function(t){return t.type+" antenna"},opacity:0,d:function(){return t.icons.bbu},transform:"translate(-18, -18)"}).transition().duration(n).attr({opacity:1}),e.append("text").attr({"text-anchor":"start",y:25,x:-12,opacity:0}).text(function(t){return t.name.toUpperCase()}).transition().duration(2*n).attr({opacity:1})},this.removeElements=function(t){t.transition().duration(n).attr({opacity:0}).remove()}}]),angular.module("xos.mcordTopology").run(["$location",function(t){t.path("/")}]);
diff --git a/xos/core/xoslib/static/js/xosOpenVPNDashboard.js b/xos/core/xoslib/static/js/xosOpenVPNDashboard.js
deleted file mode 100644
index 0639110..0000000
--- a/xos/core/xoslib/static/js/xosOpenVPNDashboard.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.openVPNDashboard",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(n){n.state("openVPNList",{url:"/",template:"<vpn-list></vpn-list>"})}]).config(["$compileProvider",function(n){n.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|file|blob):/)}]).service("Vpn",["$http","$q",function(n,t){this.getOpenVpnTenants=function(){var e=t.defer();return n.get("/api/tenant/openvpn/list/").then(function(n){e.resolve(n.data)})["catch"](function(n){e.reject(n)}),e.promise}}]).config(["$httpProvider",function(n){n.interceptors.push("NoHyperlinks")}]).directive("vpnList",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/openvpn-list.tpl.html",controller:["Vpn",function(n){var t=this;n.getOpenVpnTenants().then(function(n){t.vpns=n;for(var e=0;e<t.vpns.length;e++){var i=new Blob([t.vpns[e].script_text],{type:"text/plain"});t.vpns[e].script_text=(window.URL||window.webkitURL).createObjectURL(i)}})["catch"](function(n){throw new Error(n)})}]}}),angular.module("xos.openVPNDashboard").run(["$templateCache",function(n){n.put("templates/openvpn-list.tpl.html",'<div style="display: table;">\n  <div class="vpn-row">\n    <h1 class="vpn-cell">VPN List</h1>\n  </div>\n  <div class="vpn-row">\n    <div class="vpn-cell vpn-header">ID</div>\n    <div class="vpn-cell vpn-header">VPN Network</div>\n    <div class="vpn-cell vpn-header">VPN Subnet</div>\n    <div class="vpn-cell vpn-header">Script Link</div>\n  </div>\n  <div class="vpn-row" ng-repeat="vpn in vm.vpns">\n    <div class="vpn-cell">{{ vpn.id }}</div>\n    <div class="vpn-cell">{{ vpn.server_network }}</div>\n    <div class="vpn-cell">{{ vpn.vpn_subnet }}</div>\n    <div class="vpn-cell">\n      <a download="connect-{{ vpn.id }}.vpn" ng-href="{{ vpn.script_text }}">Script</a>\n    </div>\n  </div>\n</div>\n'),n.put("templates/users-list.tpl.html",'<xos-table config="vm.tableConfig" data="vm.users"></xos-table>')}]),angular.module("xos.openVPNDashboard").run(["$location",function(n){n.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosServiceGrid.js b/xos/core/xoslib/static/js/xosServiceGrid.js
deleted file mode 100644
index 1837fcb..0000000
--- a/xos/core/xoslib/static/js/xosServiceGrid.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.serviceGrid",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(e){e.state("serviceGrid",{url:"/",template:"<service-grid></service-grid>"}).state("serviceGraph",{url:"/graph",template:"<service-graph></service-graph>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).directive("serviceGrid",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/service-grid.tpl.html",controller:["Services","ToscaEncoder","_",function(e,t,n){var r=this;this.tableConfig={columns:[{label:"Status",prop:"status",type:"icon",formatter:function(e){var t=parseInt(e.backend_status.match(/^[0-9]/)[0]);switch(t){case 0:return"time";case 1:return"ok";case 2:return"remove"}}},{label:"Name",prop:"name",link:function(e){return""+e.view_url.replace(/\$[a-z]+\$/,e.id)}},{label:"Kind",prop:"kind"},{label:"Enabled",prop:"enabled",type:"boolean"}],filter:"field",order:{field:"name"},actions:[{label:"export",icon:"export",cb:function(e){r.tosca="",t.serviceToTosca(e).then(function(e){r.showFeedback=!0,r.tosca=e})}}]},e.query().$promise.then(function(e){r.services=n.map(e,function(e){return e.status=0!==parseInt(e.backend_status.match(/^[0-9]/)[0]),e})})["catch"](function(e){throw new Error(e)})}]}}),function(){angular.module("xos.serviceGrid").service("ToscaEncoder",["$q","_","ArchiveManager","ServiceEncoder","SlicesEncoder",function(e,t,n,r,o){var i=this,a={tosca_definitions_version:"tosca_simple_yaml_1_0",description:"",imports:["custom_types/xos.yaml"],topology_template:{node_templates:{}}};this.toYml=function(e){return jsyaml.dump(e).replace(/'/g,"")},this["export"]=function(e){n.download(e.name);var t=i.toYml(a);return t},this.serviceToTosca=function(t){n.createArchive(),a.topology_template.node_templates={},a.description="Just enough Tosca to get the "+t.humanReadableName+" service up and running";var s=e.defer();return r.formatServiceProperties(t,a).then(function(e){return o.getServiceSlices(t,e)}).then(function(e){return r.getServiceRequirements(t,e)}).then(function(e){n.addFile(t.name+"_service.yaml",i.toYml(e)),i["export"](t),s.resolve(i.toYml(e))})["catch"](function(e){s.reject(e)}),s.promise}}])}(),angular.module("xos.serviceGrid").run(["$templateCache",function(e){e.put("templates/service-graph.tpl.html",'<div class="row">\n  <div class="col-sm-10">\n    <h1>Graph</h1>\n  </div>\n  <div class="col-sm-2">\n    <!-- <a href="/admin/core/service/add" class="btn btn-success btn-block">\n      <i class="glyphicon glyphicon-plus"></i>\n      Add Service\n    </a> -->\n    <a href="#/" class="btn btn-default btn-block">\n      Service List\n    </a>\n  </div>\n</div>\n<xos-side-panel config="vm.panelConfig" show="vm.panelShow">\n  <h1>\n    {{vm.selectedNode.name}}\n    <small>\n      <i class="glyphicon glyphicon-{{vm.selectedNode.icon}}"></i>\n    </small>\n  </h1>\n  <table class="table">\n    <tr>\n      <td>Kind:</td>\n      <td>{{vm.selectedNode.kind}}</td>\n    </tr>\n    <tr>\n      <td>Enabled:</td>\n      <td>{{vm.selectedNode.enabled}}</td>\n    </tr>\n    <tr>\n      <td>Status:</td>\n      <td>{{vm.selectedNode.backend_status}}</td>\n    </tr>\n  </table>\n  <a ng-click="vm.exportToTosca(vm.selectedNode)" class="btn btn-primary">\n    Export to TOSCA\n    <i class="glyphicon glyphicon-export"></i>\n  </a>\n</xos-side-panel>'),e.put("templates/service-grid.tpl.html",'<div class="row">\n  <div class="col-md-10 table-responsive">\n    <xos-table config="vm.tableConfig" data="vm.services"></xos-table>\n  </div>\n  <div class="col-md-2">\n    <!-- <a href="/admin/core/service/add" class="btn btn-success btn-block">\n      <i class="glyphicon glyphicon-plus"></i>\n      Add Service\n    </a> -->\n    <a href="#/graph" class="btn btn-default btn-block">\n      Tenancy Graph\n    </a>\n  </div>\n</div>\n\n<div class="row">\n  <div class="col-xs-12">\n    <div class="alert alert-info" ng-show="vm.showFeedback">\n      Remember that you should copy any key artifact inside the container in <pre>/opt/xos/tosca</pre>!\n    </div>\n  </div>\n</div>\n\n<pre ng-show="vm.tosca">\n{{vm.tosca}}\n</pre>'),e.put("templates/users-list.tpl.html",'<xos-table config="vm.tableConfig" data="vm.users"></xos-table>')}]);var _slicedToArray=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(c){o=!0,i=c}finally{try{!r&&s["return"]&&s["return"]()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){angular.module("xos.serviceGrid").service("SlicesEncoder",["$q","_","Slices","SiteEncoder","ImageEncoder","NetworkEncoder",function(e,t,n,r,o,i){var a=this;this.buildTosca=function(n,a,s){var c={},l=e.defer();return n=t.reduce(n,function(e,t){if(e[t.name]={type:"tosca.nodes.Slice",properties:{network:t.network},requirements:[{management:{node:"management",relationship:"tosca.relationships.ConnectsToNetwork"}}]},angular.isDefined(s)){var n={};n[s+"_service"]={node:"service#"+s,relationship:"tosca.relationships.MemberOfService"},e[t.name].requirements.push(n)}return angular.isDefined(t.description)&&(e[t.name].description=t.description),angular.isDefined(t.site)&&(c[t.name+"#site"]=r.buildTosca(t.site,a)),angular.isDefined(t.default_image)&&(c[t.name+"#image"]=o.buildTosca(t.default_image,a)),angular.isDefined(t.networks)&&t.networks.length>0&&(c[t.name+"#management"]=i.getSliceNetworks(t,a)),e},{}),Object.keys(c).length>0?!function(){var t={site:"tosca.relationships.MemberOfSite",image:"tosca.relationships.DefaultImage"};a.topology_template.node_templates.management={type:"tosca.nodes.network.Network.XOS",properties:{"no-create":!0,"no-delete":!0,"no-update":!0}},e.all(c).then(function(e){var r=!0,o=!1,i=void 0;try{for(var s,c=Object.keys(e)[Symbol.iterator]();!(r=(s=c.next()).done);r=!0){var u=s.value,d=u.split("#"),p=_slicedToArray(d,2),v=p[0],m=p[1];if(angular.isDefined(t[m])){n[v].requirements||(n[v].requirements=[]);var f=_slicedToArray(e[u],2),h=f[0],g=f[1],y={},b=void 0;b="site"===m?g.name:m+"#"+g.name,y[m]={node:b,relationship:t[m]},n[v].requirements.push(y),angular.extend(a,h)}}}catch(_){o=!0,i=_}finally{try{!r&&c["return"]&&c["return"]()}finally{if(o)throw i}}angular.extend(a.topology_template.node_templates,n),l.resolve(a)})["catch"](function(e){throw new Error(e)})}():(angular.extend(a.topology_template.node_templates,n),l.resolve(a)),l.promise},this.getServiceSlices=function(t,r){var o=e.defer();return n.query({service:t.id}).$promise.then(function(e){return a.buildTosca(e,r,t.name)}).then(function(e){o.resolve(e)}),o.promise}}])}(),function(){angular.module("xos.serviceGrid").service("SiteEncoder",["$q","Sites",function(e,t){this.buildTosca=function(n,r){var o=e.defer();return t.get({id:n}).$promise.then(function(e){var t={};t[""+e.name]={type:"tosca.nodes.Site"},angular.extend(r.topology_template.node_templates,t),o.resolve([r,e])})["catch"](o.reject),o.promise}}])}(),function(){angular.module("xos.uiComponents").directive("xosSidePanel",function(){return{restrict:"E",scope:{config:"=",show:"="},template:'\n        <div class="xos-side-panel-content {{vm.classes.join(\' \')}}">\n          <div class="row">\n            <div class="col-xs-12">\n              <button type="button" class="close" ng-click="vm.dismiss()">\n                <span aria-hidden="true">&times;</span>\n              </button>\n            </div>\n          </div>\n          <div class="row">\n            <div class="col-xs-12" ng-transclude></div>\n          </div>\n        </div>\n      ',transclude:!0,bindToController:!0,controllerAs:"vm",controller:["$scope","$timeout","_",function(e,t,n){var r=this;console.log(this.show),this.classes=[],this.classes.push(this.config.position),this.dismiss=function(){r.show=!1,r.classes=r.toggleClass(r.classes),t(function(){return n.remove(r.classes,function(e){return"out"===e})},500)},this.toggleClass=function(e){return e.indexOf("in")>-1?(n.remove(r.classes,function(e){return"in"===e}),r.classes.push("out"),e):(n.remove(r.classes,function(e){return"out"===e}),r.classes.push("in"),e)},e.$watch(function(){return r.show},function(e){angular.isDefined(e)&&e&&e===!0&&(r.classes=r.toggleClass(r.classes))})}]}})}(),function(){angular.module("xos.serviceGrid").service("ServiceEncoder",["$q","ArchiveManager","Tenants","Services",function(e,t,n,r){var o={fabric:"tosca.nodes.FabricService",onos:"tosca.nodes.ONOSService",vCPE:"tosca.nodes.VSGService",vOLT:"tosca.nodes.VOLTService",vROUTER:"tosca.nodes.VRouterService",VTN:"tosca.nodes.VTNService",vTR:"tosca.nodes.Service"};this.formatServiceProperties=function(n,r){var i=e.defer(),a="service#"+n.name;r.topology_template.node_templates[a]={},r.topology_template.node_templates[a].type=o[n.kind]||"tosca.nodes.Service";var s={properties:{kind:n.kind}};return angular.isDefined(n.view_url)&&(s.properties.view_url=n.view_url),angular.isDefined(n.icon_url)&&(s.properties.icon_url=n.icon_url),angular.isDefined(n.private_key_fn)&&(s.properties.private_key_fn=n.private_key_fn),angular.isDefined(n.public_key)&&(t.addFile(n.name+"_rsa.pub",n.public_key),s.properties.public_key="{ get_artifact: [ SELF, pubkey, LOCAL_FILE] }",s.artifacts={pubkey:"/opt/xos/tosca/"+n.name+"/"+n.name+"_rsa.pub"},r.topology_template.node_templates[a].artifacts=s.artifacts),r.topology_template.node_templates[a].properties=s.properties,i.resolve(r),i.promise},this.getServiceRequirements=function(t,o){var i=e.defer();return n.query({subscriber_service:t.id}).$promise.then(function(t){var n=[];return t=_.uniqBy(t,"provider_service"),_.forEach(t,function(e){n.push(r.get({id:e.provider_service}).$promise)}),e.all(n)}).then(function(e){var n=_.reduce(e,function(e,t){return e.concat(t.name)},[]);if(n=_.reduce(n,function(e,t){var n=t+"_tenant",r={};return r[n]={node:"service#"+t,relationship:"tosca.relationships.TenantOfService"},e.concat(r)},[]),n.length>0){_.forEach(n,function(e){var t=e[Object.keys(e)[0]].node;o.topology_template.node_templates[t]={type:"tosca.nodes.Service",properties:{"no-create":!0,"no-delete":!0,"no-update":!0}}});var r="service#"+t.name;o.topology_template.node_templates[r].requirements=n}i.resolve(o)}),i.promise}}])}();var _slicedToArray=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(c){o=!0,i=c}finally{try{!r&&s["return"]&&s["return"]()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){angular.module("xos.serviceGrid").service("Graph",["$q","Tenants","Services","Subscribers",function(e,t,n,r){var o=new graphlib.Graph,i=!1,a=function(){var i=e.defer();return e.all([t.query().$promise,n.query().$promise,r.query().$promise]).then(function(e){var t=_slicedToArray(e,3),n=t[0],r=t[1];t[2];r.forEach(function(e){return o.setNode(e.id,angular.extend(e,{type:"service"}))}),n.filter(function(e){return e.subscriber_service&&e.provider_service}).forEach(function(e){return o.setEdge(e.subscriber_service,e.provider_service,e,e.name)}),i.resolve(o)}),i.promise};this.getGraph=function(){var t=e.defer();return i?t.resolve(o):a().then(function(e){i=!0,t.resolve(e)})["catch"](console.log),{$promise:t.promise}}}]).directive("serviceGraph",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/service-graph.tpl.html",controller:["$scope","$element","GraphService","Graph","ToscaEncoder",function(e,t,n,r,o){var i=void 0,a=t[0],s=void 0,c=void 0,l=void 0,u=void 0,d=this;this.panelConfig={position:"right"};var p=function(e,t){return t.x>e.x?e.x+(t.x-e.x)/2:t.x+(e.x-t.x)/2},v=function(e,t){return t.y>e.y?Math.round(e.y+(t.y-e.y)/2):Math.round(t.y+(e.y-t.y)/2)},m=function(){s.attr("cx",function(e){return e.x}).attr("cy",function(e){return e.y}).attr({transform:function(e){return"translate("+e.x+", "+e.y+")"}}),i.selectAll(".link").attr("x1",function(e){return e.source.x}).attr("y1",function(e){return e.source.y}).attr("x2",function(e){return _(e)[0]}).attr("y2",function(e){return _(e)[1]}),i.selectAll(".link-text").attr("x",function(e){return p(e.source,{x:_(e)[0],y:_(e)[1]})}).attr("y",function(e){return v(e.source,{x:_(e)[0],y:_(e)[1]})}).attr("transform",function(e){var t=p(e.source,{x:_(e)[0],y:_(e)[1]}),n=v(e.source,{x:_(e)[0],y:_(e)[1]});return"rotate(-30, "+t+", "+n+")"})},f=1,h=1,g=function(e,t,n){var r=t.node(e),o=a.clientWidth/(n+1);if(t.nodeEdges(e).length>0){var i={y:a.clientHeight/4,x:o*f,fixed:!0};angular.extend(r,i),f+=1}else{var i={y:a.clientHeight/2+a.clientHeight/4,x:(o+o/2)*h,fixed:!0};angular.extend(r,i),h+=1}return r};r.getGraph().$promise.then(function(t){u=t.edges().map(function(e){return{source:t.node(e.v),target:t.node(e.w),tenant:t.edge(e)}});var n=graphlib.alg.components(t).reduce(function(e,t){return e.length>t.length?e:t}).length;c=t.nodes().reverse().map(function(e){return g(e,t,n)}),y(a),b();var r=d3.layout.force().nodes(c).links(u).charge(-1060).gravity(.1).linkDistance(200).size([a.clientWidth,a.clientHeight]).on("tick",m).start();l=i.selectAll(".link-container").data(u).enter().insert("g").attr("class","link-container"),l.insert("line").attr("class","link").attr("marker-end","url(#arrow)");i.selectAll(".link-container").data(r.links()).insert("text").attr({"class":"link-text","text-anchor":"start"}).text(function(e){return""+e.tenant.humanReadableName});s=i.selectAll(".node").data(c).enter().append("g").call(r.drag).on("mousedown",function(t){e.$apply(function(){if("XOS"!==t.name){d.panelShow=!0;var e=parseInt(t.backend_status.match(/^[0-9]/)[0]);switch(console.log(e),e){case 0:t.icon="time";break;case 1:t.icon="ok";break;case 2:t.icon="remove"}d.selectedNode=t}}),d3.event.stopPropagation()}),s.append("circle").attr({"class":function(e){return"node "+(e.type||"")},r:10}),s.append("text").attr({"text-anchor":"middle","alignment-baseline":"middle"}).text(function(e){return e.humanReadableName||e.name}),s.select("circle").attr({r:function(e){var t=d3.select(this).node().parentNode,n=d3.select(t).select("text").node().getBBox(),r=n.width/2+10;return e.nodeWidth=2*r,r}})});var y=function(e){d3.select(e).select("svg").remove(),i=d3.select(e).append("svg").style("width",e.clientWidth+"px").style("height",e.clientHeight+"px")},b=function(){i.append("svg:defs").selectAll("marker").data(["arrow"]).enter().append("svg:marker").attr("id",String).attr("viewBox","0 -5 10 10").attr("refX",10).attr("refY",0).attr("markerWidth",6).attr("markerHeight",6).attr("orient","auto").attr("class","link-arrow").append("svg:path").attr("d","M0,-5L10,0L0,5")},_=function(e){var t=e.target.nodeWidth/2,n=e.target.x-e.source.x,r=e.target.y-e.source.y,o=Math.atan2(r,n),i=e.target.x-Math.cos(o)*t,a=e.target.y-Math.sin(o)*t;return[i,a]};this.exportToTosca=function(e){o.serviceToTosca(e)}}]}})}();var _slicedToArray=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(c){o=!0,i=c}finally{try{!r&&s["return"]&&s["return"]()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){angular.module("xos.serviceGrid").service("NetworkEncoder",["$q","Networks","NetworkTemplateEncoder",function(e,t,n){var r=this;this.buildTosca=function(t,r){var o=angular.copy(t),i={},a=e.defer();try{t=_.reduce(t,function(e,t){return e["network#"+t.name]={type:"tosca.nodes.network.Network.XOS",requirements:[]},angular.isDefined(t.slices)&&(_.forEach(t.slices,function(n){var r={owner:{node:n.name,relationship:"tosca.relationships.MemberOfSlice"}},o={connection:{node:n.name,relationship:"tosca.relationships.ConnectsToSlice"}};e["network#"+t.name].requirements.push(r,o)}),angular.isDefined(t.template)&&(i[t.name]=n.buildTosca(t.template,r))),e},{}),Object.keys(i).length>0?e.all(i).then(function(e){if(e){var n=!0,i=!1,s=void 0;try{for(var c,l=Object.keys(e)[Symbol.iterator]();!(n=(c=l.next()).done);n=!0){var u=c.value,d=_slicedToArray(e[u],2),p=d[0],v=d[1];t["network#"+u].requirements.push({network_template:{node:"network_template#"+v.name,relationship:"tosca.relationships.UsesNetworkTemplate"}}),angular.extend(r,p)}}catch(m){i=!0,s=m}finally{try{!n&&l["return"]&&l["return"]()}finally{if(i)throw s}}}angular.extend(r.topology_template.node_templates,t),a.resolve([r,o])})["catch"](function(e){throw new Error(e)}):(angular.extend(r.topology_template.node_templates,t),a.resolve([r,o]))}catch(s){a.reject(s)}return a.promise},this.getSliceNetworks=function(n,o){var i=e.defer();return t.query({owner:n.id}).$promise.then(function(e){e=_.filter(e,function(e){return n.networks.indexOf(e.id)!==-1}),e=e.map(function(e){var t=e.slices.indexOf(n.id);return e.slices[t]=n,e}),r.buildTosca(e,o).then(i.resolve)["catch"](i.reject)}),i.promise}}])}(),function(){angular.module("xos.serviceGrid").service("NetworkTemplateEncoder",["$q","Networkstemplates",function(e,t){this.buildTosca=function(n,r){var o=e.defer();return t.get({id:n}).$promise.then(function(e){var t={};t["network_template#"+e.name]={type:"tosca.nodes.NetworkTemplate"},angular.extend(r.topology_template.node_templates,t),o.resolve([r,e])})["catch"](function(e){o.reject(e)}),o.promise}}])}(),function(){angular.module("xos.serviceGrid").service("ImageEncoder",["$q","Images",function(e,t){this.buildTosca=function(n,r){var o=e.defer();return t.get({id:n}).$promise.then(function(e){var t={};t["image#"+e.name]={type:"tosca.nodes.Image"},angular.extend(r.topology_template.node_templates,t),o.resolve([r,e])})["catch"](o.reject),o.promise}}])}(),function(){angular.module("xos.serviceGrid").service("ArchiveManager",function(){var e=this;this.createArchive=function(){e.archive=new JSZip},this.addFile=function(t,n){e.archive.file(t,n)},this.download=function(t){console.log(e.archive),e.archive.generateAsync({type:"blob"}).then(function(e){saveAs(e,t+".zip")})["catch"](function(e){console.log(e)})}})}(),angular.module("xos.serviceGrid").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosSubscribers.js b/xos/core/xoslib/static/js/xosSubscribers.js
deleted file mode 100644
index e0ebf7f..0000000
--- a/xos/core/xoslib/static/js/xosSubscribers.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.subscribers",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(s){s.state("user-list",{url:"/",template:"<subscribers-list></subscribers-list>"})}]).config(["$httpProvider",function(s){s.interceptors.push("NoHyperlinks")}]).directive("subscribersList",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/subscribers-list.tpl.html",controller:function(){this.smartTableConfig={resource:"Subscribers"},this.model={label:{name:"aaa"},empty:{}},this.config={exclude:["password","last_login"],formName:"sampleForm",actions:[{label:"Save",icon:"ok",cb:function(s){console.log(s)},"class":"success"}]}}}}),angular.module("xos.subscribers").run(["$templateCache",function(s){s.put("templates/subscribers-list.tpl.html",'<!-- <xos-form ng-model="vm.model" config="vm.config"></xos-form> -->\n<xos-smart-table config="vm.smartTableConfig"></xos-smart-table>')}]),angular.module("xos.subscribers").run(["$location",function(s){s.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosSynchronizerNotifier.js b/xos/core/xoslib/static/js/xosSynchronizerNotifier.js
deleted file mode 100644
index af91efc..0000000
--- a/xos/core/xoslib/static/js/xosSynchronizerNotifier.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.synchronizerNotifier",["ngResource","ngCookies","xos.helpers"]).service("Diag",["$rootScope","$http","$q","$interval",function(n,t,s,e){var a=this,i=!1;this.getDiags=function(){var n=s.defer();return t.get("/api/core/diags").then(function(t){n.resolve(t.data)})["catch"](function(t){n.reject(t)}),n.promise},this.sendEvents=function(t){t.forEach(function(t){var s=JSON.parse(t.backend_register);s.last_run=new Date(1e3*s.last_run),s.last_duration=1e3*s.last_duration,s.last_synchronizer_start=new Date(1e3*s.last_synchronizer_start),s.last_syncrecord_start=s.last_syncrecord_start?new Date(1e3*s.last_syncrecord_start):null,n.$broadcast("diag",{name:t.name,updated:t.updated,info:s,status:a.getSyncStatus(s)})})},this.start=function(){return i=!0,a.getDiags().then(function(n){a.sendEvents(n)}),i},this.stop=function(){return i=!1},this.getSyncStatus=function(n){var t=new Date,s=9e5;return!(t-n.last_synchronizer_start>s&&t-n.last_syncrecord_start>s&&t-n.last_run>s)},e(function(){i&&a.getDiags().then(function(n){a.sendEvents(n)})},3e5)}]).directive("syncStatus",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/sync-status.tpl.html",controller:["$log","$rootScope","Diag","xosNotification","XosUserPrefs",function(n,t,s,e,a){var i=this;s.start(),this.synchronizers={},this.showNoSync=!0,t.$on("diag",function(n,t){i.synchronizers[t.name]=t,t.status?a.setSynchronizerNotificationStatus(t.name,!1):(a.getSynchronizerNotificationStatus(t.name)||e.notify("CORD Synchronizer",{icon:"/static/cord-logo.png",body:"The "+t.name+" synchronizer has not performed actions in the last 15 minutes."}),a.setSynchronizerNotificationStatus(t.name,!0)),i.showNoSync=!1,0===Object.keys(i.synchronizers).length&&(i.showNoSync=!0)})}]}}),angular.element(document).ready(function(){angular.bootstrap("#xosSynchronizerNotifier",["xos.synchronizerNotifier"])}),angular.module("xos.synchronizerNotifier").run(["$templateCache",function(n){n.put("templates/sync-status.tpl.html",'<div class="sync-status-container">\n  <div class="btn btn-default" ng-click="vm.showNotificationPanel = !vm.showNotificationPanel">\n    <i class="glyphicon glyphicon-inbox"></i>\n  </div>\n  <div class="notification-panel panel panel-default" ng-show="vm.showNotificationPanel">\n    <ul class="list-group" ng-show="!vm.showNoSync">\n      <li class="list-group-item" ng-repeat="(syncName, syncStatus) in vm.synchronizers">\n        <span class="badge" ng-class="{success: syncStatus.status, warning: !syncStatus.status}">\n          <span ng-show="syncStatus.status"><i class="glyphicon glyphicon-ok"></i></span>\n          <span ng-hide="syncStatus.status"><i class="glyphicon glyphicon-time"></i></span>\n        </span>\n        <b>{{syncName}}</b>\n        <br/>\n        <small><i>{{syncStatus.info.last_run | date:\'mediumTime\'}}</i></small>\n      </li>\n    </ul>\n    <div class="alert alert-info" ng-show="vm.showNoSync">\n      No syncronizers are running.\n    </div>\n  </div>\n</div>\n')}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosTenant.js b/xos/core/xoslib/static/js/xosTenant.js
deleted file mode 100644
index 604f0d1..0000000
--- a/xos/core/xoslib/static/js/xosTenant.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.tenant",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(e){e.state("site-list",{url:"/",template:"<site-list></site-list>"}).state("site",{url:"/site/:id",template:"<site-detail></site-detail>"}).state("createslice",{url:"/site/:site/slice/:id?",template:"<create-slice></create-slice>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).directive("siteList",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/users-list.tpl.html",controller:["Sites","SlicesPlus",function(e,t){var i=this;this.tableConfig={columns:[{label:"Site",prop:"name",link:function(e){return"#/site/"+e.id}},{label:"Allocated",prop:"instance_total"},{label:"Ready",prop:"instance_total_ready"}]},e.query().$promise.then(function(e){return i.sites=e,t.query().$promise}).then(function(e){i.slices=e,i.site_list=i.returnData(i.sites,i.slices)})["catch"](function(e){throw new Error(e)}),this.returnData=function(e,t){var i,s=0,l=[];for(i=0;i<e.length;i++){var n=0,a=0;for(s=0;s<t.length;s++)null!=e[i].id&&null!=t[s].site&&e[i].id===t[s].site&&(n+=t[s].instance_total,a+=t[s].instance_total_ready);var o={id:e[i].id,name:e[i].name,instance_total:n,instance_total_ready:a};l.push(o)}return l}}]}}),angular.module("xos.tenant").run(["$templateCache",function(e){e.put("templates/createslice.html",'<!--<xos-table config="cs.tableConfig" data="cs.sites"></xos-table>-->\n<h2>Slice Details</h2>\n<hr></hr>\n<xos-form ng-model="cs.model" config="cs.config" ></xos-form>\n\n<!--<pre>-->\n<!--&lt;!&ndash;{{cs.users | json}}&ndash;&gt;-->\n\n<!--{{cs.users.name | json}}-->\n\n<!--</pre>-->'),e.put("templates/slicelist.html",'<!--<span ng-bind="siteNameSe"></span>-->\n<!--<xos-field></xos-field>-->\n<a class="addlink btn btn-info" ui-sref="createslice({site: sl.siteId})"><i class="glyphicon glyphicon-plus-sign"></i> Create Slice</a>\n<xos-table config="sl.tableConfig" data="sl.sliceList"></xos-table>\n<!--<div ui-view="sliceDetails"></div>-->\n<!--<pre>{{sl.users[0].site}}</pre>-->\n'),e.put("templates/users-list.tpl.html",'<xos-table config="vm.tableConfig" data="vm.site_list"></xos-table>')}]),angular.module("xos.tenant").directive("siteDetail",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"sl",templateUrl:"templates/slicelist.html",controller:["SlicesPlus","$stateParams",function(e,t){var i=this;this.siteId=t.id,this.tableConfig={columns:[{label:"Slice List",prop:"name",link:function(e){return"#/site/"+e.site+"/slice/"+e.id}},{label:"Allocated",prop:"instance_total"},{label:"Ready",prop:"instance_total_ready"}]},e.query({site:t.id}).$promise.then(function(e){i.sliceList=e})["catch"](function(e){throw new Error(e)})}]}}),angular.module("xos.tenant").directive("createSlice",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"cs",templateUrl:"templates/createslice.html",controller:["Slices","SlicesPlus","Sites","Images","$stateParams","$http","$state","$q","XosUserPrefs","_",function(e,t,i,s,l,n,a,o,r,c){var d=this;this.config={exclude:["site","password","last_login","mount_data_sets","default_flavor","creator","exposed_ports","networks","omf_friendly","omf_friendly","no_sync","no_policy","lazy_blocked","write_protect","deleted","backend_status","backend_register","policed","enacted","updated","created","validators","humanReadableName"],formName:"SliceDetails",feedback:{show:!1,message:"Form submitted successfully !!!",type:"success"},actions:[{label:"Save",icon:"ok",cb:function(e,t){f(e,t).then(function(){a.go("site",{id:d.model.site})})},"class":"success"},{label:"Save and continue editing",icon:"ok",cb:function(e,t){f(e,t)},"class":"primary"},{label:"Save and add another",icon:"ok",cb:function(e,t){f(e,t).then(function(){a.go("createslice",{site:d.model.site,id:""})})},"class":"primary"}],fields:{site:{label:"Site",type:"select",validators:{required:!0},hint:"The Site this Slice belongs to",options:[]},name:{label:"Name",type:"string",hint:"The Name of the Slice",validators:{required:!0,custom:function(e){if(d.model.site){var t=c.find(d.config.fields.site.options,["id",d.model.site]);if(t&&e)return 0===e.toLowerCase().indexOf(t.label.toLowerCase())}return!1}}},serviceClass:{label:"ServiceClass",type:"select",validators:{required:!0},hint:"The Site this Slice belongs to",options:[{id:1,label:"Best effort"}]},enabled:{label:"Enabled",type:"boolean",hint:"Status for this Slice"},description:{label:"Description",type:"string",hint:"High level description of the slice and expected activities",validators:{required:!1,minlength:10}},service:{label:"Service",type:"select",validators:{required:!1},options:[{id:0,label:"--------"}]},slice_url:{label:"Slice url",type:"string",validators:{required:!1,minlength:10}},max_instances:{label:"Max Instances",type:"number",validators:{required:!1,min:0}},default_isolation:{label:"Default Isolation",type:"select",validators:{required:!1},options:[{id:"vm",label:"Virtual Machine"},{id:"container",label:"Container"},{id:"container_vm",label:"Container in VM"}]},default_image:{label:"Default image",type:"select",validators:{required:!1},options:[]},network:{label:"Network",type:"select",validators:{required:!1},options:[{id:"default",label:"Default"},{id:"host",label:"Host"},{id:"bridged",label:"Bridged"},{id:"noauto",label:"No Automatic Networks"}]}}};var u;s.query().$promise.then(function(e){d.users=e,u=d.users,d.optionValImg=d.setData(u,{field1:"id",field2:"name"}),d.config.fields.default_image.options=d.optionValImg})["catch"](function(e){throw new Error(e)}),this.setData=function(e,t){var i,s=[];for(i=0;i<e.length;i++){var l={id:e[i][t.field1],label:e[i][t.field2]};s.push(l)}return s},l.id?(delete this.config.fields.site,this.config.exclude.push("site"),e.get({id:l.id}).$promise.then(function(e){d.users=e,u=e,d.model=u})["catch"](function(e){throw new Error(e)})):(this.model={},r.getUserDetailsCookie().$promise.then(function(e){d.model.creator=e.current_user_id})["catch"](function(e){throw new Error(e)}),i.query().$promise.then(function(e){d.users_site=e,d.optionVal=d.setData(d.users_site,{field1:"id",field2:"name"}),d.config.fields.site.options=d.optionVal})["catch"](function(e){throw new Error(e)}));var f=function(t,i){var s=o.defer();if(delete t.networks,i.$valid){if(t.id)var l=e.update(t).$promise;else var l=e.save(t).$promise;l.then(function(e){d.model=e,d.config.feedback.show=!0,s.resolve(e)})["catch"](function(e){d.config.feedback.show=!0,d.config.feedback.type="danger",e.data&&e.data.detail?d.config.feedback.message=e.data.detail:d.config.feedback.message=e.statusText,s.reject(e)})}return s.promise}}]}}),angular.module("xos.tenant").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosTruckroll.js b/xos/core/xoslib/static/js/xosTruckroll.js
deleted file mode 100644
index 438aaa3..0000000
--- a/xos/core/xoslib/static/js/xosTruckroll.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.truckroll",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(l){l.state("user-list",{url:"/",template:"<truckroll></truckroll>"})}]).config(["$httpProvider",function(l){l.interceptors.push("NoHyperlinks")}]).directive("truckroll",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/truckroll.tpl.html",controller:["$timeout","$log","Subscribers","Truckroll",function(l,n,t,s){var r=this;t.query().$promise.then(function(l){r.subscribers=l}),this.loader=!1,this.runTest=function(){delete r.truckroll.id,delete r.truckroll.result,delete r.truckroll.is_synced,delete r.truckroll.result_code,delete r.truckroll.backend_status;var l=new s(r.truckroll);r.loader=!0,l.$save().then(function(l){r.waitForTest(l.id)})},this.waitForTest=function(n){s.get({id:n}).$promise.then(function(t){t.backend_status.indexOf("2")>=0||t.result_code&&t.result_code.indexOf("2")>=0||t.is_synced?(r.truckroll=angular.copy(t),r.loader=!1,s["delete"]({id:n})):l(function(){r.waitForTest(n)},2e3)})}}]}}),angular.module("xos.truckroll").run(["$templateCache",function(l){l.put("templates/truckroll.tpl.html",'<div class="row">\n  <div class="col-xs-12">\n    <h2>Virtual Truck Roll</h2>\n    <p>Use this page to run test against your subscriber</p>\n  </div>\n</div>\n<form ng-submit="vm.runTest()">\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Target:</label>\n    </div>\n    <div class="col-xs-12">\n      <select class="form-control" ng-model="vm.truckroll.target_id" ng-options="s.id as s.humanReadableName for s in vm.subscribers"></select>\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Scope:</label>\n    </div>\n    <div class="col-xs-6">\n      <a \n      ng-click="vm.truckroll.scope = \'container\'"\n      ng-class="{\'btn-default\': vm.truckroll.scope !== \'container\', \'btn-primary\': vm.truckroll.scope === \'container\'}"\n      class="btn btn-block"\n      >\n        Container\n      </a>\n    </div>\n    <div class="col-xs-6">\n      <a \n      ng-click="vm.truckroll.scope = \'vm\'"\n      ng-class="{\'btn-default\': vm.truckroll.scope !== \'vm\', \'btn-primary\': vm.truckroll.scope === \'vm\'}"\n      class="btn btn-block"\n      >\n        VM\n      </a>\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Test:</label>\n    </div>\n    <div class="col-xs-4">\n      <a \n      ng-click="vm.truckroll.test = \'ping\'"\n      ng-class="{\'btn-default\': vm.truckroll.test !== \'ping\', \'btn-primary\': vm.truckroll.test === \'ping\'}"\n      class="btn btn-block">Ping</a>\n    </div>\n    <div class="col-xs-4">\n      <a \n      ng-click="vm.truckroll.test = \'traceroute\'"\n      ng-class="{\'btn-default\': vm.truckroll.test !== \'traceroute\', \'btn-primary\': vm.truckroll.test === \'traceroute\'}"\n      class="btn btn-block">Traceroute</a>\n    </div>\n    <div class="col-xs-4">\n      <a \n      ng-click="vm.truckroll.test = \'tcpdump\'"\n      ng-class="{\'btn-default\': vm.truckroll.test !== \'tcpdump\', \'btn-primary\': vm.truckroll.test === \'tcpdump\'}"\n      class="btn btn-block">Tcp Dump</a>\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12">\n      <label>Argument:</label>\n    </div>\n    <div class="col-xs-12">\n      <input type="text" class="form-control" ng-model="vm.truckroll.argument" required />\n    </div>\n  </div>\n  <div class="row">\n    <div class="col-xs-12" ng-show="!vm.loader">\n      <button class="btn btn-success btn-block">Run test</button>\n    </div>\n  </div>\n</form>\n<div class="row">\n    <div class="col-xs-12 animate-vertical" ng-show="vm.loader">\n      <div class="loader"></div>\n    </div>\n  </div>\n  <div class="row" ng-hide="!vm.truckroll.result_code">\n    <div class="col-xs-12">\n      <label>Result Code</label>\n    </div>\n    <div class="col-xs-12">\n      <pre>{{vm.truckroll.result_code}}</pre>\n    </div>\n  </div>\n  <div class="row" ng-hide="!vm.truckroll.result">\n    <div class="col-xs-12">\n      <label>\n        Result:\n      </label>\n    </div>\n    <div class="col-xs-12">\n      <pre>{{vm.truckroll.result}}</pre>\n    </div>\n  </div>\n  <div class="row" ng-hide="!vm.truckroll.backend_status">\n    <div class="col-xs-12">\n      <label>Backend Status</label>\n    </div>\n    <div class="col-xs-12">\n      <pre>{{vm.truckroll.backend_status}}</pre>\n    </div>\n  </div>'),l.put("templates/users-list.tpl.html",'<xos-table config="vm.tableConfig" data="vm.users"></xos-table>')}]),angular.module("xos.truckroll").run(["$location",function(l){l.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosUITutorial.js b/xos/core/xoslib/static/js/xosUITutorial.js
deleted file mode 100644
index 1bdd23c..0000000
--- a/xos/core/xoslib/static/js/xosUITutorial.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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";angular.module("xos.UITutorial",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(e){e.state("shell",{url:"/",template:"<js-shell></js-shell>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).directive("jsShell",["TemplateHandler",function(e){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/js-shell.tpl.html",controller:["ExploreCmd",function(r){var t=this,o=new Josh.History({key:"jsshell.history"});this.shell=Josh.Shell({history:o}),this.shell.onNewPrompt(function(e){e("[ngXosLib] $ ")}),this.shell.setCommandHandler("explore",{exec:function(o,s,n){r.setup(t.shell),n(e.instructions({title:"You can now explore the API use angular $resouces!",messages:["Use <code>resource list</code> to list all the available resources and <code>resource {resoureName} {method} {?paramters}</code> to call the API.","An example command is <code>resource Slices query</code>","You can also provide paramters with <code>resource Slices query {max_instances: 10}</code>"]}))}}),this.shell.activate()}]}}]),angular.module("xos.UITutorial").run(["$templateCache",function(e){e.put("templates/js-shell.tpl.html",'<div id="shell-panel">\n  <div>\n    Type <code>help</code> or hit <code>TAB</code> for a list of commands.\n  </div>\n  <div id="shell-view"></div>\n</div>')}]),function(){angular.module("xos.UITutorial").service("TemplateHandler",["_",function(e){this.error=e.template('<span class="error">[ERROR] <%= msg %></span>'),this.instructions=e.template("\n      <div>\n        <strong><%= title %></strong>\n        <% _.forEach(messages, function(m) { %><p><%= m %></p><% }); %>\n      </div>\n    "),this.resourcesResponse=e.template('\n      <div>\n        <p>Corresponding js code: <code><%= jsCode %></code></p>\n        <div class="json"><%= res %></div>\n      </div>\n    '),this.jsonObject=e.template('<div class="jsonObject"><%= JSON.stringify(obj) %><%=comma%></code></div>'),this.jsonCollection=e.template('<div class="jsonCollection">[<% _.forEach(collection, function(item) { %><%= item %><%}); %>]</div>')}])}(),function(){angular.module("xos.UITutorial").service("ResponseHandler",["TemplateHandler",function(e){var r=this,t=["deleted","enabled","enacted","exposed_ports","lazy_blocked","created","validators","controllers","backend_status","backend_register","policed","no_policy","write_protect","no_sync","updated"];this.parseObject=function(r){var o=arguments.length<=1||void 0===arguments[1]?"":arguments[1];return r=_.omit(r,t),e.jsonObject({obj:r,comma:o})},this.parseCollection=function(t){return t=t.map(function(e,o){return""+r.parseObject(e,o===t.length-1?"":",")}),e.jsonCollection({collection:t})},this.parse=function(t,o,s){t=_.isArray(t)?r.parseCollection(t):r.parseObject(t),s(e.resourcesResponse({jsCode:o,res:t}))}}])}(),function(){angular.module("xos.UITutorial").service("ExploreCmd",["$injector","ResponseHandler","ErrorHandler",function($injector,ResponseHandler,ErrorHandler){var _this=this;this.resourceExec=function(e,r,t){switch(r[0]){case"list":return _this.listAvailableResources(t);default:var o=r.shift(),s=r.shift();return _this.consumeResource(o,s,r,t)}},this.resourceCompletion=function(e,r,t,o){var s=["list"].concat(_this.getAvailableResources());if(t.text.match(/resource\s[A-Z][a-z]+\s/)){s.indexOf(r)!==-1&&(r="");var n=["query","get","save","$save","delete"];return o(_this.shell.bestMatch(r,n))}return o(_this.shell.bestMatch(r,s))},this.setup=function(e){_this.shell=e,e.setCommandHandler("resource",{exec:_this.resourceExec,completion:_this.resourceCompletion})},this.getAvailableResources=function(){return angular.module("xos.helpers")._invokeQueue.filter(function(e){if("service"!==e[1])return!1;var r=e[2][1];return r.indexOf("$resource")!==-1}).reduce(function(e,r){return e.concat([r[2][0]])},[])},this.listAvailableResources=function(e){var r=_this.getAvailableResources().reduce(function(e,r){return""+e+r+"<br/>"},"");e(r)},this.consumeResource=function(resourceName,method,args,done){if(_this.getAvailableResources().indexOf(resourceName)===-1)return ErrorHandler.print('Resource "'+resourceName+'" does not exists',done);if(["query","get","save","$save","delete"].indexOf(method)===-1)return ErrorHandler.print('Method "'+method+'" not allowed',done);var params={};if(["get","$save","delete"].indexOf(method)!==-1&&0===args.length)return ErrorHandler.print('Method "'+method+'" require parameters',done);if(args.length>0&&(params=eval("("+args[0]+")")),"query"===method&&angular.isDefined(params.id))return ErrorHandler.print('Is not possible to use "id" as filter in method "'+method+'", use "get" instead!',done);var Resource=void 0;try{Resource=$injector.get(resourceName),Resource[method](params).$promise.then(function(e){var r=resourceName+"."+method+"("+(Object.keys(params).length>0?JSON.stringify(params):"")+")";return ResponseHandler.parse(e,r,done)})["catch"](function(e){if(404===e.status)return ErrorHandler.print(resourceName+' with method "'+method+'" and parameters '+JSON.stringify(params)+" "+e.data.detail,done)})}catch(e){return console.error(e),ErrorHandler.print('Failed to inject resource "'+resourceName+'"',done)}}}])}(),function(){angular.module("xos.UITutorial").service("ErrorHandler",["TemplateHandler",function(e){this.print=function(r,t){t(e.error({msg:r}))}}])}(),angular.module("xos.UITutorial").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/vendor/jquery-1.11.3.js b/xos/core/xoslib/static/vendor/jquery-1.11.3.js
deleted file mode 100644
index 18cbf56..0000000
--- a/xos/core/xoslib/static/vendor/jquery-1.11.3.js
+++ /dev/null
@@ -1,10369 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-/*!
- * jQuery JavaScript Library v1.11.3
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2015-04-28T16:19Z
- */
-
-(function( global, factory ) {
-
-	if ( typeof module === "object" && typeof module.exports === "object" ) {
-		// For CommonJS and CommonJS-like environments where a proper window is present,
-		// execute the factory and get jQuery
-		// For environments that do not inherently posses a window with a document
-		// (such as Node.js), expose a jQuery-making factory as module.exports
-		// This accentuates the need for the creation of a real window
-		// e.g. var jQuery = require("jquery")(window);
-		// See ticket #14549 for more info
-		module.exports = global.document ?
-			factory( global, true ) :
-			function( w ) {
-				if ( !w.document ) {
-					throw new Error( "jQuery requires a window with a document" );
-				}
-				return factory( w );
-			};
-	} else {
-		factory( global );
-	}
-
-// Pass this if window is not defined yet
-}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// 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+
-//
-
-var deletedIds = [];
-
-var slice = deletedIds.slice;
-
-var concat = deletedIds.concat;
-
-var push = deletedIds.push;
-
-var indexOf = deletedIds.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var support = {};
-
-
-
-var
-	version = "1.11.3",
-
-	// Define a local copy of jQuery
-	jQuery = function( selector, context ) {
-		// The jQuery object is actually just the init constructor 'enhanced'
-		// Need init if jQuery is called (just allow error to be thrown if not included)
-		return new jQuery.fn.init( selector, context );
-	},
-
-	// Support: Android<4.1, IE<9
-	// Make sure we trim BOM and NBSP
-	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
-	// 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();
-	};
-
-jQuery.fn = jQuery.prototype = {
-	// The current version of jQuery being used
-	jquery: version,
-
-	constructor: jQuery,
-
-	// Start with an empty selector
-	selector: "",
-
-	// The default length of a jQuery object is 0
-	length: 0,
-
-	toArray: function() {
-		return 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 just the one element from the set
-			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
-			// Return all the elements in a clean array
-			slice.call( this );
-	},
-
-	// 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 );
-	},
-
-	map: function( callback ) {
-		return this.pushStack( jQuery.map(this, function( elem, i ) {
-			return callback.call( elem, i, elem );
-		}));
-	},
-
-	slice: function() {
-		return this.pushStack( 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] ] : [] );
-	},
-
-	end: function() {
-		return this.prevObject || this.constructor(null);
-	},
-
-	// For internal use only.
-	// Behaves like an Array's method, not like a jQuery method.
-	push: push,
-	sort: deletedIds.sort,
-	splice: deletedIds.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
-	var src, copyIsArray, copy, name, options, clone,
-		target = arguments[0] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-
-		// skip the boolean and the target
-		target = arguments[ i ] || {};
-		i++;
-	}
-
-	// 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 ( i === length ) {
-		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" + ( version + Math.random() ).replace( /\D/g, "" ),
-
-	// Assume jQuery is ready without the ready module
-	isReady: true,
-
-	error: function( msg ) {
-		throw new Error( msg );
-	},
-
-	noop: function() {},
-
-	// 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 || function( obj ) {
-		return jQuery.type(obj) === "array";
-	},
-
-	isWindow: function( obj ) {
-		/* jshint eqeqeq: false */
-		return obj != null && obj == obj.window;
-	},
-
-	isNumeric: function( obj ) {
-		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
-		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
-		// subtraction forces infinities to NaN
-		// adding 1 corrects loss of precision from parseFloat (#15100)
-		return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
-	},
-
-	isEmptyObject: function( obj ) {
-		var name;
-		for ( name in obj ) {
-			return false;
-		}
-		return true;
-	},
-
-	isPlainObject: function( obj ) {
-		var key;
-
-		// Must be an Object.
-		// Because of IE, we also have to check the presence of the constructor property.
-		// Make sure that DOM nodes and window objects don't pass through, as well
-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-			return false;
-		}
-
-		try {
-			// Not own constructor property must be Object
-			if ( obj.constructor &&
-				!hasOwn.call(obj, "constructor") &&
-				!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-				return false;
-			}
-		} catch ( e ) {
-			// IE8,9 Will throw exceptions on certain host objects #9897
-			return false;
-		}
-
-		// Support: IE<9
-		// Handle iteration over inherited properties before own properties.
-		if ( support.ownLast ) {
-			for ( key in obj ) {
-				return hasOwn.call( obj, key );
-			}
-		}
-
-		// Own properties are enumerated firstly, so to speed up,
-		// if last one is own, then all properties are own.
-		for ( key in obj ) {}
-
-		return key === undefined || hasOwn.call( obj, key );
-	},
-
-	type: function( obj ) {
-		if ( obj == null ) {
-			return obj + "";
-		}
-		return typeof obj === "object" || typeof obj === "function" ?
-			class2type[ toString.call(obj) ] || "object" :
-			typeof obj;
-	},
-
-	// Evaluates a script in a global context
-	// Workarounds based on findings by Jim Driscoll
-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-	globalEval: function( data ) {
-		if ( data && jQuery.trim( data ) ) {
-			// We use execScript on Internet Explorer
-			// We use an anonymous function so that context is window
-			// rather than jQuery in Firefox
-			( window.execScript || function( data ) {
-				window[ "eval" ].call( window, data );
-			} )( data );
-		}
-	},
-
-	// 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;
-	},
-
-	// Support: Android<4.1, IE<9
-	trim: function( text ) {
-		return text == null ?
-			"" :
-			( text + "" ).replace( rtrim, "" );
-	},
-
-	// 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 {
-				push.call( ret, arr );
-			}
-		}
-
-		return ret;
-	},
-
-	inArray: function( elem, arr, i ) {
-		var len;
-
-		if ( arr ) {
-			if ( indexOf ) {
-				return indexOf.call( arr, elem, i );
-			}
-
-			len = arr.length;
-			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
-			for ( ; i < len; i++ ) {
-				// Skip accessing in sparse arrays
-				if ( i in arr && arr[ i ] === elem ) {
-					return i;
-				}
-			}
-		}
-
-		return -1;
-	},
-
-	merge: function( first, second ) {
-		var len = +second.length,
-			j = 0,
-			i = first.length;
-
-		while ( j < len ) {
-			first[ i++ ] = second[ j++ ];
-		}
-
-		// Support: IE<9
-		// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
-		if ( len !== len ) {
-			while ( second[j] !== undefined ) {
-				first[ i++ ] = second[ j++ ];
-			}
-		}
-
-		first.length = i;
-
-		return first;
-	},
-
-	grep: function( elems, callback, invert ) {
-		var callbackInverse,
-			matches = [],
-			i = 0,
-			length = elems.length,
-			callbackExpect = !invert;
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( ; i < length; i++ ) {
-			callbackInverse = !callback( elems[ i ], i );
-			if ( callbackInverse !== callbackExpect ) {
-				matches.push( elems[ i ] );
-			}
-		}
-
-		return matches;
-	},
-
-	// 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 new values
-		if ( isArray ) {
-			for ( ; i < length; i++ ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret.push( value );
-				}
-			}
-
-		// Go through every key on the object,
-		} else {
-			for ( i in elems ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret.push( value );
-				}
-			}
-		}
-
-		// Flatten any nested arrays
-		return 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 args, proxy, tmp;
-
-		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 = slice.call( arguments, 2 );
-		proxy = function() {
-			return fn.apply( context || this, args.concat( 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;
-	},
-
-	now: function() {
-		return +( new Date() );
-	},
-
-	// jQuery.support is not used in Core but other projects attach their
-	// properties to it so it needs to exist.
-	support: support
-});
-
-// 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 ) {
-
-	// Support: iOS 8.2 (not reproducible in simulator)
-	// `in` check used to prevent JIT error (gh-2145)
-	// hasOwn isn't used here due to false negatives
-	// regarding Nodelist length in IE
-	var length = "length" in obj && obj.length,
-		type = jQuery.type( obj );
-
-	if ( type === "function" || jQuery.isWindow( obj ) ) {
-		return false;
-	}
-
-	if ( obj.nodeType === 1 && length ) {
-		return true;
-	}
-
-	return type === "array" || length === 0 ||
-		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v2.2.0-pre
- * http://sizzlejs.com/
- *
- * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-12-16
- */
-(function( window ) {
-
-var i,
-	support,
-	Expr,
-	getText,
-	isXML,
-	tokenize,
-	compile,
-	select,
-	outermostContext,
-	sortInput,
-	hasDuplicate,
-
-	// Local document vars
-	setDocument,
-	document,
-	docElem,
-	documentIsHTML,
-	rbuggyQSA,
-	rbuggyMatches,
-	matches,
-	contains,
-
-	// Instance-specific data
-	expando = "sizzle" + 1 * new Date(),
-	preferredDoc = window.document,
-	dirruns = 0,
-	done = 0,
-	classCache = createCache(),
-	tokenCache = createCache(),
-	compilerCache = createCache(),
-	sortOrder = function( a, b ) {
-		if ( a === b ) {
-			hasDuplicate = true;
-		}
-		return 0;
-	},
-
-	// General-purpose constants
-	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 as it's faster than native
-	// http://jsperf.com/thor-indexof-vs-for/5
-	indexOf = function( list, elem ) {
-		var i = 0,
-			len = list.length;
-		for ( ; i < len; i++ ) {
-			if ( list[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#" ),
-
-	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
-	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
-		// Operator (capture 2)
-		"*([*^$|!~]?=)" + whitespace +
-		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
-		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
-		"*\\]",
-
-	pseudos = ":(" + characterEncoding + ")(?:\\((" +
-		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
-		// 1. quoted (capture 3; capture 4 or capture 5)
-		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
-		// 2. simple (capture 6)
-		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
-		// 3. anything else (capture 2)
-		".*" +
-		")\\)|)",
-
-	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
-	rwhitespace = new RegExp( whitespace + "+", "g" ),
-	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
-	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
-	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + 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" )
-	},
-
-	rinputs = /^(?:input|select|textarea|button)$/i,
-	rheader = /^h\d$/i,
-
-	rnative = /^[^{]+\{\s*\[native \w/,
-
-	// Easily-parseable/retrievable ID or TAG or CLASS selectors
-	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
-	rsibling = /[+~]/,
-	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<24
-		// Workaround erroneous numeric interpretation of +"0x"
-		return high !== high || escapedWhitespace ?
-			escaped :
-			high < 0 ?
-				// BMP codepoint
-				String.fromCharCode( high + 0x10000 ) :
-				// Supplemental Plane codepoint (surrogate pair)
-				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
-	},
-
-	// Used for iframes
-	// See setDocument()
-	// Removing the function wrapper causes a "Permission Denied"
-	// error in IE
-	unloadHandler = function() {
-		setDocument();
-	};
-
-// 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 || [];
-	nodeType = context.nodeType;
-
-	if ( typeof selector !== "string" || !selector ||
-		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
-		return results;
-	}
-
-	if ( !seed && documentIsHTML ) {
-
-		// Try to shortcut find operations when possible (e.g., not under DocumentFragment)
-		if ( nodeType !== 11 && (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 (jQuery #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 ) {
-				push.apply( results, context.getElementsByClassName( m ) );
-				return results;
-			}
-		}
-
-		// QSA path
-		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
-			nid = old = expando;
-			newContext = context;
-			newSelector = nodeType !== 1 && 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 ) && testContext( 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]);
-				}
-			}
-		});
-	});
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
-	return context && typeof context.getElementsByTagName !== "undefined" && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-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;
-};
-
-/**
- * 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 hasCompare, parent,
-		doc = node ? node.ownerDocument || node : preferredDoc;
-
-	// 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;
-	parent = doc.defaultView;
-
-	// 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 !== parent.top ) {
-		// IE11 does not have attachEvent, so all must suffer
-		if ( parent.addEventListener ) {
-			parent.addEventListener( "unload", unloadHandler, false );
-		} else if ( parent.attachEvent ) {
-			parent.attachEvent( "onunload", unloadHandler );
-		}
-	}
-
-	/* Support tests
-	---------------------------------------------------------------------- */
-	documentIsHTML = !isXML( doc );
-
-	/* 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;
-	});
-
-	// Support: IE<9
-	support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
-
-	// 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 !== "undefined" && 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 !== "undefined" && elem.getAttributeNode("id");
-				return node && node.value === attrId;
-			};
-		};
-	}
-
-	// Tag
-	Expr.find["TAG"] = support.getElementsByTagName ?
-		function( tag, context ) {
-			if ( typeof context.getElementsByTagName !== "undefined" ) {
-				return context.getElementsByTagName( tag );
-
-			// DocumentFragment nodes don't have gEBTN
-			} else if ( support.qsa ) {
-				return context.querySelectorAll( tag );
-			}
-		} :
-
-		function( tag, context ) {
-			var elem,
-				tmp = [],
-				i = 0,
-				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
-				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 ( 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
-			docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
-				"<select id='" + expando + "-\f]' msallowcapture=''>" +
-				"<option selected=''></option></select>";
-
-			// Support: IE8, Opera 11-12.16
-			// Nothing should be selected when empty strings follow ^= or $= or *=
-			// The test attribute must be unknown in Opera but "safe" for WinRT
-			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
-			if ( div.querySelectorAll("[msallowcapture^='']").length ) {
-				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
-			}
-
-			// Support: IE8
-			// Boolean attributes and "value" are not treated correctly
-			if ( !div.querySelectorAll("[selected]").length ) {
-				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
-			}
-
-			// Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
-			if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
-				rbuggyQSA.push("~=");
-			}
-
-			// 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");
-			}
-
-			// Support: Safari 8+, iOS 8+
-			// https://bugs.webkit.org/show_bug.cgi?id=136851
-			// In-page `selector#id sibing-combinator selector` fails
-			if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
-				rbuggyQSA.push(".#.+[+~]");
-			}
-		});
-
-		assert(function( div ) {
-			// Support: Windows 8 Native Apps
-			// The type and name attributes are restricted during .innerHTML assignment
-			var input = doc.createElement("input");
-			input.setAttribute( "type", "hidden" );
-			div.appendChild( input ).setAttribute( "name", "D" );
-
-			// Support: IE8
-			// Enforce case-sensitivity of name attribute
-			if ( div.querySelectorAll("[name=d]").length ) {
-				rbuggyQSA.push( "name" + 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.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
-	---------------------------------------------------------------------- */
-	hasCompare = rnative.test( docElem.compareDocumentPosition );
-
-	// Element contains another
-	// Purposefully does not implement inclusive descendent
-	// As in, an element does not contain itself
-	contains = hasCompare || rnative.test( docElem.contains ) ?
-		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 = hasCompare ?
-	function( a, b ) {
-
-		// Flag for duplicate removal
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		// Sort on method existence if only one input has compareDocumentPosition
-		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
-		if ( compare ) {
-			return compare;
-		}
-
-		// Calculate position if both inputs belong to the same document
-		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
-			a.compareDocumentPosition( b ) :
-
-			// Otherwise we know they are disconnected
-			1;
-
-		// 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 || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
-				return -1;
-			}
-			if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
-				return 1;
-			}
-
-			// Maintain original order
-			return sortInput ?
-				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
-				0;
-		}
-
-		return compare & 4 ? -1 : 1;
-	} :
-	function( a, b ) {
-		// Exit early if the nodes are identical
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		var cur,
-			i = 0,
-			aup = a.parentNode,
-			bup = b.parentNode,
-			ap = [ a ],
-			bp = [ b ];
-
-		// Parentless nodes are either documents or disconnected
-		if ( !aup || !bup ) {
-			return a === doc ? -1 :
-				b === doc ? 1 :
-				aup ? -1 :
-				bup ? 1 :
-				sortInput ?
-				( indexOf( sortInput, a ) - indexOf( 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 ?
-		val :
-		support.attributes || !documentIsHTML ?
-			elem.getAttribute( name ) :
-			(val = elem.getAttributeNode(name)) && val.specified ?
-				val.value :
-				null;
-};
-
-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 );
-		}
-	}
-
-	// Clear input after sorting to release objects
-	// See https://github.com/jquery/sizzle/pull/225
-	sortInput = null;
-
-	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
-		while ( (node = elem[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 (jQuery #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[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[6] && match[2];
-
-			if ( matchExpr["CHILD"].test( match[0] ) ) {
-				return null;
-			}
-
-			// Accept quoted arguments as-is
-			if ( match[3] ) {
-				match[2] = match[4] || match[5] || "";
-
-			// 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 !== "undefined" && 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.replace( rwhitespace, " " ) + " " ).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( 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 );
-					// Don't keep the element (issue #299)
-					input[0] = null;
-					return !results.pop();
-				};
-		}),
-
-		"has": markFunction(function( selector ) {
-			return function( elem ) {
-				return Sizzle( selector, elem ).length > 0;
-			};
-		}),
-
-		"contains": markFunction(function( text ) {
-			text = text.replace( runescape, funescape );
-			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 negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
-			//   but not by others (comment: 8; processing instruction: 7; etc.)
-			// nodeType < 6 works because attributes (2) do not appear as children
-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-				if ( elem.nodeType < 6 ) {
-					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;
-			return elem.nodeName.toLowerCase() === "input" &&
-				elem.type === "text" &&
-
-				// Support: IE<8
-				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
-				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
-		},
-
-		// 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();
-
-tokenize = Sizzle.tokenize = function( 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 oldCache, outerCache,
-				newCache = [ 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 ( (oldCache = outerCache[ dir ]) &&
-							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
-							// Assign to newCache so results back-propagate to previous elements
-							return (newCache[ 2 ] = oldCache[ 2 ]);
-						} else {
-							// Reuse newcache so results back-propagate to previous elements
-							outerCache[ dir ] = newCache;
-
-							// A match means we're done; a fail means we have to keep checking
-							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
-								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 multipleContexts( selector, contexts, results ) {
-	var i = 0,
-		len = contexts.length;
-	for ( ; i < len; i++ ) {
-		Sizzle( selector, contexts[i], results );
-	}
-	return results;
-}
-
-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( 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( checkContext, elem ) > -1;
-		}, implicitRelative, true ),
-		matchers = [ function( elem, context, xml ) {
-			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
-				(checkContext = context).nodeType ?
-					matchContext( elem, context, xml ) :
-					matchAnyContext( elem, context, xml ) );
-			// Avoid hanging onto element (issue #299)
-			checkContext = null;
-			return ret;
-		} ];
-
-	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 ) {
-	var bySet = setMatchers.length > 0,
-		byElement = elementMatchers.length > 0,
-		superMatcher = function( seed, context, xml, results, outermost ) {
-			var elem, j, matcher,
-				matchedCount = 0,
-				i = "0",
-				unmatched = seed && [],
-				setMatched = [],
-				contextBackup = outermostContext,
-				// We must always have either seed elements or outermost context
-				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
-				// Use integer dirruns iff this is the outermost matcher
-				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
-				len = elems.length;
-
-			if ( outermost ) {
-				outermostContext = context !== document && context;
-			}
-
-			// Add elements passing elementMatchers directly to results
-			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
-			// Support: IE<9, Safari
-			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
-			for ( ; i !== len && (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;
-					}
-				}
-
-				// 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, match /* 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 ( !match ) {
-			match = tokenize( selector );
-		}
-		i = match.length;
-		while ( i-- ) {
-			cached = matcherFromTokens( match[i] );
-			if ( cached[ expando ] ) {
-				setMatchers.push( cached );
-			} else {
-				elementMatchers.push( cached );
-			}
-		}
-
-		// Cache the compiled function
-		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
-		// Save selector and tokenization
-		cached.selector = selector;
-	}
-	return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- *  selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- *  selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
-	var i, tokens, token, type, find,
-		compiled = typeof selector === "function" && selector,
-		match = !seed && tokenize( (selector = compiled.selector || selector) );
-
-	results = results || [];
-
-	// Try to minimize operations if there is no seed and 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;
-
-			// Precompiled matchers will still verify ancestry, so step up a level
-			} else if ( compiled ) {
-				context = context.parentNode;
-			}
-
-			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 ) && testContext( 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 if one is not provided
-	// Provide `match` to avoid retokenization if we modified the selector above
-	( compiled || compile( selector, match ) )(
-		seed,
-		context,
-		!documentIsHTML,
-		results,
-		rsibling.test( selector ) && testContext( context.parentNode ) || context
-	);
-	return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome 14-35+
-// 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 elem[ name ] === true ? name.toLowerCase() :
-					(val = elem.getAttributeNode( name )) && val.specified ?
-					val.value :
-				null;
-		}
-	});
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-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;
-
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
-	if ( jQuery.isFunction( qualifier ) ) {
-		return jQuery.grep( elements, function( elem, i ) {
-			/* jshint -W018 */
-			return !!qualifier.call( elem, i, elem ) !== not;
-		});
-
-	}
-
-	if ( qualifier.nodeType ) {
-		return jQuery.grep( elements, function( elem ) {
-			return ( elem === qualifier ) !== not;
-		});
-
-	}
-
-	if ( typeof qualifier === "string" ) {
-		if ( risSimple.test( qualifier ) ) {
-			return jQuery.filter( qualifier, elements, not );
-		}
-
-		qualifier = jQuery.filter( qualifier, elements );
-	}
-
-	return jQuery.grep( elements, function( elem ) {
-		return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
-	});
-}
-
-jQuery.filter = function( expr, elems, not ) {
-	var elem = elems[ 0 ];
-
-	if ( not ) {
-		expr = ":not(" + expr + ")";
-	}
-
-	return elems.length === 1 && elem.nodeType === 1 ?
-		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
-		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
-			return elem.nodeType === 1;
-		}));
-};
-
-jQuery.fn.extend({
-	find: function( selector ) {
-		var i,
-			ret = [],
-			self = this,
-			len = self.length;
-
-		if ( typeof selector !== "string" ) {
-			return this.pushStack( jQuery( selector ).filter(function() {
-				for ( i = 0; i < len; i++ ) {
-					if ( jQuery.contains( self[ i ], this ) ) {
-						return true;
-					}
-				}
-			}) );
-		}
-
-		for ( i = 0; i < len; i++ ) {
-			jQuery.find( selector, self[ i ], ret );
-		}
-
-		// Needed because $( selector, context ) becomes $( context ).find( selector )
-		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
-		ret.selector = this.selector ? this.selector + " " + selector : selector;
-		return ret;
-	},
-	filter: function( selector ) {
-		return this.pushStack( winnow(this, selector || [], false) );
-	},
-	not: function( selector ) {
-		return this.pushStack( winnow(this, selector || [], true) );
-	},
-	is: function( selector ) {
-		return !!winnow(
-			this,
-
-			// If this is a positional/relative selector, check membership in the returned set
-			// so $("p:first").is("p:last") won't return true for a doc with two "p".
-			typeof selector === "string" && rneedsContext.test( selector ) ?
-				jQuery( selector ) :
-				selector || [],
-			false
-		).length;
-	}
-});
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
-	// Use the correct document accordingly with window argument (sandbox)
-	document = window.document,
-
-	// 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-]*))$/,
-
-	init = jQuery.fn.init = function( selector, context ) {
-		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
-					// Intentionally let the error be thrown if parseHTML is not present
-					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 ) {
-						// Handle the case where IE and Opera return items
-						// by name instead of ID
-						if ( elem.id !== match[2] ) {
-							return rootjQuery.find( selector );
-						}
-
-						// Otherwise, we 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 typeof rootjQuery.ready !== "undefined" ?
-				rootjQuery.ready( selector ) :
-				// Execute immediately if ready is not present
-				selector( jQuery );
-		}
-
-		if ( selector.selector !== undefined ) {
-			this.selector = selector.selector;
-			this.context = selector.context;
-		}
-
-		return jQuery.makeArray( selector, this );
-	};
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-	// methods guaranteed to produce a unique set when starting from a unique set
-	guaranteedUnique = {
-		children: true,
-		contents: true,
-		next: true,
-		prev: true
-	};
-
-jQuery.extend({
-	dir: function( elem, dir, until ) {
-		var matched = [],
-			cur = elem[ dir ];
-
-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-			if ( cur.nodeType === 1 ) {
-				matched.push( cur );
-			}
-			cur = cur[dir];
-		}
-		return matched;
-	},
-
-	sibling: function( n, elem ) {
-		var r = [];
-
-		for ( ; n; n = n.nextSibling ) {
-			if ( n.nodeType === 1 && n !== elem ) {
-				r.push( n );
-			}
-		}
-
-		return r;
-	}
-});
-
-jQuery.fn.extend({
-	has: function( target ) {
-		var i,
-			targets = jQuery( target, this ),
-			len = targets.length;
-
-		return this.filter(function() {
-			for ( i = 0; i < len; i++ ) {
-				if ( jQuery.contains( this, targets[i] ) ) {
-					return true;
-				}
-			}
-		});
-	},
-
-	closest: function( selectors, context ) {
-		var cur,
-			i = 0,
-			l = this.length,
-			matched = [],
-			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
-				jQuery( selectors, context || this.context ) :
-				0;
-
-		for ( ; i < l; i++ ) {
-			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
-				// Always skip document fragments
-				if ( cur.nodeType < 11 && (pos ?
-					pos.index(cur) > -1 :
-
-					// Don't pass non-elements to Sizzle
-					cur.nodeType === 1 &&
-						jQuery.find.matchesSelector(cur, selectors)) ) {
-
-					matched.push( cur );
-					break;
-				}
-			}
-		}
-
-		return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
-	},
-
-	// Determine the position of an element within
-	// the matched set of elements
-	index: function( elem ) {
-
-		// No argument, return index in parent
-		if ( !elem ) {
-			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
-		}
-
-		// index in selector
-		if ( typeof elem === "string" ) {
-			return jQuery.inArray( this[0], jQuery( elem ) );
-		}
-
-		// Locate the position of the desired element
-		return jQuery.inArray(
-			// If it receives a jQuery object, the first element is used
-			elem.jquery ? elem[0] : elem, this );
-	},
-
-	add: function( selector, context ) {
-		return this.pushStack(
-			jQuery.unique(
-				jQuery.merge( this.get(), jQuery( selector, context ) )
-			)
-		);
-	},
-
-	addBack: function( selector ) {
-		return this.add( selector == null ?
-			this.prevObject : this.prevObject.filter(selector)
-		);
-	}
-});
-
-function sibling( cur, dir ) {
-	do {
-		cur = cur[ dir ];
-	} while ( cur && cur.nodeType !== 1 );
-
-	return cur;
-}
-
-jQuery.each({
-	parent: function( elem ) {
-		var parent = elem.parentNode;
-		return parent && parent.nodeType !== 11 ? parent : null;
-	},
-	parents: function( elem ) {
-		return jQuery.dir( elem, "parentNode" );
-	},
-	parentsUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "parentNode", until );
-	},
-	next: function( elem ) {
-		return sibling( elem, "nextSibling" );
-	},
-	prev: function( elem ) {
-		return sibling( elem, "previousSibling" );
-	},
-	nextAll: function( elem ) {
-		return jQuery.dir( elem, "nextSibling" );
-	},
-	prevAll: function( elem ) {
-		return jQuery.dir( elem, "previousSibling" );
-	},
-	nextUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "nextSibling", until );
-	},
-	prevUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "previousSibling", until );
-	},
-	siblings: function( elem ) {
-		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
-	},
-	children: function( elem ) {
-		return jQuery.sibling( elem.firstChild );
-	},
-	contents: function( elem ) {
-		return jQuery.nodeName( elem, "iframe" ) ?
-			elem.contentDocument || elem.contentWindow.document :
-			jQuery.merge( [], elem.childNodes );
-	}
-}, function( name, fn ) {
-	jQuery.fn[ name ] = function( until, selector ) {
-		var ret = jQuery.map( this, fn, until );
-
-		if ( name.slice( -5 ) !== "Until" ) {
-			selector = until;
-		}
-
-		if ( selector && typeof selector === "string" ) {
-			ret = jQuery.filter( selector, ret );
-		}
-
-		if ( this.length > 1 ) {
-			// Remove duplicates
-			if ( !guaranteedUnique[ name ] ) {
-				ret = jQuery.unique( ret );
-			}
-
-			// Reverse order for parents* and prev-derivatives
-			if ( rparentsprev.test( name ) ) {
-				ret = ret.reverse();
-			}
-		}
-
-		return this.pushStack( ret );
-	};
-});
-var rnotwhite = (/\S+/g);
-
-
-
-// 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( 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 // Flag to know if list is currently firing
-		firing,
-		// Last fire value (for non-forgettable lists)
-		memory,
-		// Flag to know if list was already fired
-		fired,
-		// End of the loop when firing
-		firingLength,
-		// Index of currently firing callback (modified by remove if needed)
-		firingIndex,
-		// First callback to fire (used internally by add and fireWith)
-		firingStart,
-		// 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 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[ tuple[ 0 ] + "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 = 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 resolveValues consist of only a single Deferred, just use that.
-			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
-			// Update function for both resolve and progress values
-			updateFunc = function( i, contexts, values ) {
-				return function( value ) {
-					contexts[ i ] = this;
-					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
-					if ( values === progressValues ) {
-						deferred.notifyWith( contexts, values );
-
-					} else if ( !(--remaining) ) {
-						deferred.resolveWith( contexts, values );
-					}
-				};
-			},
-
-			progressValues, progressContexts, resolveContexts;
-
-		// add listeners to Deferred subordinates; treat others as resolved
-		if ( length > 1 ) {
-			progressValues = new Array( length );
-			progressContexts = new Array( length );
-			resolveContexts = new Array( length );
-			for ( ; i < length; i++ ) {
-				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
-					resolveValues[ i ].promise()
-						.done( updateFunc( i, resolveContexts, resolveValues ) )
-						.fail( deferred.reject )
-						.progress( updateFunc( i, progressContexts, progressValues ) );
-				} else {
-					--remaining;
-				}
-			}
-		}
-
-		// if we're not waiting on anything, resolve the master
-		if ( !remaining ) {
-			deferred.resolveWith( resolveContexts, resolveValues );
-		}
-
-		return deferred.promise();
-	}
-});
-
-
-// The deferred used on DOM ready
-var readyList;
-
-jQuery.fn.ready = function( fn ) {
-	// Add the callback
-	jQuery.ready.promise().done( fn );
-
-	return this;
-};
-
-jQuery.extend({
-	// 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;
-		}
-
-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-		if ( !document.body ) {
-			return setTimeout( jQuery.ready );
-		}
-
-		// 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.triggerHandler ) {
-			jQuery( document ).triggerHandler( "ready" );
-			jQuery( document ).off( "ready" );
-		}
-	}
-});
-
-/**
- * Clean-up method for dom ready events
- */
-function detach() {
-	if ( document.addEventListener ) {
-		document.removeEventListener( "DOMContentLoaded", completed, false );
-		window.removeEventListener( "load", completed, false );
-
-	} else {
-		document.detachEvent( "onreadystatechange", completed );
-		window.detachEvent( "onload", completed );
-	}
-}
-
-/**
- * The ready event handler and self cleanup method
- */
-function completed() {
-	// readyState === "complete" is good enough for us to call the dom ready in oldIE
-	if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
-		detach();
-		jQuery.ready();
-	}
-}
-
-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 );
-
-		// Standards-based browsers support DOMContentLoaded
-		} else if ( document.addEventListener ) {
-			// Use the handy event callback
-			document.addEventListener( "DOMContentLoaded", completed, false );
-
-			// A fallback to window.onload, that will always work
-			window.addEventListener( "load", completed, false );
-
-		// If IE event model is used
-		} else {
-			// Ensure firing before onload, maybe late but safe also for iframes
-			document.attachEvent( "onreadystatechange", completed );
-
-			// A fallback to window.onload, that will always work
-			window.attachEvent( "onload", completed );
-
-			// If IE and not a frame
-			// continually check to see if the document is ready
-			var top = false;
-
-			try {
-				top = window.frameElement == null && document.documentElement;
-			} catch(e) {}
-
-			if ( top && top.doScroll ) {
-				(function doScrollCheck() {
-					if ( !jQuery.isReady ) {
-
-						try {
-							// Use the trick by Diego Perini
-							// http://javascript.nwbox.com/IEContentLoaded/
-							top.doScroll("left");
-						} catch(e) {
-							return setTimeout( doScrollCheck, 50 );
-						}
-
-						// detach all dom ready events
-						detach();
-
-						// and execute any waiting functions
-						jQuery.ready();
-					}
-				})();
-			}
-		}
-	}
-	return readyList.promise( obj );
-};
-
-
-var strundefined = typeof undefined;
-
-
-
-// Support: IE<9
-// Iteration over object's inherited properties before its own
-var i;
-for ( i in jQuery( support ) ) {
-	break;
-}
-support.ownLast = i !== "0";
-
-// Note: most support tests are defined in their respective modules.
-// false until the test is run
-support.inlineBlockNeedsLayout = false;
-
-// Execute ASAP in case we need to set body.style.zoom
-jQuery(function() {
-	// Minified: var a,b,c,d
-	var val, div, body, container;
-
-	body = document.getElementsByTagName( "body" )[ 0 ];
-	if ( !body || !body.style ) {
-		// Return for frameset docs that don't have a body
-		return;
-	}
-
-	// Setup
-	div = document.createElement( "div" );
-	container = document.createElement( "div" );
-	container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
-	body.appendChild( container ).appendChild( div );
-
-	if ( typeof div.style.zoom !== strundefined ) {
-		// Support: IE<8
-		// Check if natively block-level elements act like inline-block
-		// elements when setting their display to 'inline' and giving
-		// them layout
-		div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
-
-		support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
-		if ( val ) {
-			// Prevent IE 6 from affecting layout for positioned elements #11048
-			// Prevent IE from shrinking the body in IE 7 mode #12869
-			// Support: IE<8
-			body.style.zoom = 1;
-		}
-	}
-
-	body.removeChild( container );
-});
-
-
-
-
-(function() {
-	var div = document.createElement( "div" );
-
-	// Execute the test only if not already executed in another module.
-	if (support.deleteExpando == null) {
-		// Support: IE<9
-		support.deleteExpando = true;
-		try {
-			delete div.test;
-		} catch( e ) {
-			support.deleteExpando = false;
-		}
-	}
-
-	// Null elements to avoid leaks in IE.
-	div = null;
-})();
-
-
-/**
- * Determines whether an object can have data
- */
-jQuery.acceptData = function( elem ) {
-	var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
-		nodeType = +elem.nodeType || 1;
-
-	// Do not set data on non-element DOM nodes because it will not be cleared (#8335).
-	return nodeType !== 1 && nodeType !== 9 ?
-		false :
-
-		// Nodes accept data unless otherwise specified; rejection can be conditional
-		!noData || noData !== true && elem.getAttribute("classid") === noData;
-};
-
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
-	rmultiDash = /([A-Z])/g;
-
-function dataAttr( elem, key, data ) {
-	// If nothing was found internally, try to fetch any
-	// data from the HTML5 data-* attribute
-	if ( data === undefined && elem.nodeType === 1 ) {
-
-		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
-		data = elem.getAttribute( name );
-
-		if ( typeof data === "string" ) {
-			try {
-				data = data === "true" ? true :
-					data === "false" ? false :
-					data === "null" ? null :
-					// Only convert to a number if it doesn't change the string
-					+data + "" === data ? +data :
-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
-					data;
-			} catch( e ) {}
-
-			// Make sure we set the data so it isn't changed later
-			jQuery.data( elem, key, data );
-
-		} else {
-			data = undefined;
-		}
-	}
-
-	return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
-	var name;
-	for ( name in obj ) {
-
-		// if the public data object is empty, the private is still empty
-		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
-			continue;
-		}
-		if ( name !== "toJSON" ) {
-			return false;
-		}
-	}
-
-	return true;
-}
-
-function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
-	if ( !jQuery.acceptData( elem ) ) {
-		return;
-	}
-
-	var ret, thisCache,
-		internalKey = jQuery.expando,
-
-		// We have to handle DOM nodes and JS objects differently because IE6-7
-		// can't GC object references properly across the DOM-JS boundary
-		isNode = elem.nodeType,
-
-		// Only DOM nodes need the global jQuery cache; JS object data is
-		// attached directly to the object so GC can occur automatically
-		cache = isNode ? jQuery.cache : elem,
-
-		// Only defining an ID for JS objects if its cache already exists allows
-		// the code to shortcut on the same path as a DOM node with no cache
-		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
-	// Avoid doing any more work than we need to when trying to get data on an
-	// object that has no data at all
-	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
-		return;
-	}
-
-	if ( !id ) {
-		// Only DOM nodes need a new unique ID for each element since their data
-		// ends up in the global cache
-		if ( isNode ) {
-			id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
-		} else {
-			id = internalKey;
-		}
-	}
-
-	if ( !cache[ id ] ) {
-		// Avoid exposing jQuery metadata on plain JS objects when the object
-		// is serialized using JSON.stringify
-		cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
-	}
-
-	// An object can be passed to jQuery.data instead of a key/value pair; this gets
-	// shallow copied over onto the existing cache
-	if ( typeof name === "object" || typeof name === "function" ) {
-		if ( pvt ) {
-			cache[ id ] = jQuery.extend( cache[ id ], name );
-		} else {
-			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
-		}
-	}
-
-	thisCache = cache[ id ];
-
-	// jQuery data() is stored in a separate object inside the object's internal data
-	// cache in order to avoid key collisions between internal data and user-defined
-	// data.
-	if ( !pvt ) {
-		if ( !thisCache.data ) {
-			thisCache.data = {};
-		}
-
-		thisCache = thisCache.data;
-	}
-
-	if ( data !== undefined ) {
-		thisCache[ jQuery.camelCase( name ) ] = data;
-	}
-
-	// Check for both converted-to-camel and non-converted data property names
-	// If a data property was specified
-	if ( typeof name === "string" ) {
-
-		// First Try to find as-is property data
-		ret = thisCache[ name ];
-
-		// Test for null|undefined property data
-		if ( ret == null ) {
-
-			// Try to find the camelCased property
-			ret = thisCache[ jQuery.camelCase( name ) ];
-		}
-	} else {
-		ret = thisCache;
-	}
-
-	return ret;
-}
-
-function internalRemoveData( elem, name, pvt ) {
-	if ( !jQuery.acceptData( elem ) ) {
-		return;
-	}
-
-	var thisCache, i,
-		isNode = elem.nodeType,
-
-		// See jQuery.data for more information
-		cache = isNode ? jQuery.cache : elem,
-		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
-	// If there is already no cache entry for this object, there is no
-	// purpose in continuing
-	if ( !cache[ id ] ) {
-		return;
-	}
-
-	if ( name ) {
-
-		thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-		if ( thisCache ) {
-
-			// Support array or space separated string names for data keys
-			if ( !jQuery.isArray( name ) ) {
-
-				// try the string as a key before any manipulation
-				if ( name in thisCache ) {
-					name = [ name ];
-				} else {
-
-					// split the camel cased version by spaces unless a key with the spaces exists
-					name = jQuery.camelCase( name );
-					if ( name in thisCache ) {
-						name = [ name ];
-					} else {
-						name = name.split(" ");
-					}
-				}
-			} else {
-				// If "name" is an array of keys...
-				// When data is initially created, via ("key", "val") signature,
-				// keys will be converted to camelCase.
-				// Since there is no way to tell _how_ a key was added, remove
-				// both plain key and camelCase key. #12786
-				// This will only penalize the array argument path.
-				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
-			}
-
-			i = name.length;
-			while ( i-- ) {
-				delete thisCache[ name[i] ];
-			}
-
-			// If there is no data left in the cache, we want to continue
-			// and let the cache object itself get destroyed
-			if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
-				return;
-			}
-		}
-	}
-
-	// See jQuery.data for more information
-	if ( !pvt ) {
-		delete cache[ id ].data;
-
-		// Don't destroy the parent cache unless the internal data object
-		// had been the only thing left in it
-		if ( !isEmptyDataObject( cache[ id ] ) ) {
-			return;
-		}
-	}
-
-	// Destroy the cache
-	if ( isNode ) {
-		jQuery.cleanData( [ elem ], true );
-
-	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
-	/* jshint eqeqeq: false */
-	} else if ( support.deleteExpando || cache != cache.window ) {
-		/* jshint eqeqeq: true */
-		delete cache[ id ];
-
-	// When all else fails, null
-	} else {
-		cache[ id ] = null;
-	}
-}
-
-jQuery.extend({
-	cache: {},
-
-	// The following elements (space-suffixed to avoid Object.prototype collisions)
-	// throw uncatchable exceptions if you attempt to set expando properties
-	noData: {
-		"applet ": true,
-		"embed ": true,
-		// ...but Flash objects (which have this classid) *can* handle expandos
-		"object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
-	},
-
-	hasData: function( elem ) {
-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-		return !!elem && !isEmptyDataObject( elem );
-	},
-
-	data: function( elem, name, data ) {
-		return internalData( elem, name, data );
-	},
-
-	removeData: function( elem, name ) {
-		return internalRemoveData( elem, name );
-	},
-
-	// For internal use only.
-	_data: function( elem, name, data ) {
-		return internalData( elem, name, data, true );
-	},
-
-	_removeData: function( elem, name ) {
-		return internalRemoveData( elem, name, true );
-	}
-});
-
-jQuery.fn.extend({
-	data: function( key, value ) {
-		var i, name, data,
-			elem = this[0],
-			attrs = elem && elem.attributes;
-
-		// Special expections of .data basically thwart jQuery.access,
-		// so implement the relevant behavior ourselves
-
-		// Gets all values
-		if ( key === undefined ) {
-			if ( this.length ) {
-				data = jQuery.data( elem );
-
-				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
-					i = attrs.length;
-					while ( i-- ) {
-
-						// Support: IE11+
-						// The attrs elements can be null (#14894)
-						if ( attrs[ i ] ) {
-							name = attrs[ i ].name;
-							if ( name.indexOf( "data-" ) === 0 ) {
-								name = jQuery.camelCase( name.slice(5) );
-								dataAttr( elem, name, data[ name ] );
-							}
-						}
-					}
-					jQuery._data( elem, "parsedAttrs", true );
-				}
-			}
-
-			return data;
-		}
-
-		// Sets multiple values
-		if ( typeof key === "object" ) {
-			return this.each(function() {
-				jQuery.data( this, key );
-			});
-		}
-
-		return arguments.length > 1 ?
-
-			// Sets one value
-			this.each(function() {
-				jQuery.data( this, key, value );
-			}) :
-
-			// Gets one value
-			// Try to fetch any internally stored data first
-			elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
-	},
-
-	removeData: function( key ) {
-		return this.each(function() {
-			jQuery.removeData( this, key );
-		});
-	}
-});
-
-
-jQuery.extend({
-	queue: function( elem, type, data ) {
-		var queue;
-
-		if ( elem ) {
-			type = ( type || "fx" ) + "queue";
-			queue = jQuery._data( elem, type );
-
-			// Speed up dequeue by getting out quickly if this is just a lookup
-			if ( data ) {
-				if ( !queue || jQuery.isArray(data) ) {
-					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
-				} else {
-					queue.push( data );
-				}
-			}
-			return queue || [];
-		}
-	},
-
-	dequeue: function( elem, type ) {
-		type = type || "fx";
-
-		var queue = jQuery.queue( elem, type ),
-			startLength = queue.length,
-			fn = queue.shift(),
-			hooks = jQuery._queueHooks( elem, type ),
-			next = function() {
-				jQuery.dequeue( elem, type );
-			};
-
-		// If the fx queue is dequeued, always remove the progress sentinel
-		if ( fn === "inprogress" ) {
-			fn = queue.shift();
-			startLength--;
-		}
-
-		if ( fn ) {
-
-			// Add a progress sentinel to prevent the fx queue from being
-			// automatically dequeued
-			if ( type === "fx" ) {
-				queue.unshift( "inprogress" );
-			}
-
-			// clear up the last queue stop function
-			delete hooks.stop;
-			fn.call( elem, next, hooks );
-		}
-
-		if ( !startLength && hooks ) {
-			hooks.empty.fire();
-		}
-	},
-
-	// not intended for public consumption - generates a queueHooks object, or returns the current one
-	_queueHooks: function( elem, type ) {
-		var key = type + "queueHooks";
-		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
-			empty: jQuery.Callbacks("once memory").add(function() {
-				jQuery._removeData( elem, type + "queue" );
-				jQuery._removeData( elem, key );
-			})
-		});
-	}
-});
-
-jQuery.fn.extend({
-	queue: function( type, data ) {
-		var setter = 2;
-
-		if ( typeof type !== "string" ) {
-			data = type;
-			type = "fx";
-			setter--;
-		}
-
-		if ( arguments.length < setter ) {
-			return jQuery.queue( this[0], type );
-		}
-
-		return data === undefined ?
-			this :
-			this.each(function() {
-				var queue = jQuery.queue( this, type, data );
-
-				// ensure a hooks for this queue
-				jQuery._queueHooks( this, type );
-
-				if ( type === "fx" && queue[0] !== "inprogress" ) {
-					jQuery.dequeue( this, type );
-				}
-			});
-	},
-	dequeue: function( type ) {
-		return this.each(function() {
-			jQuery.dequeue( this, type );
-		});
-	},
-	clearQueue: function( type ) {
-		return this.queue( type || "fx", [] );
-	},
-	// Get a promise resolved when queues of a certain type
-	// are emptied (fx is the type by default)
-	promise: function( type, obj ) {
-		var tmp,
-			count = 1,
-			defer = jQuery.Deferred(),
-			elements = this,
-			i = this.length,
-			resolve = function() {
-				if ( !( --count ) ) {
-					defer.resolveWith( elements, [ elements ] );
-				}
-			};
-
-		if ( typeof type !== "string" ) {
-			obj = type;
-			type = undefined;
-		}
-		type = type || "fx";
-
-		while ( i-- ) {
-			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
-			if ( tmp && tmp.empty ) {
-				count++;
-				tmp.empty.add( resolve );
-			}
-		}
-		resolve();
-		return defer.promise( obj );
-	}
-});
-var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHidden = function( elem, el ) {
-		// isHidden might be called from jQuery#filter function;
-		// in that case, element will be second argument
-		elem = el || elem;
-		return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
-	};
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = jQuery.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;
-};
-var rcheckableType = (/^(?:checkbox|radio)$/i);
-
-
-
-(function() {
-	// Minified: var a,b,c
-	var input = document.createElement( "input" ),
-		div = document.createElement( "div" ),
-		fragment = document.createDocumentFragment();
-
-	// Setup
-	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
-	// IE strips leading whitespace when .innerHTML is used
-	support.leadingWhitespace = div.firstChild.nodeType === 3;
-
-	// Make sure that tbody elements aren't automatically inserted
-	// IE will insert them into empty tables
-	support.tbody = !div.getElementsByTagName( "tbody" ).length;
-
-	// Make sure that link elements get serialized correctly by innerHTML
-	// This requires a wrapper element in IE
-	support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
-
-	// Makes sure cloning an html5 element does not cause problems
-	// Where outerHTML is undefined, this still works
-	support.html5Clone =
-		document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
-
-	// Check if a disconnected checkbox will retain its checked
-	// value of true after appended to the DOM (IE6/7)
-	input.type = "checkbox";
-	input.checked = true;
-	fragment.appendChild( input );
-	support.appendChecked = input.checked;
-
-	// Make sure textarea (and checkbox) defaultValue is properly cloned
-	// Support: IE6-IE11+
-	div.innerHTML = "<textarea>x</textarea>";
-	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-
-	// #11217 - WebKit loses check when the name is after the checked attribute
-	fragment.appendChild( div );
-	div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
-
-	// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
-	// old WebKit doesn't clone checked state correctly in fragments
-	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-	// Support: IE<9
-	// Opera does not clone events (and typeof div.attachEvent === undefined).
-	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
-	support.noCloneEvent = true;
-	if ( div.attachEvent ) {
-		div.attachEvent( "onclick", function() {
-			support.noCloneEvent = false;
-		});
-
-		div.cloneNode( true ).click();
-	}
-
-	// Execute the test only if not already executed in another module.
-	if (support.deleteExpando == null) {
-		// Support: IE<9
-		support.deleteExpando = true;
-		try {
-			delete div.test;
-		} catch( e ) {
-			support.deleteExpando = false;
-		}
-	}
-})();
-
-
-(function() {
-	var i, eventName,
-		div = document.createElement( "div" );
-
-	// Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
-	for ( i in { submit: true, change: true, focusin: true }) {
-		eventName = "on" + i;
-
-		if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
-			// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
-			div.setAttribute( eventName, "t" );
-			support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
-		}
-	}
-
-	// Null elements to avoid leaks in IE.
-	div = null;
-})();
-
-
-var rformElems = /^(?:input|select|textarea)$/i,
-	rkeyEvent = /^key/,
-	rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
-	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
-
-function returnTrue() {
-	return true;
-}
-
-function returnFalse() {
-	return false;
-}
-
-function safeActiveElement() {
-	try {
-		return document.activeElement;
-	} catch ( err ) { }
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
-	global: {},
-
-	add: function( elem, types, handler, data, selector ) {
-		var tmp, events, t, handleObjIn,
-			special, eventHandle, handleObj,
-			handlers, type, namespaces, origType,
-			elemData = jQuery._data( elem );
-
-		// Don't attach events to noData or text/comment nodes (but allow plain objects)
-		if ( !elemData ) {
-			return;
-		}
-
-		// Caller can pass in an object of custom data in lieu of the handler
-		if ( handler.handler ) {
-			handleObjIn = handler;
-			handler = handleObjIn.handler;
-			selector = handleObjIn.selector;
-		}
-
-		// Make sure that the handler has a unique ID, used to find/remove it later
-		if ( !handler.guid ) {
-			handler.guid = jQuery.guid++;
-		}
-
-		// Init the element's event structure and main handler, if this is the first
-		if ( !(events = elemData.events) ) {
-			events = elemData.events = {};
-		}
-		if ( !(eventHandle = elemData.handle) ) {
-			eventHandle = elemData.handle = function( e ) {
-				// Discard the second event of a jQuery.event.trigger() and
-				// when an event is called after a page has unloaded
-				return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
-					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-					undefined;
-			};
-			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
-			eventHandle.elem = elem;
-		}
-
-		// Handle multiple events separated by a space
-		types = ( types || "" ).match( rnotwhite ) || [ "" ];
-		t = types.length;
-		while ( t-- ) {
-			tmp = rtypenamespace.exec( types[t] ) || [];
-			type = origType = tmp[1];
-			namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
-			// There *must* be a type, no attaching namespace-only handlers
-			if ( !type ) {
-				continue;
-			}
-
-			// If event changes its type, use the special event handlers for the changed type
-			special = jQuery.event.special[ type ] || {};
-
-			// If selector defined, determine special event api type, otherwise given type
-			type = ( selector ? special.delegateType : special.bindType ) || type;
-
-			// Update special based on newly reset type
-			special = jQuery.event.special[ type ] || {};
-
-			// handleObj is passed to all event handlers
-			handleObj = jQuery.extend({
-				type: type,
-				origType: origType,
-				data: data,
-				handler: handler,
-				guid: handler.guid,
-				selector: selector,
-				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
-				namespace: namespaces.join(".")
-			}, handleObjIn );
-
-			// Init the event handler queue if we're the first
-			if ( !(handlers = events[ type ]) ) {
-				handlers = events[ type ] = [];
-				handlers.delegateCount = 0;
-
-				// Only use addEventListener/attachEvent if the special events handler returns false
-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-					// Bind the global event handler to the element
-					if ( elem.addEventListener ) {
-						elem.addEventListener( type, eventHandle, false );
-
-					} else if ( elem.attachEvent ) {
-						elem.attachEvent( "on" + type, eventHandle );
-					}
-				}
-			}
-
-			if ( special.add ) {
-				special.add.call( elem, handleObj );
-
-				if ( !handleObj.handler.guid ) {
-					handleObj.handler.guid = handler.guid;
-				}
-			}
-
-			// Add to the element's handler list, delegates in front
-			if ( selector ) {
-				handlers.splice( handlers.delegateCount++, 0, handleObj );
-			} else {
-				handlers.push( handleObj );
-			}
-
-			// Keep track of which events have ever been used, for event optimization
-			jQuery.event.global[ type ] = true;
-		}
-
-		// Nullify elem to prevent memory leaks in IE
-		elem = null;
-	},
-
-	// Detach an event or set of events from an element
-	remove: function( elem, types, handler, selector, mappedTypes ) {
-		var j, handleObj, tmp,
-			origCount, t, events,
-			special, handlers, type,
-			namespaces, origType,
-			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
-
-		if ( !elemData || !(events = elemData.events) ) {
-			return;
-		}
-
-		// Once for each type.namespace in types; type may be omitted
-		types = ( types || "" ).match( rnotwhite ) || [ "" ];
-		t = types.length;
-		while ( t-- ) {
-			tmp = rtypenamespace.exec( types[t] ) || [];
-			type = origType = tmp[1];
-			namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
-			// Unbind all events (on this namespace, if provided) for the element
-			if ( !type ) {
-				for ( type in events ) {
-					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
-				}
-				continue;
-			}
-
-			special = jQuery.event.special[ type ] || {};
-			type = ( selector ? special.delegateType : special.bindType ) || type;
-			handlers = events[ type ] || [];
-			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
-
-			// Remove matching events
-			origCount = j = handlers.length;
-			while ( j-- ) {
-				handleObj = handlers[ j ];
-
-				if ( ( mappedTypes || origType === handleObj.origType ) &&
-					( !handler || handler.guid === handleObj.guid ) &&
-					( !tmp || tmp.test( handleObj.namespace ) ) &&
-					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
-					handlers.splice( j, 1 );
-
-					if ( handleObj.selector ) {
-						handlers.delegateCount--;
-					}
-					if ( special.remove ) {
-						special.remove.call( elem, handleObj );
-					}
-				}
-			}
-
-			// Remove generic event handler if we removed something and no more handlers exist
-			// (avoids potential for endless recursion during removal of special event handlers)
-			if ( origCount && !handlers.length ) {
-				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-					jQuery.removeEvent( elem, type, elemData.handle );
-				}
-
-				delete events[ type ];
-			}
-		}
-
-		// Remove the expando if it's no longer used
-		if ( jQuery.isEmptyObject( events ) ) {
-			delete elemData.handle;
-
-			// removeData also checks for emptiness and clears the expando if empty
-			// so use it instead of delete
-			jQuery._removeData( elem, "events" );
-		}
-	},
-
-	trigger: function( event, data, elem, onlyHandlers ) {
-		var handle, ontype, cur,
-			bubbleType, special, tmp, i,
-			eventPath = [ elem || document ],
-			type = hasOwn.call( event, "type" ) ? event.type : event,
-			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
-
-		cur = tmp = elem = elem || document;
-
-		// Don't do events on text and comment nodes
-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-			return;
-		}
-
-		// focus/blur morphs to focusin/out; ensure we're not firing them right now
-		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-			return;
-		}
-
-		if ( type.indexOf(".") >= 0 ) {
-			// Namespaced trigger; create a regexp to match event type in handle()
-			namespaces = type.split(".");
-			type = namespaces.shift();
-			namespaces.sort();
-		}
-		ontype = type.indexOf(":") < 0 && "on" + type;
-
-		// Caller can pass in a jQuery.Event object, Object, or just an event type string
-		event = event[ jQuery.expando ] ?
-			event :
-			new jQuery.Event( type, typeof event === "object" && event );
-
-		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
-		event.isTrigger = onlyHandlers ? 2 : 3;
-		event.namespace = namespaces.join(".");
-		event.namespace_re = event.namespace ?
-			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
-			null;
-
-		// Clean up the event in case it is being reused
-		event.result = undefined;
-		if ( !event.target ) {
-			event.target = elem;
-		}
-
-		// Clone any incoming data and prepend the event, creating the handler arg list
-		data = data == null ?
-			[ event ] :
-			jQuery.makeArray( data, [ event ] );
-
-		// Allow special events to draw outside the lines
-		special = jQuery.event.special[ type ] || {};
-		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
-			return;
-		}
-
-		// Determine event propagation path in advance, per W3C events spec (#9951)
-		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-			bubbleType = special.delegateType || type;
-			if ( !rfocusMorph.test( bubbleType + type ) ) {
-				cur = cur.parentNode;
-			}
-			for ( ; cur; cur = cur.parentNode ) {
-				eventPath.push( cur );
-				tmp = cur;
-			}
-
-			// Only add window if we got to document (e.g., not plain obj or detached DOM)
-			if ( tmp === (elem.ownerDocument || document) ) {
-				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
-			}
-		}
-
-		// Fire handlers on the event path
-		i = 0;
-		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
-
-			event.type = i > 1 ?
-				bubbleType :
-				special.bindType || type;
-
-			// jQuery handler
-			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
-			if ( handle ) {
-				handle.apply( cur, data );
-			}
-
-			// Native handler
-			handle = ontype && cur[ ontype ];
-			if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
-				event.result = handle.apply( cur, data );
-				if ( event.result === false ) {
-					event.preventDefault();
-				}
-			}
-		}
-		event.type = type;
-
-		// If nobody prevented the default action, do it now
-		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-			if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
-				jQuery.acceptData( elem ) ) {
-
-				// Call a native DOM method on the target with the same name name as the event.
-				// Can't use an .isFunction() check here because IE6/7 fails that test.
-				// Don't do default actions on window, that's where global variables be (#6170)
-				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
-					// Don't re-trigger an onFOO event when we call its FOO() method
-					tmp = elem[ ontype ];
-
-					if ( tmp ) {
-						elem[ ontype ] = null;
-					}
-
-					// Prevent re-triggering of the same event, since we already bubbled it above
-					jQuery.event.triggered = type;
-					try {
-						elem[ type ]();
-					} catch ( e ) {
-						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
-						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
-					}
-					jQuery.event.triggered = undefined;
-
-					if ( tmp ) {
-						elem[ ontype ] = tmp;
-					}
-				}
-			}
-		}
-
-		return event.result;
-	},
-
-	dispatch: function( event ) {
-
-		// Make a writable jQuery.Event from the native event object
-		event = jQuery.event.fix( event );
-
-		var i, ret, handleObj, matched, j,
-			handlerQueue = [],
-			args = slice.call( arguments ),
-			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
-			special = jQuery.event.special[ event.type ] || {};
-
-		// Use the fix-ed jQuery.Event rather than the (read-only) native event
-		args[0] = event;
-		event.delegateTarget = this;
-
-		// Call the preDispatch hook for the mapped type, and let it bail if desired
-		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
-			return;
-		}
-
-		// Determine handlers
-		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
-		// Run delegates first; they may want to stop propagation beneath us
-		i = 0;
-		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
-			event.currentTarget = matched.elem;
-
-			j = 0;
-			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
-				// Triggered event must either 1) have no namespace, or
-				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
-
-					event.handleObj = handleObj;
-					event.data = handleObj.data;
-
-					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
-							.apply( matched.elem, args );
-
-					if ( ret !== undefined ) {
-						if ( (event.result = ret) === false ) {
-							event.preventDefault();
-							event.stopPropagation();
-						}
-					}
-				}
-			}
-		}
-
-		// Call the postDispatch hook for the mapped type
-		if ( special.postDispatch ) {
-			special.postDispatch.call( this, event );
-		}
-
-		return event.result;
-	},
-
-	handlers: function( event, handlers ) {
-		var sel, handleObj, matches, i,
-			handlerQueue = [],
-			delegateCount = handlers.delegateCount,
-			cur = event.target;
-
-		// Find delegate handlers
-		// Black-hole SVG <use> instance trees (#13180)
-		// Avoid non-left-click bubbling in Firefox (#3861)
-		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
-
-			/* jshint eqeqeq: false */
-			for ( ; cur != this; cur = cur.parentNode || this ) {
-				/* jshint eqeqeq: true */
-
-				// Don't check non-elements (#13208)
-				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
-				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
-					matches = [];
-					for ( i = 0; i < delegateCount; i++ ) {
-						handleObj = handlers[ i ];
-
-						// Don't conflict with Object.prototype properties (#13203)
-						sel = handleObj.selector + " ";
-
-						if ( matches[ sel ] === undefined ) {
-							matches[ sel ] = handleObj.needsContext ?
-								jQuery( sel, this ).index( cur ) >= 0 :
-								jQuery.find( sel, this, null, [ cur ] ).length;
-						}
-						if ( matches[ sel ] ) {
-							matches.push( handleObj );
-						}
-					}
-					if ( matches.length ) {
-						handlerQueue.push({ elem: cur, handlers: matches });
-					}
-				}
-			}
-		}
-
-		// Add the remaining (directly-bound) handlers
-		if ( delegateCount < handlers.length ) {
-			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
-		}
-
-		return handlerQueue;
-	},
-
-	fix: function( event ) {
-		if ( event[ jQuery.expando ] ) {
-			return event;
-		}
-
-		// Create a writable copy of the event object and normalize some properties
-		var i, prop, copy,
-			type = event.type,
-			originalEvent = event,
-			fixHook = this.fixHooks[ type ];
-
-		if ( !fixHook ) {
-			this.fixHooks[ type ] = fixHook =
-				rmouseEvent.test( type ) ? this.mouseHooks :
-				rkeyEvent.test( type ) ? this.keyHooks :
-				{};
-		}
-		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-		event = new jQuery.Event( originalEvent );
-
-		i = copy.length;
-		while ( i-- ) {
-			prop = copy[ i ];
-			event[ prop ] = originalEvent[ prop ];
-		}
-
-		// Support: IE<9
-		// Fix target property (#1925)
-		if ( !event.target ) {
-			event.target = originalEvent.srcElement || document;
-		}
-
-		// Support: Chrome 23+, Safari?
-		// Target should not be a text node (#504, #13143)
-		if ( event.target.nodeType === 3 ) {
-			event.target = event.target.parentNode;
-		}
-
-		// Support: IE<9
-		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
-		event.metaKey = !!event.metaKey;
-
-		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
-	},
-
-	// Includes some event props shared by KeyEvent and MouseEvent
-	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
-	fixHooks: {},
-
-	keyHooks: {
-		props: "char charCode key keyCode".split(" "),
-		filter: function( event, original ) {
-
-			// Add which for key events
-			if ( event.which == null ) {
-				event.which = original.charCode != null ? original.charCode : original.keyCode;
-			}
-
-			return event;
-		}
-	},
-
-	mouseHooks: {
-		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
-		filter: function( event, original ) {
-			var body, eventDoc, doc,
-				button = original.button,
-				fromElement = original.fromElement;
-
-			// Calculate pageX/Y if missing and clientX/Y available
-			if ( event.pageX == null && original.clientX != null ) {
-				eventDoc = event.target.ownerDocument || document;
-				doc = eventDoc.documentElement;
-				body = eventDoc.body;
-
-				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
-				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
-			}
-
-			// Add relatedTarget, if necessary
-			if ( !event.relatedTarget && fromElement ) {
-				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
-			}
-
-			// Add which for click: 1 === left; 2 === middle; 3 === right
-			// Note: button is not normalized, so don't use it
-			if ( !event.which && button !== undefined ) {
-				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
-			}
-
-			return event;
-		}
-	},
-
-	special: {
-		load: {
-			// Prevent triggered image.load events from bubbling to window.load
-			noBubble: true
-		},
-		focus: {
-			// Fire native event if possible so blur/focus sequence is correct
-			trigger: function() {
-				if ( this !== safeActiveElement() && this.focus ) {
-					try {
-						this.focus();
-						return false;
-					} catch ( e ) {
-						// Support: IE<9
-						// If we error on focus to hidden element (#1486, #12518),
-						// let .trigger() run the handlers
-					}
-				}
-			},
-			delegateType: "focusin"
-		},
-		blur: {
-			trigger: function() {
-				if ( this === safeActiveElement() && this.blur ) {
-					this.blur();
-					return false;
-				}
-			},
-			delegateType: "focusout"
-		},
-		click: {
-			// For checkbox, fire native event so checked state will be right
-			trigger: function() {
-				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
-					this.click();
-					return false;
-				}
-			},
-
-			// For cross-browser consistency, don't fire native .click() on links
-			_default: function( event ) {
-				return jQuery.nodeName( event.target, "a" );
-			}
-		},
-
-		beforeunload: {
-			postDispatch: function( event ) {
-
-				// Support: Firefox 20+
-				// Firefox doesn't alert if the returnValue field is not set.
-				if ( event.result !== undefined && event.originalEvent ) {
-					event.originalEvent.returnValue = event.result;
-				}
-			}
-		}
-	},
-
-	simulate: function( type, elem, event, bubble ) {
-		// Piggyback on a donor event to simulate a different one.
-		// Fake originalEvent to avoid donor's stopPropagation, but if the
-		// simulated event prevents default then we do the same on the donor.
-		var e = jQuery.extend(
-			new jQuery.Event(),
-			event,
-			{
-				type: type,
-				isSimulated: true,
-				originalEvent: {}
-			}
-		);
-		if ( bubble ) {
-			jQuery.event.trigger( e, null, elem );
-		} else {
-			jQuery.event.dispatch.call( elem, e );
-		}
-		if ( e.isDefaultPrevented() ) {
-			event.preventDefault();
-		}
-	}
-};
-
-jQuery.removeEvent = document.removeEventListener ?
-	function( elem, type, handle ) {
-		if ( elem.removeEventListener ) {
-			elem.removeEventListener( type, handle, false );
-		}
-	} :
-	function( elem, type, handle ) {
-		var name = "on" + type;
-
-		if ( elem.detachEvent ) {
-
-			// #8545, #7054, preventing memory leaks for custom events in IE6-8
-			// detachEvent needed property on element, by name of that event, to properly expose it to GC
-			if ( typeof elem[ name ] === strundefined ) {
-				elem[ name ] = null;
-			}
-
-			elem.detachEvent( name, handle );
-		}
-	};
-
-jQuery.Event = function( src, props ) {
-	// Allow instantiation without the 'new' keyword
-	if ( !(this instanceof jQuery.Event) ) {
-		return new jQuery.Event( src, props );
-	}
-
-	// Event object
-	if ( src && src.type ) {
-		this.originalEvent = src;
-		this.type = src.type;
-
-		// Events bubbling up the document may have been marked as prevented
-		// by a handler lower down the tree; reflect the correct value.
-		this.isDefaultPrevented = src.defaultPrevented ||
-				src.defaultPrevented === undefined &&
-				// Support: IE < 9, Android < 4.0
-				src.returnValue === false ?
-			returnTrue :
-			returnFalse;
-
-	// Event type
-	} else {
-		this.type = src;
-	}
-
-	// Put explicitly provided properties onto the event object
-	if ( props ) {
-		jQuery.extend( this, props );
-	}
-
-	// Create a timestamp if incoming event doesn't have one
-	this.timeStamp = src && src.timeStamp || jQuery.now();
-
-	// Mark it as fixed
-	this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-	isDefaultPrevented: returnFalse,
-	isPropagationStopped: returnFalse,
-	isImmediatePropagationStopped: returnFalse,
-
-	preventDefault: function() {
-		var e = this.originalEvent;
-
-		this.isDefaultPrevented = returnTrue;
-		if ( !e ) {
-			return;
-		}
-
-		// If preventDefault exists, run it on the original event
-		if ( e.preventDefault ) {
-			e.preventDefault();
-
-		// Support: IE
-		// Otherwise set the returnValue property of the original event to false
-		} else {
-			e.returnValue = false;
-		}
-	},
-	stopPropagation: function() {
-		var e = this.originalEvent;
-
-		this.isPropagationStopped = returnTrue;
-		if ( !e ) {
-			return;
-		}
-		// If stopPropagation exists, run it on the original event
-		if ( e.stopPropagation ) {
-			e.stopPropagation();
-		}
-
-		// Support: IE
-		// Set the cancelBubble property of the original event to true
-		e.cancelBubble = true;
-	},
-	stopImmediatePropagation: function() {
-		var e = this.originalEvent;
-
-		this.isImmediatePropagationStopped = returnTrue;
-
-		if ( e && e.stopImmediatePropagation ) {
-			e.stopImmediatePropagation();
-		}
-
-		this.stopPropagation();
-	}
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
-	mouseenter: "mouseover",
-	mouseleave: "mouseout",
-	pointerenter: "pointerover",
-	pointerleave: "pointerout"
-}, function( orig, fix ) {
-	jQuery.event.special[ orig ] = {
-		delegateType: fix,
-		bindType: fix,
-
-		handle: function( event ) {
-			var ret,
-				target = this,
-				related = event.relatedTarget,
-				handleObj = event.handleObj;
-
-			// For mousenter/leave call the handler if related is outside the target.
-			// NB: No relatedTarget if the mouse left/entered the browser window
-			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
-				event.type = handleObj.origType;
-				ret = handleObj.handler.apply( this, arguments );
-				event.type = fix;
-			}
-			return ret;
-		}
-	};
-});
-
-// IE submit delegation
-if ( !support.submitBubbles ) {
-
-	jQuery.event.special.submit = {
-		setup: function() {
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Lazy-add a submit handler when a descendant form may potentially be submitted
-			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-				// Node name check avoids a VML-related crash in IE (#9807)
-				var elem = e.target,
-					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
-					jQuery.event.add( form, "submit._submit", function( event ) {
-						event._submit_bubble = true;
-					});
-					jQuery._data( form, "submitBubbles", true );
-				}
-			});
-			// return undefined since we don't need an event listener
-		},
-
-		postDispatch: function( event ) {
-			// If form was submitted by the user, bubble the event up the tree
-			if ( event._submit_bubble ) {
-				delete event._submit_bubble;
-				if ( this.parentNode && !event.isTrigger ) {
-					jQuery.event.simulate( "submit", this.parentNode, event, true );
-				}
-			}
-		},
-
-		teardown: function() {
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-			jQuery.event.remove( this, "._submit" );
-		}
-	};
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !support.changeBubbles ) {
-
-	jQuery.event.special.change = {
-
-		setup: function() {
-
-			if ( rformElems.test( this.nodeName ) ) {
-				// IE doesn't fire change on a check/radio until blur; trigger it on click
-				// after a propertychange. Eat the blur-change in special.change.handle.
-				// This still fires onchange a second time for check/radio after blur.
-				if ( this.type === "checkbox" || this.type === "radio" ) {
-					jQuery.event.add( this, "propertychange._change", function( event ) {
-						if ( event.originalEvent.propertyName === "checked" ) {
-							this._just_changed = true;
-						}
-					});
-					jQuery.event.add( this, "click._change", function( event ) {
-						if ( this._just_changed && !event.isTrigger ) {
-							this._just_changed = false;
-						}
-						// Allow triggered, simulated change events (#11500)
-						jQuery.event.simulate( "change", this, event, true );
-					});
-				}
-				return false;
-			}
-			// Delegated event; lazy-add a change handler on descendant inputs
-			jQuery.event.add( this, "beforeactivate._change", function( e ) {
-				var elem = e.target;
-
-				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
-					jQuery.event.add( elem, "change._change", function( event ) {
-						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
-							jQuery.event.simulate( "change", this.parentNode, event, true );
-						}
-					});
-					jQuery._data( elem, "changeBubbles", true );
-				}
-			});
-		},
-
-		handle: function( event ) {
-			var elem = event.target;
-
-			// Swallow native change events from checkbox/radio, we already triggered them above
-			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
-				return event.handleObj.handler.apply( this, arguments );
-			}
-		},
-
-		teardown: function() {
-			jQuery.event.remove( this, "._change" );
-
-			return !rformElems.test( this.nodeName );
-		}
-	};
-}
-
-// Create "bubbling" focus and blur events
-if ( !support.focusinBubbles ) {
-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-		// Attach a single capturing handler on the document while someone wants focusin/focusout
-		var handler = function( event ) {
-				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
-			};
-
-		jQuery.event.special[ fix ] = {
-			setup: function() {
-				var doc = this.ownerDocument || this,
-					attaches = jQuery._data( doc, fix );
-
-				if ( !attaches ) {
-					doc.addEventListener( orig, handler, true );
-				}
-				jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
-			},
-			teardown: function() {
-				var doc = this.ownerDocument || this,
-					attaches = jQuery._data( doc, fix ) - 1;
-
-				if ( !attaches ) {
-					doc.removeEventListener( orig, handler, true );
-					jQuery._removeData( doc, fix );
-				} else {
-					jQuery._data( doc, fix, attaches );
-				}
-			}
-		};
-	});
-}
-
-jQuery.fn.extend({
-
-	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
-		var type, origFn;
-
-		// Types can be a map of types/handlers
-		if ( typeof types === "object" ) {
-			// ( types-Object, selector, data )
-			if ( typeof selector !== "string" ) {
-				// ( types-Object, data )
-				data = data || selector;
-				selector = undefined;
-			}
-			for ( type in types ) {
-				this.on( type, selector, data, types[ type ], one );
-			}
-			return this;
-		}
-
-		if ( data == null && fn == null ) {
-			// ( types, fn )
-			fn = selector;
-			data = selector = undefined;
-		} else if ( fn == null ) {
-			if ( typeof selector === "string" ) {
-				// ( types, selector, fn )
-				fn = data;
-				data = undefined;
-			} else {
-				// ( types, data, fn )
-				fn = data;
-				data = selector;
-				selector = undefined;
-			}
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		} else if ( !fn ) {
-			return this;
-		}
-
-		if ( one === 1 ) {
-			origFn = fn;
-			fn = function( event ) {
-				// Can use an empty set, since event contains the info
-				jQuery().off( event );
-				return origFn.apply( this, arguments );
-			};
-			// Use same guid so caller can remove using origFn
-			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-		}
-		return this.each( function() {
-			jQuery.event.add( this, types, fn, data, selector );
-		});
-	},
-	one: function( types, selector, data, fn ) {
-		return this.on( types, selector, data, fn, 1 );
-	},
-	off: function( types, selector, fn ) {
-		var handleObj, type;
-		if ( types && types.preventDefault && types.handleObj ) {
-			// ( event )  dispatched jQuery.Event
-			handleObj = types.handleObj;
-			jQuery( types.delegateTarget ).off(
-				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
-				handleObj.selector,
-				handleObj.handler
-			);
-			return this;
-		}
-		if ( typeof types === "object" ) {
-			// ( types-object [, selector] )
-			for ( type in types ) {
-				this.off( type, selector, types[ type ] );
-			}
-			return this;
-		}
-		if ( selector === false || typeof selector === "function" ) {
-			// ( types [, fn] )
-			fn = selector;
-			selector = undefined;
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		}
-		return this.each(function() {
-			jQuery.event.remove( this, types, fn, selector );
-		});
-	},
-
-	trigger: function( type, data ) {
-		return this.each(function() {
-			jQuery.event.trigger( type, data, this );
-		});
-	},
-	triggerHandler: function( type, data ) {
-		var elem = this[0];
-		if ( elem ) {
-			return jQuery.event.trigger( type, data, elem, true );
-		}
-	}
-});
-
-
-function createSafeFragment( document ) {
-	var list = nodeNames.split( "|" ),
-		safeFrag = document.createDocumentFragment();
-
-	if ( safeFrag.createElement ) {
-		while ( list.length ) {
-			safeFrag.createElement(
-				list.pop()
-			);
-		}
-	}
-	return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
-		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
-	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
-	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
-	rleadingWhitespace = /^\s+/,
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
-	rtagName = /<([\w:]+)/,
-	rtbody = /<tbody/i,
-	rhtml = /<|&#?\w+;/,
-	rnoInnerhtml = /<(?:script|style|link)/i,
-	// checked="checked" or checked
-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-	rscriptType = /^$|\/(?:java|ecma)script/i,
-	rscriptTypeMasked = /^true\/(.*)/,
-	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-
-	// We have to close these tags to support XHTML (#13200)
-	wrapMap = {
-		option: [ 1, "<select multiple='multiple'>", "</select>" ],
-		legend: [ 1, "<fieldset>", "</fieldset>" ],
-		area: [ 1, "<map>", "</map>" ],
-		param: [ 1, "<object>", "</object>" ],
-		thead: [ 1, "<table>", "</table>" ],
-		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
-		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
-		// unless wrapped in a div with non-breaking characters in front of it.
-		_default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
-	},
-	safeFragment = createSafeFragment( document ),
-	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-function getAll( context, tag ) {
-	var elems, elem,
-		i = 0,
-		found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
-			typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
-			undefined;
-
-	if ( !found ) {
-		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
-			if ( !tag || jQuery.nodeName( elem, tag ) ) {
-				found.push( elem );
-			} else {
-				jQuery.merge( found, getAll( elem, tag ) );
-			}
-		}
-	}
-
-	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
-		jQuery.merge( [ context ], found ) :
-		found;
-}
-
-// Used in buildFragment, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-	if ( rcheckableType.test( elem.type ) ) {
-		elem.defaultChecked = elem.checked;
-	}
-}
-
-// Support: IE<8
-// Manipulating tables requires a tbody
-function manipulationTarget( elem, content ) {
-	return jQuery.nodeName( elem, "table" ) &&
-		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
-
-		elem.getElementsByTagName("tbody")[0] ||
-			elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
-		elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
-	elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
-	return elem;
-}
-function restoreScript( elem ) {
-	var match = rscriptTypeMasked.exec( elem.type );
-	if ( match ) {
-		elem.type = match[1];
-	} else {
-		elem.removeAttribute("type");
-	}
-	return elem;
-}
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
-	var elem,
-		i = 0;
-	for ( ; (elem = elems[i]) != null; i++ ) {
-		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
-	}
-}
-
-function cloneCopyEvent( src, dest ) {
-
-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-		return;
-	}
-
-	var type, i, l,
-		oldData = jQuery._data( src ),
-		curData = jQuery._data( dest, oldData ),
-		events = oldData.events;
-
-	if ( events ) {
-		delete curData.handle;
-		curData.events = {};
-
-		for ( type in events ) {
-			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-				jQuery.event.add( dest, type, events[ type ][ i ] );
-			}
-		}
-	}
-
-	// make the cloned public data object a copy from the original
-	if ( curData.data ) {
-		curData.data = jQuery.extend( {}, curData.data );
-	}
-}
-
-function fixCloneNodeIssues( src, dest ) {
-	var nodeName, e, data;
-
-	// We do not need to do anything for non-Elements
-	if ( dest.nodeType !== 1 ) {
-		return;
-	}
-
-	nodeName = dest.nodeName.toLowerCase();
-
-	// IE6-8 copies events bound via attachEvent when using cloneNode.
-	if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
-		data = jQuery._data( dest );
-
-		for ( e in data.events ) {
-			jQuery.removeEvent( dest, e, data.handle );
-		}
-
-		// Event data gets referenced instead of copied if the expando gets copied too
-		dest.removeAttribute( jQuery.expando );
-	}
-
-	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
-	if ( nodeName === "script" && dest.text !== src.text ) {
-		disableScript( dest ).text = src.text;
-		restoreScript( dest );
-
-	// IE6-10 improperly clones children of object elements using classid.
-	// IE10 throws NoModificationAllowedError if parent is null, #12132.
-	} else if ( nodeName === "object" ) {
-		if ( dest.parentNode ) {
-			dest.outerHTML = src.outerHTML;
-		}
-
-		// This path appears unavoidable for IE9. When cloning an object
-		// element in IE9, the outerHTML strategy above is not sufficient.
-		// If the src has innerHTML and the destination does not,
-		// copy the src.innerHTML into the dest.innerHTML. #10324
-		if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
-			dest.innerHTML = src.innerHTML;
-		}
-
-	} else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
-		// IE6-8 fails to persist the checked state of a cloned checkbox
-		// or radio button. Worse, IE6-7 fail to give the cloned element
-		// a checked appearance if the defaultChecked value isn't also set
-
-		dest.defaultChecked = dest.checked = src.checked;
-
-		// IE6-7 get confused and end up setting the value of a cloned
-		// checkbox/radio button to an empty string instead of "on"
-		if ( dest.value !== src.value ) {
-			dest.value = src.value;
-		}
-
-	// IE6-8 fails to return the selected option to the default selected
-	// state when cloning options
-	} else if ( nodeName === "option" ) {
-		dest.defaultSelected = dest.selected = src.defaultSelected;
-
-	// IE6-8 fails to set the defaultValue to the correct value when
-	// cloning other types of input fields
-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
-		dest.defaultValue = src.defaultValue;
-	}
-}
-
-jQuery.extend({
-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-		var destElements, node, clone, i, srcElements,
-			inPage = jQuery.contains( elem.ownerDocument, elem );
-
-		if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
-			clone = elem.cloneNode( true );
-
-		// IE<=8 does not properly clone detached, unknown element nodes
-		} else {
-			fragmentDiv.innerHTML = elem.outerHTML;
-			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
-		}
-
-		if ( (!support.noCloneEvent || !support.noCloneChecked) &&
-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-
-			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
-			destElements = getAll( clone );
-			srcElements = getAll( elem );
-
-			// Fix all IE cloning issues
-			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
-				// Ensure that the destination node is not null; Fixes #9587
-				if ( destElements[i] ) {
-					fixCloneNodeIssues( node, destElements[i] );
-				}
-			}
-		}
-
-		// Copy the events from the original to the clone
-		if ( dataAndEvents ) {
-			if ( deepDataAndEvents ) {
-				srcElements = srcElements || getAll( elem );
-				destElements = destElements || getAll( clone );
-
-				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
-					cloneCopyEvent( node, destElements[i] );
-				}
-			} else {
-				cloneCopyEvent( elem, clone );
-			}
-		}
-
-		// Preserve script evaluation history
-		destElements = getAll( clone, "script" );
-		if ( destElements.length > 0 ) {
-			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
-		}
-
-		destElements = srcElements = node = null;
-
-		// Return the cloned set
-		return clone;
-	},
-
-	buildFragment: function( elems, context, scripts, selection ) {
-		var j, elem, contains,
-			tmp, tag, tbody, wrap,
-			l = elems.length,
-
-			// Ensure a safe fragment
-			safe = createSafeFragment( context ),
-
-			nodes = [],
-			i = 0;
-
-		for ( ; i < l; i++ ) {
-			elem = elems[ i ];
-
-			if ( elem || elem === 0 ) {
-
-				// Add nodes directly
-				if ( jQuery.type( elem ) === "object" ) {
-					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
-				// Convert non-html into a text node
-				} else if ( !rhtml.test( elem ) ) {
-					nodes.push( context.createTextNode( elem ) );
-
-				// Convert html into DOM nodes
-				} else {
-					tmp = tmp || safe.appendChild( context.createElement("div") );
-
-					// Deserialize a standard representation
-					tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
-					wrap = wrapMap[ tag ] || wrapMap._default;
-
-					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
-
-					// Descend through wrappers to the right content
-					j = wrap[0];
-					while ( j-- ) {
-						tmp = tmp.lastChild;
-					}
-
-					// Manually add leading whitespace removed by IE
-					if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
-					}
-
-					// Remove IE's autoinserted <tbody> from table fragments
-					if ( !support.tbody ) {
-
-						// String was a <table>, *may* have spurious <tbody>
-						elem = tag === "table" && !rtbody.test( elem ) ?
-							tmp.firstChild :
-
-							// String was a bare <thead> or <tfoot>
-							wrap[1] === "<table>" && !rtbody.test( elem ) ?
-								tmp :
-								0;
-
-						j = elem && elem.childNodes.length;
-						while ( j-- ) {
-							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
-								elem.removeChild( tbody );
-							}
-						}
-					}
-
-					jQuery.merge( nodes, tmp.childNodes );
-
-					// Fix #12392 for WebKit and IE > 9
-					tmp.textContent = "";
-
-					// Fix #12392 for oldIE
-					while ( tmp.firstChild ) {
-						tmp.removeChild( tmp.firstChild );
-					}
-
-					// Remember the top-level container for proper cleanup
-					tmp = safe.lastChild;
-				}
-			}
-		}
-
-		// Fix #11356: Clear elements from fragment
-		if ( tmp ) {
-			safe.removeChild( tmp );
-		}
-
-		// Reset defaultChecked for any radios and checkboxes
-		// about to be appended to the DOM in IE 6/7 (#8060)
-		if ( !support.appendChecked ) {
-			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
-		}
-
-		i = 0;
-		while ( (elem = nodes[ i++ ]) ) {
-
-			// #4087 - If origin and destination elements are the same, and this is
-			// that element, do not do anything
-			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
-				continue;
-			}
-
-			contains = jQuery.contains( elem.ownerDocument, elem );
-
-			// Append to fragment
-			tmp = getAll( safe.appendChild( elem ), "script" );
-
-			// Preserve script evaluation history
-			if ( contains ) {
-				setGlobalEval( tmp );
-			}
-
-			// Capture executables
-			if ( scripts ) {
-				j = 0;
-				while ( (elem = tmp[ j++ ]) ) {
-					if ( rscriptType.test( elem.type || "" ) ) {
-						scripts.push( elem );
-					}
-				}
-			}
-		}
-
-		tmp = null;
-
-		return safe;
-	},
-
-	cleanData: function( elems, /* internal */ acceptData ) {
-		var elem, type, id, data,
-			i = 0,
-			internalKey = jQuery.expando,
-			cache = jQuery.cache,
-			deleteExpando = support.deleteExpando,
-			special = jQuery.event.special;
-
-		for ( ; (elem = elems[i]) != null; i++ ) {
-			if ( acceptData || jQuery.acceptData( elem ) ) {
-
-				id = elem[ internalKey ];
-				data = id && cache[ id ];
-
-				if ( data ) {
-					if ( data.events ) {
-						for ( type in data.events ) {
-							if ( special[ type ] ) {
-								jQuery.event.remove( elem, type );
-
-							// This is a shortcut to avoid jQuery.event.remove's overhead
-							} else {
-								jQuery.removeEvent( elem, type, data.handle );
-							}
-						}
-					}
-
-					// Remove cache only if it was not already removed by jQuery.event.remove
-					if ( cache[ id ] ) {
-
-						delete cache[ id ];
-
-						// IE does not allow us to delete expando properties from nodes,
-						// nor does it have a removeAttribute function on Document nodes;
-						// we must handle all of these cases
-						if ( deleteExpando ) {
-							delete elem[ internalKey ];
-
-						} else if ( typeof elem.removeAttribute !== strundefined ) {
-							elem.removeAttribute( internalKey );
-
-						} else {
-							elem[ internalKey ] = null;
-						}
-
-						deletedIds.push( id );
-					}
-				}
-			}
-		}
-	}
-});
-
-jQuery.fn.extend({
-	text: function( value ) {
-		return access( this, function( value ) {
-			return value === undefined ?
-				jQuery.text( this ) :
-				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
-		}, null, value, arguments.length );
-	},
-
-	append: function() {
-		return this.domManip( arguments, function( elem ) {
-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-				var target = manipulationTarget( this, elem );
-				target.appendChild( elem );
-			}
-		});
-	},
-
-	prepend: function() {
-		return this.domManip( arguments, function( elem ) {
-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-				var target = manipulationTarget( this, elem );
-				target.insertBefore( elem, target.firstChild );
-			}
-		});
-	},
-
-	before: function() {
-		return this.domManip( arguments, function( elem ) {
-			if ( this.parentNode ) {
-				this.parentNode.insertBefore( elem, this );
-			}
-		});
-	},
-
-	after: function() {
-		return this.domManip( arguments, function( elem ) {
-			if ( this.parentNode ) {
-				this.parentNode.insertBefore( elem, this.nextSibling );
-			}
-		});
-	},
-
-	remove: function( selector, keepData /* Internal Use Only */ ) {
-		var elem,
-			elems = selector ? jQuery.filter( selector, this ) : this,
-			i = 0;
-
-		for ( ; (elem = elems[i]) != null; i++ ) {
-
-			if ( !keepData && elem.nodeType === 1 ) {
-				jQuery.cleanData( getAll( elem ) );
-			}
-
-			if ( elem.parentNode ) {
-				if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
-					setGlobalEval( getAll( elem, "script" ) );
-				}
-				elem.parentNode.removeChild( elem );
-			}
-		}
-
-		return this;
-	},
-
-	empty: function() {
-		var elem,
-			i = 0;
-
-		for ( ; (elem = this[i]) != null; i++ ) {
-			// Remove element nodes and prevent memory leaks
-			if ( elem.nodeType === 1 ) {
-				jQuery.cleanData( getAll( elem, false ) );
-			}
-
-			// Remove any remaining nodes
-			while ( elem.firstChild ) {
-				elem.removeChild( elem.firstChild );
-			}
-
-			// If this is a select, ensure that it displays empty (#12336)
-			// Support: IE<9
-			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
-				elem.options.length = 0;
-			}
-		}
-
-		return this;
-	},
-
-	clone: function( dataAndEvents, deepDataAndEvents ) {
-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-		return this.map(function() {
-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-		});
-	},
-
-	html: function( value ) {
-		return access( this, function( value ) {
-			var elem = this[ 0 ] || {},
-				i = 0,
-				l = this.length;
-
-			if ( value === undefined ) {
-				return elem.nodeType === 1 ?
-					elem.innerHTML.replace( rinlinejQuery, "" ) :
-					undefined;
-			}
-
-			// See if we can take a shortcut and just use innerHTML
-			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-				( support.htmlSerialize || !rnoshimcache.test( value )  ) &&
-				( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
-				!wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
-
-				value = value.replace( rxhtmlTag, "<$1></$2>" );
-
-				try {
-					for (; i < l; i++ ) {
-						// Remove element nodes and prevent memory leaks
-						elem = this[i] || {};
-						if ( elem.nodeType === 1 ) {
-							jQuery.cleanData( getAll( elem, false ) );
-							elem.innerHTML = value;
-						}
-					}
-
-					elem = 0;
-
-				// If using innerHTML throws an exception, use the fallback method
-				} catch(e) {}
-			}
-
-			if ( elem ) {
-				this.empty().append( value );
-			}
-		}, null, value, arguments.length );
-	},
-
-	replaceWith: function() {
-		var arg = arguments[ 0 ];
-
-		// Make the changes, replacing each context element with the new content
-		this.domManip( arguments, function( elem ) {
-			arg = this.parentNode;
-
-			jQuery.cleanData( getAll( this ) );
-
-			if ( arg ) {
-				arg.replaceChild( elem, this );
-			}
-		});
-
-		// Force removal if there was no new content (e.g., from empty arguments)
-		return arg && (arg.length || arg.nodeType) ? this : this.remove();
-	},
-
-	detach: function( selector ) {
-		return this.remove( selector, true );
-	},
-
-	domManip: function( args, callback ) {
-
-		// Flatten any nested arrays
-		args = concat.apply( [], args );
-
-		var first, node, hasScripts,
-			scripts, doc, fragment,
-			i = 0,
-			l = this.length,
-			set = this,
-			iNoClone = l - 1,
-			value = args[0],
-			isFunction = jQuery.isFunction( value );
-
-		// We can't cloneNode fragments that contain checked, in WebKit
-		if ( isFunction ||
-				( l > 1 && typeof value === "string" &&
-					!support.checkClone && rchecked.test( value ) ) ) {
-			return this.each(function( index ) {
-				var self = set.eq( index );
-				if ( isFunction ) {
-					args[0] = value.call( this, index, self.html() );
-				}
-				self.domManip( args, callback );
-			});
-		}
-
-		if ( l ) {
-			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
-			first = fragment.firstChild;
-
-			if ( fragment.childNodes.length === 1 ) {
-				fragment = first;
-			}
-
-			if ( first ) {
-				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
-				hasScripts = scripts.length;
-
-				// Use the original fragment for the last item instead of the first because it can end up
-				// being emptied incorrectly in certain situations (#8070).
-				for ( ; i < l; i++ ) {
-					node = fragment;
-
-					if ( i !== iNoClone ) {
-						node = jQuery.clone( node, true, true );
-
-						// Keep references to cloned scripts for later restoration
-						if ( hasScripts ) {
-							jQuery.merge( scripts, getAll( node, "script" ) );
-						}
-					}
-
-					callback.call( this[i], node, i );
-				}
-
-				if ( hasScripts ) {
-					doc = scripts[ scripts.length - 1 ].ownerDocument;
-
-					// Reenable scripts
-					jQuery.map( scripts, restoreScript );
-
-					// Evaluate executable scripts on first document insertion
-					for ( i = 0; i < hasScripts; i++ ) {
-						node = scripts[ i ];
-						if ( rscriptType.test( node.type || "" ) &&
-							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
-
-							if ( node.src ) {
-								// Optional AJAX dependency, but won't run scripts if not present
-								if ( jQuery._evalUrl ) {
-									jQuery._evalUrl( node.src );
-								}
-							} else {
-								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
-							}
-						}
-					}
-				}
-
-				// Fix #11809: Avoid leaking memory
-				fragment = first = null;
-			}
-		}
-
-		return this;
-	}
-});
-
-jQuery.each({
-	appendTo: "append",
-	prependTo: "prepend",
-	insertBefore: "before",
-	insertAfter: "after",
-	replaceAll: "replaceWith"
-}, function( name, original ) {
-	jQuery.fn[ name ] = function( selector ) {
-		var elems,
-			i = 0,
-			ret = [],
-			insert = jQuery( selector ),
-			last = insert.length - 1;
-
-		for ( ; i <= last; i++ ) {
-			elems = i === last ? this : this.clone(true);
-			jQuery( insert[i] )[ original ]( elems );
-
-			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
-			push.apply( ret, elems.get() );
-		}
-
-		return this.pushStack( ret );
-	};
-});
-
-
-var iframe,
-	elemdisplay = {};
-
-/**
- * Retrieve the actual display of a element
- * @param {String} name nodeName of the element
- * @param {Object} doc Document object
- */
-// Called only from within defaultDisplay
-function actualDisplay( name, doc ) {
-	var style,
-		elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
-
-		// getDefaultComputedStyle might be reliably used only on attached element
-		display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
-
-			// Use of this method is a temporary fix (more like optmization) until something better comes along,
-			// since it was removed from specification and supported only in FF
-			style.display : jQuery.css( elem[ 0 ], "display" );
-
-	// We don't have any data stored on the element,
-	// so use "detach" method as fast way to get rid of the element
-	elem.detach();
-
-	return display;
-}
-
-/**
- * Try to determine the default display value of an element
- * @param {String} nodeName
- */
-function defaultDisplay( nodeName ) {
-	var doc = document,
-		display = elemdisplay[ nodeName ];
-
-	if ( !display ) {
-		display = actualDisplay( nodeName, doc );
-
-		// If the simple way fails, read from inside an iframe
-		if ( display === "none" || !display ) {
-
-			// Use the already-created iframe if possible
-			iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
-
-			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
-			doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
-
-			// Support: IE
-			doc.write();
-			doc.close();
-
-			display = actualDisplay( nodeName, doc );
-			iframe.detach();
-		}
-
-		// Store the correct default display
-		elemdisplay[ nodeName ] = display;
-	}
-
-	return display;
-}
-
-
-(function() {
-	var shrinkWrapBlocksVal;
-
-	support.shrinkWrapBlocks = function() {
-		if ( shrinkWrapBlocksVal != null ) {
-			return shrinkWrapBlocksVal;
-		}
-
-		// Will be changed later if needed.
-		shrinkWrapBlocksVal = false;
-
-		// Minified: var b,c,d
-		var div, body, container;
-
-		body = document.getElementsByTagName( "body" )[ 0 ];
-		if ( !body || !body.style ) {
-			// Test fired too early or in an unsupported environment, exit.
-			return;
-		}
-
-		// Setup
-		div = document.createElement( "div" );
-		container = document.createElement( "div" );
-		container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
-		body.appendChild( container ).appendChild( div );
-
-		// Support: IE6
-		// Check if elements with layout shrink-wrap their children
-		if ( typeof div.style.zoom !== strundefined ) {
-			// Reset CSS: box-sizing; display; margin; border
-			div.style.cssText =
-				// Support: Firefox<29, Android 2.3
-				// Vendor-prefix box-sizing
-				"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
-				"box-sizing:content-box;display:block;margin:0;border:0;" +
-				"padding:1px;width:1px;zoom:1";
-			div.appendChild( document.createElement( "div" ) ).style.width = "5px";
-			shrinkWrapBlocksVal = div.offsetWidth !== 3;
-		}
-
-		body.removeChild( container );
-
-		return shrinkWrapBlocksVal;
-	};
-
-})();
-var rmargin = (/^margin/);
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-
-
-var getStyles, curCSS,
-	rposition = /^(top|right|bottom|left)$/;
-
-if ( window.getComputedStyle ) {
-	getStyles = function( elem ) {
-		// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
-		// IE throws on elements created in popups
-		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
-		if ( elem.ownerDocument.defaultView.opener ) {
-			return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
-		}
-
-		return window.getComputedStyle( elem, null );
-	};
-
-	curCSS = function( elem, name, computed ) {
-		var width, minWidth, maxWidth, ret,
-			style = elem.style;
-
-		computed = computed || getStyles( elem );
-
-		// getPropertyValue is only needed for .css('filter') in IE9, see #12537
-		ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
-
-		if ( computed ) {
-
-			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
-				ret = jQuery.style( elem, name );
-			}
-
-			// A tribute to the "awesome hack by Dean Edwards"
-			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
-			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
-			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
-			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
-				// Remember the original values
-				width = style.width;
-				minWidth = style.minWidth;
-				maxWidth = style.maxWidth;
-
-				// Put in the new values to get a computed value out
-				style.minWidth = style.maxWidth = style.width = ret;
-				ret = computed.width;
-
-				// Revert the changed values
-				style.width = width;
-				style.minWidth = minWidth;
-				style.maxWidth = maxWidth;
-			}
-		}
-
-		// Support: IE
-		// IE returns zIndex value as an integer.
-		return ret === undefined ?
-			ret :
-			ret + "";
-	};
-} else if ( document.documentElement.currentStyle ) {
-	getStyles = function( elem ) {
-		return elem.currentStyle;
-	};
-
-	curCSS = function( elem, name, computed ) {
-		var left, rs, rsLeft, ret,
-			style = elem.style;
-
-		computed = computed || getStyles( elem );
-		ret = computed ? computed[ name ] : undefined;
-
-		// Avoid setting ret to empty string here
-		// so we don't default to auto
-		if ( ret == null && style && style[ name ] ) {
-			ret = style[ name ];
-		}
-
-		// From the awesome hack by Dean Edwards
-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-		// If we're not dealing with a regular pixel number
-		// but a number that has a weird ending, we need to convert it to pixels
-		// but not position css attributes, as those are proportional to the parent element instead
-		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
-		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
-
-			// Remember the original values
-			left = style.left;
-			rs = elem.runtimeStyle;
-			rsLeft = rs && rs.left;
-
-			// Put in the new values to get a computed value out
-			if ( rsLeft ) {
-				rs.left = elem.currentStyle.left;
-			}
-			style.left = name === "fontSize" ? "1em" : ret;
-			ret = style.pixelLeft + "px";
-
-			// Revert the changed values
-			style.left = left;
-			if ( rsLeft ) {
-				rs.left = rsLeft;
-			}
-		}
-
-		// Support: IE
-		// IE returns zIndex value as an integer.
-		return ret === undefined ?
-			ret :
-			ret + "" || "auto";
-	};
-}
-
-
-
-
-function addGetHookIf( conditionFn, hookFn ) {
-	// Define the hook, we'll check on the first run if it's really needed.
-	return {
-		get: function() {
-			var condition = conditionFn();
-
-			if ( condition == null ) {
-				// The test was not ready at this point; screw the hook this time
-				// but check again when needed next time.
-				return;
-			}
-
-			if ( condition ) {
-				// Hook not needed (or it's not possible to use it due to missing dependency),
-				// remove it.
-				// Since there are no other hooks for marginRight, remove the whole object.
-				delete this.get;
-				return;
-			}
-
-			// Hook needed; redefine it so that the support test is not executed again.
-
-			return (this.get = hookFn).apply( this, arguments );
-		}
-	};
-}
-
-
-(function() {
-	// Minified: var b,c,d,e,f,g, h,i
-	var div, style, a, pixelPositionVal, boxSizingReliableVal,
-		reliableHiddenOffsetsVal, reliableMarginRightVal;
-
-	// Setup
-	div = document.createElement( "div" );
-	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-	a = div.getElementsByTagName( "a" )[ 0 ];
-	style = a && a.style;
-
-	// Finish early in limited (non-browser) environments
-	if ( !style ) {
-		return;
-	}
-
-	style.cssText = "float:left;opacity:.5";
-
-	// Support: IE<9
-	// Make sure that element opacity exists (as opposed to filter)
-	support.opacity = style.opacity === "0.5";
-
-	// Verify style float existence
-	// (IE uses styleFloat instead of cssFloat)
-	support.cssFloat = !!style.cssFloat;
-
-	div.style.backgroundClip = "content-box";
-	div.cloneNode( true ).style.backgroundClip = "";
-	support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
-	// Support: Firefox<29, Android 2.3
-	// Vendor-prefix box-sizing
-	support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
-		style.WebkitBoxSizing === "";
-
-	jQuery.extend(support, {
-		reliableHiddenOffsets: function() {
-			if ( reliableHiddenOffsetsVal == null ) {
-				computeStyleTests();
-			}
-			return reliableHiddenOffsetsVal;
-		},
-
-		boxSizingReliable: function() {
-			if ( boxSizingReliableVal == null ) {
-				computeStyleTests();
-			}
-			return boxSizingReliableVal;
-		},
-
-		pixelPosition: function() {
-			if ( pixelPositionVal == null ) {
-				computeStyleTests();
-			}
-			return pixelPositionVal;
-		},
-
-		// Support: Android 2.3
-		reliableMarginRight: function() {
-			if ( reliableMarginRightVal == null ) {
-				computeStyleTests();
-			}
-			return reliableMarginRightVal;
-		}
-	});
-
-	function computeStyleTests() {
-		// Minified: var b,c,d,j
-		var div, body, container, contents;
-
-		body = document.getElementsByTagName( "body" )[ 0 ];
-		if ( !body || !body.style ) {
-			// Test fired too early or in an unsupported environment, exit.
-			return;
-		}
-
-		// Setup
-		div = document.createElement( "div" );
-		container = document.createElement( "div" );
-		container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
-		body.appendChild( container ).appendChild( div );
-
-		div.style.cssText =
-			// Support: Firefox<29, Android 2.3
-			// Vendor-prefix box-sizing
-			"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
-			"box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
-			"border:1px;padding:1px;width:4px;position:absolute";
-
-		// Support: IE<9
-		// Assume reasonable values in the absence of getComputedStyle
-		pixelPositionVal = boxSizingReliableVal = false;
-		reliableMarginRightVal = true;
-
-		// Check for getComputedStyle so that this code is not run in IE<9.
-		if ( window.getComputedStyle ) {
-			pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
-			boxSizingReliableVal =
-				( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
-
-			// Support: Android 2.3
-			// Div with explicit width and no margin-right incorrectly
-			// gets computed margin-right based on width of container (#3333)
-			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-			contents = div.appendChild( document.createElement( "div" ) );
-
-			// Reset CSS: box-sizing; display; margin; border; padding
-			contents.style.cssText = div.style.cssText =
-				// Support: Firefox<29, Android 2.3
-				// Vendor-prefix box-sizing
-				"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
-				"box-sizing:content-box;display:block;margin:0;border:0;padding:0";
-			contents.style.marginRight = contents.style.width = "0";
-			div.style.width = "1px";
-
-			reliableMarginRightVal =
-				!parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
-
-			div.removeChild( contents );
-		}
-
-		// Support: IE8
-		// Check if table cells still have offsetWidth/Height when they are set
-		// to display:none and there are still other visible table cells in a
-		// table row; if so, offsetWidth/Height are not reliable for use when
-		// determining if an element has been hidden directly using
-		// display:none (it is still safe to use offsets if a parent element is
-		// hidden; don safety goggles and see bug #4512 for more information).
-		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
-		contents = div.getElementsByTagName( "td" );
-		contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
-		reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
-		if ( reliableHiddenOffsetsVal ) {
-			contents[ 0 ].style.display = "";
-			contents[ 1 ].style.display = "none";
-			reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
-		}
-
-		body.removeChild( container );
-	}
-
-})();
-
-
-// A method for quickly swapping in/out CSS properties to get correct calculations.
-jQuery.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;
-};
-
-
-var
-		ralpha = /alpha\([^)]*\)/i,
-	ropacity = /opacity\s*=\s*([^)]*)/,
-
-	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
-	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
-	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
-	rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
-	rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
-
-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-	cssNormalTransform = {
-		letterSpacing: "0",
-		fontWeight: "400"
-	},
-
-	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
-
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
-
-	// shortcut for names that are not vendor prefixed
-	if ( name in style ) {
-		return name;
-	}
-
-	// check for vendor prefixed names
-	var capName = name.charAt(0).toUpperCase() + name.slice(1),
-		origName = name,
-		i = cssPrefixes.length;
-
-	while ( i-- ) {
-		name = cssPrefixes[ i ] + capName;
-		if ( name in style ) {
-			return name;
-		}
-	}
-
-	return origName;
-}
-
-function showHide( elements, show ) {
-	var display, elem, hidden,
-		values = [],
-		index = 0,
-		length = elements.length;
-
-	for ( ; index < length; index++ ) {
-		elem = elements[ index ];
-		if ( !elem.style ) {
-			continue;
-		}
-
-		values[ index ] = jQuery._data( elem, "olddisplay" );
-		display = elem.style.display;
-		if ( show ) {
-			// Reset the inline display of this element to learn if it is
-			// being hidden by cascaded rules or not
-			if ( !values[ index ] && display === "none" ) {
-				elem.style.display = "";
-			}
-
-			// Set elements which have been overridden with display: none
-			// in a stylesheet to whatever the default browser style is
-			// for such an element
-			if ( elem.style.display === "" && isHidden( elem ) ) {
-				values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
-			}
-		} else {
-			hidden = isHidden( elem );
-
-			if ( display && display !== "none" || !hidden ) {
-				jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
-			}
-		}
-	}
-
-	// Set the display of most of the elements in a second loop
-	// to avoid the constant reflow
-	for ( index = 0; index < length; index++ ) {
-		elem = elements[ index ];
-		if ( !elem.style ) {
-			continue;
-		}
-		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
-			elem.style.display = show ? values[ index ] || "" : "none";
-		}
-	}
-
-	return elements;
-}
-
-function setPositiveNumber( elem, value, subtract ) {
-	var matches = rnumsplit.exec( value );
-	return matches ?
-		// Guard against undefined "subtract", e.g., when used as in cssHooks
-		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
-		value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
-	var i = extra === ( isBorderBox ? "border" : "content" ) ?
-		// If we already have the right measurement, avoid augmentation
-		4 :
-		// Otherwise initialize for horizontal or vertical properties
-		name === "width" ? 1 : 0,
-
-		val = 0;
-
-	for ( ; i < 4; i += 2 ) {
-		// both box models exclude margin, so add it if we want it
-		if ( extra === "margin" ) {
-			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
-		}
-
-		if ( isBorderBox ) {
-			// border-box includes padding, so remove it if we want content
-			if ( extra === "content" ) {
-				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-			}
-
-			// at this point, extra isn't border nor margin, so remove border
-			if ( extra !== "margin" ) {
-				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-			}
-		} else {
-			// at this point, extra isn't content, so add padding
-			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
-			// at this point, extra isn't content nor padding, so add border
-			if ( extra !== "padding" ) {
-				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-			}
-		}
-	}
-
-	return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
-	// Start with offset property, which is equivalent to the border-box value
-	var valueIsBorderBox = true,
-		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-		styles = getStyles( elem ),
-		isBorderBox = support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
-	// some non-html elements return undefined for offsetWidth, so check for null/undefined
-	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
-	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
-	if ( val <= 0 || val == null ) {
-		// Fall back to computed then uncomputed css if necessary
-		val = curCSS( elem, name, styles );
-		if ( val < 0 || val == null ) {
-			val = elem.style[ name ];
-		}
-
-		// Computed unit is not pixels. Stop here and return.
-		if ( rnumnonpx.test(val) ) {
-			return val;
-		}
-
-		// we need the check for style in case a browser which returns unreliable values
-		// for getComputedStyle silently falls back to the reliable elem.style
-		valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
-
-		// Normalize "", auto, and prepare for extra
-		val = parseFloat( val ) || 0;
-	}
-
-	// use the active box-sizing model to add/subtract irrelevant styles
-	return ( val +
-		augmentWidthOrHeight(
-			elem,
-			name,
-			extra || ( isBorderBox ? "border" : "content" ),
-			valueIsBorderBox,
-			styles
-		)
-	) + "px";
-}
-
-jQuery.extend({
-	// Add in style property hooks for overriding the default
-	// behavior of getting and setting a style property
-	cssHooks: {
-		opacity: {
-			get: function( elem, computed ) {
-				if ( computed ) {
-					// We should always get a number back from opacity
-					var ret = curCSS( elem, "opacity" );
-					return ret === "" ? "1" : ret;
-				}
-			}
-		}
-	},
-
-	// Don't automatically add "px" to these possibly-unitless properties
-	cssNumber: {
-		"columnCount": true,
-		"fillOpacity": true,
-		"flexGrow": true,
-		"flexShrink": true,
-		"fontWeight": true,
-		"lineHeight": true,
-		"opacity": true,
-		"order": true,
-		"orphans": true,
-		"widows": true,
-		"zIndex": true,
-		"zoom": true
-	},
-
-	// Add in properties whose names you wish to fix before
-	// setting or getting the value
-	cssProps: {
-		// normalize float css property
-		"float": support.cssFloat ? "cssFloat" : "styleFloat"
-	},
-
-	// Get and set the style property on a DOM Node
-	style: function( elem, name, value, extra ) {
-		// Don't set styles on text and comment nodes
-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-			return;
-		}
-
-		// Make sure that we're working with the right name
-		var ret, type, hooks,
-			origName = jQuery.camelCase( name ),
-			style = elem.style;
-
-		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
-		// gets hook for the prefixed version
-		// followed by the unprefixed version
-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-		// Check if we're setting a value
-		if ( value !== undefined ) {
-			type = typeof value;
-
-			// convert relative number strings (+= or -=) to relative numbers. #7345
-			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
-				// Fixes bug #9237
-				type = "number";
-			}
-
-			// Make sure that null and NaN values aren't set. See: #7116
-			if ( value == null || value !== value ) {
-				return;
-			}
-
-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-				value += "px";
-			}
-
-			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
-			// but it would mean to define eight (for every problematic property) identical functions
-			if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
-				style[ name ] = "inherit";
-			}
-
-			// If a hook was provided, use that value, otherwise just set the specified value
-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
-
-				// Support: IE
-				// Swallow errors from 'invalid' CSS values (#5509)
-				try {
-					style[ name ] = value;
-				} catch(e) {}
-			}
-
-		} else {
-			// If a hook was provided get the non-computed value from there
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-				return ret;
-			}
-
-			// Otherwise just get the value from the style object
-			return style[ name ];
-		}
-	},
-
-	css: function( elem, name, extra, styles ) {
-		var num, val, hooks,
-			origName = jQuery.camelCase( name );
-
-		// Make sure that we're working with the right name
-		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
-		// gets hook for the prefixed version
-		// followed by the unprefixed version
-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-		// If a hook was provided get the computed value from there
-		if ( hooks && "get" in hooks ) {
-			val = hooks.get( elem, true, extra );
-		}
-
-		// Otherwise, if a way to get the computed value exists, use that
-		if ( val === undefined ) {
-			val = curCSS( elem, name, styles );
-		}
-
-		//convert "normal" to computed value
-		if ( val === "normal" && name in cssNormalTransform ) {
-			val = cssNormalTransform[ name ];
-		}
-
-		// Return, converting to number if forced or a qualifier was provided and val looks numeric
-		if ( extra === "" || extra ) {
-			num = parseFloat( val );
-			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
-		}
-		return val;
-	}
-});
-
-jQuery.each([ "height", "width" ], function( i, name ) {
-	jQuery.cssHooks[ name ] = {
-		get: function( elem, computed, extra ) {
-			if ( computed ) {
-				// certain elements can have dimension info if we invisibly show them
-				// however, it must have a current display style that would benefit from this
-				return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
-					jQuery.swap( elem, cssShow, function() {
-						return getWidthOrHeight( elem, name, extra );
-					}) :
-					getWidthOrHeight( elem, name, extra );
-			}
-		},
-
-		set: function( elem, value, extra ) {
-			var styles = extra && getStyles( elem );
-			return setPositiveNumber( elem, value, extra ?
-				augmentWidthOrHeight(
-					elem,
-					name,
-					extra,
-					support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
-					styles
-				) : 0
-			);
-		}
-	};
-});
-
-if ( !support.opacity ) {
-	jQuery.cssHooks.opacity = {
-		get: function( elem, computed ) {
-			// IE uses filters for opacity
-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
-				computed ? "1" : "";
-		},
-
-		set: function( elem, value ) {
-			var style = elem.style,
-				currentStyle = elem.currentStyle,
-				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-				filter = currentStyle && currentStyle.filter || style.filter || "";
-
-			// IE has trouble with opacity if it does not have layout
-			// Force it by setting the zoom level
-			style.zoom = 1;
-
-			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-			// if value === "", then remove inline opacity #12685
-			if ( ( value >= 1 || value === "" ) &&
-					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
-					style.removeAttribute ) {
-
-				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-				// if "filter:" is present at all, clearType is disabled, we want to avoid this
-				// style.removeAttribute is IE Only, but so apparently is this code path...
-				style.removeAttribute( "filter" );
-
-				// if there is no filter style applied in a css rule or unset inline opacity, we are done
-				if ( value === "" || currentStyle && !currentStyle.filter ) {
-					return;
-				}
-			}
-
-			// otherwise, set new filter values
-			style.filter = ralpha.test( filter ) ?
-				filter.replace( ralpha, opacity ) :
-				filter + " " + opacity;
-		}
-	};
-}
-
-jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
-	function( elem, computed ) {
-		if ( computed ) {
-			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-			// Work around by temporarily setting element display to inline-block
-			return jQuery.swap( elem, { "display": "inline-block" },
-				curCSS, [ elem, "marginRight" ] );
-		}
-	}
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each({
-	margin: "",
-	padding: "",
-	border: "Width"
-}, function( prefix, suffix ) {
-	jQuery.cssHooks[ prefix + suffix ] = {
-		expand: function( value ) {
-			var i = 0,
-				expanded = {},
-
-				// assumes a single number if not a string
-				parts = typeof value === "string" ? value.split(" ") : [ value ];
-
-			for ( ; i < 4; i++ ) {
-				expanded[ prefix + cssExpand[ i ] + suffix ] =
-					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
-			}
-
-			return expanded;
-		}
-	};
-
-	if ( !rmargin.test( prefix ) ) {
-		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
-	}
-});
-
-jQuery.fn.extend({
-	css: function( name, value ) {
-		return access( this, function( elem, name, value ) {
-			var styles, len,
-				map = {},
-				i = 0;
-
-			if ( jQuery.isArray( name ) ) {
-				styles = getStyles( elem );
-				len = name.length;
-
-				for ( ; i < len; i++ ) {
-					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
-				}
-
-				return map;
-			}
-
-			return value !== undefined ?
-				jQuery.style( elem, name, value ) :
-				jQuery.css( elem, name );
-		}, name, value, arguments.length > 1 );
-	},
-	show: function() {
-		return showHide( this, true );
-	},
-	hide: function() {
-		return showHide( this );
-	},
-	toggle: function( state ) {
-		if ( typeof state === "boolean" ) {
-			return state ? this.show() : this.hide();
-		}
-
-		return this.each(function() {
-			if ( isHidden( this ) ) {
-				jQuery( this ).show();
-			} else {
-				jQuery( this ).hide();
-			}
-		});
-	}
-});
-
-
-function Tween( elem, options, prop, end, easing ) {
-	return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
-	constructor: Tween,
-	init: function( elem, options, prop, end, easing, unit ) {
-		this.elem = elem;
-		this.prop = prop;
-		this.easing = easing || "swing";
-		this.options = options;
-		this.start = this.now = this.cur();
-		this.end = end;
-		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
-	},
-	cur: function() {
-		var hooks = Tween.propHooks[ this.prop ];
-
-		return hooks && hooks.get ?
-			hooks.get( this ) :
-			Tween.propHooks._default.get( this );
-	},
-	run: function( percent ) {
-		var eased,
-			hooks = Tween.propHooks[ this.prop ];
-
-		if ( this.options.duration ) {
-			this.pos = eased = jQuery.easing[ this.easing ](
-				percent, this.options.duration * percent, 0, 1, this.options.duration
-			);
-		} else {
-			this.pos = eased = percent;
-		}
-		this.now = ( this.end - this.start ) * eased + this.start;
-
-		if ( this.options.step ) {
-			this.options.step.call( this.elem, this.now, this );
-		}
-
-		if ( hooks && hooks.set ) {
-			hooks.set( this );
-		} else {
-			Tween.propHooks._default.set( this );
-		}
-		return this;
-	}
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
-	_default: {
-		get: function( tween ) {
-			var result;
-
-			if ( tween.elem[ tween.prop ] != null &&
-				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
-				return tween.elem[ tween.prop ];
-			}
-
-			// passing an empty string as a 3rd parameter to .css will automatically
-			// attempt a parseFloat and fallback to a string if the parse fails
-			// so, simple values such as "10px" are parsed to Float.
-			// complex values such as "rotate(1rad)" are returned as is.
-			result = jQuery.css( tween.elem, tween.prop, "" );
-			// Empty strings, null, undefined and "auto" are converted to 0.
-			return !result || result === "auto" ? 0 : result;
-		},
-		set: function( tween ) {
-			// use step hook for back compat - use cssHook if its there - use .style if its
-			// available and use plain properties where available
-			if ( jQuery.fx.step[ tween.prop ] ) {
-				jQuery.fx.step[ tween.prop ]( tween );
-			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
-				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
-			} else {
-				tween.elem[ tween.prop ] = tween.now;
-			}
-		}
-	}
-};
-
-// Support: IE <=9
-// Panic based approach to setting things on disconnected nodes
-
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
-	set: function( tween ) {
-		if ( tween.elem.nodeType && tween.elem.parentNode ) {
-			tween.elem[ tween.prop ] = tween.now;
-		}
-	}
-};
-
-jQuery.easing = {
-	linear: function( p ) {
-		return p;
-	},
-	swing: function( p ) {
-		return 0.5 - Math.cos( p * Math.PI ) / 2;
-	}
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
-	fxNow, timerId,
-	rfxtypes = /^(?:toggle|show|hide)$/,
-	rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
-	rrun = /queueHooks$/,
-	animationPrefilters = [ defaultPrefilter ],
-	tweeners = {
-		"*": [ function( prop, value ) {
-			var tween = this.createTween( prop, value ),
-				target = tween.cur(),
-				parts = rfxnum.exec( value ),
-				unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
-				// Starting value computation is required for potential unit mismatches
-				start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
-					rfxnum.exec( jQuery.css( tween.elem, prop ) ),
-				scale = 1,
-				maxIterations = 20;
-
-			if ( start && start[ 3 ] !== unit ) {
-				// Trust units reported by jQuery.css
-				unit = unit || start[ 3 ];
-
-				// Make sure we update the tween properties later on
-				parts = parts || [];
-
-				// Iteratively approximate from a nonzero starting point
-				start = +target || 1;
-
-				do {
-					// If previous iteration zeroed out, double until we get *something*
-					// Use a string for doubling factor so we don't accidentally see scale as unchanged below
-					scale = scale || ".5";
-
-					// Adjust and apply
-					start = start / scale;
-					jQuery.style( tween.elem, prop, start + unit );
-
-				// Update scale, tolerating zero or NaN from tween.cur()
-				// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
-				} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
-			}
-
-			// Update tween properties
-			if ( parts ) {
-				start = tween.start = +start || +target || 0;
-				tween.unit = unit;
-				// If a +=/-= token was provided, we're doing a relative animation
-				tween.end = parts[ 1 ] ?
-					start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
-					+parts[ 2 ];
-			}
-
-			return tween;
-		} ]
-	};
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-	setTimeout(function() {
-		fxNow = undefined;
-	});
-	return ( fxNow = jQuery.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
-	var which,
-		attrs = { height: type },
-		i = 0;
-
-	// if we include width, step value is 1 to do all cssExpand values,
-	// if we don't include width, step value is 2 to skip over Left and Right
-	includeWidth = includeWidth ? 1 : 0;
-	for ( ; i < 4 ; i += 2 - includeWidth ) {
-		which = cssExpand[ i ];
-		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
-	}
-
-	if ( includeWidth ) {
-		attrs.opacity = attrs.width = type;
-	}
-
-	return attrs;
-}
-
-function createTween( value, prop, animation ) {
-	var tween,
-		collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
-		index = 0,
-		length = collection.length;
-	for ( ; index < length; index++ ) {
-		if ( (tween = collection[ index ].call( animation, prop, value )) ) {
-
-			// we're done with this property
-			return tween;
-		}
-	}
-}
-
-function defaultPrefilter( elem, props, opts ) {
-	/* jshint validthis: true */
-	var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
-		anim = this,
-		orig = {},
-		style = elem.style,
-		hidden = elem.nodeType && isHidden( elem ),
-		dataShow = jQuery._data( elem, "fxshow" );
-
-	// handle queue: false promises
-	if ( !opts.queue ) {
-		hooks = jQuery._queueHooks( elem, "fx" );
-		if ( hooks.unqueued == null ) {
-			hooks.unqueued = 0;
-			oldfire = hooks.empty.fire;
-			hooks.empty.fire = function() {
-				if ( !hooks.unqueued ) {
-					oldfire();
-				}
-			};
-		}
-		hooks.unqueued++;
-
-		anim.always(function() {
-			// doing this makes sure that the complete handler will be called
-			// before this completes
-			anim.always(function() {
-				hooks.unqueued--;
-				if ( !jQuery.queue( elem, "fx" ).length ) {
-					hooks.empty.fire();
-				}
-			});
-		});
-	}
-
-	// height/width overflow pass
-	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
-		// Make sure that nothing sneaks out
-		// Record all 3 overflow attributes because IE does not
-		// change the overflow attribute when overflowX and
-		// overflowY are set to the same value
-		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
-		// Set display property to inline-block for height/width
-		// animations on inline elements that are having width/height animated
-		display = jQuery.css( elem, "display" );
-
-		// Test default display if display is currently "none"
-		checkDisplay = display === "none" ?
-			jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
-
-		if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
-
-			// inline-level elements accept inline-block;
-			// block-level elements need to be inline with layout
-			if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
-				style.display = "inline-block";
-			} else {
-				style.zoom = 1;
-			}
-		}
-	}
-
-	if ( opts.overflow ) {
-		style.overflow = "hidden";
-		if ( !support.shrinkWrapBlocks() ) {
-			anim.always(function() {
-				style.overflow = opts.overflow[ 0 ];
-				style.overflowX = opts.overflow[ 1 ];
-				style.overflowY = opts.overflow[ 2 ];
-			});
-		}
-	}
-
-	// show/hide pass
-	for ( prop in props ) {
-		value = props[ prop ];
-		if ( rfxtypes.exec( value ) ) {
-			delete props[ prop ];
-			toggle = toggle || value === "toggle";
-			if ( value === ( hidden ? "hide" : "show" ) ) {
-
-				// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
-				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
-					hidden = true;
-				} else {
-					continue;
-				}
-			}
-			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-
-		// Any non-fx value stops us from restoring the original display value
-		} else {
-			display = undefined;
-		}
-	}
-
-	if ( !jQuery.isEmptyObject( orig ) ) {
-		if ( dataShow ) {
-			if ( "hidden" in dataShow ) {
-				hidden = dataShow.hidden;
-			}
-		} else {
-			dataShow = jQuery._data( elem, "fxshow", {} );
-		}
-
-		// store state if its toggle - enables .stop().toggle() to "reverse"
-		if ( toggle ) {
-			dataShow.hidden = !hidden;
-		}
-		if ( hidden ) {
-			jQuery( elem ).show();
-		} else {
-			anim.done(function() {
-				jQuery( elem ).hide();
-			});
-		}
-		anim.done(function() {
-			var prop;
-			jQuery._removeData( elem, "fxshow" );
-			for ( prop in orig ) {
-				jQuery.style( elem, prop, orig[ prop ] );
-			}
-		});
-		for ( prop in orig ) {
-			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-
-			if ( !( prop in dataShow ) ) {
-				dataShow[ prop ] = tween.start;
-				if ( hidden ) {
-					tween.end = tween.start;
-					tween.start = prop === "width" || prop === "height" ? 1 : 0;
-				}
-			}
-		}
-
-	// If this is a noop like .hide().hide(), restore an overwritten display value
-	} else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
-		style.display = display;
-	}
-}
-
-function propFilter( props, specialEasing ) {
-	var index, name, easing, value, hooks;
-
-	// camelCase, specialEasing and expand cssHook pass
-	for ( index in props ) {
-		name = jQuery.camelCase( index );
-		easing = specialEasing[ name ];
-		value = props[ index ];
-		if ( jQuery.isArray( value ) ) {
-			easing = value[ 1 ];
-			value = props[ index ] = value[ 0 ];
-		}
-
-		if ( index !== name ) {
-			props[ name ] = value;
-			delete props[ index ];
-		}
-
-		hooks = jQuery.cssHooks[ name ];
-		if ( hooks && "expand" in hooks ) {
-			value = hooks.expand( value );
-			delete props[ name ];
-
-			// not quite $.extend, this wont overwrite keys already present.
-			// also - reusing 'index' from above because we have the correct "name"
-			for ( index in value ) {
-				if ( !( index in props ) ) {
-					props[ index ] = value[ index ];
-					specialEasing[ index ] = easing;
-				}
-			}
-		} else {
-			specialEasing[ name ] = easing;
-		}
-	}
-}
-
-function Animation( elem, properties, options ) {
-	var result,
-		stopped,
-		index = 0,
-		length = animationPrefilters.length,
-		deferred = jQuery.Deferred().always( function() {
-			// don't match elem in the :animated selector
-			delete tick.elem;
-		}),
-		tick = function() {
-			if ( stopped ) {
-				return false;
-			}
-			var currentTime = fxNow || createFxNow(),
-				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
-				temp = remaining / animation.duration || 0,
-				percent = 1 - temp,
-				index = 0,
-				length = animation.tweens.length;
-
-			for ( ; index < length ; index++ ) {
-				animation.tweens[ index ].run( percent );
-			}
-
-			deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
-			if ( percent < 1 && length ) {
-				return remaining;
-			} else {
-				deferred.resolveWith( elem, [ animation ] );
-				return false;
-			}
-		},
-		animation = deferred.promise({
-			elem: elem,
-			props: jQuery.extend( {}, properties ),
-			opts: jQuery.extend( true, { specialEasing: {} }, options ),
-			originalProperties: properties,
-			originalOptions: options,
-			startTime: fxNow || createFxNow(),
-			duration: options.duration,
-			tweens: [],
-			createTween: function( prop, end ) {
-				var tween = jQuery.Tween( elem, animation.opts, prop, end,
-						animation.opts.specialEasing[ prop ] || animation.opts.easing );
-				animation.tweens.push( tween );
-				return tween;
-			},
-			stop: function( gotoEnd ) {
-				var index = 0,
-					// if we are going to the end, we want to run all the tweens
-					// otherwise we skip this part
-					length = gotoEnd ? animation.tweens.length : 0;
-				if ( stopped ) {
-					return this;
-				}
-				stopped = true;
-				for ( ; index < length ; index++ ) {
-					animation.tweens[ index ].run( 1 );
-				}
-
-				// resolve when we played the last frame
-				// otherwise, reject
-				if ( gotoEnd ) {
-					deferred.resolveWith( elem, [ animation, gotoEnd ] );
-				} else {
-					deferred.rejectWith( elem, [ animation, gotoEnd ] );
-				}
-				return this;
-			}
-		}),
-		props = animation.props;
-
-	propFilter( props, animation.opts.specialEasing );
-
-	for ( ; index < length ; index++ ) {
-		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
-		if ( result ) {
-			return result;
-		}
-	}
-
-	jQuery.map( props, createTween, animation );
-
-	if ( jQuery.isFunction( animation.opts.start ) ) {
-		animation.opts.start.call( elem, animation );
-	}
-
-	jQuery.fx.timer(
-		jQuery.extend( tick, {
-			elem: elem,
-			anim: animation,
-			queue: animation.opts.queue
-		})
-	);
-
-	// attach callbacks from options
-	return animation.progress( animation.opts.progress )
-		.done( animation.opts.done, animation.opts.complete )
-		.fail( animation.opts.fail )
-		.always( animation.opts.always );
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-	tweener: function( props, callback ) {
-		if ( jQuery.isFunction( props ) ) {
-			callback = props;
-			props = [ "*" ];
-		} else {
-			props = props.split(" ");
-		}
-
-		var prop,
-			index = 0,
-			length = props.length;
-
-		for ( ; index < length ; index++ ) {
-			prop = props[ index ];
-			tweeners[ prop ] = tweeners[ prop ] || [];
-			tweeners[ prop ].unshift( callback );
-		}
-	},
-
-	prefilter: function( callback, prepend ) {
-		if ( prepend ) {
-			animationPrefilters.unshift( callback );
-		} else {
-			animationPrefilters.push( callback );
-		}
-	}
-});
-
-jQuery.speed = function( speed, easing, fn ) {
-	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-		complete: fn || !fn && easing ||
-			jQuery.isFunction( speed ) && speed,
-		duration: speed,
-		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-	};
-
-	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
-	// normalize opt.queue - true/undefined/null -> "fx"
-	if ( opt.queue == null || opt.queue === true ) {
-		opt.queue = "fx";
-	}
-
-	// Queueing
-	opt.old = opt.complete;
-
-	opt.complete = function() {
-		if ( jQuery.isFunction( opt.old ) ) {
-			opt.old.call( this );
-		}
-
-		if ( opt.queue ) {
-			jQuery.dequeue( this, opt.queue );
-		}
-	};
-
-	return opt;
-};
-
-jQuery.fn.extend({
-	fadeTo: function( speed, to, easing, callback ) {
-
-		// show any hidden elements after setting opacity to 0
-		return this.filter( isHidden ).css( "opacity", 0 ).show()
-
-			// animate to the value specified
-			.end().animate({ opacity: to }, speed, easing, callback );
-	},
-	animate: function( prop, speed, easing, callback ) {
-		var empty = jQuery.isEmptyObject( prop ),
-			optall = jQuery.speed( speed, easing, callback ),
-			doAnimation = function() {
-				// Operate on a copy of prop so per-property easing won't be lost
-				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
-				// Empty animations, or finishing resolves immediately
-				if ( empty || jQuery._data( this, "finish" ) ) {
-					anim.stop( true );
-				}
-			};
-			doAnimation.finish = doAnimation;
-
-		return empty || optall.queue === false ?
-			this.each( doAnimation ) :
-			this.queue( optall.queue, doAnimation );
-	},
-	stop: function( type, clearQueue, gotoEnd ) {
-		var stopQueue = function( hooks ) {
-			var stop = hooks.stop;
-			delete hooks.stop;
-			stop( gotoEnd );
-		};
-
-		if ( typeof type !== "string" ) {
-			gotoEnd = clearQueue;
-			clearQueue = type;
-			type = undefined;
-		}
-		if ( clearQueue && type !== false ) {
-			this.queue( type || "fx", [] );
-		}
-
-		return this.each(function() {
-			var dequeue = true,
-				index = type != null && type + "queueHooks",
-				timers = jQuery.timers,
-				data = jQuery._data( this );
-
-			if ( index ) {
-				if ( data[ index ] && data[ index ].stop ) {
-					stopQueue( data[ index ] );
-				}
-			} else {
-				for ( index in data ) {
-					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
-						stopQueue( data[ index ] );
-					}
-				}
-			}
-
-			for ( index = timers.length; index--; ) {
-				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
-					timers[ index ].anim.stop( gotoEnd );
-					dequeue = false;
-					timers.splice( index, 1 );
-				}
-			}
-
-			// start the next in the queue if the last step wasn't forced
-			// timers currently will call their complete callbacks, which will dequeue
-			// but only if they were gotoEnd
-			if ( dequeue || !gotoEnd ) {
-				jQuery.dequeue( this, type );
-			}
-		});
-	},
-	finish: function( type ) {
-		if ( type !== false ) {
-			type = type || "fx";
-		}
-		return this.each(function() {
-			var index,
-				data = jQuery._data( this ),
-				queue = data[ type + "queue" ],
-				hooks = data[ type + "queueHooks" ],
-				timers = jQuery.timers,
-				length = queue ? queue.length : 0;
-
-			// enable finishing flag on private data
-			data.finish = true;
-
-			// empty the queue first
-			jQuery.queue( this, type, [] );
-
-			if ( hooks && hooks.stop ) {
-				hooks.stop.call( this, true );
-			}
-
-			// look for any active animations, and finish them
-			for ( index = timers.length; index--; ) {
-				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
-					timers[ index ].anim.stop( true );
-					timers.splice( index, 1 );
-				}
-			}
-
-			// look for any animations in the old queue and finish them
-			for ( index = 0; index < length; index++ ) {
-				if ( queue[ index ] && queue[ index ].finish ) {
-					queue[ index ].finish.call( this );
-				}
-			}
-
-			// turn off finishing flag
-			delete data.finish;
-		});
-	}
-});
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
-	var cssFn = jQuery.fn[ name ];
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return speed == null || typeof speed === "boolean" ?
-			cssFn.apply( this, arguments ) :
-			this.animate( genFx( name, true ), speed, easing, callback );
-	};
-});
-
-// Generate shortcuts for custom animations
-jQuery.each({
-	slideDown: genFx("show"),
-	slideUp: genFx("hide"),
-	slideToggle: genFx("toggle"),
-	fadeIn: { opacity: "show" },
-	fadeOut: { opacity: "hide" },
-	fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return this.animate( props, speed, easing, callback );
-	};
-});
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
-	var timer,
-		timers = jQuery.timers,
-		i = 0;
-
-	fxNow = jQuery.now();
-
-	for ( ; i < timers.length; i++ ) {
-		timer = timers[ i ];
-		// Checks the timer has not already been removed
-		if ( !timer() && timers[ i ] === timer ) {
-			timers.splice( i--, 1 );
-		}
-	}
-
-	if ( !timers.length ) {
-		jQuery.fx.stop();
-	}
-	fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
-	jQuery.timers.push( timer );
-	if ( timer() ) {
-		jQuery.fx.start();
-	} else {
-		jQuery.timers.pop();
-	}
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.start = function() {
-	if ( !timerId ) {
-		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
-	}
-};
-
-jQuery.fx.stop = function() {
-	clearInterval( timerId );
-	timerId = null;
-};
-
-jQuery.fx.speeds = {
-	slow: 600,
-	fast: 200,
-	// Default speed
-	_default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
-	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-	type = type || "fx";
-
-	return this.queue( type, function( next, hooks ) {
-		var timeout = setTimeout( next, time );
-		hooks.stop = function() {
-			clearTimeout( timeout );
-		};
-	});
-};
-
-
-(function() {
-	// Minified: var a,b,c,d,e
-	var input, div, select, a, opt;
-
-	// Setup
-	div = document.createElement( "div" );
-	div.setAttribute( "className", "t" );
-	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-	a = div.getElementsByTagName("a")[ 0 ];
-
-	// First batch of tests.
-	select = document.createElement("select");
-	opt = select.appendChild( document.createElement("option") );
-	input = div.getElementsByTagName("input")[ 0 ];
-
-	a.style.cssText = "top:1px";
-
-	// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-	support.getSetAttribute = div.className !== "t";
-
-	// Get the style information from getAttribute
-	// (IE uses .cssText instead)
-	support.style = /top/.test( a.getAttribute("style") );
-
-	// Make sure that URLs aren't manipulated
-	// (IE normalizes it by default)
-	support.hrefNormalized = a.getAttribute("href") === "/a";
-
-	// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
-	support.checkOn = !!input.value;
-
-	// Make sure that a selected-by-default option has a working selected property.
-	// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-	support.optSelected = opt.selected;
-
-	// Tests for enctype support on a form (#6743)
-	support.enctype = !!document.createElement("form").enctype;
-
-	// Make sure that the options inside disabled selects aren't marked as disabled
-	// (WebKit marks them as disabled)
-	select.disabled = true;
-	support.optDisabled = !opt.disabled;
-
-	// Support: IE8 only
-	// Check if we can trust getAttribute("value")
-	input = document.createElement( "input" );
-	input.setAttribute( "value", "" );
-	support.input = input.getAttribute( "value" ) === "";
-
-	// Check if an input maintains its value after becoming a radio
-	input.value = "t";
-	input.setAttribute( "type", "radio" );
-	support.radioValue = input.value === "t";
-})();
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend({
-	val: function( value ) {
-		var hooks, ret, isFunction,
-			elem = this[0];
-
-		if ( !arguments.length ) {
-			if ( elem ) {
-				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-					return ret;
-				}
-
-				ret = elem.value;
-
-				return typeof ret === "string" ?
-					// handle most common string cases
-					ret.replace(rreturn, "") :
-					// handle cases where value is null/undef or number
-					ret == null ? "" : ret;
-			}
-
-			return;
-		}
-
-		isFunction = jQuery.isFunction( value );
-
-		return this.each(function( i ) {
-			var val;
-
-			if ( this.nodeType !== 1 ) {
-				return;
-			}
-
-			if ( isFunction ) {
-				val = value.call( this, i, jQuery( this ).val() );
-			} else {
-				val = value;
-			}
-
-			// Treat null/undefined as ""; convert numbers to string
-			if ( val == null ) {
-				val = "";
-			} else if ( typeof val === "number" ) {
-				val += "";
-			} else if ( jQuery.isArray( val ) ) {
-				val = jQuery.map( val, function( value ) {
-					return value == null ? "" : value + "";
-				});
-			}
-
-			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
-			// If set returns undefined, fall back to normal setting
-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-				this.value = val;
-			}
-		});
-	}
-});
-
-jQuery.extend({
-	valHooks: {
-		option: {
-			get: function( elem ) {
-				var val = jQuery.find.attr( elem, "value" );
-				return val != null ?
-					val :
-					// Support: IE10-11+
-					// option.text throws exceptions (#14686, #14858)
-					jQuery.trim( jQuery.text( elem ) );
-			}
-		},
-		select: {
-			get: function( elem ) {
-				var value, option,
-					options = elem.options,
-					index = elem.selectedIndex,
-					one = elem.type === "select-one" || index < 0,
-					values = one ? null : [],
-					max = one ? index + 1 : options.length,
-					i = index < 0 ?
-						max :
-						one ? index : 0;
-
-				// Loop through all the selected options
-				for ( ; i < max; i++ ) {
-					option = options[ i ];
-
-					// oldIE doesn't update selected after form reset (#2551)
-					if ( ( option.selected || i === index ) &&
-							// Don't return options that are disabled or in a disabled optgroup
-							( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
-							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
-						// Get the specific value for the option
-						value = jQuery( option ).val();
-
-						// We don't need an array for one selects
-						if ( one ) {
-							return value;
-						}
-
-						// Multi-Selects return an array
-						values.push( value );
-					}
-				}
-
-				return values;
-			},
-
-			set: function( elem, value ) {
-				var optionSet, option,
-					options = elem.options,
-					values = jQuery.makeArray( value ),
-					i = options.length;
-
-				while ( i-- ) {
-					option = options[ i ];
-
-					if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
-
-						// Support: IE6
-						// When new option element is added to select box we need to
-						// force reflow of newly added node in order to workaround delay
-						// of initialization properties
-						try {
-							option.selected = optionSet = true;
-
-						} catch ( _ ) {
-
-							// Will be executed only in IE6
-							option.scrollHeight;
-						}
-
-					} else {
-						option.selected = false;
-					}
-				}
-
-				// Force browsers to behave consistently when non-matching value is set
-				if ( !optionSet ) {
-					elem.selectedIndex = -1;
-				}
-
-				return options;
-			}
-		}
-	}
-});
-
-// Radios and checkboxes getter/setter
-jQuery.each([ "radio", "checkbox" ], function() {
-	jQuery.valHooks[ this ] = {
-		set: function( elem, value ) {
-			if ( jQuery.isArray( value ) ) {
-				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
-			}
-		}
-	};
-	if ( !support.checkOn ) {
-		jQuery.valHooks[ this ].get = function( elem ) {
-			// Support: Webkit
-			// "" is returned instead of "on" if a value isn't specified
-			return elem.getAttribute("value") === null ? "on" : elem.value;
-		};
-	}
-});
-
-
-
-
-var nodeHook, boolHook,
-	attrHandle = jQuery.expr.attrHandle,
-	ruseDefault = /^(?:checked|selected)$/i,
-	getSetAttribute = support.getSetAttribute,
-	getSetInput = support.input;
-
-jQuery.fn.extend({
-	attr: function( name, value ) {
-		return access( this, jQuery.attr, name, value, arguments.length > 1 );
-	},
-
-	removeAttr: function( name ) {
-		return this.each(function() {
-			jQuery.removeAttr( this, name );
-		});
-	}
-});
-
-jQuery.extend({
-	attr: function( elem, name, value ) {
-		var hooks, ret,
-			nType = elem.nodeType;
-
-		// don't get/set attributes on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		// Fallback to prop when attributes are not supported
-		if ( typeof elem.getAttribute === strundefined ) {
-			return jQuery.prop( elem, name, value );
-		}
-
-		// All attributes are lowercase
-		// Grab necessary hook if one is defined
-		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-			name = name.toLowerCase();
-			hooks = jQuery.attrHooks[ name ] ||
-				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
-		}
-
-		if ( value !== undefined ) {
-
-			if ( value === null ) {
-				jQuery.removeAttr( elem, name );
-
-			} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				elem.setAttribute( name, value + "" );
-				return value;
-			}
-
-		} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
-			return ret;
-
-		} else {
-			ret = jQuery.find.attr( elem, name );
-
-			// Non-existent attributes return null, we normalize to undefined
-			return ret == null ?
-				undefined :
-				ret;
-		}
-	},
-
-	removeAttr: function( elem, value ) {
-		var name, propName,
-			i = 0,
-			attrNames = value && value.match( rnotwhite );
-
-		if ( attrNames && elem.nodeType === 1 ) {
-			while ( (name = attrNames[i++]) ) {
-				propName = jQuery.propFix[ name ] || name;
-
-				// Boolean attributes get special treatment (#10870)
-				if ( jQuery.expr.match.bool.test( name ) ) {
-					// Set corresponding property to false
-					if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-						elem[ propName ] = false;
-					// Support: IE<9
-					// Also clear defaultChecked/defaultSelected (if appropriate)
-					} else {
-						elem[ jQuery.camelCase( "default-" + name ) ] =
-							elem[ propName ] = false;
-					}
-
-				// See #9699 for explanation of this approach (setting first, then removal)
-				} else {
-					jQuery.attr( elem, name, "" );
-				}
-
-				elem.removeAttribute( getSetAttribute ? name : propName );
-			}
-		}
-	},
-
-	attrHooks: {
-		type: {
-			set: function( elem, value ) {
-				if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-					// Setting the type on a radio button after the value resets the value in IE6-9
-					// Reset value to default in case type is set after value during creation
-					var val = elem.value;
-					elem.setAttribute( "type", value );
-					if ( val ) {
-						elem.value = val;
-					}
-					return value;
-				}
-			}
-		}
-	}
-});
-
-// Hook for boolean attributes
-boolHook = {
-	set: function( elem, value, name ) {
-		if ( value === false ) {
-			// Remove boolean attributes when set to false
-			jQuery.removeAttr( elem, name );
-		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-			// IE<8 needs the *property* name
-			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
-		// Use defaultChecked and defaultSelected for oldIE
-		} else {
-			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
-		}
-
-		return name;
-	}
-};
-
-// Retrieve booleans specially
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
-
-	var getter = attrHandle[ name ] || jQuery.find.attr;
-
-	attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
-		function( elem, name, isXML ) {
-			var ret, handle;
-			if ( !isXML ) {
-				// Avoid an infinite loop by temporarily removing this function from the getter
-				handle = attrHandle[ name ];
-				attrHandle[ name ] = ret;
-				ret = getter( elem, name, isXML ) != null ?
-					name.toLowerCase() :
-					null;
-				attrHandle[ name ] = handle;
-			}
-			return ret;
-		} :
-		function( elem, name, isXML ) {
-			if ( !isXML ) {
-				return elem[ jQuery.camelCase( "default-" + name ) ] ?
-					name.toLowerCase() :
-					null;
-			}
-		};
-});
-
-// fix oldIE attroperties
-if ( !getSetInput || !getSetAttribute ) {
-	jQuery.attrHooks.value = {
-		set: function( elem, value, name ) {
-			if ( jQuery.nodeName( elem, "input" ) ) {
-				// Does not return so that setAttribute is also used
-				elem.defaultValue = value;
-			} else {
-				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
-				return nodeHook && nodeHook.set( elem, value, name );
-			}
-		}
-	};
-}
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
-	// Use this for any attribute in IE6/7
-	// This fixes almost every IE6/7 issue
-	nodeHook = {
-		set: function( elem, value, name ) {
-			// Set the existing or create a new attribute node
-			var ret = elem.getAttributeNode( name );
-			if ( !ret ) {
-				elem.setAttributeNode(
-					(ret = elem.ownerDocument.createAttribute( name ))
-				);
-			}
-
-			ret.value = value += "";
-
-			// Break association with cloned elements by also using setAttribute (#9646)
-			if ( name === "value" || value === elem.getAttribute( name ) ) {
-				return value;
-			}
-		}
-	};
-
-	// Some attributes are constructed with empty-string values when not defined
-	attrHandle.id = attrHandle.name = attrHandle.coords =
-		function( elem, name, isXML ) {
-			var ret;
-			if ( !isXML ) {
-				return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
-					ret.value :
-					null;
-			}
-		};
-
-	// Fixing value retrieval on a button requires this module
-	jQuery.valHooks.button = {
-		get: function( elem, name ) {
-			var ret = elem.getAttributeNode( name );
-			if ( ret && ret.specified ) {
-				return ret.value;
-			}
-		},
-		set: nodeHook.set
-	};
-
-	// Set contenteditable to false on removals(#10429)
-	// Setting to empty string throws an error as an invalid value
-	jQuery.attrHooks.contenteditable = {
-		set: function( elem, value, name ) {
-			nodeHook.set( elem, value === "" ? false : value, name );
-		}
-	};
-
-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
-	// This is for removals
-	jQuery.each([ "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = {
-			set: function( elem, value ) {
-				if ( value === "" ) {
-					elem.setAttribute( name, "auto" );
-					return value;
-				}
-			}
-		};
-	});
-}
-
-if ( !support.style ) {
-	jQuery.attrHooks.style = {
-		get: function( elem ) {
-			// Return undefined in the case of empty string
-			// Note: IE uppercases css property names, but if we were to .toLowerCase()
-			// .cssText, that would destroy case senstitivity in URL's, like in "background"
-			return elem.style.cssText || undefined;
-		},
-		set: function( elem, value ) {
-			return ( elem.style.cssText = value + "" );
-		}
-	};
-}
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button|object)$/i,
-	rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend({
-	prop: function( name, value ) {
-		return access( this, jQuery.prop, name, value, arguments.length > 1 );
-	},
-
-	removeProp: function( name ) {
-		name = jQuery.propFix[ name ] || name;
-		return this.each(function() {
-			// try/catch handles cases where IE balks (such as removing a property on window)
-			try {
-				this[ name ] = undefined;
-				delete this[ name ];
-			} catch( e ) {}
-		});
-	}
-});
-
-jQuery.extend({
-	propFix: {
-		"for": "htmlFor",
-		"class": "className"
-	},
-
-	prop: function( elem, name, value ) {
-		var ret, hooks, notxml,
-			nType = elem.nodeType;
-
-		// don't get/set properties on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		if ( notxml ) {
-			// Fix name and attach hooks
-			name = jQuery.propFix[ name ] || name;
-			hooks = jQuery.propHooks[ name ];
-		}
-
-		if ( value !== undefined ) {
-			return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
-				ret :
-				( elem[ name ] = value );
-
-		} else {
-			return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
-				ret :
-				elem[ name ];
-		}
-	},
-
-	propHooks: {
-		tabIndex: {
-			get: function( elem ) {
-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-				// Use proper attribute retrieval(#12072)
-				var tabindex = jQuery.find.attr( elem, "tabindex" );
-
-				return tabindex ?
-					parseInt( tabindex, 10 ) :
-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-						0 :
-						-1;
-			}
-		}
-	}
-});
-
-// Some attributes require a special call on IE
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !support.hrefNormalized ) {
-	// href/src property should get the full normalized URL (#10299/#12915)
-	jQuery.each([ "href", "src" ], function( i, name ) {
-		jQuery.propHooks[ name ] = {
-			get: function( elem ) {
-				return elem.getAttribute( name, 4 );
-			}
-		};
-	});
-}
-
-// Support: Safari, IE9+
-// mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !support.optSelected ) {
-	jQuery.propHooks.selected = {
-		get: function( elem ) {
-			var parent = elem.parentNode;
-
-			if ( parent ) {
-				parent.selectedIndex;
-
-				// Make sure that it also works with optgroups, see #5701
-				if ( parent.parentNode ) {
-					parent.parentNode.selectedIndex;
-				}
-			}
-			return null;
-		}
-	};
-}
-
-jQuery.each([
-	"tabIndex",
-	"readOnly",
-	"maxLength",
-	"cellSpacing",
-	"cellPadding",
-	"rowSpan",
-	"colSpan",
-	"useMap",
-	"frameBorder",
-	"contentEditable"
-], function() {
-	jQuery.propFix[ this.toLowerCase() ] = this;
-});
-
-// IE6/7 call enctype encoding
-if ( !support.enctype ) {
-	jQuery.propFix.enctype = "encoding";
-}
-
-
-
-
-var rclass = /[\t\r\n\f]/g;
-
-jQuery.fn.extend({
-	addClass: function( value ) {
-		var classes, elem, cur, clazz, j, finalValue,
-			i = 0,
-			len = this.length,
-			proceed = typeof value === "string" && value;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( j ) {
-				jQuery( this ).addClass( value.call( this, j, this.className ) );
-			});
-		}
-
-		if ( proceed ) {
-			// The disjunction here is for better compressibility (see removeClass)
-			classes = ( value || "" ).match( rnotwhite ) || [];
-
-			for ( ; i < len; i++ ) {
-				elem = this[ i ];
-				cur = elem.nodeType === 1 && ( elem.className ?
-					( " " + elem.className + " " ).replace( rclass, " " ) :
-					" "
-				);
-
-				if ( cur ) {
-					j = 0;
-					while ( (clazz = classes[j++]) ) {
-						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
-							cur += clazz + " ";
-						}
-					}
-
-					// only assign if different to avoid unneeded rendering.
-					finalValue = jQuery.trim( cur );
-					if ( elem.className !== finalValue ) {
-						elem.className = finalValue;
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	removeClass: function( value ) {
-		var classes, elem, cur, clazz, j, finalValue,
-			i = 0,
-			len = this.length,
-			proceed = arguments.length === 0 || typeof value === "string" && value;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( j ) {
-				jQuery( this ).removeClass( value.call( this, j, this.className ) );
-			});
-		}
-		if ( proceed ) {
-			classes = ( value || "" ).match( rnotwhite ) || [];
-
-			for ( ; i < len; i++ ) {
-				elem = this[ i ];
-				// This expression is here for better compressibility (see addClass)
-				cur = elem.nodeType === 1 && ( elem.className ?
-					( " " + elem.className + " " ).replace( rclass, " " ) :
-					""
-				);
-
-				if ( cur ) {
-					j = 0;
-					while ( (clazz = classes[j++]) ) {
-						// Remove *all* instances
-						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
-							cur = cur.replace( " " + clazz + " ", " " );
-						}
-					}
-
-					// only assign if different to avoid unneeded rendering.
-					finalValue = value ? jQuery.trim( cur ) : "";
-					if ( elem.className !== finalValue ) {
-						elem.className = finalValue;
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	toggleClass: function( value, stateVal ) {
-		var type = typeof value;
-
-		if ( typeof stateVal === "boolean" && type === "string" ) {
-			return stateVal ? this.addClass( value ) : this.removeClass( value );
-		}
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( i ) {
-				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
-			});
-		}
-
-		return this.each(function() {
-			if ( type === "string" ) {
-				// toggle individual class names
-				var className,
-					i = 0,
-					self = jQuery( this ),
-					classNames = value.match( rnotwhite ) || [];
-
-				while ( (className = classNames[ i++ ]) ) {
-					// check each className given, space separated list
-					if ( self.hasClass( className ) ) {
-						self.removeClass( className );
-					} else {
-						self.addClass( className );
-					}
-				}
-
-			// Toggle whole class name
-			} else if ( type === strundefined || type === "boolean" ) {
-				if ( this.className ) {
-					// store className if set
-					jQuery._data( this, "__className__", this.className );
-				}
-
-				// If the element has a class name or if we're passed "false",
-				// then remove the whole classname (if there was one, the above saved it).
-				// Otherwise bring back whatever was previously saved (if anything),
-				// falling back to the empty string if nothing was stored.
-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-			}
-		});
-	},
-
-	hasClass: function( selector ) {
-		var className = " " + selector + " ",
-			i = 0,
-			l = this.length;
-		for ( ; i < l; i++ ) {
-			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
-				return true;
-			}
-		}
-
-		return false;
-	}
-});
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
-	// Handle event binding
-	jQuery.fn[ name ] = function( data, fn ) {
-		return arguments.length > 0 ?
-			this.on( name, null, data, fn ) :
-			this.trigger( name );
-	};
-});
-
-jQuery.fn.extend({
-	hover: function( fnOver, fnOut ) {
-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-	},
-
-	bind: function( types, data, fn ) {
-		return this.on( types, null, data, fn );
-	},
-	unbind: function( types, fn ) {
-		return this.off( types, null, fn );
-	},
-
-	delegate: function( selector, types, data, fn ) {
-		return this.on( types, selector, data, fn );
-	},
-	undelegate: function( selector, types, fn ) {
-		// ( namespace ) or ( selector, types [, fn] )
-		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
-	}
-});
-
-
-var nonce = jQuery.now();
-
-var rquery = (/\?/);
-
-
-
-var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
-
-jQuery.parseJSON = function( data ) {
-	// Attempt to parse using the native JSON parser first
-	if ( window.JSON && window.JSON.parse ) {
-		// Support: Android 2.3
-		// Workaround failure to string-cast null input
-		return window.JSON.parse( data + "" );
-	}
-
-	var requireNonComma,
-		depth = null,
-		str = jQuery.trim( data + "" );
-
-	// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
-	// after removing valid tokens
-	return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
-
-		// Force termination if we see a misplaced comma
-		if ( requireNonComma && comma ) {
-			depth = 0;
-		}
-
-		// Perform no more replacements after returning to outermost depth
-		if ( depth === 0 ) {
-			return token;
-		}
-
-		// Commas must not follow "[", "{", or ","
-		requireNonComma = open || comma;
-
-		// Determine new depth
-		// array/object open ("[" or "{"): depth += true - false (increment)
-		// array/object close ("]" or "}"): depth += false - true (decrement)
-		// other cases ("," or primitive): depth += true - true (numeric cast)
-		depth += !close - !open;
-
-		// Remove this token
-		return "";
-	}) ) ?
-		( Function( "return " + str ) )() :
-		jQuery.error( "Invalid JSON: " + data );
-};
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
-	var xml, tmp;
-	if ( !data || typeof data !== "string" ) {
-		return null;
-	}
-	try {
-		if ( window.DOMParser ) { // Standard
-			tmp = new DOMParser();
-			xml = tmp.parseFromString( data, "text/xml" );
-		} else { // IE
-			xml = new ActiveXObject( "Microsoft.XMLDOM" );
-			xml.async = "false";
-			xml.loadXML( data );
-		}
-	} catch( e ) {
-		xml = undefined;
-	}
-	if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
-		jQuery.error( "Invalid XML: " + data );
-	}
-	return xml;
-};
-
-
-var
-	// Document location
-	ajaxLocParts,
-	ajaxLocation,
-
-	rhash = /#.*$/,
-	rts = /([?&])_=[^&]*/,
-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-	// #7653, #8125, #8152: local protocol detection
-	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
-	rnoContent = /^(?:GET|HEAD)$/,
-	rprotocol = /^\/\//,
-	rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
-
-	/* Prefilters
-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-	 * 2) These are called:
-	 *    - BEFORE asking for a transport
-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
-	 * 3) key is the dataType
-	 * 4) the catchall symbol "*" can be used
-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-	 */
-	prefilters = {},
-
-	/* Transports bindings
-	 * 1) key is the dataType
-	 * 2) the catchall symbol "*" can be used
-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
-	 */
-	transports = {},
-
-	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-	allTypes = "*/".concat("*");
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-	ajaxLocation = location.href;
-} catch( e ) {
-	// Use the href attribute of an A element
-	// since IE will modify it given document.location
-	ajaxLocation = document.createElement( "a" );
-	ajaxLocation.href = "";
-	ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-	// dataTypeExpression is optional and defaults to "*"
-	return function( dataTypeExpression, func ) {
-
-		if ( typeof dataTypeExpression !== "string" ) {
-			func = dataTypeExpression;
-			dataTypeExpression = "*";
-		}
-
-		var dataType,
-			i = 0,
-			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
-
-		if ( jQuery.isFunction( func ) ) {
-			// For each dataType in the dataTypeExpression
-			while ( (dataType = dataTypes[i++]) ) {
-				// Prepend if requested
-				if ( dataType.charAt( 0 ) === "+" ) {
-					dataType = dataType.slice( 1 ) || "*";
-					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
-
-				// Otherwise append
-				} else {
-					(structure[ dataType ] = structure[ dataType ] || []).push( func );
-				}
-			}
-		}
-	};
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
-	var inspected = {},
-		seekingTransport = ( structure === transports );
-
-	function inspect( dataType ) {
-		var selected;
-		inspected[ dataType ] = true;
-		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
-			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
-			if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
-				options.dataTypes.unshift( dataTypeOrTransport );
-				inspect( dataTypeOrTransport );
-				return false;
-			} else if ( seekingTransport ) {
-				return !( selected = dataTypeOrTransport );
-			}
-		});
-		return selected;
-	}
-
-	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-	var deep, key,
-		flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
-	for ( key in src ) {
-		if ( src[ key ] !== undefined ) {
-			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
-		}
-	}
-	if ( deep ) {
-		jQuery.extend( true, target, deep );
-	}
-
-	return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-	var firstDataType, ct, finalDataType, type,
-		contents = s.contents,
-		dataTypes = s.dataTypes;
-
-	// Remove auto dataType and get content-type in the process
-	while ( dataTypes[ 0 ] === "*" ) {
-		dataTypes.shift();
-		if ( ct === undefined ) {
-			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
-		}
-	}
-
-	// Check if we're dealing with a known content-type
-	if ( ct ) {
-		for ( type in contents ) {
-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
-				dataTypes.unshift( type );
-				break;
-			}
-		}
-	}
-
-	// Check to see if we have a response for the expected dataType
-	if ( dataTypes[ 0 ] in responses ) {
-		finalDataType = dataTypes[ 0 ];
-	} else {
-		// Try convertible dataTypes
-		for ( type in responses ) {
-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-				finalDataType = type;
-				break;
-			}
-			if ( !firstDataType ) {
-				firstDataType = type;
-			}
-		}
-		// Or just use first one
-		finalDataType = finalDataType || firstDataType;
-	}
-
-	// If we found a dataType
-	// We add the dataType to the list if needed
-	// and return the corresponding response
-	if ( finalDataType ) {
-		if ( finalDataType !== dataTypes[ 0 ] ) {
-			dataTypes.unshift( finalDataType );
-		}
-		return responses[ finalDataType ];
-	}
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
-	var conv2, current, conv, tmp, prev,
-		converters = {},
-		// Work with a copy of dataTypes in case we need to modify it for conversion
-		dataTypes = s.dataTypes.slice();
-
-	// Create converters map with lowercased keys
-	if ( dataTypes[ 1 ] ) {
-		for ( conv in s.converters ) {
-			converters[ conv.toLowerCase() ] = s.converters[ conv ];
-		}
-	}
-
-	current = dataTypes.shift();
-
-	// Convert to each sequential dataType
-	while ( current ) {
-
-		if ( s.responseFields[ current ] ) {
-			jqXHR[ s.responseFields[ current ] ] = response;
-		}
-
-		// Apply the dataFilter if provided
-		if ( !prev && isSuccess && s.dataFilter ) {
-			response = s.dataFilter( response, s.dataType );
-		}
-
-		prev = current;
-		current = dataTypes.shift();
-
-		if ( current ) {
-
-			// There's only work to do if current dataType is non-auto
-			if ( current === "*" ) {
-
-				current = prev;
-
-			// Convert response if prev dataType is non-auto and differs from current
-			} else if ( prev !== "*" && prev !== current ) {
-
-				// Seek a direct converter
-				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
-				// If none found, seek a pair
-				if ( !conv ) {
-					for ( conv2 in converters ) {
-
-						// If conv2 outputs current
-						tmp = conv2.split( " " );
-						if ( tmp[ 1 ] === current ) {
-
-							// If prev can be converted to accepted input
-							conv = converters[ prev + " " + tmp[ 0 ] ] ||
-								converters[ "* " + tmp[ 0 ] ];
-							if ( conv ) {
-								// Condense equivalence converters
-								if ( conv === true ) {
-									conv = converters[ conv2 ];
-
-								// Otherwise, insert the intermediate dataType
-								} else if ( converters[ conv2 ] !== true ) {
-									current = tmp[ 0 ];
-									dataTypes.unshift( tmp[ 1 ] );
-								}
-								break;
-							}
-						}
-					}
-				}
-
-				// Apply converter (if not an equivalence)
-				if ( conv !== true ) {
-
-					// Unless errors are allowed to bubble, catch and return them
-					if ( conv && s[ "throws" ] ) {
-						response = conv( response );
-					} else {
-						try {
-							response = conv( response );
-						} catch ( e ) {
-							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
-						}
-					}
-				}
-			}
-		}
-	}
-
-	return { state: "success", data: response };
-}
-
-jQuery.extend({
-
-	// Counter for holding the number of active queries
-	active: 0,
-
-	// Last-Modified header cache for next request
-	lastModified: {},
-	etag: {},
-
-	ajaxSettings: {
-		url: ajaxLocation,
-		type: "GET",
-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-		global: true,
-		processData: true,
-		async: true,
-		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-		/*
-		timeout: 0,
-		data: null,
-		dataType: null,
-		username: null,
-		password: null,
-		cache: null,
-		throws: false,
-		traditional: false,
-		headers: {},
-		*/
-
-		accepts: {
-			"*": allTypes,
-			text: "text/plain",
-			html: "text/html",
-			xml: "application/xml, text/xml",
-			json: "application/json, text/javascript"
-		},
-
-		contents: {
-			xml: /xml/,
-			html: /html/,
-			json: /json/
-		},
-
-		responseFields: {
-			xml: "responseXML",
-			text: "responseText",
-			json: "responseJSON"
-		},
-
-		// Data converters
-		// Keys separate source (or catchall "*") and destination types with a single space
-		converters: {
-
-			// Convert anything to text
-			"* text": String,
-
-			// Text to html (true = no transformation)
-			"text html": true,
-
-			// Evaluate text as a json expression
-			"text json": jQuery.parseJSON,
-
-			// Parse text as xml
-			"text xml": jQuery.parseXML
-		},
-
-		// For options that shouldn't be deep extended:
-		// you can add your own custom options here if
-		// and when you create one that shouldn't be
-		// deep extended (see ajaxExtend)
-		flatOptions: {
-			url: true,
-			context: true
-		}
-	},
-
-	// Creates a full fledged settings object into target
-	// with both ajaxSettings and settings fields.
-	// If target is omitted, writes into ajaxSettings.
-	ajaxSetup: function( target, settings ) {
-		return settings ?
-
-			// Building a settings object
-			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
-			// Extending ajaxSettings
-			ajaxExtend( jQuery.ajaxSettings, target );
-	},
-
-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-	ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-	// Main method
-	ajax: function( url, options ) {
-
-		// If url is an object, simulate pre-1.5 signature
-		if ( typeof url === "object" ) {
-			options = url;
-			url = undefined;
-		}
-
-		// Force options to be an object
-		options = options || {};
-
-		var // Cross-domain detection vars
-			parts,
-			// Loop variable
-			i,
-			// URL without anti-cache param
-			cacheURL,
-			// Response headers as string
-			responseHeadersString,
-			// timeout handle
-			timeoutTimer,
-
-			// To know if global events are to be dispatched
-			fireGlobals,
-
-			transport,
-			// Response headers
-			responseHeaders,
-			// Create the final options object
-			s = jQuery.ajaxSetup( {}, options ),
-			// Callbacks context
-			callbackContext = s.context || s,
-			// Context for global events is callbackContext if it is a DOM node or jQuery collection
-			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
-				jQuery( callbackContext ) :
-				jQuery.event,
-			// Deferreds
-			deferred = jQuery.Deferred(),
-			completeDeferred = jQuery.Callbacks("once memory"),
-			// Status-dependent callbacks
-			statusCode = s.statusCode || {},
-			// Headers (they are sent all at once)
-			requestHeaders = {},
-			requestHeadersNames = {},
-			// The jqXHR state
-			state = 0,
-			// Default abort message
-			strAbort = "canceled",
-			// Fake xhr
-			jqXHR = {
-				readyState: 0,
-
-				// Builds headers hashtable if needed
-				getResponseHeader: function( key ) {
-					var match;
-					if ( state === 2 ) {
-						if ( !responseHeaders ) {
-							responseHeaders = {};
-							while ( (match = rheaders.exec( responseHeadersString )) ) {
-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-							}
-						}
-						match = responseHeaders[ key.toLowerCase() ];
-					}
-					return match == null ? null : match;
-				},
-
-				// Raw string
-				getAllResponseHeaders: function() {
-					return state === 2 ? responseHeadersString : null;
-				},
-
-				// Caches the header
-				setRequestHeader: function( name, value ) {
-					var lname = name.toLowerCase();
-					if ( !state ) {
-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-						requestHeaders[ name ] = value;
-					}
-					return this;
-				},
-
-				// Overrides response content-type header
-				overrideMimeType: function( type ) {
-					if ( !state ) {
-						s.mimeType = type;
-					}
-					return this;
-				},
-
-				// Status-dependent callbacks
-				statusCode: function( map ) {
-					var code;
-					if ( map ) {
-						if ( state < 2 ) {
-							for ( code in map ) {
-								// Lazy-add the new callback in a way that preserves old ones
-								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
-							}
-						} else {
-							// Execute the appropriate callbacks
-							jqXHR.always( map[ jqXHR.status ] );
-						}
-					}
-					return this;
-				},
-
-				// Cancel the request
-				abort: function( statusText ) {
-					var finalText = statusText || strAbort;
-					if ( transport ) {
-						transport.abort( finalText );
-					}
-					done( 0, finalText );
-					return this;
-				}
-			};
-
-		// Attach deferreds
-		deferred.promise( jqXHR ).complete = completeDeferred.add;
-		jqXHR.success = jqXHR.done;
-		jqXHR.error = jqXHR.fail;
-
-		// Remove hash character (#7531: and string promotion)
-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-		// Handle falsy url in the settings object (#10093: consistency with old signature)
-		// We also use the url parameter if available
-		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-		// Alias method option to type as per ticket #12004
-		s.type = options.method || options.type || s.method || s.type;
-
-		// Extract dataTypes list
-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
-
-		// A cross-domain request is in order when we have a protocol:host:port mismatch
-		if ( s.crossDomain == null ) {
-			parts = rurl.exec( s.url.toLowerCase() );
-			s.crossDomain = !!( parts &&
-				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
-			);
-		}
-
-		// Convert data if not already a string
-		if ( s.data && s.processData && typeof s.data !== "string" ) {
-			s.data = jQuery.param( s.data, s.traditional );
-		}
-
-		// Apply prefilters
-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-		// If request was aborted inside a prefilter, stop there
-		if ( state === 2 ) {
-			return jqXHR;
-		}
-
-		// We can fire global events as of now if asked to
-		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
-		fireGlobals = jQuery.event && s.global;
-
-		// Watch for a new set of requests
-		if ( fireGlobals && jQuery.active++ === 0 ) {
-			jQuery.event.trigger("ajaxStart");
-		}
-
-		// Uppercase the type
-		s.type = s.type.toUpperCase();
-
-		// Determine if request has content
-		s.hasContent = !rnoContent.test( s.type );
-
-		// Save the URL in case we're toying with the If-Modified-Since
-		// and/or If-None-Match header later on
-		cacheURL = s.url;
-
-		// More options handling for requests with no content
-		if ( !s.hasContent ) {
-
-			// If data is available, append data to url
-			if ( s.data ) {
-				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
-				// #9682: remove data so that it's not used in an eventual retry
-				delete s.data;
-			}
-
-			// Add anti-cache in url if needed
-			if ( s.cache === false ) {
-				s.url = rts.test( cacheURL ) ?
-
-					// If there is already a '_' parameter, set its value
-					cacheURL.replace( rts, "$1_=" + nonce++ ) :
-
-					// Otherwise add one to the end
-					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
-			}
-		}
-
-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-		if ( s.ifModified ) {
-			if ( jQuery.lastModified[ cacheURL ] ) {
-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
-			}
-			if ( jQuery.etag[ cacheURL ] ) {
-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
-			}
-		}
-
-		// Set the correct header, if data is being sent
-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
-		}
-
-		// Set the Accepts header for the server, depending on the dataType
-		jqXHR.setRequestHeader(
-			"Accept",
-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-				s.accepts[ "*" ]
-		);
-
-		// Check for headers option
-		for ( i in s.headers ) {
-			jqXHR.setRequestHeader( i, s.headers[ i ] );
-		}
-
-		// Allow custom headers/mimetypes and early abort
-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-			// Abort if not done already and return
-			return jqXHR.abort();
-		}
-
-		// aborting is no longer a cancellation
-		strAbort = "abort";
-
-		// Install callbacks on deferreds
-		for ( i in { success: 1, error: 1, complete: 1 } ) {
-			jqXHR[ i ]( s[ i ] );
-		}
-
-		// Get transport
-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-		// If no transport, we auto-abort
-		if ( !transport ) {
-			done( -1, "No Transport" );
-		} else {
-			jqXHR.readyState = 1;
-
-			// Send global event
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-			}
-			// Timeout
-			if ( s.async && s.timeout > 0 ) {
-				timeoutTimer = setTimeout(function() {
-					jqXHR.abort("timeout");
-				}, s.timeout );
-			}
-
-			try {
-				state = 1;
-				transport.send( requestHeaders, done );
-			} catch ( e ) {
-				// Propagate exception as error if not done
-				if ( state < 2 ) {
-					done( -1, e );
-				// Simply rethrow otherwise
-				} else {
-					throw e;
-				}
-			}
-		}
-
-		// Callback for when everything is done
-		function done( status, nativeStatusText, responses, headers ) {
-			var isSuccess, success, error, response, modified,
-				statusText = nativeStatusText;
-
-			// Called once
-			if ( state === 2 ) {
-				return;
-			}
-
-			// State is "done" now
-			state = 2;
-
-			// Clear timeout if it exists
-			if ( timeoutTimer ) {
-				clearTimeout( timeoutTimer );
-			}
-
-			// Dereference transport for early garbage collection
-			// (no matter how long the jqXHR object will be used)
-			transport = undefined;
-
-			// Cache response headers
-			responseHeadersString = headers || "";
-
-			// Set readyState
-			jqXHR.readyState = status > 0 ? 4 : 0;
-
-			// Determine if successful
-			isSuccess = status >= 200 && status < 300 || status === 304;
-
-			// Get response data
-			if ( responses ) {
-				response = ajaxHandleResponses( s, jqXHR, responses );
-			}
-
-			// Convert no matter what (that way responseXXX fields are always set)
-			response = ajaxConvert( s, response, jqXHR, isSuccess );
-
-			// If successful, handle type chaining
-			if ( isSuccess ) {
-
-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-				if ( s.ifModified ) {
-					modified = jqXHR.getResponseHeader("Last-Modified");
-					if ( modified ) {
-						jQuery.lastModified[ cacheURL ] = modified;
-					}
-					modified = jqXHR.getResponseHeader("etag");
-					if ( modified ) {
-						jQuery.etag[ cacheURL ] = modified;
-					}
-				}
-
-				// if no content
-				if ( status === 204 || s.type === "HEAD" ) {
-					statusText = "nocontent";
-
-				// if not modified
-				} else if ( status === 304 ) {
-					statusText = "notmodified";
-
-				// If we have data, let's convert it
-				} else {
-					statusText = response.state;
-					success = response.data;
-					error = response.error;
-					isSuccess = !error;
-				}
-			} else {
-				// We extract error from statusText
-				// then normalize statusText and status for non-aborts
-				error = statusText;
-				if ( status || !statusText ) {
-					statusText = "error";
-					if ( status < 0 ) {
-						status = 0;
-					}
-				}
-			}
-
-			// Set data for the fake xhr object
-			jqXHR.status = status;
-			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
-			// Success/Error
-			if ( isSuccess ) {
-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-			} else {
-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-			}
-
-			// Status-dependent callbacks
-			jqXHR.statusCode( statusCode );
-			statusCode = undefined;
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
-					[ jqXHR, s, isSuccess ? success : error ] );
-			}
-
-			// Complete
-			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-				// Handle the global AJAX counter
-				if ( !( --jQuery.active ) ) {
-					jQuery.event.trigger("ajaxStop");
-				}
-			}
-		}
-
-		return jqXHR;
-	},
-
-	getJSON: function( url, data, callback ) {
-		return jQuery.get( url, data, callback, "json" );
-	},
-
-	getScript: function( url, callback ) {
-		return jQuery.get( url, undefined, callback, "script" );
-	}
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-	jQuery[ method ] = function( url, data, callback, type ) {
-		// shift arguments if data argument was omitted
-		if ( jQuery.isFunction( data ) ) {
-			type = type || callback;
-			callback = data;
-			data = undefined;
-		}
-
-		return jQuery.ajax({
-			url: url,
-			type: method,
-			dataType: type,
-			data: data,
-			success: callback
-		});
-	};
-});
-
-
-jQuery._evalUrl = function( url ) {
-	return jQuery.ajax({
-		url: url,
-		type: "GET",
-		dataType: "script",
-		async: false,
-		global: false,
-		"throws": true
-	});
-};
-
-
-jQuery.fn.extend({
-	wrapAll: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapAll( html.call(this, i) );
-			});
-		}
-
-		if ( this[0] ) {
-			// The elements to wrap the target around
-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
-			if ( this[0].parentNode ) {
-				wrap.insertBefore( this[0] );
-			}
-
-			wrap.map(function() {
-				var elem = this;
-
-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-					elem = elem.firstChild;
-				}
-
-				return elem;
-			}).append( this );
-		}
-
-		return this;
-	},
-
-	wrapInner: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapInner( html.call(this, i) );
-			});
-		}
-
-		return this.each(function() {
-			var self = jQuery( this ),
-				contents = self.contents();
-
-			if ( contents.length ) {
-				contents.wrapAll( html );
-
-			} else {
-				self.append( html );
-			}
-		});
-	},
-
-	wrap: function( html ) {
-		var isFunction = jQuery.isFunction( html );
-
-		return this.each(function(i) {
-			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
-		});
-	},
-
-	unwrap: function() {
-		return this.parent().each(function() {
-			if ( !jQuery.nodeName( this, "body" ) ) {
-				jQuery( this ).replaceWith( this.childNodes );
-			}
-		}).end();
-	}
-});
-
-
-jQuery.expr.filters.hidden = function( elem ) {
-	// Support: Opera <= 12.12
-	// Opera reports offsetWidths and offsetHeights less than zero on some elements
-	return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
-		(!support.reliableHiddenOffsets() &&
-			((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-};
-
-jQuery.expr.filters.visible = function( elem ) {
-	return !jQuery.expr.filters.hidden( elem );
-};
-
-
-
-
-var r20 = /%20/g,
-	rbracket = /\[\]$/,
-	rCRLF = /\r?\n/g,
-	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
-	rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
-	var name;
-
-	if ( jQuery.isArray( obj ) ) {
-		// Serialize array item.
-		jQuery.each( obj, function( i, v ) {
-			if ( traditional || rbracket.test( prefix ) ) {
-				// Treat each array item as a scalar.
-				add( prefix, v );
-
-			} else {
-				// Item is non-scalar (array or object), encode its numeric index.
-				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
-			}
-		});
-
-	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
-		// Serialize object item.
-		for ( name in obj ) {
-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-		}
-
-	} else {
-		// Serialize scalar item.
-		add( prefix, obj );
-	}
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
-	var prefix,
-		s = [],
-		add = function( key, value ) {
-			// If value is a function, invoke it and return its value
-			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
-			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-		};
-
-	// Set traditional to true for jQuery <= 1.3.2 behavior.
-	if ( traditional === undefined ) {
-		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
-	}
-
-	// If an array was passed in, assume that it is an array of form elements.
-	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-		// Serialize the form elements
-		jQuery.each( a, function() {
-			add( this.name, this.value );
-		});
-
-	} else {
-		// If traditional, encode the "old" way (the way 1.3.2 or older
-		// did it), otherwise encode params recursively.
-		for ( prefix in a ) {
-			buildParams( prefix, a[ prefix ], traditional, add );
-		}
-	}
-
-	// Return the resulting serialization
-	return s.join( "&" ).replace( r20, "+" );
-};
-
-jQuery.fn.extend({
-	serialize: function() {
-		return jQuery.param( this.serializeArray() );
-	},
-	serializeArray: function() {
-		return this.map(function() {
-			// Can add propHook for "elements" to filter or add form elements
-			var elements = jQuery.prop( this, "elements" );
-			return elements ? jQuery.makeArray( elements ) : this;
-		})
-		.filter(function() {
-			var type = this.type;
-			// Use .is(":disabled") so that fieldset[disabled] works
-			return this.name && !jQuery( this ).is( ":disabled" ) &&
-				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
-				( this.checked || !rcheckableType.test( type ) );
-		})
-		.map(function( i, elem ) {
-			var val = jQuery( this ).val();
-
-			return val == null ?
-				null :
-				jQuery.isArray( val ) ?
-					jQuery.map( val, function( val ) {
-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-					}) :
-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-		}).get();
-	}
-});
-
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
-	// Support: IE6+
-	function() {
-
-		// XHR cannot access local files, always use ActiveX for that case
-		return !this.isLocal &&
-
-			// Support: IE7-8
-			// oldIE XHR does not support non-RFC2616 methods (#13240)
-			// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
-			// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
-			// Although this check for six methods instead of eight
-			// since IE also does not support "trace" and "connect"
-			/^(get|post|head|put|delete|options)$/i.test( this.type ) &&
-
-			createStandardXHR() || createActiveXHR();
-	} :
-	// For all other browsers, use the standard XMLHttpRequest object
-	createStandardXHR;
-
-var xhrId = 0,
-	xhrCallbacks = {},
-	xhrSupported = jQuery.ajaxSettings.xhr();
-
-// Support: IE<10
-// Open requests must be manually aborted on unload (#5280)
-// See https://support.microsoft.com/kb/2856746 for more info
-if ( window.attachEvent ) {
-	window.attachEvent( "onunload", function() {
-		for ( var key in xhrCallbacks ) {
-			xhrCallbacks[ key ]( undefined, true );
-		}
-	});
-}
-
-// Determine support properties
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-xhrSupported = support.ajax = !!xhrSupported;
-
-// Create transport if the browser can provide an xhr
-if ( xhrSupported ) {
-
-	jQuery.ajaxTransport(function( options ) {
-		// Cross domain only allowed if supported through XMLHttpRequest
-		if ( !options.crossDomain || support.cors ) {
-
-			var callback;
-
-			return {
-				send: function( headers, complete ) {
-					var i,
-						xhr = options.xhr(),
-						id = ++xhrId;
-
-					// Open the socket
-					xhr.open( options.type, options.url, options.async, options.username, options.password );
-
-					// Apply custom fields if provided
-					if ( options.xhrFields ) {
-						for ( i in options.xhrFields ) {
-							xhr[ i ] = options.xhrFields[ i ];
-						}
-					}
-
-					// Override mime type if needed
-					if ( options.mimeType && xhr.overrideMimeType ) {
-						xhr.overrideMimeType( options.mimeType );
-					}
-
-					// X-Requested-With header
-					// For cross-domain requests, seeing as conditions for a preflight are
-					// akin to a jigsaw puzzle, we simply never set it to be sure.
-					// (it can always be set on a per-request basis or even using ajaxSetup)
-					// For same-domain requests, won't change header if already provided.
-					if ( !options.crossDomain && !headers["X-Requested-With"] ) {
-						headers["X-Requested-With"] = "XMLHttpRequest";
-					}
-
-					// Set headers
-					for ( i in headers ) {
-						// Support: IE<9
-						// IE's ActiveXObject throws a 'Type Mismatch' exception when setting
-						// request header to a null-value.
-						//
-						// To keep consistent with other XHR implementations, cast the value
-						// to string and ignore `undefined`.
-						if ( headers[ i ] !== undefined ) {
-							xhr.setRequestHeader( i, headers[ i ] + "" );
-						}
-					}
-
-					// Do send the request
-					// This may raise an exception which is actually
-					// handled in jQuery.ajax (so no try/catch here)
-					xhr.send( ( options.hasContent && options.data ) || null );
-
-					// Listener
-					callback = function( _, isAbort ) {
-						var status, statusText, responses;
-
-						// Was never called and is aborted or complete
-						if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-							// Clean up
-							delete xhrCallbacks[ id ];
-							callback = undefined;
-							xhr.onreadystatechange = jQuery.noop;
-
-							// Abort manually if needed
-							if ( isAbort ) {
-								if ( xhr.readyState !== 4 ) {
-									xhr.abort();
-								}
-							} else {
-								responses = {};
-								status = xhr.status;
-
-								// Support: IE<10
-								// Accessing binary-data responseText throws an exception
-								// (#11426)
-								if ( typeof xhr.responseText === "string" ) {
-									responses.text = xhr.responseText;
-								}
-
-								// Firefox throws an exception when accessing
-								// statusText for faulty cross-domain requests
-								try {
-									statusText = xhr.statusText;
-								} catch( e ) {
-									// We normalize with Webkit giving an empty statusText
-									statusText = "";
-								}
-
-								// Filter status for non standard behaviors
-
-								// If the request is local and we have data: assume a success
-								// (success with no data won't get notified, that's the best we
-								// can do given current implementations)
-								if ( !status && options.isLocal && !options.crossDomain ) {
-									status = responses.text ? 200 : 404;
-								// IE - #1450: sometimes returns 1223 when it should be 204
-								} else if ( status === 1223 ) {
-									status = 204;
-								}
-							}
-						}
-
-						// Call complete if needed
-						if ( responses ) {
-							complete( status, statusText, responses, xhr.getAllResponseHeaders() );
-						}
-					};
-
-					if ( !options.async ) {
-						// if we're in sync mode we fire the callback
-						callback();
-					} else if ( xhr.readyState === 4 ) {
-						// (IE6 & IE7) if it's in cache and has been
-						// retrieved directly we need to fire the callback
-						setTimeout( callback );
-					} else {
-						// Add to the list of active xhr callbacks
-						xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
-					}
-				},
-
-				abort: function() {
-					if ( callback ) {
-						callback( undefined, true );
-					}
-				}
-			};
-		}
-	});
-}
-
-// Functions to create xhrs
-function createStandardXHR() {
-	try {
-		return new window.XMLHttpRequest();
-	} catch( e ) {}
-}
-
-function createActiveXHR() {
-	try {
-		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-	} catch( e ) {}
-}
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
-	accepts: {
-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-	},
-	contents: {
-		script: /(?:java|ecma)script/
-	},
-	converters: {
-		"text script": function( text ) {
-			jQuery.globalEval( text );
-			return text;
-		}
-	}
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-	if ( s.cache === undefined ) {
-		s.cache = false;
-	}
-	if ( s.crossDomain ) {
-		s.type = "GET";
-		s.global = false;
-	}
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
-	// This transport only deals with cross domain requests
-	if ( s.crossDomain ) {
-
-		var script,
-			head = document.head || jQuery("head")[0] || document.documentElement;
-
-		return {
-
-			send: function( _, callback ) {
-
-				script = document.createElement("script");
-
-				script.async = true;
-
-				if ( s.scriptCharset ) {
-					script.charset = s.scriptCharset;
-				}
-
-				script.src = s.url;
-
-				// Attach handlers for all browsers
-				script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-						// Handle memory leak in IE
-						script.onload = script.onreadystatechange = null;
-
-						// Remove the script
-						if ( script.parentNode ) {
-							script.parentNode.removeChild( script );
-						}
-
-						// Dereference the script
-						script = null;
-
-						// Callback if not abort
-						if ( !isAbort ) {
-							callback( 200, "success" );
-						}
-					}
-				};
-
-				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
-				// Use native DOM manipulation to avoid our domManip AJAX trickery
-				head.insertBefore( script, head.firstChild );
-			},
-
-			abort: function() {
-				if ( script ) {
-					script.onload( undefined, true );
-				}
-			}
-		};
-	}
-});
-
-
-
-
-var oldCallbacks = [],
-	rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
-	jsonp: "callback",
-	jsonpCallback: function() {
-		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
-		this[ callback ] = true;
-		return callback;
-	}
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-	var callbackName, overwritten, responseContainer,
-		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
-			"url" :
-			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
-		);
-
-	// Handle iff the expected data type is "jsonp" or we have a parameter to set
-	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
-		// Get callback name, remembering preexisting value associated with it
-		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
-			s.jsonpCallback() :
-			s.jsonpCallback;
-
-		// Insert callback into url or form data
-		if ( jsonProp ) {
-			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
-		} else if ( s.jsonp !== false ) {
-			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
-		}
-
-		// Use data converter to retrieve json after script execution
-		s.converters["script json"] = function() {
-			if ( !responseContainer ) {
-				jQuery.error( callbackName + " was not called" );
-			}
-			return responseContainer[ 0 ];
-		};
-
-		// force json dataType
-		s.dataTypes[ 0 ] = "json";
-
-		// Install callback
-		overwritten = window[ callbackName ];
-		window[ callbackName ] = function() {
-			responseContainer = arguments;
-		};
-
-		// Clean-up function (fires after converters)
-		jqXHR.always(function() {
-			// Restore preexisting value
-			window[ callbackName ] = overwritten;
-
-			// Save back as free
-			if ( s[ callbackName ] ) {
-				// make sure that re-using the options doesn't screw things around
-				s.jsonpCallback = originalSettings.jsonpCallback;
-
-				// save the callback name for future use
-				oldCallbacks.push( callbackName );
-			}
-
-			// Call if it was a function and we have a response
-			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
-				overwritten( responseContainer[ 0 ] );
-			}
-
-			responseContainer = overwritten = undefined;
-		});
-
-		// Delegate to script
-		return "script";
-	}
-});
-
-
-
-
-// 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
-jQuery.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 && scripts.length ) {
-		jQuery( scripts ).remove();
-	}
-
-	return jQuery.merge( [], parsed.childNodes );
-};
-
-
-// Keep a copy of the old load method
-var _load = jQuery.fn.load;
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
-	if ( typeof url !== "string" && _load ) {
-		return _load.apply( this, arguments );
-	}
-
-	var selector, response, type,
-		self = this,
-		off = url.indexOf(" ");
-
-	if ( off >= 0 ) {
-		selector = jQuery.trim( url.slice( off, url.length ) );
-		url = url.slice( 0, off );
-	}
-
-	// If it's a function
-	if ( jQuery.isFunction( params ) ) {
-
-		// We assume that it's the callback
-		callback = params;
-		params = undefined;
-
-	// Otherwise, build a param string
-	} else if ( params && typeof params === "object" ) {
-		type = "POST";
-	}
-
-	// If we have elements to modify, make the request
-	if ( self.length > 0 ) {
-		jQuery.ajax({
-			url: url,
-
-			// if "type" variable is undefined, then "GET" method will be used
-			type: type,
-			dataType: "html",
-			data: params
-		}).done(function( responseText ) {
-
-			// Save response for use in complete callback
-			response = arguments;
-
-			self.html( selector ?
-
-				// If a selector was specified, locate the right elements in a dummy div
-				// Exclude scripts to avoid IE 'Permission Denied' errors
-				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
-				// Otherwise use the full result
-				responseText );
-
-		}).complete( callback && function( jqXHR, status ) {
-			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
-		});
-	}
-
-	return this;
-};
-
-
-
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
-	jQuery.fn[ type ] = function( fn ) {
-		return this.on( type, fn );
-	};
-});
-
-
-
-
-jQuery.expr.filters.animated = function( elem ) {
-	return jQuery.grep(jQuery.timers, function( fn ) {
-		return elem === fn.elem;
-	}).length;
-};
-
-
-
-
-
-var docElem = window.document.documentElement;
-
-/**
- * Gets a window from an element
- */
-function getWindow( elem ) {
-	return jQuery.isWindow( elem ) ?
-		elem :
-		elem.nodeType === 9 ?
-			elem.defaultView || elem.parentWindow :
-			false;
-}
-
-jQuery.offset = {
-	setOffset: function( elem, options, i ) {
-		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
-			position = jQuery.css( elem, "position" ),
-			curElem = jQuery( elem ),
-			props = {};
-
-		// set position first, in-case top/left are set even on static elem
-		if ( position === "static" ) {
-			elem.style.position = "relative";
-		}
-
-		curOffset = curElem.offset();
-		curCSSTop = jQuery.css( elem, "top" );
-		curCSSLeft = jQuery.css( elem, "left" );
-		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
-			jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
-
-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-		if ( calculatePosition ) {
-			curPosition = curElem.position();
-			curTop = curPosition.top;
-			curLeft = curPosition.left;
-		} else {
-			curTop = parseFloat( curCSSTop ) || 0;
-			curLeft = parseFloat( curCSSLeft ) || 0;
-		}
-
-		if ( jQuery.isFunction( options ) ) {
-			options = options.call( elem, i, curOffset );
-		}
-
-		if ( options.top != null ) {
-			props.top = ( options.top - curOffset.top ) + curTop;
-		}
-		if ( options.left != null ) {
-			props.left = ( options.left - curOffset.left ) + curLeft;
-		}
-
-		if ( "using" in options ) {
-			options.using.call( elem, props );
-		} else {
-			curElem.css( props );
-		}
-	}
-};
-
-jQuery.fn.extend({
-	offset: function( options ) {
-		if ( arguments.length ) {
-			return options === undefined ?
-				this :
-				this.each(function( i ) {
-					jQuery.offset.setOffset( this, options, i );
-				});
-		}
-
-		var docElem, win,
-			box = { top: 0, left: 0 },
-			elem = this[ 0 ],
-			doc = elem && elem.ownerDocument;
-
-		if ( !doc ) {
-			return;
-		}
-
-		docElem = doc.documentElement;
-
-		// Make sure it's not a disconnected DOM node
-		if ( !jQuery.contains( docElem, elem ) ) {
-			return box;
-		}
-
-		// If we don't have gBCR, just use 0,0 rather than error
-		// BlackBerry 5, iOS 3 (original iPhone)
-		if ( typeof elem.getBoundingClientRect !== strundefined ) {
-			box = elem.getBoundingClientRect();
-		}
-		win = getWindow( doc );
-		return {
-			top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
-			left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
-		};
-	},
-
-	position: function() {
-		if ( !this[ 0 ] ) {
-			return;
-		}
-
-		var offsetParent, offset,
-			parentOffset = { top: 0, left: 0 },
-			elem = this[ 0 ];
-
-		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
-		if ( jQuery.css( elem, "position" ) === "fixed" ) {
-			// we assume that getBoundingClientRect is available when computed position is fixed
-			offset = elem.getBoundingClientRect();
-		} else {
-			// Get *real* offsetParent
-			offsetParent = this.offsetParent();
-
-			// Get correct offsets
-			offset = this.offset();
-			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
-				parentOffset = offsetParent.offset();
-			}
-
-			// Add offsetParent borders
-			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
-			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
-		}
-
-		// Subtract parent offsets and element margins
-		// note: when an element has margin: auto the offsetLeft and marginLeft
-		// are the same in Safari causing offset.left to incorrectly be 0
-		return {
-			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
-			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
-		};
-	},
-
-	offsetParent: function() {
-		return this.map(function() {
-			var offsetParent = this.offsetParent || docElem;
-
-			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
-				offsetParent = offsetParent.offsetParent;
-			}
-			return offsetParent || docElem;
-		});
-	}
-});
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
-	var top = /Y/.test( prop );
-
-	jQuery.fn[ method ] = function( val ) {
-		return access( this, function( elem, method, val ) {
-			var win = getWindow( elem );
-
-			if ( val === undefined ) {
-				return win ? (prop in win) ? win[ prop ] :
-					win.document.documentElement[ method ] :
-					elem[ method ];
-			}
-
-			if ( win ) {
-				win.scrollTo(
-					!top ? val : jQuery( win ).scrollLeft(),
-					top ? val : jQuery( win ).scrollTop()
-				);
-
-			} else {
-				elem[ method ] = val;
-			}
-		}, method, val, arguments.length, null );
-	};
-});
-
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// getComputedStyle returns percent when specified for top/left/bottom/right
-// rather than make the css module depend on the offset module, we just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
-	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
-		function( elem, computed ) {
-			if ( computed ) {
-				computed = curCSS( elem, prop );
-				// if curCSS returns percentage, fallback to offset
-				return rnumnonpx.test( computed ) ?
-					jQuery( elem ).position()[ prop ] + "px" :
-					computed;
-			}
-		}
-	);
-});
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
-		// margin is only for outerHeight, outerWidth
-		jQuery.fn[ funcName ] = function( margin, value ) {
-			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
-				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
-			return access( this, function( elem, type, value ) {
-				var doc;
-
-				if ( jQuery.isWindow( elem ) ) {
-					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
-					// isn't a whole lot we can do. See pull request at this URL for discussion:
-					// https://github.com/jquery/jquery/pull/764
-					return elem.document.documentElement[ "client" + name ];
-				}
-
-				// Get document width or height
-				if ( elem.nodeType === 9 ) {
-					doc = elem.documentElement;
-
-					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
-					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
-					return Math.max(
-						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
-						elem.body[ "offset" + name ], doc[ "offset" + name ],
-						doc[ "client" + name ]
-					);
-				}
-
-				return value === undefined ?
-					// Get width or height on the element, requesting but not forcing parseFloat
-					jQuery.css( elem, type, extra ) :
-
-					// Set width or height on the element
-					jQuery.style( elem, type, value, extra );
-			}, type, chainable ? margin : undefined, chainable, null );
-		};
-	});
-});
-
-
-// The number of elements contained in the matched element set
-jQuery.fn.size = function() {
-	return this.length;
-};
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
-	define( "jquery", [], function() {
-		return jQuery;
-	});
-}
-
-
-
-
-var
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$;
-
-jQuery.noConflict = function( deep ) {
-	if ( window.$ === jQuery ) {
-		window.$ = _$;
-	}
-
-	if ( deep && window.jQuery === jQuery ) {
-		window.jQuery = _jQuery;
-	}
-
-	return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in
-// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( typeof noGlobal === strundefined ) {
-	window.jQuery = window.$ = jQuery;
-}
-
-
-
-
-return jQuery;
-
-}));
diff --git a/xos/core/xoslib/static/vendor/xosCeilometerDashboardVendor.js b/xos/core/xoslib/static/vendor/xosCeilometerDashboardVendor.js
deleted file mode 100644
index e2d4b18..0000000
--- a/xos/core/xoslib/static/vendor/xosCeilometerDashboardVendor.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("uibAccordionConfig",{closeOthers:!0}).controller("UibAccordionController",["$scope","$attrs","uibAccordionConfig",function(n,e,o){this.groups=[],this.closeOthers=function(i){var a=angular.isDefined(e.closeOthers)?n.$eval(e.closeOthers):o.closeOthers;a&&angular.forEach(this.groups,function(n){n!==i&&(n.isOpen=!1)})},this.addGroup=function(n){var e=this;this.groups.push(n),n.$on("$destroy",function(o){e.removeGroup(n)})},this.removeGroup=function(n){var e=this.groups.indexOf(n);e!==-1&&this.groups.splice(e,1)}}]).directive("uibAccordion",function(){return{controller:"UibAccordionController",controllerAs:"accordion",transclude:!0,templateUrl:function(n,e){return e.templateUrl||"template/accordion/accordion.html"}}}).directive("uibAccordionGroup",function(){return{require:"^uibAccordion",transclude:!0,replace:!0,templateUrl:function(n,e){return e.templateUrl||"template/accordion/accordion-group.html"},scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(n){this.heading=n}},link:function(n,e,o,i){i.addGroup(n),n.openClass=o.openClass||"panel-open",n.panelClass=o.panelClass,n.$watch("isOpen",function(o){e.toggleClass(n.openClass,!!o),o&&i.closeOthers(n)}),n.toggleOpen=function(e){n.isDisabled||e&&32!==e.which||(n.isOpen=!n.isOpen)}}}}).directive("uibAccordionHeading",function(){return{transclude:!0,template:"",replace:!0,require:"^uibAccordionGroup",link:function(n,e,o,i,a){i.setHeading(a(n,angular.noop))}}}).directive("uibAccordionTransclude",function(){return{require:["?^uibAccordionGroup","?^accordionGroup"],link:function(n,e,o,i){i=i[0]?i[0]:i[1],n.$watch(function(){return i[o.uibAccordionTransclude]},function(n){n&&(e.find("span").html(""),e.find("span").append(n))})}}}),angular.module("ui.bootstrap.accordion").value("$accordionSuppressWarning",!1).controller("AccordionController",["$scope","$attrs","$controller","$log","$accordionSuppressWarning",function(n,e,o,i,a){a||i.warn("AccordionController is now deprecated. Use UibAccordionController instead."),angular.extend(this,o("UibAccordionController",{$scope:n,$attrs:e}))}]).directive("accordion",["$log","$accordionSuppressWarning",function(n,e){return{restrict:"EA",controller:"AccordionController",controllerAs:"accordion",transclude:!0,replace:!1,templateUrl:function(n,e){return e.templateUrl||"template/accordion/accordion.html"},link:function(){e||n.warn("accordion is now deprecated. Use uib-accordion instead.")}}}]).directive("accordionGroup",["$log","$accordionSuppressWarning",function(n,e){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!0,templateUrl:function(n,e){return e.templateUrl||"template/accordion/accordion-group.html"},scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(n){this.heading=n}},link:function(o,i,a,r){e||n.warn("accordion-group is now deprecated. Use uib-accordion-group instead."),r.addGroup(o),o.openClass=a.openClass||"panel-open",o.panelClass=a.panelClass,o.$watch("isOpen",function(n){i.toggleClass(o.openClass,!!n),n&&r.closeOthers(o)}),o.toggleOpen=function(n){o.isDisabled||n&&32!==n.which||(o.isOpen=!o.isOpen)}}}}]).directive("accordionHeading",["$log","$accordionSuppressWarning",function(n,e){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^accordionGroup",link:function(o,i,a,r,t){e||n.warn("accordion-heading is now deprecated. Use uib-accordion-heading instead."),r.setHeading(t(o,angular.noop))}}}]).directive("accordionTransclude",["$log","$accordionSuppressWarning",function(n,e){return{require:"^accordionGroup",link:function(o,i,a,r){e||n.warn("accordion-transclude is now deprecated. Use uib-accordion-transclude instead."),o.$watch(function(){return r[a.accordionTransclude]},function(n){n&&(i.find("span").html(""),i.find("span").append(n))})}}}]),angular.module("ui.bootstrap.collapse",[]).directive("uibCollapse",["$animate","$injector",function(n,e){var o=e.has("$animateCss")?e.get("$animateCss"):null;return{link:function(e,i,a){function r(){i.removeClass("collapse").addClass("collapsing").attr("aria-expanded",!0).attr("aria-hidden",!1),o?o(i,{addClass:"in",easing:"ease",to:{height:i[0].scrollHeight+"px"}}).start()["finally"](t):n.addClass(i,"in",{to:{height:i[0].scrollHeight+"px"}}).then(t)}function t(){i.removeClass("collapsing").addClass("collapse").css({height:"auto"})}function s(){return i.hasClass("collapse")||i.hasClass("in")?(i.css({height:i[0].scrollHeight+"px"}).removeClass("collapse").addClass("collapsing").attr("aria-expanded",!1).attr("aria-hidden",!0),void(o?o(i,{removeClass:"in",to:{height:"0"}}).start()["finally"](c):n.removeClass(i,"in",{to:{height:"0"}}).then(c))):c()}function c(){i.css({height:"0"}),i.removeClass("collapsing").addClass("collapse")}e.$watch(a.uibCollapse,function(n){n?s():r()})}}}]),angular.module("ui.bootstrap.collapse").value("$collapseSuppressWarning",!1).directive("collapse",["$animate","$injector","$log","$collapseSuppressWarning",function(n,e,o,i){var a=e.has("$animateCss")?e.get("$animateCss"):null;return{link:function(e,r,t){function s(){r.removeClass("collapse").addClass("collapsing").attr("aria-expanded",!0).attr("aria-hidden",!1),a?a(r,{easing:"ease",to:{height:r[0].scrollHeight+"px"}}).start().done(c):n.animate(r,{},{height:r[0].scrollHeight+"px"}).then(c)}function c(){r.removeClass("collapsing").addClass("collapse in").css({height:"auto"})}function l(){return r.hasClass("collapse")||r.hasClass("in")?(r.css({height:r[0].scrollHeight+"px"}).removeClass("collapse in").addClass("collapsing").attr("aria-expanded",!1).attr("aria-hidden",!0),void(a?a(r,{to:{height:"0"}}).start().done(d):n.animate(r,{},{height:"0"}).then(d))):d()}function d(){r.css({height:"0"}),r.removeClass("collapsing").addClass("collapse")}i||o.warn("collapse is now deprecated. Use uib-collapse instead."),e.$watch(t.collapse,function(n){n?l():s()})}}}]);
\ No newline at end of file
diff --git a/xos/core/xoslib/static/vendor/xosDashboardManagerVendor.js b/xos/core/xoslib/static/vendor/xosDashboardManagerVendor.js
deleted file mode 100644
index 8d934d7..0000000
--- a/xos/core/xoslib/static/vendor/xosDashboardManagerVendor.js
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-angular.module("dndLists",[]).directive("dndDraggable",["$parse","$timeout","dndDropEffectWorkaround","dndDragTypeWorkaround",function(e,t,n,r){return function(i,o,a){o.attr("draggable","true"),a.dndDisableIf&&i.$watch(a.dndDisableIf,function(e){o.attr("draggable",!e)}),o.on("dragstart",function(s){return s=s.originalEvent||s,"false"==o.attr("draggable")||(s.dataTransfer.setData("Text",angular.toJson(i.$eval(a.dndDraggable))),s.dataTransfer.effectAllowed=a.dndEffectAllowed||"move",o.addClass("dndDragging"),t(function(){o.addClass("dndDraggingSource")},0),n.dropEffect="none",r.isDragging=!0,r.dragType=a.dndType?i.$eval(a.dndType):void 0,s._dndHandle&&s.dataTransfer.setDragImage&&s.dataTransfer.setDragImage(o[0],0,0),e(a.dndDragstart)(i,{event:s}),void s.stopPropagation())}),o.on("dragend",function(s){s=s.originalEvent||s;var u=n.dropEffect;i.$apply(function(){switch(u){case"move":e(a.dndMoved)(i,{event:s});break;case"copy":e(a.dndCopied)(i,{event:s});break;case"none":e(a.dndCanceled)(i,{event:s})}e(a.dndDragend)(i,{event:s,dropEffect:u})}),o.removeClass("dndDragging"),t(function(){o.removeClass("dndDraggingSource")},0),r.isDragging=!1,s.stopPropagation()}),o.on("click",function(t){a.dndSelected&&(t=t.originalEvent||t,i.$apply(function(){e(a.dndSelected)(i,{event:t})}),t.stopPropagation())}),o.on("selectstart",function(){this.dragDrop&&this.dragDrop()})}}]).directive("dndList",["$parse","$timeout","dndDropEffectWorkaround","dndDragTypeWorkaround",function(e,t,n,r){return function(i,o,a){function s(e,t,n){var r=y?e.offsetX||e.layerX:e.offsetY||e.layerY,i=y?t.offsetWidth:t.offsetHeight,o=y?t.offsetLeft:t.offsetTop;return o=n?o:0,r<o+i/2}function u(){var e;return angular.forEach(o.children(),function(t){var n=angular.element(t);n.hasClass("dndPlaceholder")&&(e=n)}),e||angular.element("<li class='dndPlaceholder'></li>")}function c(){return Array.prototype.indexOf.call(m.children,g)}function l(e){if(!r.isDragging&&!v)return!1;if(!d(e.dataTransfer.types))return!1;if(a.dndAllowedTypes&&r.isDragging){var t=i.$eval(a.dndAllowedTypes);if(angular.isArray(t)&&t.indexOf(r.dragType)===-1)return!1}return!a.dndDisableIf||!i.$eval(a.dndDisableIf)}function p(){return h.remove(),o.removeClass("dndDragover"),!0}function f(t,n,o,a){return e(t)(i,{event:n,index:o,item:a||void 0,external:!r.isDragging,type:r.isDragging?r.dragType:void 0})}function d(e){if(!e)return!0;for(var t=0;t<e.length;t++)if("Text"===e[t]||"text/plain"===e[t])return!0;return!1}var h=u(),g=h[0],m=o[0];h.remove();var y=a.dndHorizontalList&&i.$eval(a.dndHorizontalList),v=a.dndExternalSources&&i.$eval(a.dndExternalSources);o.on("dragenter",function(e){return e=e.originalEvent||e,!l(e)||void e.preventDefault()}),o.on("dragover",function(e){if(e=e.originalEvent||e,!l(e))return!0;if(g.parentNode!=m&&o.append(h),e.target!==m){for(var t=e.target;t.parentNode!==m&&t.parentNode;)t=t.parentNode;t.parentNode===m&&t!==g&&(s(e,t)?m.insertBefore(g,t):m.insertBefore(g,t.nextSibling))}else if(s(e,g,!0))for(;g.previousElementSibling&&(s(e,g.previousElementSibling,!0)||0===g.previousElementSibling.offsetHeight);)m.insertBefore(g,g.previousElementSibling);else for(;g.nextElementSibling&&!s(e,g.nextElementSibling,!0);)m.insertBefore(g,g.nextElementSibling.nextElementSibling);return a.dndDragover&&!f(a.dndDragover,e,c())?p():(o.addClass("dndDragover"),e.preventDefault(),e.stopPropagation(),!1)}),o.on("drop",function(e){if(e=e.originalEvent||e,!l(e))return!0;e.preventDefault();var t,r=e.dataTransfer.getData("Text")||e.dataTransfer.getData("text/plain");try{t=JSON.parse(r)}catch(o){return p()}var s=c();return a.dndDrop&&(t=f(a.dndDrop,e,s,t),!t)?p():(t!==!0&&i.$apply(function(){i.$eval(a.dndList).splice(s,0,t)}),f(a.dndInserted,e,s,t),"none"===e.dataTransfer.dropEffect?"copy"===e.dataTransfer.effectAllowed||"move"===e.dataTransfer.effectAllowed?n.dropEffect=e.dataTransfer.effectAllowed:n.dropEffect=e.ctrlKey?"copy":"move":n.dropEffect=e.dataTransfer.dropEffect,p(),e.stopPropagation(),!1)}),o.on("dragleave",function(e){e=e.originalEvent||e,o.removeClass("dndDragover"),t(function(){o.hasClass("dndDragover")||h.remove()},100)})}}]).directive("dndNodrag",function(){return function(e,t,n){t.attr("draggable","true"),t.on("dragstart",function(e){e=e.originalEvent||e,e._dndHandle||(e.dataTransfer.types&&e.dataTransfer.types.length||e.preventDefault(),e.stopPropagation())}),t.on("dragend",function(e){e=e.originalEvent||e,e._dndHandle||e.stopPropagation()})}}).directive("dndHandle",function(){return function(e,t,n){t.attr("draggable","true"),t.on("dragstart dragend",function(e){e=e.originalEvent||e,e._dndHandle=!0})}}).factory("dndDragTypeWorkaround",function(){return{}}).factory("dndDropEffectWorkaround",function(){return{}}),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.jsyaml=e()}}(function(){return function e(t,n,r){function i(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(o)return o(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};t[a][0].call(l.exports,function(e){var n=t[a][1][e];return i(n?n:e)},l,l.exports,e,t,n,r)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a<r.length;a++)i(r[a]);return i}({1:[function(e,t,n){"use strict";function r(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}var i=e("./js-yaml/loader"),o=e("./js-yaml/dumper");t.exports.Type=e("./js-yaml/type"),t.exports.Schema=e("./js-yaml/schema"),t.exports.FAILSAFE_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.JSON_SCHEMA=e("./js-yaml/schema/json"),t.exports.CORE_SCHEMA=e("./js-yaml/schema/core"),t.exports.DEFAULT_SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_FULL_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.load=i.load,t.exports.loadAll=i.loadAll,t.exports.safeLoad=i.safeLoad,t.exports.safeLoadAll=i.safeLoadAll,t.exports.dump=o.dump,t.exports.safeDump=o.safeDump,t.exports.YAMLException=e("./js-yaml/exception"),t.exports.MINIMAL_SCHEMA=e("./js-yaml/schema/failsafe"),t.exports.SAFE_SCHEMA=e("./js-yaml/schema/default_safe"),t.exports.DEFAULT_SCHEMA=e("./js-yaml/schema/default_full"),t.exports.scan=r("scan"),t.exports.parse=r("parse"),t.exports.compose=r("compose"),t.exports.addConstructor=r("addConstructor")},{"./js-yaml/dumper":3,"./js-yaml/exception":4,"./js-yaml/loader":5,"./js-yaml/schema":7,"./js-yaml/schema/core":8,"./js-yaml/schema/default_full":9,"./js-yaml/schema/default_safe":10,"./js-yaml/schema/failsafe":11,"./js-yaml/schema/json":12,"./js-yaml/type":13}],2:[function(e,t,n){"use strict";function r(e){return"undefined"==typeof e||null===e}function i(e){return"object"==typeof e&&null!==e}function o(e){return Array.isArray(e)?e:r(e)?[]:[e]}function a(e,t){var n,r,i,o;if(t)for(o=Object.keys(t),n=0,r=o.length;n<r;n+=1)i=o[n],e[i]=t[i];return e}function s(e,t){var n,r="";for(n=0;n<t;n+=1)r+=e;return r}function u(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e}t.exports.isNothing=r,t.exports.isObject=i,t.exports.toArray=o,t.exports.repeat=s,t.exports.isNegativeZero=u,t.exports.extend=a},{}],3:[function(e,t,n){"use strict";function r(e,t){var n,r,i,o,a,s,u;if(null===t)return{};for(n={},r=Object.keys(t),i=0,o=r.length;i<o;i+=1)a=r[i],s=String(t[a]),"!!"===a.slice(0,2)&&(a="tag:yaml.org,2002:"+a.slice(2)),u=e.compiledTypeMap[a],u&&L.call(u.styleAliases,s)&&(s=u.styleAliases[s]),n[a]=s;return n}function i(e){var t,n,r;if(t=e.toString(16).toUpperCase(),e<=255)n="x",r=2;else if(e<=65535)n="u",r=4;else{if(!(e<=4294967295))throw new D("code point within a string may not be greater than 0xFFFFFFFF");n="U",r=8}return"\\"+n+O.repeat("0",r-t.length)+t}function o(e){this.schema=e.schema||F,this.indent=Math.max(1,e.indent||2),this.skipInvalid=e.skipInvalid||!1,this.flowLevel=O.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=r(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.noRefs=e.noRefs||!1,this.noCompatMode=e.noCompatMode||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function a(e,t){for(var n,r=O.repeat(" ",t),i=0,o=-1,a="",s=e.length;i<s;)o=e.indexOf("\n",i),o===-1?(n=e.slice(i),i=s):(n=e.slice(i,o+1),i=o+1),n.length&&"\n"!==n&&(a+=r),a+=n;return a}function s(e,t){return"\n"+O.repeat(" ",e.indent*t)}function u(e,t){var n,r,i;for(n=0,r=e.implicitTypes.length;n<r;n+=1)if(i=e.implicitTypes[n],i.resolve(t))return!0;return!1}function c(e){return e===U||e===M}function l(e){return 32<=e&&e<=126||161<=e&&e<=55295&&8232!==e&&8233!==e||57344<=e&&e<=65533&&65279!==e||65536<=e&&e<=1114111}function p(e){return l(e)&&65279!==e&&e!==K&&e!==X&&e!==Q&&e!==te&&e!==re&&e!==V&&e!==P}function f(e){return l(e)&&65279!==e&&!c(e)&&e!==G&&e!==z&&e!==V&&e!==K&&e!==X&&e!==Q&&e!==te&&e!==re&&e!==P&&e!==W&&e!==R&&e!==Y&&e!==ne&&e!==Z&&e!==B&&e!==q&&e!==H&&e!==J&&e!==ee}function d(e,t,n,r,i){var o,a,s=!1,u=!1,d=r!==-1,h=-1,g=f(e.charCodeAt(0))&&!c(e.charCodeAt(e.length-1));if(t)for(o=0;o<e.length;o++){if(a=e.charCodeAt(o),!l(a))return le;g=g&&p(a)}else{for(o=0;o<e.length;o++){if(a=e.charCodeAt(o),a===$)s=!0,d&&(u=u||o-h-1>r&&" "!==e[h+1],h=o);else if(!l(a))return le;g=g&&p(a)}u=u||d&&o-h-1>r&&" "!==e[h+1]}return s||u?" "===e[0]&&n>9?le:u?ce:ue:g&&!i(e)?ae:se}function h(e,t,n,r){e.dump=function(){function i(t){return u(e,t)}if(0===t.length)return"''";if(!e.noCompatMode&&oe.indexOf(t)!==-1)return"'"+t+"'";var o=e.indent*Math.max(1,n),s=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-o),c=r||e.flowLevel>-1&&n>=e.flowLevel;switch(d(t,c,e.indent,s,i)){case ae:return t;case se:return"'"+t.replace(/'/g,"''")+"'";case ue:return"|"+g(t,e.indent)+m(a(t,o));case ce:return">"+g(t,e.indent)+m(a(y(t,s),o));case le:return'"'+x(t,s)+'"';default:throw new D("impossible error: invalid scalar style")}}()}function g(e,t){var n=" "===e[0]?String(t):"",r="\n"===e[e.length-1],i=r&&("\n"===e[e.length-2]||"\n"===e),o=i?"+":r?"":"-";return n+o+"\n"}function m(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function y(e,t){for(var n,r,i=/(\n+)([^\n]*)/g,o=function(){var n=e.indexOf("\n");return n=n!==-1?n:e.length,i.lastIndex=n,v(e.slice(0,n),t)}(),a="\n"===e[0]||" "===e[0];r=i.exec(e);){var s=r[1],u=r[2];n=" "===u[0],o+=s+(a||n||""===u?"":"\n")+v(u,t),a=n}return o}function v(e,t){if(""===e||" "===e[0])return e;for(var n,r,i=/ [^ ]/g,o=0,a=0,s=0,u="";n=i.exec(e);)s=n.index,s-o>t&&(r=a>o?a:s,u+="\n"+e.slice(o,r),o=r+1),a=s;return u+="\n",u+=e.length-o>t&&a>o?e.slice(o,a)+"\n"+e.slice(a+1):e.slice(o),u.slice(1)}function x(e){for(var t,n,r="",o=0;o<e.length;o++)t=e.charCodeAt(o),n=ie[t],r+=!n&&l(t)?e[o]:n||i(t);return r}function A(e,t,n){var r,i,o="",a=e.tag;for(r=0,i=n.length;r<i;r+=1)E(e,t,n[r],!1,!1)&&(0!==r&&(o+=", "),o+=e.dump);e.tag=a,e.dump="["+o+"]"}function b(e,t,n,r){var i,o,a="",u=e.tag;for(i=0,o=n.length;i<o;i+=1)E(e,t+1,n[i],!0,!0)&&(r&&0===i||(a+=s(e,t)),a+="- "+e.dump);e.tag=u,e.dump=a||"[]"}function w(e,t,n){var r,i,o,a,s,u="",c=e.tag,l=Object.keys(n);for(r=0,i=l.length;r<i;r+=1)s="",0!==r&&(s+=", "),o=l[r],a=n[o],E(e,t,o,!1,!1)&&(e.dump.length>1024&&(s+="? "),s+=e.dump+": ",E(e,t,a,!1,!1)&&(s+=e.dump,u+=s));e.tag=c,e.dump="{"+u+"}"}function C(e,t,n,r){var i,o,a,u,c,l,p="",f=e.tag,d=Object.keys(n);if(e.sortKeys===!0)d.sort();else if("function"==typeof e.sortKeys)d.sort(e.sortKeys);else if(e.sortKeys)throw new D("sortKeys must be a boolean or a function");for(i=0,o=d.length;i<o;i+=1)l="",r&&0===i||(l+=s(e,t)),a=d[i],u=n[a],E(e,t+1,a,!0,!0,!0)&&(c=null!==e.tag&&"?"!==e.tag||e.dump&&e.dump.length>1024,c&&(l+=e.dump&&$===e.dump.charCodeAt(0)?"?":"? "),l+=e.dump,c&&(l+=s(e,t)),E(e,t+1,u,!0,c)&&(l+=e.dump&&$===e.dump.charCodeAt(0)?":":": ",l+=e.dump,p+=l));e.tag=f,e.dump=p||"{}"}function k(e,t,n){var r,i,o,a,s,u;for(i=n?e.explicitTypes:e.implicitTypes,o=0,a=i.length;o<a;o+=1)if(s=i[o],(s.instanceOf||s.predicate)&&(!s.instanceOf||"object"==typeof t&&t instanceof s.instanceOf)&&(!s.predicate||s.predicate(t))){if(e.tag=n?s.tag:"?",s.represent){if(u=e.styleMap[s.tag]||s.defaultStyle,"[object Function]"===_.call(s.represent))r=s.represent(t,u);else{if(!L.call(s.represent,u))throw new D("!<"+s.tag+'> tag resolver accepts not "'+u+'" style');r=s.represent[u](t,u)}e.dump=r}return!0}return!1}function E(e,t,n,r,i,o){e.tag=null,e.dump=n,k(e,n,!1)||k(e,n,!0);var a=_.call(e.dump);r&&(r=e.flowLevel<0||e.flowLevel>t);var s,u,c="[object Object]"===a||"[object Array]"===a;if(c&&(s=e.duplicates.indexOf(n),u=s!==-1),(null!==e.tag&&"?"!==e.tag||u||2!==e.indent&&t>0)&&(i=!1),u&&e.usedDuplicates[s])e.dump="*ref_"+s;else{if(c&&u&&!e.usedDuplicates[s]&&(e.usedDuplicates[s]=!0),"[object Object]"===a)r&&0!==Object.keys(e.dump).length?(C(e,t,e.dump,i),u&&(e.dump="&ref_"+s+e.dump)):(w(e,t,e.dump),u&&(e.dump="&ref_"+s+" "+e.dump));else if("[object Array]"===a)r&&0!==e.dump.length?(b(e,t,e.dump,i),u&&(e.dump="&ref_"+s+e.dump)):(A(e,t,e.dump),u&&(e.dump="&ref_"+s+" "+e.dump));else{if("[object String]"!==a){if(e.skipInvalid)return!1;throw new D("unacceptable kind of an object to dump "+a)}"?"!==e.tag&&h(e,e.dump,t,o)}null!==e.tag&&"?"!==e.tag&&(e.dump="!<"+e.tag+"> "+e.dump)}return!0}function j(e,t){var n,r,i=[],o=[];for(S(e,i,o),n=0,r=o.length;n<r;n+=1)t.duplicates.push(i[o[n]]);t.usedDuplicates=new Array(r)}function S(e,t,n){var r,i,o;if(null!==e&&"object"==typeof e)if(i=t.indexOf(e),i!==-1)n.indexOf(i)===-1&&n.push(i);else if(t.push(e),Array.isArray(e))for(i=0,o=e.length;i<o;i+=1)S(e[i],t,n);else for(r=Object.keys(e),i=0,o=r.length;i<o;i+=1)S(e[r[i]],t,n)}function I(e,t){t=t||{};var n=new o(t);return n.noRefs||j(e,n),E(n,0,e,!0,!0)?n.dump+"\n":""}function T(e,t){return I(e,O.extend({schema:N},t))}var O=e("./common"),D=e("./exception"),F=e("./schema/default_full"),N=e("./schema/default_safe"),_=Object.prototype.toString,L=Object.prototype.hasOwnProperty,M=9,$=10,U=32,Y=33,q=34,P=35,H=37,W=38,B=39,R=42,K=44,G=45,V=58,Z=62,z=63,J=64,X=91,Q=93,ee=96,te=123,ne=124,re=125,ie={};ie[0]="\\0",ie[7]="\\a",ie[8]="\\b",ie[9]="\\t",ie[10]="\\n",ie[11]="\\v",ie[12]="\\f",ie[13]="\\r",ie[27]="\\e",ie[34]='\\"',ie[92]="\\\\",ie[133]="\\N",ie[160]="\\_",ie[8232]="\\L",ie[8233]="\\P";var oe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],ae=1,se=2,ue=3,ce=4,le=5;t.exports.dump=I,t.exports.safeDump=T},{"./common":2,"./exception":4,"./schema/default_full":9,"./schema/default_safe":10}],4:[function(e,t,n){"use strict";function r(e,t){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||"",this.name="YAMLException",this.reason=e,this.mark=t,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():"")}r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t},t.exports=r},{}],5:[function(e,t,n){"use strict";function r(e){return 10===e||13===e}function i(e){return 9===e||32===e}function o(e){return 9===e||32===e||10===e||13===e}function a(e){return 44===e||91===e||93===e||123===e||125===e}function s(e){var t;return 48<=e&&e<=57?e-48:(t=32|e,97<=t&&t<=102?t-97+10:-1)}function u(e){return 120===e?2:117===e?4:85===e?8:0}function c(e){return 48<=e&&e<=57?e-48:-1}function l(e){return 48===e?"\0":97===e?"":98===e?"\b":116===e?"\t":9===e?"\t":110===e?"\n":118===e?"\x0B":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"Â…":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function p(e){return e<=65535?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}function f(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||B,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function d(e,t){return new P(t,new H(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function h(e,t){throw d(e,t)}function g(e,t){e.onWarning&&e.onWarning.call(null,d(e,t))}function m(e,t,n,r){var i,o,a,s;if(t<n){if(s=e.input.slice(t,n),r)for(i=0,o=s.length;i<o;i+=1)a=s.charCodeAt(i),9===a||32<=a&&a<=1114111||h(e,"expected valid JSON character");else Q.test(s)&&h(e,"the stream contains non-printable characters");e.result+=s}}function y(e,t,n,r){var i,o,a,s;for(q.isObject(n)||h(e,"cannot merge mappings; the provided source object is unacceptable"),i=Object.keys(n),a=0,s=i.length;a<s;a+=1)o=i[a],R.call(t,o)||(t[o]=n[o],r[o]=!0)}function v(e,t,n,r,i,o){var a,s;if(i=String(i),null===t&&(t={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(o))for(a=0,s=o.length;a<s;a+=1)y(e,t,o[a],n);else y(e,t,o,n);else e.json||R.call(n,i)||!R.call(t,i)||h(e,"duplicated mapping key"),t[i]=o,delete n[i];return t}function x(e){var t;t=e.input.charCodeAt(e.position),10===t?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):h(e,"a line break is expected"),e.line+=1,e.lineStart=e.position}function A(e,t,n){for(var o=0,a=e.input.charCodeAt(e.position);0!==a;){for(;i(a);)a=e.input.charCodeAt(++e.position);if(t&&35===a)do a=e.input.charCodeAt(++e.position);while(10!==a&&13!==a&&0!==a);if(!r(a))break;for(x(e),a=e.input.charCodeAt(e.position),o++,e.lineIndent=0;32===a;)e.lineIndent++,a=e.input.charCodeAt(++e.position)}return n!==-1&&0!==o&&e.lineIndent<n&&g(e,"deficient indentation"),o}function b(e){var t,n=e.position;return t=e.input.charCodeAt(n),!(45!==t&&46!==t||t!==e.input.charCodeAt(n+1)||t!==e.input.charCodeAt(n+2)||(n+=3,t=e.input.charCodeAt(n),0!==t&&!o(t)))}function w(e,t){1===t?e.result+=" ":t>1&&(e.result+=q.repeat("\n",t-1))}function C(e,t,n){var s,u,c,l,p,f,d,h,g,y=e.kind,v=e.result;if(g=e.input.charCodeAt(e.position),o(g)||a(g)||35===g||38===g||42===g||33===g||124===g||62===g||39===g||34===g||37===g||64===g||96===g)return!1;if((63===g||45===g)&&(u=e.input.charCodeAt(e.position+1),o(u)||n&&a(u)))return!1;for(e.kind="scalar",e.result="",c=l=e.position,p=!1;0!==g;){if(58===g){if(u=e.input.charCodeAt(e.position+1),o(u)||n&&a(u))break}else if(35===g){if(s=e.input.charCodeAt(e.position-1),o(s))break}else{if(e.position===e.lineStart&&b(e)||n&&a(g))break;if(r(g)){if(f=e.line,d=e.lineStart,h=e.lineIndent,A(e,!1,-1),e.lineIndent>=t){p=!0,g=e.input.charCodeAt(e.position);continue}e.position=l,e.line=f,e.lineStart=d,e.lineIndent=h;break}}p&&(m(e,c,l,!1),w(e,e.line-f),c=l=e.position,p=!1),i(g)||(l=e.position+1),g=e.input.charCodeAt(++e.position)}return m(e,c,l,!1),!!e.result||(e.kind=y,e.result=v,!1)}function k(e,t){var n,i,o;if(n=e.input.charCodeAt(e.position),39!==n)return!1;for(e.kind="scalar",e.result="",e.position++,i=o=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(m(e,i,e.position,!0),n=e.input.charCodeAt(++e.position),39!==n)return!0;i=o=e.position,e.position++}else r(n)?(m(e,i,o,!0),w(e,A(e,!1,t)),i=o=e.position):e.position===e.lineStart&&b(e)?h(e,"unexpected end of the document within a single quoted scalar"):(e.position++,o=e.position);h(e,"unexpected end of the stream within a single quoted scalar")}function E(e,t){var n,i,o,a,c,l;if(l=e.input.charCodeAt(e.position),34!==l)return!1;for(e.kind="scalar",e.result="",e.position++,n=i=e.position;0!==(l=e.input.charCodeAt(e.position));){if(34===l)return m(e,n,e.position,!0),e.position++,!0;if(92===l){if(m(e,n,e.position,!0),l=e.input.charCodeAt(++e.position),r(l))A(e,!1,t);else if(l<256&&ie[l])e.result+=oe[l],e.position++;else if((c=u(l))>0){for(o=c,a=0;o>0;o--)l=e.input.charCodeAt(++e.position),(c=s(l))>=0?a=(a<<4)+c:h(e,"expected hexadecimal character");e.result+=p(a),e.position++}else h(e,"unknown escape sequence");n=i=e.position}else r(l)?(m(e,n,i,!0),w(e,A(e,!1,t)),n=i=e.position):e.position===e.lineStart&&b(e)?h(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}h(e,"unexpected end of the stream within a double quoted scalar")}function j(e,t){var n,r,i,a,s,u,c,l,p,f,d,g=!0,m=e.tag,y=e.anchor,x={};if(d=e.input.charCodeAt(e.position),91===d)a=93,c=!1,r=[];else{if(123!==d)return!1;a=125,c=!0,r={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=r),d=e.input.charCodeAt(++e.position);0!==d;){if(A(e,!0,t),d=e.input.charCodeAt(e.position),d===a)return e.position++,e.tag=m,e.anchor=y,e.kind=c?"mapping":"sequence",e.result=r,!0;g||h(e,"missed comma between flow collection entries"),p=l=f=null,s=u=!1,63===d&&(i=e.input.charCodeAt(e.position+1),o(i)&&(s=u=!0,e.position++,A(e,!0,t))),n=e.line,N(e,t,K,!1,!0),p=e.tag,l=e.result,A(e,!0,t),d=e.input.charCodeAt(e.position),!u&&e.line!==n||58!==d||(s=!0,d=e.input.charCodeAt(++e.position),A(e,!0,t),N(e,t,K,!1,!0),f=e.result),c?v(e,r,x,p,l,f):s?r.push(v(e,null,x,p,l,f)):r.push(l),A(e,!0,t),d=e.input.charCodeAt(e.position),44===d?(g=!0,d=e.input.charCodeAt(++e.position)):g=!1}h(e,"unexpected end of the stream within a flow collection")}function S(e,t){var n,o,a,s,u=z,l=!1,p=!1,f=t,d=0,g=!1;if(s=e.input.charCodeAt(e.position),124===s)o=!1;else{if(62!==s)return!1;o=!0}for(e.kind="scalar",e.result="";0!==s;)if(s=e.input.charCodeAt(++e.position),43===s||45===s)z===u?u=43===s?X:J:h(e,"repeat of a chomping mode identifier");else{if(!((a=c(s))>=0))break;0===a?h(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):p?h(e,"repeat of an indentation width identifier"):(f=t+a-1,p=!0)}if(i(s)){do s=e.input.charCodeAt(++e.position);while(i(s));if(35===s)do s=e.input.charCodeAt(++e.position);while(!r(s)&&0!==s)}for(;0!==s;){for(x(e),e.lineIndent=0,s=e.input.charCodeAt(e.position);(!p||e.lineIndent<f)&&32===s;)e.lineIndent++,s=e.input.charCodeAt(++e.position);if(!p&&e.lineIndent>f&&(f=e.lineIndent),r(s))d++;else{if(e.lineIndent<f){u===X?e.result+=q.repeat("\n",l?1+d:d):u===z&&l&&(e.result+="\n");break}for(o?i(s)?(g=!0,e.result+=q.repeat("\n",l?1+d:d)):g?(g=!1,e.result+=q.repeat("\n",d+1)):0===d?l&&(e.result+=" "):e.result+=q.repeat("\n",d):e.result+=q.repeat("\n",l?1+d:d),l=!0,p=!0,d=0,n=e.position;!r(s)&&0!==s;)s=e.input.charCodeAt(++e.position);m(e,n,e.position,!1)}}return!0}function I(e,t){var n,r,i,a=e.tag,s=e.anchor,u=[],c=!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=u),i=e.input.charCodeAt(e.position);0!==i&&45===i&&(r=e.input.charCodeAt(e.position+1),o(r));)if(c=!0,e.position++,A(e,!0,-1)&&e.lineIndent<=t)u.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,N(e,t,V,!1,!0),u.push(e.result),A(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)h(e,"bad indentation of a sequence entry");else if(e.lineIndent<t)break;return!!c&&(e.tag=a,e.anchor=s,e.kind="sequence",e.result=u,!0)}function T(e,t,n){var r,a,s,u,c=e.tag,l=e.anchor,p={},f={},d=null,g=null,m=null,y=!1,x=!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=p),u=e.input.charCodeAt(e.position);0!==u;){if(r=e.input.charCodeAt(e.position+1),s=e.line,63!==u&&58!==u||!o(r)){if(!N(e,n,G,!1,!0))break;if(e.line===s){for(u=e.input.charCodeAt(e.position);i(u);)u=e.input.charCodeAt(++e.position);if(58===u)u=e.input.charCodeAt(++e.position),o(u)||h(e,"a whitespace character is expected after the key-value separator within a block mapping"),y&&(v(e,p,f,d,g,null),d=g=m=null),x=!0,y=!1,a=!1,d=e.tag,g=e.result;else{if(!x)return e.tag=c,e.anchor=l,!0;h(e,"can not read an implicit mapping pair; a colon is missed")}}else{if(!x)return e.tag=c,e.anchor=l,!0;h(e,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===u?(y&&(v(e,p,f,d,g,null),d=g=m=null),x=!0,y=!0,a=!0):y?(y=!1,a=!0):h(e,"incomplete explicit mapping pair; a key node is missed"),e.position+=1,u=r;if((e.line===s||e.lineIndent>t)&&(N(e,t,Z,!0,a)&&(y?g=e.result:m=e.result),y||(v(e,p,f,d,g,m),d=g=m=null),A(e,!0,-1),u=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==u)h(e,"bad indentation of a mapping entry");else if(e.lineIndent<t)break}return y&&v(e,p,f,d,g,null),x&&(e.tag=c,e.anchor=l,e.kind="mapping",e.result=p),x}function O(e){var t,n,r,i,a=!1,s=!1;if(i=e.input.charCodeAt(e.position),33!==i)return!1;if(null!==e.tag&&h(e,"duplication of a tag property"),i=e.input.charCodeAt(++e.position),60===i?(a=!0,i=e.input.charCodeAt(++e.position)):33===i?(s=!0,n="!!",i=e.input.charCodeAt(++e.position)):n="!",t=e.position,a){do i=e.input.charCodeAt(++e.position);while(0!==i&&62!==i);e.position<e.length?(r=e.input.slice(t,e.position),i=e.input.charCodeAt(++e.position)):h(e,"unexpected end of the stream within a verbatim tag")}else{for(;0!==i&&!o(i);)33===i&&(s?h(e,"tag suffix cannot contain exclamation marks"):(n=e.input.slice(t-1,e.position+1),ne.test(n)||h(e,"named tag handle cannot contain such characters"),s=!0,t=e.position+1)),i=e.input.charCodeAt(++e.position);r=e.input.slice(t,e.position),te.test(r)&&h(e,"tag suffix cannot contain flow indicator characters")}return r&&!re.test(r)&&h(e,"tag name cannot contain such characters: "+r),a?e.tag=r:R.call(e.tagMap,n)?e.tag=e.tagMap[n]+r:"!"===n?e.tag="!"+r:"!!"===n?e.tag="tag:yaml.org,2002:"+r:h(e,'undeclared tag handle "'+n+'"'),!0}function D(e){var t,n;if(n=e.input.charCodeAt(e.position),38!==n)return!1;for(null!==e.anchor&&h(e,"duplication of an anchor property"),n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!o(n)&&!a(n);)n=e.input.charCodeAt(++e.position);return e.position===t&&h(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(t,e.position),!0}function F(e){var t,n,r;if(r=e.input.charCodeAt(e.position),42!==r)return!1;for(r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!o(r)&&!a(r);)r=e.input.charCodeAt(++e.position);return e.position===t&&h(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),e.anchorMap.hasOwnProperty(n)||h(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],A(e,!0,-1),!0}function N(e,t,n,r,i){var o,a,s,u,c,l,p,f,d=1,g=!1,m=!1;if(null!==e.listener&&e.listener("open",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,o=a=s=Z===n||V===n,r&&A(e,!0,-1)&&(g=!0,e.lineIndent>t?d=1:e.lineIndent===t?d=0:e.lineIndent<t&&(d=-1)),1===d)for(;O(e)||D(e);)A(e,!0,-1)?(g=!0,s=o,e.lineIndent>t?d=1:e.lineIndent===t?d=0:e.lineIndent<t&&(d=-1)):s=!1;if(s&&(s=g||i),1!==d&&Z!==n||(p=K===n||G===n?t:t+1,f=e.position-e.lineStart,1===d?s&&(I(e,f)||T(e,f,p))||j(e,p)?m=!0:(a&&S(e,p)||k(e,p)||E(e,p)?m=!0:F(e)?(m=!0,null===e.tag&&null===e.anchor||h(e,"alias node should not have any properties")):C(e,p,K===n)&&(m=!0,null===e.tag&&(e.tag="?")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===d&&(m=s&&I(e,f))),null!==e.tag&&"!"!==e.tag)if("?"===e.tag){for(u=0,c=e.implicitTypes.length;u<c;u+=1)if(l=e.implicitTypes[u],l.resolve(e.result)){e.result=l.construct(e.result),e.tag=l.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else R.call(e.typeMap,e.tag)?(l=e.typeMap[e.tag],null!==e.result&&l.kind!==e.kind&&h(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+l.kind+'", not "'+e.kind+'"'),l.resolve(e.result)?(e.result=l.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):h(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):h(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||m}function _(e){var t,n,a,s,u=e.position,c=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(s=e.input.charCodeAt(e.position))&&(A(e,!0,-1),s=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==s));){for(c=!0,s=e.input.charCodeAt(++e.position),t=e.position;0!==s&&!o(s);)s=e.input.charCodeAt(++e.position);for(n=e.input.slice(t,e.position),a=[],n.length<1&&h(e,"directive name must not be less than one character in length");0!==s;){for(;i(s);)s=e.input.charCodeAt(++e.position);if(35===s){do s=e.input.charCodeAt(++e.position);while(0!==s&&!r(s));break}if(r(s))break;for(t=e.position;0!==s&&!o(s);)s=e.input.charCodeAt(++e.position);a.push(e.input.slice(t,e.position))}0!==s&&x(e),R.call(se,n)?se[n](e,n,a):g(e,'unknown document directive "'+n+'"')}return A(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,A(e,!0,-1)):c&&h(e,"directives end mark is expected"),N(e,e.lineIndent-1,Z,!1,!0),A(e,!0,-1),e.checkLineBreaks&&ee.test(e.input.slice(u,e.position))&&g(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&b(e)?void(46===e.input.charCodeAt(e.position)&&(e.position+=3,A(e,!0,-1))):void(e.position<e.length-1&&h(e,"end of the stream or a document separator is expected"))}function L(e,t){e=String(e),t=t||{},0!==e.length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+="\n"),65279===e.charCodeAt(0)&&(e=e.slice(1)));var n=new f(e,t);for(n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)_(n);return n.documents}function M(e,t,n){var r,i,o=L(e,n);for(r=0,i=o.length;r<i;r+=1)t(o[r])}function $(e,t){var n=L(e,t);if(0!==n.length){if(1===n.length)return n[0];throw new P("expected a single document in the stream, but found more")}}function U(e,t,n){M(e,t,q.extend({schema:W},n))}function Y(e,t){return $(e,q.extend({schema:W},t))}for(var q=e("./common"),P=e("./exception"),H=e("./mark"),W=e("./schema/default_safe"),B=e("./schema/default_full"),R=Object.prototype.hasOwnProperty,K=1,G=2,V=3,Z=4,z=1,J=2,X=3,Q=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,ee=/[\x85\u2028\u2029]/,te=/[,\[\]\{\}]/,ne=/^(?:!|!!|![a-z\-]+!)$/i,re=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i,ie=new Array(256),oe=new Array(256),ae=0;ae<256;ae++)ie[ae]=l(ae)?1:0,oe[ae]=l(ae);var se={YAML:function(e,t,n){var r,i,o;null!==e.version&&h(e,"duplication of %YAML directive"),1!==n.length&&h(e,"YAML directive accepts exactly one argument"),r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),null===r&&h(e,"ill-formed argument of the YAML directive"),i=parseInt(r[1],10),o=parseInt(r[2],10),1!==i&&h(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&g(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var r,i;2!==n.length&&h(e,"TAG directive accepts exactly two arguments"),r=n[0],i=n[1],ne.test(r)||h(e,"ill-formed tag handle (first argument) of the TAG directive"),R.call(e.tagMap,r)&&h(e,'there is a previously declared suffix for "'+r+'" tag handle'),re.test(i)||h(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[r]=i}};t.exports.loadAll=M,t.exports.load=$,t.exports.safeLoadAll=U,t.exports.safeLoad=Y},{"./common":2,"./exception":4,"./mark":6,"./schema/default_full":9,"./schema/default_safe":10}],6:[function(e,t,n){"use strict";function r(e,t,n,r,i){this.name=e,this.buffer=t,this.position=n,this.line=r,this.column=i}var i=e("./common");r.prototype.getSnippet=function(e,t){var n,r,o,a,s;if(!this.buffer)return null;for(e=e||4,t=t||75,n="",r=this.position;r>0&&"\0\r\nÂ…\u2028\u2029".indexOf(this.buffer.charAt(r-1))===-1;)if(r-=1,this.position-r>t/2-1){n=" ... ",r+=5;break}for(o="",a=this.position;a<this.buffer.length&&"\0\r\nÂ…\u2028\u2029".indexOf(this.buffer.charAt(a))===-1;)if(a+=1,a-this.position>t/2-1){o=" ... ",a-=5;break}return s=this.buffer.slice(r,a),i.repeat(" ",e)+n+s+o+"\n"+i.repeat(" ",e+this.position-r+n.length)+"^"},r.prototype.toString=function(e){var t,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),
-t&&(n+=":\n"+t)),n},t.exports=r},{"./common":2}],7:[function(e,t,n){"use strict";function r(e,t,n){var i=[];return e.include.forEach(function(e){n=r(e,t,n)}),e[t].forEach(function(e){n.forEach(function(t,n){t.tag===e.tag&&i.push(n)}),n.push(e)}),n.filter(function(e,t){return i.indexOf(t)===-1})}function i(){function e(e){r[e.tag]=e}var t,n,r={};for(t=0,n=arguments.length;t<n;t+=1)arguments[t].forEach(e);return r}function o(e){this.include=e.include||[],this.implicit=e.implicit||[],this.explicit=e.explicit||[],this.implicit.forEach(function(e){if(e.loadKind&&"scalar"!==e.loadKind)throw new s("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")}),this.compiledImplicit=r(this,"implicit",[]),this.compiledExplicit=r(this,"explicit",[]),this.compiledTypeMap=i(this.compiledImplicit,this.compiledExplicit)}var a=e("./common"),s=e("./exception"),u=e("./type");o.DEFAULT=null,o.create=function(){var e,t;switch(arguments.length){case 1:e=o.DEFAULT,t=arguments[0];break;case 2:e=arguments[0],t=arguments[1];break;default:throw new s("Wrong number of arguments for Schema.create function")}if(e=a.toArray(e),t=a.toArray(t),!e.every(function(e){return e instanceof o}))throw new s("Specified list of super schemas (or a single Schema object) contains a non-Schema object.");if(!t.every(function(e){return e instanceof u}))throw new s("Specified list of YAML types (or a single Type object) contains a non-Type object.");return new o({include:e,explicit:t})},t.exports=o},{"./common":2,"./exception":4,"./type":13}],8:[function(e,t,n){"use strict";var r=e("../schema");t.exports=new r({include:[e("./json")]})},{"../schema":7,"./json":12}],9:[function(e,t,n){"use strict";var r=e("../schema");t.exports=r.DEFAULT=new r({include:[e("./default_safe")],explicit:[e("../type/js/undefined"),e("../type/js/regexp"),e("../type/js/function")]})},{"../schema":7,"../type/js/function":18,"../type/js/regexp":19,"../type/js/undefined":20,"./default_safe":10}],10:[function(e,t,n){"use strict";var r=e("../schema");t.exports=new r({include:[e("./core")],implicit:[e("../type/timestamp"),e("../type/merge")],explicit:[e("../type/binary"),e("../type/omap"),e("../type/pairs"),e("../type/set")]})},{"../schema":7,"../type/binary":14,"../type/merge":22,"../type/omap":24,"../type/pairs":25,"../type/set":27,"../type/timestamp":29,"./core":8}],11:[function(e,t,n){"use strict";var r=e("../schema");t.exports=new r({explicit:[e("../type/str"),e("../type/seq"),e("../type/map")]})},{"../schema":7,"../type/map":21,"../type/seq":26,"../type/str":28}],12:[function(e,t,n){"use strict";var r=e("../schema");t.exports=new r({include:[e("./failsafe")],implicit:[e("../type/null"),e("../type/bool"),e("../type/int"),e("../type/float")]})},{"../schema":7,"../type/bool":15,"../type/float":16,"../type/int":17,"../type/null":23,"./failsafe":11}],13:[function(e,t,n){"use strict";function r(e){var t={};return null!==e&&Object.keys(e).forEach(function(n){e[n].forEach(function(e){t[String(e)]=n})}),t}function i(e,t){if(t=t||{},Object.keys(t).forEach(function(t){if(a.indexOf(t)===-1)throw new o('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.defaultStyle=t.defaultStyle||null,this.styleAliases=r(t.styleAliases||null),s.indexOf(this.kind)===-1)throw new o('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var o=e("./exception"),a=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],s=["scalar","sequence","mapping"];t.exports=i},{"./exception":4}],14:[function(e,t,n){"use strict";function r(e){if(null===e)return!1;var t,n,r=0,i=e.length,o=p;for(n=0;n<i;n++)if(t=o.indexOf(e.charAt(n)),!(t>64)){if(t<0)return!1;r+=6}return r%8===0}function i(e){var t,n,r=e.replace(/[\r\n=]/g,""),i=r.length,o=p,a=0,u=[];for(t=0;t<i;t++)t%4===0&&t&&(u.push(a>>16&255),u.push(a>>8&255),u.push(255&a)),a=a<<6|o.indexOf(r.charAt(t));return n=i%4*6,0===n?(u.push(a>>16&255),u.push(a>>8&255),u.push(255&a)):18===n?(u.push(a>>10&255),u.push(a>>2&255)):12===n&&u.push(a>>4&255),s?new s(u):u}function o(e){var t,n,r="",i=0,o=e.length,a=p;for(t=0;t<o;t++)t%3===0&&t&&(r+=a[i>>18&63],r+=a[i>>12&63],r+=a[i>>6&63],r+=a[63&i]),i=(i<<8)+e[t];return n=o%3,0===n?(r+=a[i>>18&63],r+=a[i>>12&63],r+=a[i>>6&63],r+=a[63&i]):2===n?(r+=a[i>>10&63],r+=a[i>>4&63],r+=a[i<<2&63],r+=a[64]):1===n&&(r+=a[i>>2&63],r+=a[i<<4&63],r+=a[64],r+=a[64]),r}function a(e){return s&&s.isBuffer(e)}var s;try{var u=e;s=u("buffer").Buffer}catch(c){}var l=e("../type"),p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";t.exports=new l("tag:yaml.org,2002:binary",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o})},{"../type":13}],15:[function(e,t,n){"use strict";function r(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)}function i(e){return"true"===e||"True"===e||"TRUE"===e}function o(e){return"[object Boolean]"===Object.prototype.toString.call(e)}var a=e("../type");t.exports=new a("tag:yaml.org,2002:bool",{kind:"scalar",resolve:r,construct:i,predicate:o,represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})},{"../type":13}],16:[function(e,t,n){"use strict";function r(e){return null!==e&&!!c.test(e)}function i(e){var t,n,r,i;return t=e.replace(/_/g,"").toLowerCase(),n="-"===t[0]?-1:1,i=[],"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:t.indexOf(":")>=0?(t.split(":").forEach(function(e){i.unshift(parseFloat(e,10))}),t=0,r=1,i.forEach(function(e){t+=e*r,r*=60}),n*t):n*parseFloat(t,10)}function o(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(s.isNegativeZero(e))return"-0.0";return n=e.toString(10),l.test(n)?n.replace("e",".e"):n}function a(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!==0||s.isNegativeZero(e))}var s=e("../common"),u=e("../type"),c=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?|\\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),l=/^[-+]?[0-9]+e/;t.exports=new u("tag:yaml.org,2002:float",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o,defaultStyle:"lowercase"})},{"../common":2,"../type":13}],17:[function(e,t,n){"use strict";function r(e){return 48<=e&&e<=57||65<=e&&e<=70||97<=e&&e<=102}function i(e){return 48<=e&&e<=55}function o(e){return 48<=e&&e<=57}function a(e){if(null===e)return!1;var t,n=e.length,a=0,s=!1;if(!n)return!1;if(t=e[a],"-"!==t&&"+"!==t||(t=e[++a]),"0"===t){if(a+1===n)return!0;if(t=e[++a],"b"===t){for(a++;a<n;a++)if(t=e[a],"_"!==t){if("0"!==t&&"1"!==t)return!1;s=!0}return s}if("x"===t){for(a++;a<n;a++)if(t=e[a],"_"!==t){if(!r(e.charCodeAt(a)))return!1;s=!0}return s}for(;a<n;a++)if(t=e[a],"_"!==t){if(!i(e.charCodeAt(a)))return!1;s=!0}return s}for(;a<n;a++)if(t=e[a],"_"!==t){if(":"===t)break;if(!o(e.charCodeAt(a)))return!1;s=!0}return!!s&&(":"!==t||/^(:[0-5]?[0-9])+$/.test(e.slice(a)))}function s(e){var t,n,r=e,i=1,o=[];return r.indexOf("_")!==-1&&(r=r.replace(/_/g,"")),t=r[0],"-"!==t&&"+"!==t||("-"===t&&(i=-1),r=r.slice(1),t=r[0]),"0"===r?0:"0"===t?"b"===r[1]?i*parseInt(r.slice(2),2):"x"===r[1]?i*parseInt(r,16):i*parseInt(r,8):r.indexOf(":")!==-1?(r.split(":").forEach(function(e){o.unshift(parseInt(e,10))}),r=0,n=1,o.forEach(function(e){r+=e*n,n*=60}),i*r):i*parseInt(r,10)}function u(e){return"[object Number]"===Object.prototype.toString.call(e)&&e%1===0&&!c.isNegativeZero(e)}var c=e("../common"),l=e("../type");t.exports=new l("tag:yaml.org,2002:int",{kind:"scalar",resolve:a,construct:s,predicate:u,represent:{binary:function(e){return"0b"+e.toString(2)},octal:function(e){return"0"+e.toString(8)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return"0x"+e.toString(16).toUpperCase()}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})},{"../common":2,"../type":13}],18:[function(e,t,n){"use strict";function r(e){if(null===e)return!1;try{var t="("+e+")",n=s.parse(t,{range:!0});return"Program"===n.type&&1===n.body.length&&"ExpressionStatement"===n.body[0].type&&"FunctionExpression"===n.body[0].expression.type}catch(r){return!1}}function i(e){var t,n="("+e+")",r=s.parse(n,{range:!0}),i=[];if("Program"!==r.type||1!==r.body.length||"ExpressionStatement"!==r.body[0].type||"FunctionExpression"!==r.body[0].expression.type)throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(e){i.push(e.name)}),t=r.body[0].expression.body.range,new Function(i,n.slice(t[0]+1,t[1]-1))}function o(e){return e.toString()}function a(e){return"[object Function]"===Object.prototype.toString.call(e)}var s;try{var u=e;s=u("esprima")}catch(c){"undefined"!=typeof window&&(s=window.esprima)}var l=e("../../type");t.exports=new l("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o})},{"../../type":13}],19:[function(e,t,n){"use strict";function r(e){if(null===e)return!1;if(0===e.length)return!1;var t=e,n=/\/([gim]*)$/.exec(e),r="";if("/"===t[0]){if(n&&(r=n[1]),r.length>3)return!1;if("/"!==t[t.length-r.length-1])return!1}return!0}function i(e){var t=e,n=/\/([gim]*)$/.exec(e),r="";return"/"===t[0]&&(n&&(r=n[1]),t=t.slice(1,t.length-r.length-1)),new RegExp(t,r)}function o(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}function a(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var s=e("../../type");t.exports=new s("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o})},{"../../type":13}],20:[function(e,t,n){"use strict";function r(){return!0}function i(){}function o(){return""}function a(e){return"undefined"==typeof e}var s=e("../../type");t.exports=new s("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o})},{"../../type":13}],21:[function(e,t,n){"use strict";var r=e("../type");t.exports=new r("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})},{"../type":13}],22:[function(e,t,n){"use strict";function r(e){return"<<"===e||null===e}var i=e("../type");t.exports=new i("tag:yaml.org,2002:merge",{kind:"scalar",resolve:r})},{"../type":13}],23:[function(e,t,n){"use strict";function r(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)}function i(){return null}function o(e){return null===e}var a=e("../type");t.exports=new a("tag:yaml.org,2002:null",{kind:"scalar",resolve:r,construct:i,predicate:o,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},{"../type":13}],24:[function(e,t,n){"use strict";function r(e){if(null===e)return!0;var t,n,r,i,o,u=[],c=e;for(t=0,n=c.length;t<n;t+=1){if(r=c[t],o=!1,"[object Object]"!==s.call(r))return!1;for(i in r)if(a.call(r,i)){if(o)return!1;o=!0}if(!o)return!1;if(u.indexOf(i)!==-1)return!1;u.push(i)}return!0}function i(e){return null!==e?e:[]}var o=e("../type"),a=Object.prototype.hasOwnProperty,s=Object.prototype.toString;t.exports=new o("tag:yaml.org,2002:omap",{kind:"sequence",resolve:r,construct:i})},{"../type":13}],25:[function(e,t,n){"use strict";function r(e){if(null===e)return!0;var t,n,r,i,o,s=e;for(o=new Array(s.length),t=0,n=s.length;t<n;t+=1){if(r=s[t],"[object Object]"!==a.call(r))return!1;if(i=Object.keys(r),1!==i.length)return!1;o[t]=[i[0],r[i[0]]]}return!0}function i(e){if(null===e)return[];var t,n,r,i,o,a=e;for(o=new Array(a.length),t=0,n=a.length;t<n;t+=1)r=a[t],i=Object.keys(r),o[t]=[i[0],r[i[0]]];return o}var o=e("../type"),a=Object.prototype.toString;t.exports=new o("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:r,construct:i})},{"../type":13}],26:[function(e,t,n){"use strict";var r=e("../type");t.exports=new r("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}})},{"../type":13}],27:[function(e,t,n){"use strict";function r(e){if(null===e)return!0;var t,n=e;for(t in n)if(a.call(n,t)&&null!==n[t])return!1;return!0}function i(e){return null!==e?e:{}}var o=e("../type"),a=Object.prototype.hasOwnProperty;t.exports=new o("tag:yaml.org,2002:set",{kind:"mapping",resolve:r,construct:i})},{"../type":13}],28:[function(e,t,n){"use strict";var r=e("../type");t.exports=new r("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}})},{"../type":13}],29:[function(e,t,n){"use strict";function r(e){return null!==e&&(null!==s.exec(e)||null!==u.exec(e))}function i(e){var t,n,r,i,o,a,c,l,p,f,d=0,h=null;if(t=s.exec(e),null===t&&(t=u.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],r=+t[2]-1,i=+t[3],!t[4])return new Date(Date.UTC(n,r,i));if(o=+t[4],a=+t[5],c=+t[6],t[7]){for(d=t[7].slice(0,3);d.length<3;)d+="0";d=+d}return t[9]&&(l=+t[10],p=+(t[11]||0),h=6e4*(60*l+p),"-"===t[9]&&(h=-h)),f=new Date(Date.UTC(n,r,i,o,a,c,d)),h&&f.setTime(f.getTime()-h),f}function o(e){return e.toISOString()}var a=e("../type"),s=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),u=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");t.exports=new a("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:r,construct:i,instanceOf:Date,represent:o})},{"../type":13}],"/":[function(e,t,n){"use strict";var r=e("./lib/js-yaml.js");t.exports=r},{"./lib/js-yaml.js":1}]},{},[])("/")});
\ No newline at end of file
diff --git a/xos/core/xoslib/static/vendor/xosGlobalXosVendor.js b/xos/core/xoslib/static/vendor/xosGlobalXosVendor.js
deleted file mode 100644
index a1b9bc6..0000000
--- a/xos/core/xoslib/static/vendor/xosGlobalXosVendor.js
+++ /dev/null
@@ -1,22 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-angular.module("ui.bootstrap",["ui.bootstrap.tpls","ui.bootstrap.collapse","ui.bootstrap.tabindex","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.isClass","ui.bootstrap.datepicker","ui.bootstrap.position","ui.bootstrap.datepickerPopup","ui.bootstrap.debounce","ui.bootstrap.dropdown","ui.bootstrap.stackedMap","ui.bootstrap.modal","ui.bootstrap.paging","ui.bootstrap.pager","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.tpls",["uib/template/accordion/accordion-group.html","uib/template/accordion/accordion.html","uib/template/alert/alert.html","uib/template/carousel/carousel.html","uib/template/carousel/slide.html","uib/template/datepicker/datepicker.html","uib/template/datepicker/day.html","uib/template/datepicker/month.html","uib/template/datepicker/year.html","uib/template/datepickerPopup/popup.html","uib/template/modal/window.html","uib/template/pager/pager.html","uib/template/pagination/pagination.html","uib/template/tooltip/tooltip-html-popup.html","uib/template/tooltip/tooltip-popup.html","uib/template/tooltip/tooltip-template-popup.html","uib/template/popover/popover-html.html","uib/template/popover/popover-template.html","uib/template/popover/popover.html","uib/template/progressbar/bar.html","uib/template/progressbar/progress.html","uib/template/progressbar/progressbar.html","uib/template/rating/rating.html","uib/template/tabs/tab.html","uib/template/tabs/tabset.html","uib/template/timepicker/timepicker.html","uib/template/typeahead/typeahead-match.html","uib/template/typeahead/typeahead-popup.html"]),angular.module("ui.bootstrap.collapse",[]).directive("uibCollapse",["$animate","$q","$parse","$injector",function(e,t,n,a){var i=a.has("$animateCss")?a.get("$animateCss"):null;return{link:function(a,o,r){function l(){b=!!("horizontal"in r),b?(v={width:""},$={width:"0"}):(v={height:""},$={height:"0"}),a.$eval(r.uibCollapse)||o.addClass("in").addClass("collapse").attr("aria-expanded",!0).attr("aria-hidden",!1).css(v)}function s(e){return b?{width:e.scrollWidth+"px"}:{height:e.scrollHeight+"px"}}function u(){o.hasClass("collapse")&&o.hasClass("in")||t.resolve(m(a)).then(function(){o.removeClass("collapse").addClass("collapsing").attr("aria-expanded",!0).attr("aria-hidden",!1),i?i(o,{addClass:"in",easing:"ease",css:{overflow:"hidden"},to:s(o[0])}).start()["finally"](p):e.addClass(o,"in",{css:{overflow:"hidden"},to:s(o[0])}).then(p)})}function p(){o.removeClass("collapsing").addClass("collapse").css(v),f(a)}function c(){return o.hasClass("collapse")||o.hasClass("in")?void t.resolve(h(a)).then(function(){o.css(s(o[0])).removeClass("collapse").addClass("collapsing").attr("aria-expanded",!1).attr("aria-hidden",!0),i?i(o,{removeClass:"in",to:$}).start()["finally"](d):e.removeClass(o,"in",{to:$}).then(d)}):d()}function d(){o.css($),o.removeClass("collapsing").addClass("collapse"),g(a)}var m=n(r.expanding),f=n(r.expanded),h=n(r.collapsing),g=n(r.collapsed),b=!1,v={},$={};l(),a.$watch(r.uibCollapse,function(e){e?c():u()})}}}]),angular.module("ui.bootstrap.tabindex",[]).directive("uibTabindexToggle",function(){return{restrict:"A",link:function(e,t,n){n.$observe("disabled",function(e){n.$set("tabindex",e?-1:null)})}}}),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse","ui.bootstrap.tabindex"]).constant("uibAccordionConfig",{closeOthers:!0}).controller("UibAccordionController",["$scope","$attrs","uibAccordionConfig",function(e,t,n){this.groups=[],this.closeOthers=function(a){var i=angular.isDefined(t.closeOthers)?e.$eval(t.closeOthers):n.closeOthers;i&&angular.forEach(this.groups,function(e){e!==a&&(e.isOpen=!1)})},this.addGroup=function(e){var t=this;this.groups.push(e),e.$on("$destroy",function(n){t.removeGroup(e)})},this.removeGroup=function(e){var t=this.groups.indexOf(e);t!==-1&&this.groups.splice(t,1)}}]).directive("uibAccordion",function(){return{controller:"UibAccordionController",controllerAs:"accordion",transclude:!0,templateUrl:function(e,t){return t.templateUrl||"uib/template/accordion/accordion.html"}}}).directive("uibAccordionGroup",function(){return{require:"^uibAccordion",transclude:!0,restrict:"A",templateUrl:function(e,t){return t.templateUrl||"uib/template/accordion/accordion-group.html"},scope:{heading:"@",panelClass:"@?",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(e){this.heading=e}},link:function(e,t,n,a){t.addClass("panel"),a.addGroup(e),e.openClass=n.openClass||"panel-open",e.panelClass=n.panelClass||"panel-default",e.$watch("isOpen",function(n){t.toggleClass(e.openClass,!!n),n&&a.closeOthers(e)}),e.toggleOpen=function(t){e.isDisabled||t&&32!==t.which||(e.isOpen=!e.isOpen)};var i="accordiongroup-"+e.$id+"-"+Math.floor(1e4*Math.random());e.headingId=i+"-tab",e.panelId=i+"-panel"}}}).directive("uibAccordionHeading",function(){return{transclude:!0,template:"",replace:!0,require:"^uibAccordionGroup",link:function(e,t,n,a,i){a.setHeading(i(e,angular.noop))}}}).directive("uibAccordionTransclude",function(){function e(){return"uib-accordion-header,data-uib-accordion-header,x-uib-accordion-header,uib\\:accordion-header,[uib-accordion-header],[data-uib-accordion-header],[x-uib-accordion-header]"}return{require:"^uibAccordionGroup",link:function(t,n,a,i){t.$watch(function(){return i[a.uibAccordionTransclude]},function(t){if(t){var a=angular.element(n[0].querySelector(e()));a.html(""),a.append(t)}})}}}),angular.module("ui.bootstrap.alert",[]).controller("UibAlertController",["$scope","$element","$attrs","$interpolate","$timeout",function(e,t,n,a,i){e.closeable=!!n.close,t.addClass("alert"),n.$set("role","alert"),e.closeable&&t.addClass("alert-dismissible");var o=angular.isDefined(n.dismissOnTimeout)?a(n.dismissOnTimeout)(e.$parent):null;o&&i(function(){e.close()},parseInt(o,10))}]).directive("uibAlert",function(){return{controller:"UibAlertController",controllerAs:"alert",restrict:"A",templateUrl:function(e,t){return t.templateUrl||"uib/template/alert/alert.html"},transclude:!0,scope:{close:"&"}}}),angular.module("ui.bootstrap.buttons",[]).constant("uibButtonConfig",{activeClass:"active",toggleEvent:"click"}).controller("UibButtonsController",["uibButtonConfig",function(e){this.activeClass=e.activeClass||"active",this.toggleEvent=e.toggleEvent||"click"}]).directive("uibBtnRadio",["$parse",function(e){return{require:["uibBtnRadio","ngModel"],controller:"UibButtonsController",controllerAs:"buttons",link:function(t,n,a,i){var o=i[0],r=i[1],l=e(a.uibUncheckable);n.find("input").css({display:"none"}),r.$render=function(){n.toggleClass(o.activeClass,angular.equals(r.$modelValue,t.$eval(a.uibBtnRadio)))},n.on(o.toggleEvent,function(){if(!a.disabled){var e=n.hasClass(o.activeClass);e&&!angular.isDefined(a.uncheckable)||t.$apply(function(){r.$setViewValue(e?null:t.$eval(a.uibBtnRadio)),r.$render()})}}),a.uibUncheckable&&t.$watch(l,function(e){a.$set("uncheckable",e?"":void 0)})}}}]).directive("uibBtnCheckbox",function(){return{require:["uibBtnCheckbox","ngModel"],controller:"UibButtonsController",controllerAs:"button",link:function(e,t,n,a){function i(){return r(n.btnCheckboxTrue,!0)}function o(){return r(n.btnCheckboxFalse,!1)}function r(t,n){return angular.isDefined(t)?e.$eval(t):n}var l=a[0],s=a[1];t.find("input").css({display:"none"}),s.$render=function(){t.toggleClass(l.activeClass,angular.equals(s.$modelValue,i()))},t.on(l.toggleEvent,function(){n.disabled||e.$apply(function(){s.$setViewValue(t.hasClass(l.activeClass)?o():i()),s.$render()})})}}}),angular.module("ui.bootstrap.carousel",[]).controller("UibCarouselController",["$scope","$element","$interval","$timeout","$animate",function(e,t,n,a,i){function o(){for(;$.length;)$.shift()}function r(e){for(var t=0;t<g.length;t++)g[t].slide.active=t===e}function l(n,a,s){if(!y){if(angular.extend(n,{direction:s}),angular.extend(g[v].slide||{},{direction:s}),i.enabled(t)&&!e.$currentTransition&&g[a].element&&h.slides.length>1){g[a].element.data(b,n.direction);var u=h.getCurrentIndex();angular.isNumber(u)&&g[u].element&&g[u].element.data(b,n.direction),e.$currentTransition=!0,i.on("addClass",g[a].element,function(t,n){if("close"===n&&(e.$currentTransition=null,i.off("addClass",t),$.length)){var a=$.pop().slide,r=a.index,s=r>h.getCurrentIndex()?"next":"prev";o(),l(a,r,s)}})}e.active=n.index,v=n.index,r(a),c()}}function s(e){for(var t=0;t<g.length;t++)if(g[t].slide===e)return t}function u(){m&&(n.cancel(m),m=null)}function p(t){t.length||(e.$currentTransition=null,o())}function c(){u();var t=+e.interval;!isNaN(t)&&t>0&&(m=n(d,t))}function d(){var t=+e.interval;f&&!isNaN(t)&&t>0&&g.length?e.next():e.pause()}var m,f,h=this,g=h.slides=e.slides=[],b="uib-slideDirection",v=e.active,$=[],y=!1;t.addClass("carousel"),h.addSlide=function(t,n){g.push({slide:t,element:n}),g.sort(function(e,t){return+e.slide.index-+t.slide.index}),(t.index===e.active||1===g.length&&!angular.isNumber(e.active))&&(e.$currentTransition&&(e.$currentTransition=null),v=t.index,e.active=t.index,r(v),h.select(g[s(t)]),1===g.length&&e.play())},h.getCurrentIndex=function(){for(var e=0;e<g.length;e++)if(g[e].slide.index===v)return e},h.next=e.next=function(){var t=(h.getCurrentIndex()+1)%g.length;return 0===t&&e.noWrap()?void e.pause():h.select(g[t],"next")},h.prev=e.prev=function(){var t=h.getCurrentIndex()-1<0?g.length-1:h.getCurrentIndex()-1;return e.noWrap()&&t===g.length-1?void e.pause():h.select(g[t],"prev")},h.removeSlide=function(t){var n=s(t),a=$.indexOf(g[n]);a!==-1&&$.splice(a,1),g.splice(n,1),g.length>0&&v===n?n>=g.length?(v=g.length-1,e.active=v,r(v),h.select(g[g.length-1])):(v=n,e.active=v,r(v),h.select(g[n])):v>n&&(v--,e.active=v),0===g.length&&(v=null,e.active=null,o())},h.select=e.select=function(t,n){var a=s(t.slide);void 0===n&&(n=a>h.getCurrentIndex()?"next":"prev"),t.slide.index===v||e.$currentTransition?t&&t.slide.index!==v&&e.$currentTransition&&$.push(g[a]):l(t.slide,a,n)},e.indexOfSlide=function(e){return+e.slide.index},e.isActive=function(t){return e.active===t.slide.index},e.isPrevDisabled=function(){return 0===e.active&&e.noWrap()},e.isNextDisabled=function(){return e.active===g.length-1&&e.noWrap()},e.pause=function(){e.noPause||(f=!1,u())},e.play=function(){f||(f=!0,c())},t.on("mouseenter",e.pause),t.on("mouseleave",e.play),e.$on("$destroy",function(){y=!0,u()}),e.$watch("noTransition",function(e){i.enabled(t,!e)}),e.$watch("interval",c),e.$watchCollection("slides",p),e.$watch("active",function(e){if(angular.isNumber(e)&&v!==e){for(var t=0;t<g.length;t++)if(g[t].slide.index===e){e=t;break}var n=g[e];n&&(r(e),h.select(g[e]),v=e)}})}]).directive("uibCarousel",function(){return{transclude:!0,controller:"UibCarouselController",controllerAs:"carousel",restrict:"A",templateUrl:function(e,t){return t.templateUrl||"uib/template/carousel/carousel.html"},scope:{active:"=",interval:"=",noTransition:"=",noPause:"=",noWrap:"&"}}}).directive("uibSlide",["$animate",function(e){return{require:"^uibCarousel",restrict:"A",transclude:!0,templateUrl:function(e,t){return t.templateUrl||"uib/template/carousel/slide.html"},scope:{actual:"=?",index:"=?"},link:function(t,n,a,i){n.addClass("item"),i.addSlide(t,n),t.$on("$destroy",function(){i.removeSlide(t)}),t.$watch("active",function(t){e[t?"addClass":"removeClass"](n,"active")})}}}]).animation(".item",["$animateCss",function(e){function t(e,t,n){e.removeClass(t),n&&n()}var n="uib-slideDirection";return{beforeAddClass:function(a,i,o){if("active"===i){var r=!1,l=a.data(n),s="next"===l?"left":"right",u=t.bind(this,a,s+" "+l,o);return a.addClass(l),e(a,{addClass:s}).start().done(u),function(){r=!0}}o()},beforeRemoveClass:function(a,i,o){if("active"===i){var r=!1,l=a.data(n),s="next"===l?"left":"right",u=t.bind(this,a,s,o);return e(a,{addClass:s}).start().done(u),function(){r=!0}}o()}}}]),angular.module("ui.bootstrap.dateparser",[]).service("uibDateParser",["$log","$locale","dateFilter","orderByFilter",function(e,t,n,a){function i(e){var t=[],n=e.split(""),i=e.indexOf("'");if(i>-1){var o=!1;e=e.split("");for(var r=i;r<e.length;r++)o?("'"===e[r]&&(r+1<e.length&&"'"===e[r+1]?(e[r+1]="$",n[r+1]=""):(n[r]="",o=!1)),e[r]="$"):"'"===e[r]&&(e[r]="$",n[r]="",o=!0);e=e.join("")}return angular.forEach(g,function(a){var i=e.indexOf(a.key);if(i>-1){e=e.split(""),n[i]="("+a.regex+")",e[i]="$";for(var o=i+1,r=i+a.key.length;o<r;o++)n[o]="",e[o]="$";e=e.join(""),t.push({index:i,key:a.key,apply:a.apply,matcher:a.regex})}}),{regex:new RegExp("^"+n.join("")+"$"),map:a(t,"index")}}function o(e){for(var t,n,a=[],i=0;i<e.length;)if(angular.isNumber(n)){if("'"===e.charAt(i))(i+1>=e.length||"'"!==e.charAt(i+1))&&(a.push(r(e,n,i)),n=null);else if(i===e.length)for(;n<e.length;)t=l(e,n),a.push(t),n=t.endIdx;i++}else"'"!==e.charAt(i)?(t=l(e,i),a.push(t.parser),i=t.endIdx):(n=i,i++);return a}function r(e,t,n){return function(){return e.substr(t+1,n-t-1)}}function l(e,t){for(var n=e.substr(t),a=0;a<g.length;a++)if(new RegExp("^"+g[a].key).test(n)){var i=g[a];return{endIdx:t+i.key.length,parser:i.formatter}}return{endIdx:t+1,parser:function(){return n.charAt(0)}}}function s(e,t,n){return!(n<1)&&(1===t&&n>28?29===n&&(e%4===0&&e%100!==0||e%400===0):3!==t&&5!==t&&8!==t&&10!==t||n<31)}function u(e){return parseInt(e,10)}function p(e,t){return e&&t?f(e,t):e}function c(e,t){return e&&t?f(e,t,!0):e}function d(e,t){e=e.replace(/:/g,"");var n=Date.parse("Jan 01, 1970 00:00:00 "+e)/6e4;return isNaN(n)?t:n}function m(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+t),e}function f(e,t,n){n=n?-1:1;var a=e.getTimezoneOffset(),i=d(t,a);return m(e,n*(i-a))}var h,g,b=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;this.init=function(){h=t.id,this.parsers={},this.formatters={},g=[{key:"yyyy",regex:"\\d{4}",apply:function(e){this.year=+e},formatter:function(e){var t=new Date;return t.setFullYear(Math.abs(e.getFullYear())),n(t,"yyyy")}},{key:"yy",regex:"\\d{2}",apply:function(e){e=+e,this.year=e<69?e+2e3:e+1900},formatter:function(e){var t=new Date;return t.setFullYear(Math.abs(e.getFullYear())),n(t,"yy")}},{key:"y",regex:"\\d{1,4}",apply:function(e){this.year=+e},formatter:function(e){var t=new Date;return t.setFullYear(Math.abs(e.getFullYear())),n(t,"y")}},{key:"M!",regex:"0?[1-9]|1[0-2]",apply:function(e){this.month=e-1},formatter:function(e){var t=e.getMonth();return/^[0-9]$/.test(t)?n(e,"MM"):n(e,"M")}},{key:"MMMM",regex:t.DATETIME_FORMATS.MONTH.join("|"),apply:function(e){this.month=t.DATETIME_FORMATS.MONTH.indexOf(e)},formatter:function(e){return n(e,"MMMM")}},{key:"MMM",regex:t.DATETIME_FORMATS.SHORTMONTH.join("|"),apply:function(e){this.month=t.DATETIME_FORMATS.SHORTMONTH.indexOf(e)},formatter:function(e){return n(e,"MMM")}},{key:"MM",regex:"0[1-9]|1[0-2]",apply:function(e){this.month=e-1},formatter:function(e){return n(e,"MM")}},{key:"M",regex:"[1-9]|1[0-2]",apply:function(e){this.month=e-1},formatter:function(e){return n(e,"M")}},{key:"d!",regex:"[0-2]?[0-9]{1}|3[0-1]{1}",apply:function(e){this.date=+e},formatter:function(e){var t=e.getDate();return/^[1-9]$/.test(t)?n(e,"dd"):n(e,"d")}},{key:"dd",regex:"[0-2][0-9]{1}|3[0-1]{1}",apply:function(e){this.date=+e},formatter:function(e){return n(e,"dd")}},{key:"d",regex:"[1-2]?[0-9]{1}|3[0-1]{1}",apply:function(e){this.date=+e},formatter:function(e){return n(e,"d")}},{key:"EEEE",regex:t.DATETIME_FORMATS.DAY.join("|"),formatter:function(e){return n(e,"EEEE")}},{key:"EEE",regex:t.DATETIME_FORMATS.SHORTDAY.join("|"),formatter:function(e){return n(e,"EEE")}},{key:"HH",regex:"(?:0|1)[0-9]|2[0-3]",apply:function(e){this.hours=+e},formatter:function(e){return n(e,"HH")}},{key:"hh",regex:"0[0-9]|1[0-2]",apply:function(e){this.hours=+e},formatter:function(e){return n(e,"hh")}},{key:"H",regex:"1?[0-9]|2[0-3]",apply:function(e){this.hours=+e},formatter:function(e){return n(e,"H")}},{key:"h",regex:"[0-9]|1[0-2]",apply:function(e){this.hours=+e},formatter:function(e){return n(e,"h")}},{key:"mm",regex:"[0-5][0-9]",apply:function(e){this.minutes=+e},formatter:function(e){return n(e,"mm")}},{key:"m",regex:"[0-9]|[1-5][0-9]",apply:function(e){this.minutes=+e},formatter:function(e){return n(e,"m")}},{key:"sss",regex:"[0-9][0-9][0-9]",apply:function(e){this.milliseconds=+e},formatter:function(e){return n(e,"sss")}},{key:"ss",regex:"[0-5][0-9]",apply:function(e){this.seconds=+e},formatter:function(e){return n(e,"ss")}},{key:"s",regex:"[0-9]|[1-5][0-9]",apply:function(e){this.seconds=+e},formatter:function(e){return n(e,"s")}},{key:"a",regex:t.DATETIME_FORMATS.AMPMS.join("|"),apply:function(e){12===this.hours&&(this.hours=0),"PM"===e&&(this.hours+=12)},formatter:function(e){return n(e,"a")}},{key:"Z",regex:"[+-]\\d{4}",apply:function(e){var t=e.match(/([+-])(\d{2})(\d{2})/),n=t[1],a=t[2],i=t[3];this.hours+=u(n+a),this.minutes+=u(n+i)},formatter:function(e){return n(e,"Z")}},{key:"ww",regex:"[0-4][0-9]|5[0-3]",formatter:function(e){return n(e,"ww")}},{key:"w",regex:"[0-9]|[1-4][0-9]|5[0-3]",formatter:function(e){return n(e,"w")}},{key:"GGGG",regex:t.DATETIME_FORMATS.ERANAMES.join("|").replace(/\s/g,"\\s"),formatter:function(e){return n(e,"GGGG")}},{key:"GGG",regex:t.DATETIME_FORMATS.ERAS.join("|"),formatter:function(e){return n(e,"GGG")}},{key:"GG",regex:t.DATETIME_FORMATS.ERAS.join("|"),formatter:function(e){return n(e,"GG")}},{key:"G",regex:t.DATETIME_FORMATS.ERAS.join("|"),formatter:function(e){return n(e,"G")}}]},this.init(),this.filter=function(e,n){if(!angular.isDate(e)||isNaN(e)||!n)return"";n=t.DATETIME_FORMATS[n]||n,t.id!==h&&this.init(),this.formatters[n]||(this.formatters[n]=o(n));var a=this.formatters[n];return a.reduce(function(t,n){return t+n(e)},"")},this.parse=function(n,a,o){if(!angular.isString(n)||!a)return n;a=t.DATETIME_FORMATS[a]||a,a=a.replace(b,"\\$&"),t.id!==h&&this.init(),this.parsers[a]||(this.parsers[a]=i(a,"apply"));var r=this.parsers[a],l=r.regex,u=r.map,p=n.match(l),c=!1;if(p&&p.length){var d,m;angular.isDate(o)&&!isNaN(o.getTime())?d={year:o.getFullYear(),month:o.getMonth(),date:o.getDate(),hours:o.getHours(),minutes:o.getMinutes(),seconds:o.getSeconds(),milliseconds:o.getMilliseconds()}:(o&&e.warn("dateparser:","baseDate is not a valid date"),d={year:1900,month:0,date:1,hours:0,minutes:0,seconds:0,milliseconds:0});for(var f=1,g=p.length;f<g;f++){var v=u[f-1];"Z"===v.matcher&&(c=!0),v.apply&&v.apply.call(d,p[f])}var $=c?Date.prototype.setUTCFullYear:Date.prototype.setFullYear,y=c?Date.prototype.setUTCHours:Date.prototype.setHours;return s(d.year,d.month,d.date)&&(!angular.isDate(o)||isNaN(o.getTime())||c?(m=new Date(0),$.call(m,d.year,d.month,d.date),y.call(m,d.hours||0,d.minutes||0,d.seconds||0,d.milliseconds||0)):(m=new Date(o),$.call(m,d.year,d.month,d.date),y.call(m,d.hours,d.minutes,d.seconds,d.milliseconds))),m}},this.toTimezone=p,this.fromTimezone=c,this.timezoneToOffset=d,this.addDateMinutes=m,this.convertTimezoneToLocal=f}]),angular.module("ui.bootstrap.isClass",[]).directive("uibIsClass",["$animate",function(e){var t=/^\s*([\s\S]+?)\s+on\s+([\s\S]+?)\s*$/,n=/^\s*([\s\S]+?)\s+for\s+([\s\S]+?)\s*$/;return{restrict:"A",compile:function(a,i){function o(e,t,n){s.push(e),u.push({scope:e,element:t}),f.forEach(function(t,n){r(t,e)}),e.$on("$destroy",l)}function r(t,a){var i=t.match(n),o=a.$eval(i[1]),r=i[2],l=p[t];if(!l){var s=function(t){var n=null;u.some(function(e){var a=e.scope.$eval(d);if(a===t)return n=e,!0}),l.lastActivated!==n&&(l.lastActivated&&e.removeClass(l.lastActivated.element,o),n&&e.addClass(n.element,o),l.lastActivated=n)};p[t]=l={lastActivated:null,scope:a,watchFn:s,compareWithExp:r,watcher:a.$watch(r,s)}}l.watchFn(a.$eval(r))}function l(e){var t=e.targetScope,n=s.indexOf(t);if(s.splice(n,1),u.splice(n,1),s.length){var a=s[0];angular.forEach(p,function(e){e.scope===t&&(e.watcher=a.$watch(e.compareWithExp,e.watchFn),e.scope=a)})}else p={}}var s=[],u=[],p={},c=i.uibIsClass.match(t),d=c[2],m=c[1],f=m.split(",");return o}}}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.dateparser","ui.bootstrap.isClass"]).value("$datepickerSuppressError",!1).value("$datepickerLiteralWarning",!0).constant("uibDatepickerConfig",{datepickerMode:"day",formatDay:"dd",formatMonth:"MMMM",formatYear:"yyyy",formatDayHeader:"EEE",formatDayTitle:"MMMM yyyy",formatMonthTitle:"yyyy",maxDate:null,maxMode:"year",minDate:null,minMode:"day",monthColumns:3,ngModelOptions:{},shortcutPropagation:!1,showWeeks:!0,yearColumns:5,yearRows:4}).controller("UibDatepickerController",["$scope","$element","$attrs","$parse","$interpolate","$locale","$log","dateFilter","uibDatepickerConfig","$datepickerLiteralWarning","$datepickerSuppressError","uibDateParser",function(e,t,n,a,i,o,r,l,s,u,p,c){function d(t){e.datepickerMode=t,e.datepickerOptions.datepickerMode=t}var m=this,f={$setViewValue:angular.noop},h={},g=[];t.addClass("uib-datepicker"),n.$set("role","application"),e.datepickerOptions||(e.datepickerOptions={}),this.modes=["day","month","year"],["customClass","dateDisabled","datepickerMode","formatDay","formatDayHeader","formatDayTitle","formatMonth","formatMonthTitle","formatYear","maxDate","maxMode","minDate","minMode","monthColumns","showWeeks","shortcutPropagation","startingDay","yearColumns","yearRows"].forEach(function(t){switch(t){case"customClass":case"dateDisabled":e[t]=e.datepickerOptions[t]||angular.noop;break;case"datepickerMode":e.datepickerMode=angular.isDefined(e.datepickerOptions.datepickerMode)?e.datepickerOptions.datepickerMode:s.datepickerMode;break;case"formatDay":case"formatDayHeader":case"formatDayTitle":case"formatMonth":case"formatMonthTitle":case"formatYear":m[t]=angular.isDefined(e.datepickerOptions[t])?i(e.datepickerOptions[t])(e.$parent):s[t];break;case"monthColumns":case"showWeeks":case"shortcutPropagation":case"yearColumns":case"yearRows":m[t]=angular.isDefined(e.datepickerOptions[t])?e.datepickerOptions[t]:s[t];break;case"startingDay":angular.isDefined(e.datepickerOptions.startingDay)?m.startingDay=e.datepickerOptions.startingDay:angular.isNumber(s.startingDay)?m.startingDay=s.startingDay:m.startingDay=(o.DATETIME_FORMATS.FIRSTDAYOFWEEK+8)%7;break;case"maxDate":case"minDate":e.$watch("datepickerOptions."+t,function(e){e?angular.isDate(e)?m[t]=c.fromTimezone(new Date(e),h.timezone):(u&&r.warn("Literal date support has been deprecated, please switch to date object usage"),m[t]=new Date(l(e,"medium"))):m[t]=s[t]?c.fromTimezone(new Date(s[t]),h.timezone):null,m.refreshView()});break;case"maxMode":case"minMode":e.datepickerOptions[t]?e.$watch(function(){return e.datepickerOptions[t]},function(n){m[t]=e[t]=angular.isDefined(n)?n:e.datepickerOptions[t],("minMode"===t&&m.modes.indexOf(e.datepickerOptions.datepickerMode)<m.modes.indexOf(m[t])||"maxMode"===t&&m.modes.indexOf(e.datepickerOptions.datepickerMode)>m.modes.indexOf(m[t]))&&(e.datepickerMode=m[t],e.datepickerOptions.datepickerMode=m[t])}):m[t]=e[t]=s[t]||null}}),e.uniqueId="datepicker-"+e.$id+"-"+Math.floor(1e4*Math.random()),e.disabled=angular.isDefined(n.disabled)||!1,angular.isDefined(n.ngDisabled)&&g.push(e.$parent.$watch(n.ngDisabled,function(t){e.disabled=t,m.refreshView()})),e.isActive=function(t){return 0===m.compare(t.date,m.activeDate)&&(e.activeDateId=t.uid,!0)},this.init=function(t){f=t,h=t.$options||e.datepickerOptions.ngModelOptions||s.ngModelOptions,e.datepickerOptions.initDate?(m.activeDate=c.fromTimezone(e.datepickerOptions.initDate,h.timezone)||new Date,e.$watch("datepickerOptions.initDate",function(e){e&&(f.$isEmpty(f.$modelValue)||f.$invalid)&&(m.activeDate=c.fromTimezone(e,h.timezone),m.refreshView())})):m.activeDate=new Date;var n=f.$modelValue?new Date(f.$modelValue):new Date;this.activeDate=isNaN(n)?c.fromTimezone(new Date,h.timezone):c.fromTimezone(n,h.timezone),f.$render=function(){m.render()}},this.render=function(){if(f.$viewValue){var e=new Date(f.$viewValue),t=!isNaN(e);t?this.activeDate=c.fromTimezone(e,h.timezone):p||r.error('Datepicker directive: "ng-model" value must be a Date object')}this.refreshView()},this.refreshView=function(){if(this.element){e.selectedDt=null,this._refreshView(),e.activeDt&&(e.activeDateId=e.activeDt.uid);var t=f.$viewValue?new Date(f.$viewValue):null;t=c.fromTimezone(t,h.timezone),f.$setValidity("dateDisabled",!t||this.element&&!this.isDisabled(t))}},this.createDateObject=function(t,n){var a=f.$viewValue?new Date(f.$viewValue):null;a=c.fromTimezone(a,h.timezone);var i=new Date;i=c.fromTimezone(i,h.timezone);var o=this.compare(t,i),r={date:t,label:c.filter(t,n),selected:a&&0===this.compare(t,a),disabled:this.isDisabled(t),past:o<0,current:0===o,future:o>0,customClass:this.customClass(t)||null};return a&&0===this.compare(t,a)&&(e.selectedDt=r),m.activeDate&&0===this.compare(r.date,m.activeDate)&&(e.activeDt=r),r},this.isDisabled=function(t){return e.disabled||this.minDate&&this.compare(t,this.minDate)<0||this.maxDate&&this.compare(t,this.maxDate)>0||e.dateDisabled&&e.dateDisabled({date:t,mode:e.datepickerMode})},this.customClass=function(t){return e.customClass({date:t,mode:e.datepickerMode})},this.split=function(e,t){for(var n=[];e.length>0;)n.push(e.splice(0,t));return n},e.select=function(t){if(e.datepickerMode===m.minMode){var n=f.$viewValue?c.fromTimezone(new Date(f.$viewValue),h.timezone):new Date(0,0,0,0,0,0,0);n.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),n=c.toTimezone(n,h.timezone),f.$setViewValue(n),f.$render()}else m.activeDate=t,d(m.modes[m.modes.indexOf(e.datepickerMode)-1]),e.$emit("uib:datepicker.mode");e.$broadcast("uib:datepicker.focus")},e.move=function(e){var t=m.activeDate.getFullYear()+e*(m.step.years||0),n=m.activeDate.getMonth()+e*(m.step.months||0);m.activeDate.setFullYear(t,n,1),m.refreshView()},e.toggleMode=function(t){t=t||1,e.datepickerMode===m.maxMode&&1===t||e.datepickerMode===m.minMode&&t===-1||(d(m.modes[m.modes.indexOf(e.datepickerMode)+t]),e.$emit("uib:datepicker.mode"))},e.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var b=function(){m.element[0].focus()};e.$on("uib:datepicker.focus",b),e.keydown=function(t){var n=e.keys[t.which];if(n&&!t.shiftKey&&!t.altKey&&!e.disabled)if(t.preventDefault(),m.shortcutPropagation||t.stopPropagation(),"enter"===n||"space"===n){if(m.isDisabled(m.activeDate))return;e.select(m.activeDate)}else!t.ctrlKey||"up"!==n&&"down"!==n?(m.handleKeyDown(n,t),m.refreshView()):e.toggleMode("up"===n?1:-1)},t.on("keydown",function(t){e.$apply(function(){e.keydown(t)})}),e.$on("$destroy",function(){for(;g.length;)g.shift()()})}]).controller("UibDaypickerController",["$scope","$element","dateFilter",function(e,t,n){function a(e,t){return 1!==t||e%4!==0||e%100===0&&e%400!==0?o[t]:29}function i(e){var t=new Date(e);t.setDate(t.getDate()+4-(t.getDay()||7));var n=t.getTime();return t.setMonth(0),t.setDate(1),Math.floor(Math.round((n-t)/864e5)/7)+1}var o=[31,28,31,30,31,30,31,31,30,31,30,31];this.step={months:1},this.element=t,this.init=function(t){angular.extend(t,this),e.showWeeks=t.showWeeks,t.refreshView()},this.getDates=function(e,t){for(var n,a=new Array(t),i=new Date(e),o=0;o<t;)n=new Date(i),a[o++]=n,i.setDate(i.getDate()+1);return a},this._refreshView=function(){var t=this.activeDate.getFullYear(),a=this.activeDate.getMonth(),o=new Date(this.activeDate);o.setFullYear(t,a,1);var r=this.startingDay-o.getDay(),l=r>0?7-r:-r,s=new Date(o);l>0&&s.setDate(-l+1);for(var u=this.getDates(s,42),p=0;p<42;p++)u[p]=angular.extend(this.createDateObject(u[p],this.formatDay),{secondary:u[p].getMonth()!==a,uid:e.uniqueId+"-"+p});e.labels=new Array(7);for(var c=0;c<7;c++)e.labels[c]={abbr:n(u[c].date,this.formatDayHeader),full:n(u[c].date,"EEEE")};if(e.title=n(this.activeDate,this.formatDayTitle),e.rows=this.split(u,7),e.showWeeks){e.weekNumbers=[];for(var d=(11-this.startingDay)%7,m=e.rows.length,f=0;f<m;f++)e.weekNumbers.push(i(e.rows[f][d].date))}},this.compare=function(e,t){var n=new Date(e.getFullYear(),e.getMonth(),e.getDate()),a=new Date(t.getFullYear(),t.getMonth(),t.getDate());return n.setFullYear(e.getFullYear()),a.setFullYear(t.getFullYear()),n-a},this.handleKeyDown=function(e,t){var n=this.activeDate.getDate();if("left"===e)n-=1;else if("up"===e)n-=7;else if("right"===e)n+=1;else if("down"===e)n+=7;else if("pageup"===e||"pagedown"===e){var i=this.activeDate.getMonth()+("pageup"===e?-1:1);this.activeDate.setMonth(i,1),n=Math.min(a(this.activeDate.getFullYear(),this.activeDate.getMonth()),n)}else"home"===e?n=1:"end"===e&&(n=a(this.activeDate.getFullYear(),this.activeDate.getMonth()));this.activeDate.setDate(n)}}]).controller("UibMonthpickerController",["$scope","$element","dateFilter",function(e,t,n){this.step={years:1},this.element=t,this.init=function(e){angular.extend(e,this),e.refreshView()},this._refreshView=function(){for(var t,a=new Array(12),i=this.activeDate.getFullYear(),o=0;o<12;o++)t=new Date(this.activeDate),t.setFullYear(i,o,1),a[o]=angular.extend(this.createDateObject(t,this.formatMonth),{uid:e.uniqueId+"-"+o});e.title=n(this.activeDate,this.formatMonthTitle),e.rows=this.split(a,this.monthColumns),e.yearHeaderColspan=this.monthColumns>3?this.monthColumns-2:1},this.compare=function(e,t){var n=new Date(e.getFullYear(),e.getMonth()),a=new Date(t.getFullYear(),t.getMonth());return n.setFullYear(e.getFullYear()),a.setFullYear(t.getFullYear()),n-a},this.handleKeyDown=function(e,t){var n=this.activeDate.getMonth();if("left"===e)n-=1;else if("up"===e)n-=this.monthColumns;else if("right"===e)n+=1;else if("down"===e)n+=this.monthColumns;else if("pageup"===e||"pagedown"===e){var a=this.activeDate.getFullYear()+("pageup"===e?-1:1);this.activeDate.setFullYear(a)}else"home"===e?n=0:"end"===e&&(n=11);this.activeDate.setMonth(n)}}]).controller("UibYearpickerController",["$scope","$element","dateFilter",function(e,t,n){function a(e){return parseInt((e-1)/o,10)*o+1}var i,o;this.element=t,this.yearpickerInit=function(){i=this.yearColumns,o=this.yearRows*i,this.step={years:o}},this._refreshView=function(){for(var t,n=new Array(o),r=0,l=a(this.activeDate.getFullYear());r<o;r++)t=new Date(this.activeDate),t.setFullYear(l+r,0,1),n[r]=angular.extend(this.createDateObject(t,this.formatYear),{uid:e.uniqueId+"-"+r});e.title=[n[0].label,n[o-1].label].join(" - "),e.rows=this.split(n,i),e.columns=i},this.compare=function(e,t){return e.getFullYear()-t.getFullYear()},this.handleKeyDown=function(e,t){var n=this.activeDate.getFullYear();"left"===e?n-=1:"up"===e?n-=i:"right"===e?n+=1:"down"===e?n+=i:"pageup"===e||"pagedown"===e?n+=("pageup"===e?-1:1)*o:"home"===e?n=a(this.activeDate.getFullYear()):"end"===e&&(n=a(this.activeDate.getFullYear())+o-1),this.activeDate.setFullYear(n)}}]).directive("uibDatepicker",function(){return{templateUrl:function(e,t){return t.templateUrl||"uib/template/datepicker/datepicker.html"},scope:{datepickerOptions:"=?"},require:["uibDatepicker","^ngModel"],restrict:"A",controller:"UibDatepickerController",controllerAs:"datepicker",link:function(e,t,n,a){var i=a[0],o=a[1];i.init(o)}}}).directive("uibDaypicker",function(){return{templateUrl:function(e,t){return t.templateUrl||"uib/template/datepicker/day.html"},require:["^uibDatepicker","uibDaypicker"],restrict:"A",controller:"UibDaypickerController",link:function(e,t,n,a){var i=a[0],o=a[1];o.init(i)}}}).directive("uibMonthpicker",function(){return{templateUrl:function(e,t){return t.templateUrl||"uib/template/datepicker/month.html"},require:["^uibDatepicker","uibMonthpicker"],restrict:"A",controller:"UibMonthpickerController",link:function(e,t,n,a){var i=a[0],o=a[1];o.init(i)}}}).directive("uibYearpicker",function(){return{templateUrl:function(e,t){return t.templateUrl||"uib/template/datepicker/year.html"},require:["^uibDatepicker","uibYearpicker"],restrict:"A",controller:"UibYearpickerController",link:function(e,t,n,a){var i=a[0];angular.extend(i,a[1]),i.yearpickerInit(),i.refreshView()}}}),angular.module("ui.bootstrap.position",[]).factory("$uibPosition",["$document","$window",function(e,t){var n,a,i={normal:/(auto|scroll)/,
-hidden:/(auto|scroll|hidden)/},o={auto:/\s?auto?\s?/i,primary:/^(top|bottom|left|right)$/,secondary:/^(top|bottom|left|right|center)$/,vertical:/^(top|bottom)$/},r=/(HTML|BODY)/;return{getRawNode:function(e){return e.nodeName?e:e[0]||e},parseStyle:function(e){return e=parseFloat(e),isFinite(e)?e:0},offsetParent:function(n){function a(e){return"static"===(t.getComputedStyle(e).position||"static")}n=this.getRawNode(n);for(var i=n.offsetParent||e[0].documentElement;i&&i!==e[0].documentElement&&a(i);)i=i.offsetParent;return i||e[0].documentElement},scrollbarWidth:function(i){if(i){if(angular.isUndefined(a)){var o=e.find("body");o.addClass("uib-position-body-scrollbar-measure"),a=t.innerWidth-o[0].clientWidth,a=isFinite(a)?a:0,o.removeClass("uib-position-body-scrollbar-measure")}return a}if(angular.isUndefined(n)){var r=angular.element('<div class="uib-position-scrollbar-measure"></div>');e.find("body").append(r),n=r[0].offsetWidth-r[0].clientWidth,n=isFinite(n)?n:0,r.remove()}return n},scrollbarPadding:function(e){e=this.getRawNode(e);var n=t.getComputedStyle(e),a=this.parseStyle(n.paddingRight),i=this.parseStyle(n.paddingBottom),o=this.scrollParent(e,!1,!0),l=this.scrollbarWidth(r.test(o.tagName));return{scrollbarWidth:l,widthOverflow:o.scrollWidth>o.clientWidth,right:a+l,originalRight:a,heightOverflow:o.scrollHeight>o.clientHeight,bottom:i+l,originalBottom:i}},isScrollable:function(e,n){e=this.getRawNode(e);var a=n?i.hidden:i.normal,o=t.getComputedStyle(e);return a.test(o.overflow+o.overflowY+o.overflowX)},scrollParent:function(n,a,o){n=this.getRawNode(n);var r=a?i.hidden:i.normal,l=e[0].documentElement,s=t.getComputedStyle(n);if(o&&r.test(s.overflow+s.overflowY+s.overflowX))return n;var u="absolute"===s.position,p=n.parentElement||l;if(p===l||"fixed"===s.position)return l;for(;p.parentElement&&p!==l;){var c=t.getComputedStyle(p);if(u&&"static"!==c.position&&(u=!1),!u&&r.test(c.overflow+c.overflowY+c.overflowX))break;p=p.parentElement}return p},position:function(n,a){n=this.getRawNode(n);var i=this.offset(n);if(a){var o=t.getComputedStyle(n);i.top-=this.parseStyle(o.marginTop),i.left-=this.parseStyle(o.marginLeft)}var r=this.offsetParent(n),l={top:0,left:0};return r!==e[0].documentElement&&(l=this.offset(r),l.top+=r.clientTop-r.scrollTop,l.left+=r.clientLeft-r.scrollLeft),{width:Math.round(angular.isNumber(i.width)?i.width:n.offsetWidth),height:Math.round(angular.isNumber(i.height)?i.height:n.offsetHeight),top:Math.round(i.top-l.top),left:Math.round(i.left-l.left)}},offset:function(n){n=this.getRawNode(n);var a=n.getBoundingClientRect();return{width:Math.round(angular.isNumber(a.width)?a.width:n.offsetWidth),height:Math.round(angular.isNumber(a.height)?a.height:n.offsetHeight),top:Math.round(a.top+(t.pageYOffset||e[0].documentElement.scrollTop)),left:Math.round(a.left+(t.pageXOffset||e[0].documentElement.scrollLeft))}},viewportOffset:function(n,a,i){n=this.getRawNode(n),i=i!==!1;var o=n.getBoundingClientRect(),r={top:0,left:0,bottom:0,right:0},l=a?e[0].documentElement:this.scrollParent(n),s=l.getBoundingClientRect();if(r.top=s.top+l.clientTop,r.left=s.left+l.clientLeft,l===e[0].documentElement&&(r.top+=t.pageYOffset,r.left+=t.pageXOffset),r.bottom=r.top+l.clientHeight,r.right=r.left+l.clientWidth,i){var u=t.getComputedStyle(l);r.top+=this.parseStyle(u.paddingTop),r.bottom-=this.parseStyle(u.paddingBottom),r.left+=this.parseStyle(u.paddingLeft),r.right-=this.parseStyle(u.paddingRight)}return{top:Math.round(o.top-r.top),bottom:Math.round(r.bottom-o.bottom),left:Math.round(o.left-r.left),right:Math.round(r.right-o.right)}},parsePlacement:function(e){var t=o.auto.test(e);return t&&(e=e.replace(o.auto,"")),e=e.split("-"),e[0]=e[0]||"top",o.primary.test(e[0])||(e[0]="top"),e[1]=e[1]||"center",o.secondary.test(e[1])||(e[1]="center"),t?e[2]=!0:e[2]=!1,e},positionElements:function(e,n,a,i){e=this.getRawNode(e),n=this.getRawNode(n);var r=angular.isDefined(n.offsetWidth)?n.offsetWidth:n.prop("offsetWidth"),l=angular.isDefined(n.offsetHeight)?n.offsetHeight:n.prop("offsetHeight");a=this.parsePlacement(a);var s=i?this.offset(e):this.position(e),u={top:0,left:0,placement:""};if(a[2]){var p=this.viewportOffset(e,i),c=t.getComputedStyle(n),d={width:r+Math.round(Math.abs(this.parseStyle(c.marginLeft)+this.parseStyle(c.marginRight))),height:l+Math.round(Math.abs(this.parseStyle(c.marginTop)+this.parseStyle(c.marginBottom)))};if(a[0]="top"===a[0]&&d.height>p.top&&d.height<=p.bottom?"bottom":"bottom"===a[0]&&d.height>p.bottom&&d.height<=p.top?"top":"left"===a[0]&&d.width>p.left&&d.width<=p.right?"right":"right"===a[0]&&d.width>p.right&&d.width<=p.left?"left":a[0],a[1]="top"===a[1]&&d.height-s.height>p.bottom&&d.height-s.height<=p.top?"bottom":"bottom"===a[1]&&d.height-s.height>p.top&&d.height-s.height<=p.bottom?"top":"left"===a[1]&&d.width-s.width>p.right&&d.width-s.width<=p.left?"right":"right"===a[1]&&d.width-s.width>p.left&&d.width-s.width<=p.right?"left":a[1],"center"===a[1])if(o.vertical.test(a[0])){var m=s.width/2-r/2;p.left+m<0&&d.width-s.width<=p.right?a[1]="left":p.right+m<0&&d.width-s.width<=p.left&&(a[1]="right")}else{var f=s.height/2-d.height/2;p.top+f<0&&d.height-s.height<=p.bottom?a[1]="top":p.bottom+f<0&&d.height-s.height<=p.top&&(a[1]="bottom")}}switch(a[0]){case"top":u.top=s.top-l;break;case"bottom":u.top=s.top+s.height;break;case"left":u.left=s.left-r;break;case"right":u.left=s.left+s.width}switch(a[1]){case"top":u.top=s.top;break;case"bottom":u.top=s.top+s.height-l;break;case"left":u.left=s.left;break;case"right":u.left=s.left+s.width-r;break;case"center":o.vertical.test(a[0])?u.left=s.left+s.width/2-r/2:u.top=s.top+s.height/2-l/2}return u.top=Math.round(u.top),u.left=Math.round(u.left),u.placement="center"===a[1]?a[0]:a[0]+"-"+a[1],u},adjustTop:function(e,t,n,a){if(e.indexOf("top")!==-1&&n!==a)return{top:t.top-a+"px"}},positionArrow:function(e,n){e=this.getRawNode(e);var a=e.querySelector(".tooltip-inner, .popover-inner");if(a){var i=angular.element(a).hasClass("tooltip-inner"),r=i?e.querySelector(".tooltip-arrow"):e.querySelector(".arrow");if(r){var l={top:"",bottom:"",left:"",right:""};if(n=this.parsePlacement(n),"center"===n[1])return void angular.element(r).css(l);var s="border-"+n[0]+"-width",u=t.getComputedStyle(r)[s],p="border-";p+=o.vertical.test(n[0])?n[0]+"-"+n[1]:n[1]+"-"+n[0],p+="-radius";var c=t.getComputedStyle(i?a:e)[p];switch(n[0]){case"top":l.bottom=i?"0":"-"+u;break;case"bottom":l.top=i?"0":"-"+u;break;case"left":l.right=i?"0":"-"+u;break;case"right":l.left=i?"0":"-"+u}l[n[1]]=c,angular.element(r).css(l)}}}}}]),angular.module("ui.bootstrap.datepickerPopup",["ui.bootstrap.datepicker","ui.bootstrap.position"]).value("$datepickerPopupLiteralWarning",!0).constant("uibDatepickerPopupConfig",{altInputFormats:[],appendToBody:!1,clearText:"Clear",closeOnDateSelection:!0,closeText:"Done",currentText:"Today",datepickerPopup:"yyyy-MM-dd",datepickerPopupTemplateUrl:"uib/template/datepickerPopup/popup.html",datepickerTemplateUrl:"uib/template/datepicker/datepicker.html",html5Types:{date:"yyyy-MM-dd","datetime-local":"yyyy-MM-ddTHH:mm:ss.sss",month:"yyyy-MM"},onOpenFocus:!0,showButtonBar:!0,placement:"auto bottom-left"}).controller("UibDatepickerPopupController",["$scope","$element","$attrs","$compile","$log","$parse","$window","$document","$rootScope","$uibPosition","dateFilter","uibDateParser","uibDatepickerPopupConfig","$timeout","uibDatepickerConfig","$datepickerPopupLiteralWarning",function(e,t,n,a,i,o,r,l,s,u,p,c,d,m,f,h){function g(t){var n=c.parse(t,k,e.date);if(isNaN(n))for(var a=0;a<U.length;a++)if(n=c.parse(t,U[a],e.date),!isNaN(n))return n;return n}function b(e){if(angular.isNumber(e)&&(e=new Date(e)),!e)return null;if(angular.isDate(e)&&!isNaN(e))return e;if(angular.isString(e)){var t=g(e);if(!isNaN(t))return c.fromTimezone(t,A.timezone)}return E.$options&&E.$options.allowInvalid?e:void 0}function v(e,t){var a=e||t;return!n.ngRequired&&!a||(angular.isNumber(a)&&(a=new Date(a)),!a||(!(!angular.isDate(a)||isNaN(a))||!!angular.isString(a)&&!isNaN(g(a))))}function $(n){if(e.isOpen||!e.disabled){var a=I[0],i=t[0].contains(n.target),o=void 0!==a.contains&&a.contains(n.target);!e.isOpen||i||o||e.$apply(function(){e.isOpen=!1})}}function y(n){27===n.which&&e.isOpen?(n.preventDefault(),n.stopPropagation(),e.$apply(function(){e.isOpen=!1}),t[0].focus()):40!==n.which||e.isOpen||(n.preventDefault(),n.stopPropagation(),e.$apply(function(){e.isOpen=!0}))}function w(){if(e.isOpen){var a=angular.element(I[0].querySelector(".uib-datepicker-popup")),i=n.popupPlacement?n.popupPlacement:d.placement,o=u.positionElements(t,a,i,x);a.css({top:o.top+"px",left:o.left+"px"}),a.hasClass("uib-position-measure")&&a.removeClass("uib-position-measure")}}var k,D,x,C,M,T,O,P,S,E,A,I,U,N=!1,F=[];this.init=function(i){if(E=i,A=angular.isObject(i.$options)?i.$options:{timezone:null},D=angular.isDefined(n.closeOnDateSelection)?e.$parent.$eval(n.closeOnDateSelection):d.closeOnDateSelection,x=angular.isDefined(n.datepickerAppendToBody)?e.$parent.$eval(n.datepickerAppendToBody):d.appendToBody,C=angular.isDefined(n.onOpenFocus)?e.$parent.$eval(n.onOpenFocus):d.onOpenFocus,M=angular.isDefined(n.datepickerPopupTemplateUrl)?n.datepickerPopupTemplateUrl:d.datepickerPopupTemplateUrl,T=angular.isDefined(n.datepickerTemplateUrl)?n.datepickerTemplateUrl:d.datepickerTemplateUrl,U=angular.isDefined(n.altInputFormats)?e.$parent.$eval(n.altInputFormats):d.altInputFormats,e.showButtonBar=angular.isDefined(n.showButtonBar)?e.$parent.$eval(n.showButtonBar):d.showButtonBar,d.html5Types[n.type]?(k=d.html5Types[n.type],N=!0):(k=n.uibDatepickerPopup||d.datepickerPopup,n.$observe("uibDatepickerPopup",function(e,t){var n=e||d.datepickerPopup;if(n!==k&&(k=n,E.$modelValue=null,!k))throw new Error("uibDatepickerPopup must have a date format specified.")})),!k)throw new Error("uibDatepickerPopup must have a date format specified.");if(N&&n.uibDatepickerPopup)throw new Error("HTML5 date input types do not support custom formats.");O=angular.element("<div uib-datepicker-popup-wrap><div uib-datepicker></div></div>"),O.attr({"ng-model":"date","ng-change":"dateSelection(date)","template-url":M}),P=angular.element(O.children()[0]),P.attr("template-url",T),e.datepickerOptions||(e.datepickerOptions={}),N&&"month"===n.type&&(e.datepickerOptions.datepickerMode="month",e.datepickerOptions.minMode="month"),P.attr("datepicker-options","datepickerOptions"),N?E.$formatters.push(function(t){return e.date=c.fromTimezone(t,A.timezone),t}):(E.$$parserName="date",E.$validators.date=v,E.$parsers.unshift(b),E.$formatters.push(function(t){return E.$isEmpty(t)?(e.date=t,t):(angular.isNumber(t)&&(t=new Date(t)),e.date=c.fromTimezone(t,A.timezone),c.filter(e.date,k))})),E.$viewChangeListeners.push(function(){e.date=g(E.$viewValue)}),t.on("keydown",y),I=a(O)(e),O.remove(),x?l.find("body").append(I):t.after(I),e.$on("$destroy",function(){for(e.isOpen===!0&&(s.$$phase||e.$apply(function(){e.isOpen=!1})),I.remove(),t.off("keydown",y),l.off("click",$),S&&S.off("scroll",w),angular.element(r).off("resize",w);F.length;)F.shift()()})},e.getText=function(t){return e[t+"Text"]||d[t+"Text"]},e.isDisabled=function(t){"today"===t&&(t=c.fromTimezone(new Date,A.timezone));var n={};return angular.forEach(["minDate","maxDate"],function(t){e.datepickerOptions[t]?angular.isDate(e.datepickerOptions[t])?n[t]=new Date(e.datepickerOptions[t]):(h&&i.warn("Literal date support has been deprecated, please switch to date object usage"),n[t]=new Date(p(e.datepickerOptions[t],"medium"))):n[t]=null}),e.datepickerOptions&&n.minDate&&e.compare(t,n.minDate)<0||n.maxDate&&e.compare(t,n.maxDate)>0},e.compare=function(e,t){return new Date(e.getFullYear(),e.getMonth(),e.getDate())-new Date(t.getFullYear(),t.getMonth(),t.getDate())},e.dateSelection=function(n){e.date=n;var a=e.date?c.filter(e.date,k):null;t.val(a),E.$setViewValue(a),D&&(e.isOpen=!1,t[0].focus())},e.keydown=function(n){27===n.which&&(n.stopPropagation(),e.isOpen=!1,t[0].focus())},e.select=function(t,n){if(n.stopPropagation(),"today"===t){var a=new Date;angular.isDate(e.date)?(t=new Date(e.date),t.setFullYear(a.getFullYear(),a.getMonth(),a.getDate())):(t=c.fromTimezone(a,A.timezone),t.setHours(0,0,0,0))}e.dateSelection(t)},e.close=function(n){n.stopPropagation(),e.isOpen=!1,t[0].focus()},e.disabled=angular.isDefined(n.disabled)||!1,n.ngDisabled&&F.push(e.$parent.$watch(o(n.ngDisabled),function(t){e.disabled=t})),e.$watch("isOpen",function(a){a?e.disabled?e.isOpen=!1:m(function(){w(),C&&e.$broadcast("uib:datepicker.focus"),l.on("click",$);var a=n.popupPlacement?n.popupPlacement:d.placement;x||u.parsePlacement(a)[2]?(S=S||angular.element(u.scrollParent(t)),S&&S.on("scroll",w)):S=null,angular.element(r).on("resize",w)},0,!1):(l.off("click",$),S&&S.off("scroll",w),angular.element(r).off("resize",w))}),e.$on("uib:datepicker.mode",function(){m(w,0,!1)})}]).directive("uibDatepickerPopup",function(){return{require:["ngModel","uibDatepickerPopup"],controller:"UibDatepickerPopupController",scope:{datepickerOptions:"=?",isOpen:"=?",currentText:"@",clearText:"@",closeText:"@"},link:function(e,t,n,a){var i=a[0],o=a[1];o.init(i)}}}).directive("uibDatepickerPopupWrap",function(){return{restrict:"A",transclude:!0,templateUrl:function(e,t){return t.templateUrl||"uib/template/datepickerPopup/popup.html"}}}),angular.module("ui.bootstrap.debounce",[]).factory("$$debounce",["$timeout",function(e){return function(t,n){var a;return function(){var i=this,o=Array.prototype.slice.call(arguments);a&&e.cancel(a),a=e(function(){t.apply(i,o)},n)}}}]),angular.module("ui.bootstrap.dropdown",["ui.bootstrap.position"]).constant("uibDropdownConfig",{appendToOpenClass:"uib-dropdown-open",openClass:"open"}).service("uibDropdownService",["$document","$rootScope",function(e,t){var n=null;this.open=function(t,i){n||e.on("click",a),n&&n!==t&&(n.isOpen=!1),n=t},this.close=function(t,i){n===t&&(e.off("click",a),e.off("keydown",this.keybindFilter),n=null)};var a=function(e){if(n&&!(e&&"disabled"===n.getAutoClose()||e&&3===e.which)){var a=n.getToggleElement();if(!(e&&a&&a[0].contains(e.target))){var i=n.getDropdownElement();e&&"outsideClick"===n.getAutoClose()&&i&&i[0].contains(e.target)||(n.focusToggleElement(),n.isOpen=!1,t.$$phase||n.$apply())}}};this.keybindFilter=function(e){if(n){var t=n.getDropdownElement(),i=n.getToggleElement(),o=t&&t[0].contains(e.target),r=i&&i[0].contains(e.target);27===e.which?(e.stopPropagation(),n.focusToggleElement(),a()):n.isKeynavEnabled()&&[38,40].indexOf(e.which)!==-1&&n.isOpen&&(o||r)&&(e.preventDefault(),e.stopPropagation(),n.focusDropdownEntry(e.which))}}}]).controller("UibDropdownController",["$scope","$element","$attrs","$parse","uibDropdownConfig","uibDropdownService","$animate","$uibPosition","$document","$compile","$templateRequest",function(e,t,n,a,i,o,r,l,s,u,p){var c,d,m=this,f=e.$new(),h=i.appendToOpenClass,g=i.openClass,b=angular.noop,v=n.onToggle?a(n.onToggle):angular.noop,$=!1,y=null,w=!1,k=s.find("body");t.addClass("dropdown"),this.init=function(){if(n.isOpen&&(d=a(n.isOpen),b=d.assign,e.$watch(d,function(e){f.isOpen=!!e})),angular.isDefined(n.dropdownAppendTo)){var i=a(n.dropdownAppendTo)(f);i&&(y=angular.element(i))}$=angular.isDefined(n.dropdownAppendToBody),w=angular.isDefined(n.keyboardNav),$&&!y&&(y=k),y&&m.dropdownMenu&&(y.append(m.dropdownMenu),t.on("$destroy",function(){m.dropdownMenu.remove()}))},this.toggle=function(e){return f.isOpen=arguments.length?!!e:!f.isOpen,angular.isFunction(b)&&b(f,f.isOpen),f.isOpen},this.isOpen=function(){return f.isOpen},f.getToggleElement=function(){return m.toggleElement},f.getAutoClose=function(){return n.autoClose||"always"},f.getElement=function(){return t},f.isKeynavEnabled=function(){return w},f.focusDropdownEntry=function(e){var n=m.dropdownMenu?angular.element(m.dropdownMenu).find("a"):t.find("ul").eq(0).find("a");switch(e){case 40:angular.isNumber(m.selectedOption)?m.selectedOption=m.selectedOption===n.length-1?m.selectedOption:m.selectedOption+1:m.selectedOption=0;break;case 38:angular.isNumber(m.selectedOption)?m.selectedOption=0===m.selectedOption?0:m.selectedOption-1:m.selectedOption=n.length-1}n[m.selectedOption].focus()},f.getDropdownElement=function(){return m.dropdownMenu},f.focusToggleElement=function(){m.toggleElement&&m.toggleElement[0].focus()},f.$watch("isOpen",function(n,a){if(y&&m.dropdownMenu){var i,d,w,k=l.positionElements(t,m.dropdownMenu,"bottom-left",!0),D=0;if(i={top:k.top+"px",display:n?"block":"none"},d=m.dropdownMenu.hasClass("dropdown-menu-right"),d?(i.left="auto",w=l.scrollbarPadding(y),w.heightOverflow&&w.scrollbarWidth&&(D=w.scrollbarWidth),i.right=window.innerWidth-D-(k.left+t.prop("offsetWidth"))+"px"):(i.left=k.left+"px",i.right="auto"),!$){var x=l.offset(y);i.top=k.top-x.top+"px",d?i.right=window.innerWidth-(k.left-x.left+t.prop("offsetWidth"))+"px":i.left=k.left-x.left+"px"}m.dropdownMenu.css(i)}var C=y?y:t,M=C.hasClass(y?h:g);if(M===!n&&r[n?"addClass":"removeClass"](C,y?h:g).then(function(){angular.isDefined(n)&&n!==a&&v(e,{open:!!n})}),n)m.dropdownMenuTemplateUrl?p(m.dropdownMenuTemplateUrl).then(function(e){c=f.$new(),u(e.trim())(c,function(e){var t=e;m.dropdownMenu.replaceWith(t),m.dropdownMenu=t,s.on("keydown",o.keybindFilter)})}):s.on("keydown",o.keybindFilter),f.focusToggleElement(),o.open(f,t);else{if(o.close(f,t),m.dropdownMenuTemplateUrl){c&&c.$destroy();var T=angular.element('<ul class="dropdown-menu"></ul>');m.dropdownMenu.replaceWith(T),m.dropdownMenu=T}m.selectedOption=null}angular.isFunction(b)&&b(e,n)})}]).directive("uibDropdown",function(){return{controller:"UibDropdownController",link:function(e,t,n,a){a.init()}}}).directive("uibDropdownMenu",function(){return{restrict:"A",require:"?^uibDropdown",link:function(e,t,n,a){if(a&&!angular.isDefined(n.dropdownNested)){t.addClass("dropdown-menu");var i=n.templateUrl;i&&(a.dropdownMenuTemplateUrl=i),a.dropdownMenu||(a.dropdownMenu=t)}}}}).directive("uibDropdownToggle",function(){return{require:"?^uibDropdown",link:function(e,t,n,a){if(a){t.addClass("dropdown-toggle"),a.toggleElement=t;var i=function(i){i.preventDefault(),t.hasClass("disabled")||n.disabled||e.$apply(function(){a.toggle()})};t.bind("click",i),t.attr({"aria-haspopup":!0,"aria-expanded":!1}),e.$watch(a.isOpen,function(e){t.attr("aria-expanded",!!e)}),e.$on("$destroy",function(){t.unbind("click",i)})}}}}),angular.module("ui.bootstrap.stackedMap",[]).factory("$$stackedMap",function(){return{createNew:function(){var e=[];return{add:function(t,n){e.push({key:t,value:n})},get:function(t){for(var n=0;n<e.length;n++)if(t===e[n].key)return e[n]},keys:function(){for(var t=[],n=0;n<e.length;n++)t.push(e[n].key);return t},top:function(){return e[e.length-1]},remove:function(t){for(var n=-1,a=0;a<e.length;a++)if(t===e[a].key){n=a;break}return e.splice(n,1)[0]},removeTop:function(){return e.pop()},length:function(){return e.length}}}}}),angular.module("ui.bootstrap.modal",["ui.bootstrap.stackedMap","ui.bootstrap.position"]).factory("$$multiMap",function(){return{createNew:function(){var e={};return{entries:function(){return Object.keys(e).map(function(t){return{key:t,value:e[t]}})},get:function(t){return e[t]},hasKey:function(t){return!!e[t]},keys:function(){return Object.keys(e)},put:function(t,n){e[t]||(e[t]=[]),e[t].push(n)},remove:function(t,n){var a=e[t];if(a){var i=a.indexOf(n);i!==-1&&a.splice(i,1),a.length||delete e[t]}}}}}}).provider("$uibResolve",function(){var e=this;this.resolver=null,this.setResolver=function(e){this.resolver=e},this.$get=["$injector","$q",function(t,n){var a=e.resolver?t.get(e.resolver):null;return{resolve:function(e,i,o,r){if(a)return a.resolve(e,i,o,r);var l=[];return angular.forEach(e,function(e){angular.isFunction(e)||angular.isArray(e)?l.push(n.resolve(t.invoke(e))):angular.isString(e)?l.push(n.resolve(t.get(e))):l.push(n.resolve(e))}),n.all(l).then(function(t){var n={},a=0;return angular.forEach(e,function(e,i){n[i]=t[a++]}),n})}}}]}).directive("uibModalBackdrop",["$animate","$injector","$uibModalStack",function(e,t,n){function a(t,a,i){i.modalInClass&&(e.addClass(a,i.modalInClass),t.$on(n.NOW_CLOSING_EVENT,function(n,o){var r=o();t.modalOptions.animation?e.removeClass(a,i.modalInClass).then(r):r()}))}return{restrict:"A",compile:function(e,t){return e.addClass(t.backdropClass),a}}}]).directive("uibModalWindow",["$uibModalStack","$q","$animateCss","$document",function(e,t,n,a){return{scope:{index:"@"},restrict:"A",transclude:!0,templateUrl:function(e,t){return t.templateUrl||"uib/template/modal/window.html"},link:function(i,o,r){o.addClass(r.windowTopClass||""),i.size=r.size,i.close=function(t){var n=e.getTop();n&&n.value.backdrop&&"static"!==n.value.backdrop&&t.target===t.currentTarget&&(t.preventDefault(),t.stopPropagation(),e.dismiss(n.key,"backdrop click"))},o.on("click",i.close),i.$isRendered=!0;var l=t.defer();i.$$postDigest(function(){l.resolve()}),l.promise.then(function(){var l=null;r.modalInClass&&(l=n(o,{addClass:r.modalInClass}).start(),i.$on(e.NOW_CLOSING_EVENT,function(e,t){var a=t();n(o,{removeClass:r.modalInClass}).start().then(a)})),t.when(l).then(function(){var t=e.getTop();if(t&&e.modalRendered(t.key),!a[0].activeElement||!o[0].contains(a[0].activeElement)){var n=o[0].querySelector("[autofocus]");n?n.focus():o[0].focus()}})})}}}]).directive("uibModalAnimationClass",function(){return{compile:function(e,t){t.modalAnimation&&e.addClass(t.uibModalAnimationClass)}}}).directive("uibModalTransclude",["$animate",function(e){return{link:function(t,n,a,i,o){o(t.$parent,function(t){n.empty(),e.enter(t,n)})}}}]).factory("$uibModalStack",["$animate","$animateCss","$document","$compile","$rootScope","$q","$$multiMap","$$stackedMap","$uibPosition",function(e,t,n,a,i,o,r,l,s){function u(e){var t="-";return e.replace(S,function(e,n){return(n?t:"")+e.toLowerCase()})}function p(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)}function c(){for(var e=-1,t=D.keys(),n=0;n<t.length;n++)D.get(t[n]).value.backdrop&&(e=n);return e>-1&&e<M&&(e=M),e}function d(e,t){var n=D.get(e).value,a=n.appendTo;D.remove(e),T=D.top(),T&&(M=parseInt(T.value.modalDomEl.attr("index"),10)),h(n.modalDomEl,n.modalScope,function(){var t=n.openedClass||k;x.remove(t,e);var i=x.hasKey(t);a.toggleClass(t,i),!i&&w&&w.heightOverflow&&w.scrollbarWidth&&(w.originalRight?a.css({paddingRight:w.originalRight+"px"}):a.css({paddingRight:""}),w=null),m(!0)},n.closedDeferred),f(),t&&t.focus?t.focus():a.focus&&a.focus()}function m(e){var t;D.length()>0&&(t=D.top().value,t.modalDomEl.toggleClass(t.windowTopClass||"",e))}function f(){if($&&c()===-1){var e=y;h($,y,function(){e=null}),$=void 0,y=void 0}}function h(t,n,a,i){function r(){r.done||(r.done=!0,e.leave(t).then(function(){a&&a(),t.remove(),i&&i.resolve()}),n.$destroy())}var l,s=null,u=function(){return l||(l=o.defer(),s=l.promise),function(){l.resolve()}};return n.$broadcast(C.NOW_CLOSING_EVENT,u),o.when(s).then(r)}function g(e){if(e.isDefaultPrevented())return e;var t=D.top();if(t)switch(e.which){case 27:t.value.keyboard&&(e.preventDefault(),i.$apply(function(){C.dismiss(t.key,"escape key press")}));break;case 9:var n=C.loadFocusElementList(t),a=!1;e.shiftKey?(C.isFocusInFirstItem(e,n)||C.isModalFocused(e,t))&&(a=C.focusLastFocusableElement(n)):C.isFocusInLastItem(e,n)&&(a=C.focusFirstFocusableElement(n)),a&&(e.preventDefault(),e.stopPropagation())}}function b(e,t,n){return!e.value.modalScope.$broadcast("modal.closing",t,n).defaultPrevented}function v(){Array.prototype.forEach.call(document.querySelectorAll("["+O+"]"),function(e){var t=parseInt(e.getAttribute(O),10),n=t-1;e.setAttribute(O,n),n||(e.removeAttribute(O),e.removeAttribute("aria-hidden"))})}var $,y,w,k="modal-open",D=l.createNew(),x=r.createNew(),C={NOW_CLOSING_EVENT:"modal.stack.now-closing"},M=0,T=null,O="data-bootstrap-modal-aria-hidden-count",P="a[href], area[href], input:not([disabled]):not([tabindex='-1']), button:not([disabled]):not([tabindex='-1']),select:not([disabled]):not([tabindex='-1']), textarea:not([disabled]):not([tabindex='-1']), iframe, object, embed, *[tabindex]:not([tabindex='-1']), *[contenteditable=true]",S=/[A-Z]/g;return i.$watch(c,function(e){y&&(y.index=e)}),n.on("keydown",g),i.$on("$destroy",function(){n.off("keydown",g)}),C.open=function(t,o){function r(e){function t(e){var t=e.parent()?e.parent().children():[];return Array.prototype.filter.call(t,function(t){return t!==e[0]})}if(e&&"BODY"!==e[0].tagName)return t(e).forEach(function(e){var t="true"===e.getAttribute("aria-hidden"),n=parseInt(e.getAttribute(O),10);n||(n=t?1:0),e.setAttribute(O,n+1),e.setAttribute("aria-hidden","true")}),r(e.parent())}var l=n[0].activeElement,p=o.openedClass||k;m(!1),T=D.top(),D.add(t,{deferred:o.deferred,renderDeferred:o.renderDeferred,closedDeferred:o.closedDeferred,modalScope:o.scope,backdrop:o.backdrop,keyboard:o.keyboard,openedClass:o.openedClass,windowTopClass:o.windowTopClass,animation:o.animation,appendTo:o.appendTo}),x.put(p,t);var d=o.appendTo,f=c();if(!d.length)throw new Error("appendTo element not found. Make sure that the element passed is in DOM.");f>=0&&!$&&(y=i.$new(!0),y.modalOptions=o,y.index=f,$=angular.element('<div uib-modal-backdrop="modal-backdrop"></div>'),$.attr({"class":"modal-backdrop","ng-style":"{'z-index': 1040 + (index && 1 || 0) + index*10}","uib-modal-animation-class":"fade","modal-in-class":"in"}),o.backdropClass&&$.addClass(o.backdropClass),o.animation&&$.attr("modal-animation","true"),a($)(y),e.enter($,d),s.isScrollable(d)&&(w=s.scrollbarPadding(d),w.heightOverflow&&w.scrollbarWidth&&d.css({paddingRight:w.right+"px"})));var h;o.component?(h=document.createElement(u(o.component.name)),h=angular.element(h),h.attr({resolve:"$resolve","modal-instance":"$uibModalInstance",close:"$close($value)",dismiss:"$dismiss($value)"})):h=o.content,M=T?parseInt(T.value.modalDomEl.attr("index"),10)+1:0;var g=angular.element('<div uib-modal-window="modal-window"></div>');g.attr({"class":"modal","template-url":o.windowTemplateUrl,"window-top-class":o.windowTopClass,role:"dialog","aria-labelledby":o.ariaLabelledBy,"aria-describedby":o.ariaDescribedBy,size:o.size,index:M,animate:"animate","ng-style":"{'z-index': 1050 + $$topModalIndex*10, display: 'block'}",tabindex:-1,"uib-modal-animation-class":"fade","modal-in-class":"in"}).append(h),o.windowClass&&g.addClass(o.windowClass),o.animation&&g.attr("modal-animation","true"),d.addClass(p),o.scope&&(o.scope.$$topModalIndex=M),e.enter(a(g)(o.scope),d),D.top().value.modalDomEl=g,D.top().value.modalOpener=l,r(g)},C.close=function(e,t){var n=D.get(e);return v(),n&&b(n,t,!0)?(n.value.modalScope.$$uibDestructionScheduled=!0,n.value.deferred.resolve(t),d(e,n.value.modalOpener),!0):!n},C.dismiss=function(e,t){var n=D.get(e);return v(),n&&b(n,t,!1)?(n.value.modalScope.$$uibDestructionScheduled=!0,n.value.deferred.reject(t),d(e,n.value.modalOpener),!0):!n},C.dismissAll=function(e){for(var t=this.getTop();t&&this.dismiss(t.key,e);)t=this.getTop()},C.getTop=function(){return D.top()},C.modalRendered=function(e){var t=D.get(e);C.focusFirstFocusableElement(C.loadFocusElementList(t)),t&&t.value.renderDeferred.resolve()},C.focusFirstFocusableElement=function(e){return e.length>0&&(e[0].focus(),!0)},C.focusLastFocusableElement=function(e){return e.length>0&&(e[e.length-1].focus(),!0)},C.isModalFocused=function(e,t){if(e&&t){var n=t.value.modalDomEl;if(n&&n.length)return(e.target||e.srcElement)===n[0]}return!1},C.isFocusInFirstItem=function(e,t){return t.length>0&&(e.target||e.srcElement)===t[0]},C.isFocusInLastItem=function(e,t){return t.length>0&&(e.target||e.srcElement)===t[t.length-1]},C.loadFocusElementList=function(e){if(e){var t=e.value.modalDomEl;if(t&&t.length){var n=t[0].querySelectorAll(P);return n?Array.prototype.filter.call(n,function(e){return p(e)}):n}}},C}]).provider("$uibModal",function(){var e={options:{animation:!0,backdrop:!0,keyboard:!0},$get:["$rootScope","$q","$document","$templateRequest","$controller","$uibResolve","$uibModalStack",function(t,n,a,i,o,r,l){function s(e){return e.template?n.when(e.template):i(angular.isFunction(e.templateUrl)?e.templateUrl():e.templateUrl)}var u={},p=null;return u.getPromiseChain=function(){return p},u.open=function(i){function u(){return g}var c=n.defer(),d=n.defer(),m=n.defer(),f=n.defer(),h={result:c.promise,opened:d.promise,closed:m.promise,rendered:f.promise,close:function(e){return l.close(h,e)},dismiss:function(e){return l.dismiss(h,e)}};if(i=angular.extend({},e.options,i),i.resolve=i.resolve||{},i.appendTo=i.appendTo||a.find("body").eq(0),!i.component&&!i.template&&!i.templateUrl)throw new Error("One of component or template or templateUrl options is required.");var g;g=i.component?n.when(r.resolve(i.resolve,{},null,null)):n.all([s(i),r.resolve(i.resolve,{},null,null)]);var b;return b=p=n.all([p]).then(u,u).then(function(e){function n(t,n,a,i){t.$scope=r,t.$scope.$resolve={},a?t.$scope.$uibModalInstance=h:t.$uibModalInstance=h;var o=n?e[1]:e;angular.forEach(o,function(e,n){i&&(t[n]=e),t.$scope.$resolve[n]=e})}var a=i.scope||t,r=a.$new();r.$close=h.close,r.$dismiss=h.dismiss,r.$on("$destroy",function(){r.$$uibDestructionScheduled||r.$dismiss("$uibUnscheduledDestruction")});var s,u,p={scope:r,deferred:c,renderDeferred:f,closedDeferred:m,animation:i.animation,backdrop:i.backdrop,keyboard:i.keyboard,backdropClass:i.backdropClass,windowTopClass:i.windowTopClass,windowClass:i.windowClass,windowTemplateUrl:i.windowTemplateUrl,ariaLabelledBy:i.ariaLabelledBy,ariaDescribedBy:i.ariaDescribedBy,size:i.size,openedClass:i.openedClass,appendTo:i.appendTo},g={},b={};i.component?(n(g,!1,!0,!1),g.name=i.component,p.component=g):i.controller&&(n(b,!0,!1,!0),u=o(i.controller,b,!0,i.controllerAs),i.controllerAs&&i.bindToController&&(s=u.instance,s.$close=r.$close,s.$dismiss=r.$dismiss,angular.extend(s,{$resolve:b.$scope.$resolve},a)),s=u(),angular.isFunction(s.$onInit)&&s.$onInit()),i.component||(p.content=e[0]),l.open(h,p),d.resolve(!0)},function(e){d.reject(e),c.reject(e)})["finally"](function(){p===b&&(p=null)}),h},u}]};return e}),angular.module("ui.bootstrap.paging",[]).factory("uibPaging",["$parse",function(e){return{create:function(t,n,a){t.setNumPages=a.numPages?e(a.numPages).assign:angular.noop,t.ngModelCtrl={$setViewValue:angular.noop},t._watchers=[],t.init=function(e,i){t.ngModelCtrl=e,t.config=i,e.$render=function(){t.render()},a.itemsPerPage?t._watchers.push(n.$parent.$watch(a.itemsPerPage,function(e){t.itemsPerPage=parseInt(e,10),n.totalPages=t.calculateTotalPages(),t.updatePage()})):t.itemsPerPage=i.itemsPerPage,n.$watch("totalItems",function(e,a){(angular.isDefined(e)||e!==a)&&(n.totalPages=t.calculateTotalPages(),t.updatePage())})},t.calculateTotalPages=function(){var e=t.itemsPerPage<1?1:Math.ceil(n.totalItems/t.itemsPerPage);return Math.max(e||0,1)},t.render=function(){n.page=parseInt(t.ngModelCtrl.$viewValue,10)||1},n.selectPage=function(e,a){a&&a.preventDefault();var i=!n.ngDisabled||!a;i&&n.page!==e&&e>0&&e<=n.totalPages&&(a&&a.target&&a.target.blur(),t.ngModelCtrl.$setViewValue(e),t.ngModelCtrl.$render())},n.getText=function(e){return n[e+"Text"]||t.config[e+"Text"]},n.noPrevious=function(){return 1===n.page},n.noNext=function(){return n.page===n.totalPages},t.updatePage=function(){t.setNumPages(n.$parent,n.totalPages),n.page>n.totalPages?n.selectPage(n.totalPages):t.ngModelCtrl.$render()},n.$on("$destroy",function(){for(;t._watchers.length;)t._watchers.shift()()})}}}]),angular.module("ui.bootstrap.pager",["ui.bootstrap.paging","ui.bootstrap.tabindex"]).controller("UibPagerController",["$scope","$attrs","uibPaging","uibPagerConfig",function(e,t,n,a){e.align=angular.isDefined(t.align)?e.$parent.$eval(t.align):a.align,n.create(this,e,t)}]).constant("uibPagerConfig",{itemsPerPage:10,previousText:"« Previous",nextText:"Next »",align:!0}).directive("uibPager",["uibPagerConfig",function(e){return{scope:{totalItems:"=",previousText:"@",nextText:"@",ngDisabled:"="},require:["uibPager","?ngModel"],restrict:"A",controller:"UibPagerController",controllerAs:"pager",templateUrl:function(e,t){return t.templateUrl||"uib/template/pager/pager.html";
-},link:function(t,n,a,i){n.addClass("pager");var o=i[0],r=i[1];r&&o.init(r,e)}}}]),angular.module("ui.bootstrap.pagination",["ui.bootstrap.paging","ui.bootstrap.tabindex"]).controller("UibPaginationController",["$scope","$attrs","$parse","uibPaging","uibPaginationConfig",function(e,t,n,a,i){function o(e,t,n){return{number:e,text:t,active:n}}function r(e,t){var n=[],a=1,i=t,r=angular.isDefined(s)&&s<t;r&&(u?(a=Math.max(e-Math.floor(s/2),1),i=a+s-1,i>t&&(i=t,a=i-s+1)):(a=(Math.ceil(e/s)-1)*s+1,i=Math.min(a+s-1,t)));for(var l=a;l<=i;l++){var m=o(l,d(l),l===e);n.push(m)}if(r&&s>0&&(!u||p||c)){if(a>1){if(!c||a>3){var f=o(a-1,"...",!1);n.unshift(f)}if(c){if(3===a){var h=o(2,"2",!1);n.unshift(h)}var g=o(1,"1",!1);n.unshift(g)}}if(i<t){if(!c||i<t-2){var b=o(i+1,"...",!1);n.push(b)}if(c){if(i===t-2){var v=o(t-1,t-1,!1);n.push(v)}var $=o(t,t,!1);n.push($)}}}return n}var l=this,s=angular.isDefined(t.maxSize)?e.$parent.$eval(t.maxSize):i.maxSize,u=angular.isDefined(t.rotate)?e.$parent.$eval(t.rotate):i.rotate,p=angular.isDefined(t.forceEllipses)?e.$parent.$eval(t.forceEllipses):i.forceEllipses,c=angular.isDefined(t.boundaryLinkNumbers)?e.$parent.$eval(t.boundaryLinkNumbers):i.boundaryLinkNumbers,d=angular.isDefined(t.pageLabel)?function(n){return e.$parent.$eval(t.pageLabel,{$page:n})}:angular.identity;e.boundaryLinks=angular.isDefined(t.boundaryLinks)?e.$parent.$eval(t.boundaryLinks):i.boundaryLinks,e.directionLinks=angular.isDefined(t.directionLinks)?e.$parent.$eval(t.directionLinks):i.directionLinks,a.create(this,e,t),t.maxSize&&l._watchers.push(e.$parent.$watch(n(t.maxSize),function(e){s=parseInt(e,10),l.render()}));var m=this.render;this.render=function(){m(),e.page>0&&e.page<=e.totalPages&&(e.pages=r(e.page,e.totalPages))}}]).constant("uibPaginationConfig",{itemsPerPage:10,boundaryLinks:!1,boundaryLinkNumbers:!1,directionLinks:!0,firstText:"First",previousText:"Previous",nextText:"Next",lastText:"Last",rotate:!0,forceEllipses:!1}).directive("uibPagination",["$parse","uibPaginationConfig",function(e,t){return{scope:{totalItems:"=",firstText:"@",previousText:"@",nextText:"@",lastText:"@",ngDisabled:"="},require:["uibPagination","?ngModel"],restrict:"A",controller:"UibPaginationController",controllerAs:"pagination",templateUrl:function(e,t){return t.templateUrl||"uib/template/pagination/pagination.html"},link:function(e,n,a,i){n.addClass("pagination");var o=i[0],r=i[1];r&&o.init(r,t)}}}]),angular.module("ui.bootstrap.tooltip",["ui.bootstrap.position","ui.bootstrap.stackedMap"]).provider("$uibTooltip",function(){function e(e){var t=/[A-Z]/g,n="-";return e.replace(t,function(e,t){return(t?n:"")+e.toLowerCase()})}var t={placement:"top",placementClassPrefix:"",animation:!0,popupDelay:0,popupCloseDelay:0,useContentExp:!1},n={mouseenter:"mouseleave",click:"click",outsideClick:"outsideClick",focus:"blur",none:""},a={};this.options=function(e){angular.extend(a,e)},this.setTriggers=function(e){angular.extend(n,e)},this.$get=["$window","$compile","$timeout","$document","$uibPosition","$interpolate","$rootScope","$parse","$$stackedMap",function(i,o,r,l,s,u,p,c,d){function m(e){if(27===e.which){var t=f.top();t&&(t.value.close(),t=null)}}var f=d.createNew();return l.on("keyup",m),p.$on("$destroy",function(){l.off("keyup",m)}),function(i,p,d,m){function h(e){var t=(e||m.trigger||d).split(" "),a=t.map(function(e){return n[e]||e});return{show:t,hide:a}}m=angular.extend({},t,a,m);var g=e(i),b=u.startSymbol(),v=u.endSymbol(),$="<div "+g+'-popup uib-title="'+b+"title"+v+'" '+(m.useContentExp?'content-exp="contentExp()" ':'content="'+b+"content"+v+'" ')+'origin-scope="origScope" class="uib-position-measure '+p+'" tooltip-animation-class="fade"uib-tooltip-classes ng-class="{ in: isOpen }" ></div>';return{compile:function(e,t){var n=o($);return function(e,t,a,o){function u(){q.isOpen?g():d()}function d(){R&&!e.$eval(a[p+"Enable"])||(y(),D(),q.popupDelay?A||(A=r(b,q.popupDelay,!1)):b())}function g(){v(),q.popupCloseDelay?I||(I=r($,q.popupCloseDelay,!1)):$()}function b(){return v(),y(),q.content?(w(),void q.$evalAsync(function(){q.isOpen=!0,x(!0),W()})):angular.noop}function v(){A&&(r.cancel(A),A=null),U&&(r.cancel(U),U=null)}function $(){q&&q.$evalAsync(function(){q&&(q.isOpen=!1,x(!1),q.animation?E||(E=r(k,150,!1)):k())})}function y(){I&&(r.cancel(I),I=null),E&&(r.cancel(E),E=null)}function w(){P||(S=q.$new(),P=n(S,function(e){H?l.find("body").append(e):t.after(e)}),f.add(q,{close:$}),C())}function k(){v(),y(),M(),P&&(P.remove(),P=null,N&&r.cancel(N)),f.remove(q),S&&(S.$destroy(),S=null)}function D(){q.title=a[p+"Title"],z?q.content=z(e):q.content=a[i],q.popupClass=a[p+"Class"],q.placement=angular.isDefined(a[p+"Placement"])?a[p+"Placement"]:m.placement;var t=s.parsePlacement(q.placement);F=t[1]?t[0]+"-"+t[1]:t[0];var n=parseInt(a[p+"PopupDelay"],10),o=parseInt(a[p+"PopupCloseDelay"],10);q.popupDelay=isNaN(n)?m.popupDelay:n,q.popupCloseDelay=isNaN(o)?m.popupCloseDelay:o}function x(t){Y&&angular.isFunction(Y.assign)&&Y.assign(e,t)}function C(){B.length=0,z?(B.push(e.$watch(z,function(e){q.content=e,!e&&q.isOpen&&$()})),B.push(S.$watch(function(){L||(L=!0,S.$$postDigest(function(){L=!1,q&&q.isOpen&&W()}))}))):B.push(a.$observe(i,function(e){q.content=e,!e&&q.isOpen?$():W()})),B.push(a.$observe(p+"Title",function(e){q.title=e,q.isOpen&&W()})),B.push(a.$observe(p+"Placement",function(e){q.placement=e?e:m.placement,q.isOpen&&W()}))}function M(){B.length&&(angular.forEach(B,function(e){e()}),B.length=0)}function T(e){q&&q.isOpen&&P&&(t[0].contains(e.target)||P[0].contains(e.target)||g())}function O(){var n=[],i=[],o=e.$eval(a[p+"Trigger"]);j(),angular.isObject(o)?(Object.keys(o).forEach(function(e){n.push(e),i.push(o[e])}),V={show:n,hide:i}):V=h(o),"none"!==V.show&&V.show.forEach(function(e,n){"outsideClick"===e?(t.on("click",u),l.on("click",T)):e===V.hide[n]?t.on(e,u):e&&(t.on(e,d),t.on(V.hide[n],g)),t.on("keypress",function(e){27===e.which&&g()})})}var P,S,E,A,I,U,N,F,H=!!angular.isDefined(m.appendToBody)&&m.appendToBody,V=h(void 0),R=angular.isDefined(a[p+"Enable"]),q=e.$new(!0),L=!1,Y=!!angular.isDefined(a[p+"IsOpen"])&&c(a[p+"IsOpen"]),z=!!m.useContentExp&&c(a[i]),B=[],W=function(){P&&P.html()&&(U||(U=r(function(){var e=s.positionElements(t,P,q.placement,H),n=angular.isDefined(P.offsetHeight)?P.offsetHeight:P.prop("offsetHeight"),a=H?s.offset(t):s.position(t);P.css({top:e.top+"px",left:e.left+"px"});var i=e.placement.split("-");P.hasClass(i[0])||(P.removeClass(F.split("-")[0]),P.addClass(i[0])),P.hasClass(m.placementClassPrefix+e.placement)||(P.removeClass(m.placementClassPrefix+F),P.addClass(m.placementClassPrefix+e.placement)),N=r(function(){var e=angular.isDefined(P.offsetHeight)?P.offsetHeight:P.prop("offsetHeight"),t=s.adjustTop(i,a,n,e);t&&P.css(t),N=null},0,!1),P.hasClass("uib-position-measure")?(s.positionArrow(P,e.placement),P.removeClass("uib-position-measure")):F!==e.placement&&s.positionArrow(P,e.placement),F=e.placement,U=null},0,!1)))};q.origScope=e,q.isOpen=!1,q.contentExp=function(){return q.content},a.$observe("disabled",function(e){e&&v(),e&&q.isOpen&&$()}),Y&&e.$watch(Y,function(e){q&&!e===q.isOpen&&u()});var j=function(){V.show.forEach(function(e){"outsideClick"===e?t.off("click",u):(t.off(e,d),t.off(e,u))}),V.hide.forEach(function(e){"outsideClick"===e?l.off("click",T):t.off(e,g)})};O();var _=e.$eval(a[p+"Animation"]);q.animation=angular.isDefined(_)?!!_:m.animation;var G,K=p+"AppendToBody";G=K in a&&void 0===a[K]||e.$eval(a[K]),H=angular.isDefined(G)?G:H,e.$on("$destroy",function(){j(),k(),q=null})}}}}}]}).directive("uibTooltipTemplateTransclude",["$animate","$sce","$compile","$templateRequest",function(e,t,n,a){return{link:function(i,o,r){var l,s,u,p=i.$eval(r.tooltipTemplateTranscludeScope),c=0,d=function(){s&&(s.remove(),s=null),l&&(l.$destroy(),l=null),u&&(e.leave(u).then(function(){s=null}),s=u,u=null)};i.$watch(t.parseAsResourceUrl(r.uibTooltipTemplateTransclude),function(t){var r=++c;t?(a(t,!0).then(function(a){if(r===c){var i=p.$new(),s=a,m=n(s)(i,function(t){d(),e.enter(t,o)});l=i,u=m,l.$emit("$includeContentLoaded",t)}},function(){r===c&&(d(),i.$emit("$includeContentError",t))}),i.$emit("$includeContentRequested",t)):d()}),i.$on("$destroy",d)}}}]).directive("uibTooltipClasses",["$uibPosition",function(e){return{restrict:"A",link:function(t,n,a){if(t.placement){var i=e.parsePlacement(t.placement);n.addClass(i[0])}t.popupClass&&n.addClass(t.popupClass),t.animation&&n.addClass(a.tooltipAnimationClass)}}}]).directive("uibTooltipPopup",function(){return{restrict:"A",scope:{content:"@"},templateUrl:"uib/template/tooltip/tooltip-popup.html"}}).directive("uibTooltip",["$uibTooltip",function(e){return e("uibTooltip","tooltip","mouseenter")}]).directive("uibTooltipTemplatePopup",function(){return{restrict:"A",scope:{contentExp:"&",originScope:"&"},templateUrl:"uib/template/tooltip/tooltip-template-popup.html"}}).directive("uibTooltipTemplate",["$uibTooltip",function(e){return e("uibTooltipTemplate","tooltip","mouseenter",{useContentExp:!0})}]).directive("uibTooltipHtmlPopup",function(){return{restrict:"A",scope:{contentExp:"&"},templateUrl:"uib/template/tooltip/tooltip-html-popup.html"}}).directive("uibTooltipHtml",["$uibTooltip",function(e){return e("uibTooltipHtml","tooltip","mouseenter",{useContentExp:!0})}]),angular.module("ui.bootstrap.popover",["ui.bootstrap.tooltip"]).directive("uibPopoverTemplatePopup",function(){return{restrict:"A",scope:{uibTitle:"@",contentExp:"&",originScope:"&"},templateUrl:"uib/template/popover/popover-template.html"}}).directive("uibPopoverTemplate",["$uibTooltip",function(e){return e("uibPopoverTemplate","popover","click",{useContentExp:!0})}]).directive("uibPopoverHtmlPopup",function(){return{restrict:"A",scope:{contentExp:"&",uibTitle:"@"},templateUrl:"uib/template/popover/popover-html.html"}}).directive("uibPopoverHtml",["$uibTooltip",function(e){return e("uibPopoverHtml","popover","click",{useContentExp:!0})}]).directive("uibPopoverPopup",function(){return{restrict:"A",scope:{uibTitle:"@",content:"@"},templateUrl:"uib/template/popover/popover.html"}}).directive("uibPopover",["$uibTooltip",function(e){return e("uibPopover","popover","click")}]),angular.module("ui.bootstrap.progressbar",[]).constant("uibProgressConfig",{animate:!0,max:100}).controller("UibProgressController",["$scope","$attrs","uibProgressConfig",function(e,t,n){function a(){return angular.isDefined(e.maxParam)?e.maxParam:n.max}var i=this,o=angular.isDefined(t.animate)?e.$parent.$eval(t.animate):n.animate;this.bars=[],e.max=a(),this.addBar=function(e,t,n){o||t.css({transition:"none"}),this.bars.push(e),e.max=a(),e.title=n&&angular.isDefined(n.title)?n.title:"progressbar",e.$watch("value",function(t){e.recalculatePercentage()}),e.recalculatePercentage=function(){var t=i.bars.reduce(function(e,t){return t.percent=+(100*t.value/t.max).toFixed(2),e+t.percent},0);t>100&&(e.percent-=t-100)},e.$on("$destroy",function(){t=null,i.removeBar(e)})},this.removeBar=function(e){this.bars.splice(this.bars.indexOf(e),1),this.bars.forEach(function(e){e.recalculatePercentage()})},e.$watch("maxParam",function(e){i.bars.forEach(function(e){e.max=a(),e.recalculatePercentage()})})}]).directive("uibProgress",function(){return{replace:!0,transclude:!0,controller:"UibProgressController",require:"uibProgress",scope:{maxParam:"=?max"},templateUrl:"uib/template/progressbar/progress.html"}}).directive("uibBar",function(){return{replace:!0,transclude:!0,require:"^uibProgress",scope:{value:"=",type:"@"},templateUrl:"uib/template/progressbar/bar.html",link:function(e,t,n,a){a.addBar(e,t,n)}}}).directive("uibProgressbar",function(){return{replace:!0,transclude:!0,controller:"UibProgressController",scope:{value:"=",maxParam:"=?max",type:"@"},templateUrl:"uib/template/progressbar/progressbar.html",link:function(e,t,n,a){a.addBar(e,angular.element(t.children()[0]),{title:n.title})}}}),angular.module("ui.bootstrap.rating",[]).constant("uibRatingConfig",{max:5,stateOn:null,stateOff:null,enableReset:!0,titles:["one","two","three","four","five"]}).controller("UibRatingController",["$scope","$attrs","uibRatingConfig",function(e,t,n){var a={$setViewValue:angular.noop},i=this;this.init=function(i){a=i,a.$render=this.render,a.$formatters.push(function(e){return angular.isNumber(e)&&e<<0!==e&&(e=Math.round(e)),e}),this.stateOn=angular.isDefined(t.stateOn)?e.$parent.$eval(t.stateOn):n.stateOn,this.stateOff=angular.isDefined(t.stateOff)?e.$parent.$eval(t.stateOff):n.stateOff,this.enableReset=angular.isDefined(t.enableReset)?e.$parent.$eval(t.enableReset):n.enableReset;var o=angular.isDefined(t.titles)?e.$parent.$eval(t.titles):n.titles;this.titles=angular.isArray(o)&&o.length>0?o:n.titles;var r=angular.isDefined(t.ratingStates)?e.$parent.$eval(t.ratingStates):new Array(angular.isDefined(t.max)?e.$parent.$eval(t.max):n.max);e.range=this.buildTemplateObjects(r)},this.buildTemplateObjects=function(e){for(var t=0,n=e.length;t<n;t++)e[t]=angular.extend({index:t},{stateOn:this.stateOn,stateOff:this.stateOff,title:this.getTitle(t)},e[t]);return e},this.getTitle=function(e){return e>=this.titles.length?e+1:this.titles[e]},e.rate=function(t){if(!e.readonly&&t>=0&&t<=e.range.length){var n=i.enableReset&&a.$viewValue===t?0:t;a.$setViewValue(n),a.$render()}},e.enter=function(t){e.readonly||(e.value=t),e.onHover({value:t})},e.reset=function(){e.value=a.$viewValue,e.onLeave()},e.onKeydown=function(t){/(37|38|39|40)/.test(t.which)&&(t.preventDefault(),t.stopPropagation(),e.rate(e.value+(38===t.which||39===t.which?1:-1)))},this.render=function(){e.value=a.$viewValue,e.title=i.getTitle(e.value-1)}}]).directive("uibRating",function(){return{require:["uibRating","ngModel"],restrict:"A",scope:{readonly:"=?readOnly",onHover:"&",onLeave:"&"},controller:"UibRatingController",templateUrl:"uib/template/rating/rating.html",link:function(e,t,n,a){var i=a[0],o=a[1];i.init(o)}}}),angular.module("ui.bootstrap.tabs",[]).controller("UibTabsetController",["$scope",function(e){function t(e){for(var t=0;t<a.tabs.length;t++)if(a.tabs[t].index===e)return t}var n,a=this;a.tabs=[],a.select=function(e,o){if(!i){var r=t(n),l=a.tabs[r];if(l){if(l.tab.onDeselect({$event:o,$selectedIndex:e}),o&&o.isDefaultPrevented())return;l.tab.active=!1}var s=a.tabs[e];s?(s.tab.onSelect({$event:o}),s.tab.active=!0,a.active=s.index,n=s.index):!s&&angular.isDefined(n)&&(a.active=null,n=null)}},a.addTab=function(e){if(a.tabs.push({tab:e,index:e.index}),a.tabs.sort(function(e,t){return e.index>t.index?1:e.index<t.index?-1:0}),e.index===a.active||!angular.isDefined(a.active)&&1===a.tabs.length){var n=t(e.index);a.select(n)}},a.removeTab=function(e){for(var t,n=0;n<a.tabs.length;n++)if(a.tabs[n].tab===e){t=n;break}if(a.tabs[t].index===a.active){var i=t===a.tabs.length-1?t-1:t+1%a.tabs.length;a.select(i)}a.tabs.splice(t,1)},e.$watch("tabset.active",function(e){angular.isDefined(e)&&e!==n&&a.select(t(e))});var i;e.$on("$destroy",function(){i=!0})}]).directive("uibTabset",function(){return{transclude:!0,replace:!0,scope:{},bindToController:{active:"=?",type:"@"},controller:"UibTabsetController",controllerAs:"tabset",templateUrl:function(e,t){return t.templateUrl||"uib/template/tabs/tabset.html"},link:function(e,t,n){e.vertical=!!angular.isDefined(n.vertical)&&e.$parent.$eval(n.vertical),e.justified=!!angular.isDefined(n.justified)&&e.$parent.$eval(n.justified)}}}).directive("uibTab",["$parse",function(e){return{require:"^uibTabset",replace:!0,templateUrl:function(e,t){return t.templateUrl||"uib/template/tabs/tab.html"},transclude:!0,scope:{heading:"@",index:"=?",classes:"@?",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},controllerAs:"tab",link:function(t,n,a,i,o){t.disabled=!1,a.disable&&t.$parent.$watch(e(a.disable),function(e){t.disabled=!!e}),angular.isUndefined(a.index)&&(i.tabs&&i.tabs.length?t.index=Math.max.apply(null,i.tabs.map(function(e){return e.index}))+1:t.index=0),angular.isUndefined(a.classes)&&(t.classes=""),t.select=function(e){if(!t.disabled){for(var n,a=0;a<i.tabs.length;a++)if(i.tabs[a].tab===t){n=a;break}i.select(n,e)}},i.addTab(t),t.$on("$destroy",function(){i.removeTab(t)}),t.$transcludeFn=o}}}]).directive("uibTabHeadingTransclude",function(){return{restrict:"A",require:"^uibTab",link:function(e,t){e.$watch("headingElement",function(e){e&&(t.html(""),t.append(e))})}}}).directive("uibTabContentTransclude",function(){function e(e){return e.tagName&&(e.hasAttribute("uib-tab-heading")||e.hasAttribute("data-uib-tab-heading")||e.hasAttribute("x-uib-tab-heading")||"uib-tab-heading"===e.tagName.toLowerCase()||"data-uib-tab-heading"===e.tagName.toLowerCase()||"x-uib-tab-heading"===e.tagName.toLowerCase()||"uib:tab-heading"===e.tagName.toLowerCase())}return{restrict:"A",require:"^uibTabset",link:function(t,n,a){var i=t.$eval(a.uibTabContentTransclude).tab;i.$transcludeFn(i.$parent,function(t){angular.forEach(t,function(t){e(t)?i.headingElement=t:n.append(t)})})}}}),angular.module("ui.bootstrap.timepicker",[]).constant("uibTimepickerConfig",{hourStep:1,minuteStep:1,secondStep:1,showMeridian:!0,showSeconds:!1,meridians:null,readonlyInput:!1,mousewheel:!0,arrowkeys:!0,showSpinners:!0,templateUrl:"uib/template/timepicker/timepicker.html"}).controller("UibTimepickerController",["$scope","$element","$attrs","$parse","$log","$locale","uibTimepickerConfig",function(e,t,n,a,i,o,r){function l(){var t=+e.hours,n=e.showMeridian?t>0&&t<13:t>=0&&t<24;if(n&&""!==e.hours)return e.showMeridian&&(12===t&&(t=0),e.meridian===x[1]&&(t+=12)),t}function s(){var t=+e.minutes,n=t>=0&&t<60;if(n&&""!==e.minutes)return t}function u(){var t=+e.seconds;return t>=0&&t<60?t:void 0}function p(e,t){return null===e?"":angular.isDefined(e)&&e.toString().length<2&&!t?"0"+e:e.toString()}function c(e){d(),D.$setViewValue(new Date(w)),m(e)}function d(){v&&v.$setValidity("hours",!0),$&&$.$setValidity("minutes",!0),y&&y.$setValidity("seconds",!0),D.$setValidity("time",!0),e.invalidHours=!1,e.invalidMinutes=!1,e.invalidSeconds=!1}function m(t){if(D.$modelValue){var n=w.getHours(),a=w.getMinutes(),i=w.getSeconds();e.showMeridian&&(n=0===n||12===n?12:n%12),e.hours="h"===t?n:p(n,!C),"m"!==t&&(e.minutes=p(a)),e.meridian=w.getHours()<12?x[0]:x[1],"s"!==t&&(e.seconds=p(i)),e.meridian=w.getHours()<12?x[0]:x[1]}else e.hours=null,e.minutes=null,e.seconds=null,e.meridian=x[0]}function f(e){w=g(w,e),c()}function h(e,t){return g(e,60*t)}function g(e,t){var n=new Date(e.getTime()+1e3*t),a=new Date(e);return a.setHours(n.getHours(),n.getMinutes(),n.getSeconds()),a}function b(){return(null===e.hours||""===e.hours)&&(null===e.minutes||""===e.minutes)&&(!e.showSeconds||e.showSeconds&&(null===e.seconds||""===e.seconds))}var v,$,y,w=new Date,k=[],D={$setViewValue:angular.noop},x=angular.isDefined(n.meridians)?e.$parent.$eval(n.meridians):r.meridians||o.DATETIME_FORMATS.AMPMS,C=!angular.isDefined(n.padHours)||e.$parent.$eval(n.padHours);e.tabindex=angular.isDefined(n.tabindex)?n.tabindex:0,t.removeAttr("tabindex"),this.init=function(t,a){D=t,D.$render=this.render,D.$formatters.unshift(function(e){return e?new Date(e):null});var i=a.eq(0),o=a.eq(1),l=a.eq(2);v=i.controller("ngModel"),$=o.controller("ngModel"),y=l.controller("ngModel");var s=angular.isDefined(n.mousewheel)?e.$parent.$eval(n.mousewheel):r.mousewheel;s&&this.setupMousewheelEvents(i,o,l);var u=angular.isDefined(n.arrowkeys)?e.$parent.$eval(n.arrowkeys):r.arrowkeys;u&&this.setupArrowkeyEvents(i,o,l),e.readonlyInput=angular.isDefined(n.readonlyInput)?e.$parent.$eval(n.readonlyInput):r.readonlyInput,this.setupInputEvents(i,o,l)};var M=r.hourStep;n.hourStep&&k.push(e.$parent.$watch(a(n.hourStep),function(e){M=+e}));var T=r.minuteStep;n.minuteStep&&k.push(e.$parent.$watch(a(n.minuteStep),function(e){T=+e}));var O;k.push(e.$parent.$watch(a(n.min),function(e){var t=new Date(e);O=isNaN(t)?void 0:t}));var P;k.push(e.$parent.$watch(a(n.max),function(e){var t=new Date(e);P=isNaN(t)?void 0:t}));var S=!1;n.ngDisabled&&k.push(e.$parent.$watch(a(n.ngDisabled),function(e){S=e})),e.noIncrementHours=function(){var e=h(w,60*M);return S||e>P||e<w&&e<O},e.noDecrementHours=function(){var e=h(w,60*-M);return S||e<O||e>w&&e>P},e.noIncrementMinutes=function(){var e=h(w,T);return S||e>P||e<w&&e<O},e.noDecrementMinutes=function(){var e=h(w,-T);return S||e<O||e>w&&e>P},e.noIncrementSeconds=function(){var e=g(w,E);return S||e>P||e<w&&e<O},e.noDecrementSeconds=function(){var e=g(w,-E);return S||e<O||e>w&&e>P},e.noToggleMeridian=function(){return w.getHours()<12?S||h(w,720)>P:S||h(w,-720)<O};var E=r.secondStep;n.secondStep&&k.push(e.$parent.$watch(a(n.secondStep),function(e){E=+e})),e.showSeconds=r.showSeconds,n.showSeconds&&k.push(e.$parent.$watch(a(n.showSeconds),function(t){e.showSeconds=!!t})),e.showMeridian=r.showMeridian,n.showMeridian&&k.push(e.$parent.$watch(a(n.showMeridian),function(t){if(e.showMeridian=!!t,D.$error.time){var n=l(),a=s();angular.isDefined(n)&&angular.isDefined(a)&&(w.setHours(n),c())}else m()})),this.setupMousewheelEvents=function(t,n,a){var i=function(e){e.originalEvent&&(e=e.originalEvent);var t=e.wheelDelta?e.wheelDelta:-e.deltaY;return e.detail||t>0};t.bind("mousewheel wheel",function(t){S||e.$apply(i(t)?e.incrementHours():e.decrementHours()),t.preventDefault()}),n.bind("mousewheel wheel",function(t){S||e.$apply(i(t)?e.incrementMinutes():e.decrementMinutes()),t.preventDefault()}),a.bind("mousewheel wheel",function(t){S||e.$apply(i(t)?e.incrementSeconds():e.decrementSeconds()),t.preventDefault()})},this.setupArrowkeyEvents=function(t,n,a){t.bind("keydown",function(t){S||(38===t.which?(t.preventDefault(),e.incrementHours(),e.$apply()):40===t.which&&(t.preventDefault(),e.decrementHours(),e.$apply()))}),n.bind("keydown",function(t){S||(38===t.which?(t.preventDefault(),e.incrementMinutes(),e.$apply()):40===t.which&&(t.preventDefault(),e.decrementMinutes(),e.$apply()))}),a.bind("keydown",function(t){S||(38===t.which?(t.preventDefault(),e.incrementSeconds(),e.$apply()):40===t.which&&(t.preventDefault(),e.decrementSeconds(),e.$apply()))})},this.setupInputEvents=function(t,n,a){if(e.readonlyInput)return e.updateHours=angular.noop,e.updateMinutes=angular.noop,void(e.updateSeconds=angular.noop);var i=function(t,n,a){D.$setViewValue(null),D.$setValidity("time",!1),angular.isDefined(t)&&(e.invalidHours=t,v&&v.$setValidity("hours",!1)),angular.isDefined(n)&&(e.invalidMinutes=n,$&&$.$setValidity("minutes",!1)),angular.isDefined(a)&&(e.invalidSeconds=a,y&&y.$setValidity("seconds",!1))};e.updateHours=function(){var e=l(),t=s();D.$setDirty(),angular.isDefined(e)&&angular.isDefined(t)?(w.setHours(e),w.setMinutes(t),w<O||w>P?i(!0):c("h")):i(!0)},t.bind("blur",function(t){D.$setTouched(),b()?d():null===e.hours||""===e.hours?i(!0):!e.invalidHours&&e.hours<10&&e.$apply(function(){e.hours=p(e.hours,!C)})}),e.updateMinutes=function(){var e=s(),t=l();D.$setDirty(),angular.isDefined(e)&&angular.isDefined(t)?(w.setHours(t),w.setMinutes(e),w<O||w>P?i(void 0,!0):c("m")):i(void 0,!0)},n.bind("blur",function(t){D.$setTouched(),b()?d():null===e.minutes?i(void 0,!0):!e.invalidMinutes&&e.minutes<10&&e.$apply(function(){e.minutes=p(e.minutes)})}),e.updateSeconds=function(){var e=u();D.$setDirty(),angular.isDefined(e)?(w.setSeconds(e),c("s")):i(void 0,void 0,!0)},a.bind("blur",function(t){b()?d():!e.invalidSeconds&&e.seconds<10&&e.$apply(function(){e.seconds=p(e.seconds)})})},this.render=function(){var t=D.$viewValue;isNaN(t)?(D.$setValidity("time",!1),i.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):(t&&(w=t),w<O||w>P?(D.$setValidity("time",!1),e.invalidHours=!0,e.invalidMinutes=!0):d(),m())},e.showSpinners=angular.isDefined(n.showSpinners)?e.$parent.$eval(n.showSpinners):r.showSpinners,e.incrementHours=function(){e.noIncrementHours()||f(60*M*60)},e.decrementHours=function(){e.noDecrementHours()||f(60*-M*60)},e.incrementMinutes=function(){e.noIncrementMinutes()||f(60*T)},e.decrementMinutes=function(){e.noDecrementMinutes()||f(60*-T)},e.incrementSeconds=function(){e.noIncrementSeconds()||f(E)},e.decrementSeconds=function(){e.noDecrementSeconds()||f(-E)},e.toggleMeridian=function(){var t=s(),n=l();e.noToggleMeridian()||(angular.isDefined(t)&&angular.isDefined(n)?f(720*(w.getHours()<12?60:-60)):e.meridian=e.meridian===x[0]?x[1]:x[0])},e.blur=function(){D.$setTouched()},e.$on("$destroy",function(){for(;k.length;)k.shift()()})}]).directive("uibTimepicker",["uibTimepickerConfig",function(e){return{require:["uibTimepicker","?^ngModel"],restrict:"A",controller:"UibTimepickerController",controllerAs:"timepicker",scope:{},templateUrl:function(t,n){return n.templateUrl||e.templateUrl},link:function(e,t,n,a){var i=a[0],o=a[1];o&&i.init(o,t.find("input"))}}}]),angular.module("ui.bootstrap.typeahead",["ui.bootstrap.debounce","ui.bootstrap.position"]).factory("uibTypeaheadParser",["$parse",function(e){var t=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;return{parse:function(n){var a=n.match(t);if(!a)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "'+n+'".');return{itemName:a[3],source:e(a[4]),viewMapper:e(a[2]||a[1]),modelMapper:e(a[1])}}}}]).controller("UibTypeaheadController",["$scope","$element","$attrs","$compile","$parse","$q","$timeout","$document","$window","$rootScope","$$debounce","$uibPosition","uibTypeaheadParser",function(e,t,n,a,i,o,r,l,s,u,p,c,d){function m(){q.moveInProgress||(q.moveInProgress=!0,q.$digest()),Z()}function f(){q.position=S?c.offset(t):c.position(t),q.position.top+=t.prop("offsetHeight")}var h,g,b=[9,13,27,38,40],v=200,$=e.$eval(n.typeaheadMinLength);$||0===$||($=1),e.$watch(n.typeaheadMinLength,function(e){$=e||0===e?e:1});var y=e.$eval(n.typeaheadWaitMs)||0,w=e.$eval(n.typeaheadEditable)!==!1;e.$watch(n.typeaheadEditable,function(e){w=e!==!1});var k,D,x=i(n.typeaheadLoading).assign||angular.noop,C=n.typeaheadShouldSelect?i(n.typeaheadShouldSelect):function(e,t){var n=t.$event;return 13===n.which||9===n.which},M=i(n.typeaheadOnSelect),T=!!angular.isDefined(n.typeaheadSelectOnBlur)&&e.$eval(n.typeaheadSelectOnBlur),O=i(n.typeaheadNoResults).assign||angular.noop,P=n.typeaheadInputFormatter?i(n.typeaheadInputFormatter):void 0,S=!!n.typeaheadAppendToBody&&e.$eval(n.typeaheadAppendToBody),E=n.typeaheadAppendTo?e.$eval(n.typeaheadAppendTo):null,A=e.$eval(n.typeaheadFocusFirst)!==!1,I=!!n.typeaheadSelectOnExact&&e.$eval(n.typeaheadSelectOnExact),U=i(n.typeaheadIsOpen).assign||angular.noop,N=e.$eval(n.typeaheadShowHint)||!1,F=i(n.ngModel),H=i(n.ngModel+"($$$p)"),V=function(t,n){return angular.isFunction(F(e))&&g&&g.$options&&g.$options.getterSetter?H(t,{$$$p:n}):F.assign(t,n)},R=d.parse(n.uibTypeahead),q=e.$new(),L=e.$on("$destroy",function(){q.$destroy()});q.$on("$destroy",L);var Y="typeahead-"+q.$id+"-"+Math.floor(1e4*Math.random());t.attr({"aria-autocomplete":"list","aria-expanded":!1,"aria-owns":Y});var z,B;N&&(z=angular.element("<div></div>"),z.css("position","relative"),t.after(z),B=t.clone(),B.attr("placeholder",""),B.attr("tabindex","-1"),B.val(""),B.css({position:"absolute",top:"0px",left:"0px","border-color":"transparent","box-shadow":"none",opacity:1,background:"none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255)",color:"#999"}),t.css({position:"relative","vertical-align":"top","background-color":"transparent"}),B.attr("id")&&B.removeAttr("id"),z.append(B),B.after(t));var W=angular.element("<div uib-typeahead-popup></div>");W.attr({id:Y,matches:"matches",active:"activeIdx",select:"select(activeIdx, evt)","move-in-progress":"moveInProgress",query:"query",position:"position","assign-is-open":"assignIsOpen(isOpen)",debounce:"debounceUpdate"}),angular.isDefined(n.typeaheadTemplateUrl)&&W.attr("template-url",n.typeaheadTemplateUrl),angular.isDefined(n.typeaheadPopupTemplateUrl)&&W.attr("popup-template-url",n.typeaheadPopupTemplateUrl);var j=function(){N&&B.val("")},_=function(){q.matches=[],q.activeIdx=-1,t.attr("aria-expanded",!1),j()},G=function(e){return Y+"-option-"+e};q.$watch("activeIdx",function(e){e<0?t.removeAttr("aria-activedescendant"):t.attr("aria-activedescendant",G(e))});var K=function(e,t){return!!(q.matches.length>t&&e)&&e.toUpperCase()===q.matches[t].label.toUpperCase()},X=function(n,a){var i={$viewValue:n};x(e,!0),O(e,!1),o.when(R.source(e,i)).then(function(o){var r=n===h.$viewValue;if(r&&k)if(o&&o.length>0){q.activeIdx=A?0:-1,O(e,!1),q.matches.length=0;for(var l=0;l<o.length;l++)i[R.itemName]=o[l],q.matches.push({id:G(l),label:R.viewMapper(q,i),model:o[l]});if(q.query=n,f(),t.attr("aria-expanded",!0),I&&1===q.matches.length&&K(n,0)&&(angular.isNumber(q.debounceUpdate)||angular.isObject(q.debounceUpdate)?p(function(){q.select(0,a)},angular.isNumber(q.debounceUpdate)?q.debounceUpdate:q.debounceUpdate["default"]):q.select(0,a)),N){var s=q.matches[0].label;angular.isString(n)&&n.length>0&&s.slice(0,n.length).toUpperCase()===n.toUpperCase()?B.val(n+s.slice(n.length)):B.val("")}}else _(),O(e,!0);r&&x(e,!1)},function(){_(),x(e,!1),O(e,!0)})};S&&(angular.element(s).on("resize",m),l.find("body").on("scroll",m));var Z=p(function(){q.matches.length&&f(),q.moveInProgress=!1},v);q.moveInProgress=!1,q.query=void 0;var J,Q=function(e){J=r(function(){X(e)},y)},ee=function(){J&&r.cancel(J)};_(),q.assignIsOpen=function(t){U(e,t)},q.select=function(a,i){var o,l,s={};D=!0,s[R.itemName]=l=q.matches[a].model,o=R.modelMapper(e,s),V(e,o),h.$setValidity("editable",!0),h.$setValidity("parse",!0),M(e,{$item:l,$model:o,$label:R.viewMapper(e,s),$event:i}),_(),q.$eval(n.typeaheadFocusOnSelect)!==!1&&r(function(){t[0].focus()},0,!1)},t.on("keydown",function(t){if(0!==q.matches.length&&b.indexOf(t.which)!==-1){var n=C(e,{$event:t});if(q.activeIdx===-1&&n||9===t.which&&t.shiftKey)return _(),void q.$digest();t.preventDefault();var a;switch(t.which){case 27:t.stopPropagation(),_(),e.$digest();break;case 38:q.activeIdx=(q.activeIdx>0?q.activeIdx:q.matches.length)-1,q.$digest(),a=W[0].querySelectorAll(".uib-typeahead-match")[q.activeIdx],a.parentNode.scrollTop=a.offsetTop;break;case 40:q.activeIdx=(q.activeIdx+1)%q.matches.length,q.$digest(),a=W[0].querySelectorAll(".uib-typeahead-match")[q.activeIdx],a.parentNode.scrollTop=a.offsetTop;break;default:n&&q.$apply(function(){angular.isNumber(q.debounceUpdate)||angular.isObject(q.debounceUpdate)?p(function(){q.select(q.activeIdx,t)},angular.isNumber(q.debounceUpdate)?q.debounceUpdate:q.debounceUpdate["default"]):q.select(q.activeIdx,t)})}}}),t.bind("focus",function(e){k=!0,0!==$||h.$viewValue||r(function(){X(h.$viewValue,e)},0)}),t.bind("blur",function(e){T&&q.matches.length&&q.activeIdx!==-1&&!D&&(D=!0,q.$apply(function(){angular.isObject(q.debounceUpdate)&&angular.isNumber(q.debounceUpdate.blur)?p(function(){q.select(q.activeIdx,e)},q.debounceUpdate.blur):q.select(q.activeIdx,e)})),!w&&h.$error.editable&&(h.$setViewValue(),q.$apply(function(){h.$setValidity("editable",!0),h.$setValidity("parse",!0)}),t.val("")),k=!1,D=!1});var te=function(n){t[0]!==n.target&&3!==n.which&&0!==q.matches.length&&(_(),u.$$phase||e.$digest())};l.on("click",te),e.$on("$destroy",function(){l.off("click",te),(S||E)&&ne.remove(),S&&(angular.element(s).off("resize",m),l.find("body").off("scroll",m)),W.remove(),N&&z.remove()});var ne=a(W)(q);S?l.find("body").append(ne):E?angular.element(E).eq(0).append(ne):t.after(ne),this.init=function(t,n){h=t,g=n,q.debounceUpdate=h.$options&&i(h.$options.debounce)(e),h.$parsers.unshift(function(t){return k=!0,0===$||t&&t.length>=$?y>0?(ee(),Q(t)):X(t):(x(e,!1),ee(),_()),w?t:t?void h.$setValidity("editable",!1):(h.$setValidity("editable",!0),null)}),h.$formatters.push(function(t){var n,a,i={};return w||h.$setValidity("editable",!0),P?(i.$model=t,P(e,i)):(i[R.itemName]=t,n=R.viewMapper(e,i),i[R.itemName]=void 0,a=R.viewMapper(e,i),n!==a?n:t)})}}]).directive("uibTypeahead",function(){return{controller:"UibTypeaheadController",require:["ngModel","^?ngModelOptions","uibTypeahead"],link:function(e,t,n,a){
-a[2].init(a[0],a[1])}}}).directive("uibTypeaheadPopup",["$$debounce",function(e){return{scope:{matches:"=",query:"=",active:"=",position:"&",moveInProgress:"=",select:"&",assignIsOpen:"&",debounce:"&"},replace:!0,templateUrl:function(e,t){return t.popupTemplateUrl||"uib/template/typeahead/typeahead-popup.html"},link:function(t,n,a){t.templateUrl=a.templateUrl,t.isOpen=function(){var e=t.matches.length>0;return t.assignIsOpen({isOpen:e}),e},t.isActive=function(e){return t.active===e},t.selectActive=function(e){t.active=e},t.selectMatch=function(n,a){var i=t.debounce();angular.isNumber(i)||angular.isObject(i)?e(function(){t.select({activeIdx:n,evt:a})},angular.isNumber(i)?i:i["default"]):t.select({activeIdx:n,evt:a})}}}}]).directive("uibTypeaheadMatch",["$templateRequest","$compile","$parse",function(e,t,n){return{scope:{index:"=",match:"=",query:"="},link:function(a,i,o){var r=n(o.templateUrl)(a.$parent)||"uib/template/typeahead/typeahead-match.html";e(r).then(function(e){var n=angular.element(e.trim());i.replaceWith(n),t(n)(a)})}}}]).filter("uibTypeaheadHighlight",["$sce","$injector","$log",function(e,t,n){function a(e){return e.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}function i(e){return/<.*>/g.test(e)}var o;return o=t.has("$sanitize"),function(t,r){return!o&&i(t)&&n.warn("Unsafe use of typeahead please use ngSanitize"),t=r?(""+t).replace(new RegExp(a(r),"gi"),"<strong>$&</strong>"):t,o||(t=e.trustAsHtml(t)),t}}]),angular.module("uib/template/accordion/accordion-group.html",[]).run(["$templateCache",function(e){e.put("uib/template/accordion/accordion-group.html",'<div role="tab" id="{{::headingId}}" aria-selected="{{isOpen}}" class="panel-heading" ng-keypress="toggleOpen($event)">\n  <h4 class="panel-title">\n    <a role="button" data-toggle="collapse" href aria-expanded="{{isOpen}}" aria-controls="{{::panelId}}" tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" uib-accordion-transclude="heading" ng-disabled="isDisabled" uib-tabindex-toggle><span uib-accordion-header ng-class="{\'text-muted\': isDisabled}">{{heading}}</span></a>\n  </h4>\n</div>\n<div id="{{::panelId}}" aria-labelledby="{{::headingId}}" aria-hidden="{{!isOpen}}" role="tabpanel" class="panel-collapse collapse" uib-collapse="!isOpen">\n  <div class="panel-body" ng-transclude></div>\n</div>\n')}]),angular.module("uib/template/accordion/accordion.html",[]).run(["$templateCache",function(e){e.put("uib/template/accordion/accordion.html",'<div role="tablist" class="panel-group" ng-transclude></div>')}]),angular.module("uib/template/alert/alert.html",[]).run(["$templateCache",function(e){e.put("uib/template/alert/alert.html",'<button ng-show="closeable" type="button" class="close" ng-click="close({$event: $event})">\n  <span aria-hidden="true">&times;</span>\n  <span class="sr-only">Close</span>\n</button>\n<div ng-transclude></div>\n')}]),angular.module("uib/template/carousel/carousel.html",[]).run(["$templateCache",function(e){e.put("uib/template/carousel/carousel.html",'<div class="carousel-inner" ng-transclude></div>\n<a role="button" href class="left carousel-control" ng-click="prev()" ng-class="{ disabled: isPrevDisabled() }" ng-show="slides.length > 1">\n  <span aria-hidden="true" class="glyphicon glyphicon-chevron-left"></span>\n  <span class="sr-only">previous</span>\n</a>\n<a role="button" href class="right carousel-control" ng-click="next()" ng-class="{ disabled: isNextDisabled() }" ng-show="slides.length > 1">\n  <span aria-hidden="true" class="glyphicon glyphicon-chevron-right"></span>\n  <span class="sr-only">next</span>\n</a>\n<ol class="carousel-indicators" ng-show="slides.length > 1">\n  <li ng-repeat="slide in slides | orderBy:indexOfSlide track by $index" ng-class="{ active: isActive(slide) }" ng-click="select(slide)">\n    <span class="sr-only">slide {{ $index + 1 }} of {{ slides.length }}<span ng-if="isActive(slide)">, currently active</span></span>\n  </li>\n</ol>\n')}]),angular.module("uib/template/carousel/slide.html",[]).run(["$templateCache",function(e){e.put("uib/template/carousel/slide.html",'<div class="text-center" ng-transclude></div>\n')}]),angular.module("uib/template/datepicker/datepicker.html",[]).run(["$templateCache",function(e){e.put("uib/template/datepicker/datepicker.html",'<div ng-switch="datepickerMode">\n  <div uib-daypicker ng-switch-when="day" tabindex="0" class="uib-daypicker"></div>\n  <div uib-monthpicker ng-switch-when="month" tabindex="0" class="uib-monthpicker"></div>\n  <div uib-yearpicker ng-switch-when="year" tabindex="0" class="uib-yearpicker"></div>\n</div>\n')}]),angular.module("uib/template/datepicker/day.html",[]).run(["$templateCache",function(e){e.put("uib/template/datepicker/day.html",'<table role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left uib-left" ng-click="move(-1)" tabindex="-1"><i aria-hidden="true" class="glyphicon glyphicon-chevron-left"></i><span class="sr-only">previous</span></button></th>\n      <th colspan="{{::5 + showWeeks}}"><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm uib-title" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1"><strong>{{title}}</strong></button></th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right uib-right" ng-click="move(1)" tabindex="-1"><i aria-hidden="true" class="glyphicon glyphicon-chevron-right"></i><span class="sr-only">next</span></button></th>\n    </tr>\n    <tr>\n      <th ng-if="showWeeks" class="text-center"></th>\n      <th ng-repeat="label in ::labels track by $index" class="text-center"><small aria-label="{{::label.full}}">{{::label.abbr}}</small></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr class="uib-weeks" ng-repeat="row in rows track by $index" role="row">\n      <td ng-if="showWeeks" class="text-center h6"><em>{{ weekNumbers[$index] }}</em></td>\n      <td ng-repeat="dt in row" class="uib-day text-center" role="gridcell"\n        id="{{::dt.uid}}"\n        ng-class="::dt.customClass">\n        <button type="button" class="btn btn-default btn-sm"\n          uib-is-class="\n            \'btn-info\' for selectedDt,\n            \'active\' for activeDt\n            on dt"\n          ng-click="select(dt.date)"\n          ng-disabled="::dt.disabled"\n          tabindex="-1"><span ng-class="::{\'text-muted\': dt.secondary, \'text-info\': dt.current}">{{::dt.label}}</span></button>\n      </td>\n    </tr>\n  </tbody>\n</table>\n')}]),angular.module("uib/template/datepicker/month.html",[]).run(["$templateCache",function(e){e.put("uib/template/datepicker/month.html",'<table role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left uib-left" ng-click="move(-1)" tabindex="-1"><i aria-hidden="true" class="glyphicon glyphicon-chevron-left"></i><span class="sr-only">previous</span></button></th>\n      <th colspan="{{::yearHeaderColspan}}"><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm uib-title" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1"><strong>{{title}}</strong></button></th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right uib-right" ng-click="move(1)" tabindex="-1"><i aria-hidden="true" class="glyphicon glyphicon-chevron-right"></i><span class="sr-only">next</span></i></button></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr class="uib-months" ng-repeat="row in rows track by $index" role="row">\n      <td ng-repeat="dt in row" class="uib-month text-center" role="gridcell"\n        id="{{::dt.uid}}"\n        ng-class="::dt.customClass">\n        <button type="button" class="btn btn-default"\n          uib-is-class="\n            \'btn-info\' for selectedDt,\n            \'active\' for activeDt\n            on dt"\n          ng-click="select(dt.date)"\n          ng-disabled="::dt.disabled"\n          tabindex="-1"><span ng-class="::{\'text-info\': dt.current}">{{::dt.label}}</span></button>\n      </td>\n    </tr>\n  </tbody>\n</table>\n')}]),angular.module("uib/template/datepicker/year.html",[]).run(["$templateCache",function(e){e.put("uib/template/datepicker/year.html",'<table role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left uib-left" ng-click="move(-1)" tabindex="-1"><i aria-hidden="true" class="glyphicon glyphicon-chevron-left"></i><span class="sr-only">previous</span></button></th>\n      <th colspan="{{::columns - 2}}"><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm uib-title" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1"><strong>{{title}}</strong></button></th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right uib-right" ng-click="move(1)" tabindex="-1"><i aria-hidden="true" class="glyphicon glyphicon-chevron-right"></i><span class="sr-only">next</span></button></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr class="uib-years" ng-repeat="row in rows track by $index" role="row">\n      <td ng-repeat="dt in row" class="uib-year text-center" role="gridcell"\n        id="{{::dt.uid}}"\n        ng-class="::dt.customClass">\n        <button type="button" class="btn btn-default"\n          uib-is-class="\n            \'btn-info\' for selectedDt,\n            \'active\' for activeDt\n            on dt"\n          ng-click="select(dt.date)"\n          ng-disabled="::dt.disabled"\n          tabindex="-1"><span ng-class="::{\'text-info\': dt.current}">{{::dt.label}}</span></button>\n      </td>\n    </tr>\n  </tbody>\n</table>\n')}]),angular.module("uib/template/datepickerPopup/popup.html",[]).run(["$templateCache",function(e){e.put("uib/template/datepickerPopup/popup.html",'<ul role="presentation" class="uib-datepicker-popup dropdown-menu uib-position-measure" dropdown-nested ng-if="isOpen" ng-keydown="keydown($event)" ng-click="$event.stopPropagation()">\n  <li ng-transclude></li>\n  <li ng-if="showButtonBar" class="uib-button-bar">\n    <span class="btn-group pull-left">\n      <button type="button" class="btn btn-sm btn-info uib-datepicker-current" ng-click="select(\'today\', $event)" ng-disabled="isDisabled(\'today\')">{{ getText(\'current\') }}</button>\n      <button type="button" class="btn btn-sm btn-danger uib-clear" ng-click="select(null, $event)">{{ getText(\'clear\') }}</button>\n    </span>\n    <button type="button" class="btn btn-sm btn-success pull-right uib-close" ng-click="close($event)">{{ getText(\'close\') }}</button>\n  </li>\n</ul>\n')}]),angular.module("uib/template/modal/window.html",[]).run(["$templateCache",function(e){e.put("uib/template/modal/window.html","<div class=\"modal-dialog {{size ? 'modal-' + size : ''}}\"><div class=\"modal-content\" uib-modal-transclude></div></div>\n")}]),angular.module("uib/template/pager/pager.html",[]).run(["$templateCache",function(e){e.put("uib/template/pager/pager.html",'<li ng-class="{disabled: noPrevious()||ngDisabled, previous: align}"><a href ng-click="selectPage(page - 1, $event)" ng-disabled="noPrevious()||ngDisabled" uib-tabindex-toggle>{{::getText(\'previous\')}}</a></li>\n<li ng-class="{disabled: noNext()||ngDisabled, next: align}"><a href ng-click="selectPage(page + 1, $event)" ng-disabled="noNext()||ngDisabled" uib-tabindex-toggle>{{::getText(\'next\')}}</a></li>\n')}]),angular.module("uib/template/pagination/pagination.html",[]).run(["$templateCache",function(e){e.put("uib/template/pagination/pagination.html",'<li ng-if="::boundaryLinks" ng-class="{disabled: noPrevious()||ngDisabled}" class="pagination-first"><a href ng-click="selectPage(1, $event)" ng-disabled="noPrevious()||ngDisabled" uib-tabindex-toggle>{{::getText(\'first\')}}</a></li>\n<li ng-if="::directionLinks" ng-class="{disabled: noPrevious()||ngDisabled}" class="pagination-prev"><a href ng-click="selectPage(page - 1, $event)" ng-disabled="noPrevious()||ngDisabled" uib-tabindex-toggle>{{::getText(\'previous\')}}</a></li>\n<li ng-repeat="page in pages track by $index" ng-class="{active: page.active,disabled: ngDisabled&&!page.active}" class="pagination-page"><a href ng-click="selectPage(page.number, $event)" ng-disabled="ngDisabled&&!page.active" uib-tabindex-toggle>{{page.text}}</a></li>\n<li ng-if="::directionLinks" ng-class="{disabled: noNext()||ngDisabled}" class="pagination-next"><a href ng-click="selectPage(page + 1, $event)" ng-disabled="noNext()||ngDisabled" uib-tabindex-toggle>{{::getText(\'next\')}}</a></li>\n<li ng-if="::boundaryLinks" ng-class="{disabled: noNext()||ngDisabled}" class="pagination-last"><a href ng-click="selectPage(totalPages, $event)" ng-disabled="noNext()||ngDisabled" uib-tabindex-toggle>{{::getText(\'last\')}}</a></li>\n')}]),angular.module("uib/template/tooltip/tooltip-html-popup.html",[]).run(["$templateCache",function(e){e.put("uib/template/tooltip/tooltip-html-popup.html",'<div class="tooltip-arrow"></div>\n<div class="tooltip-inner" ng-bind-html="contentExp()"></div>\n')}]),angular.module("uib/template/tooltip/tooltip-popup.html",[]).run(["$templateCache",function(e){e.put("uib/template/tooltip/tooltip-popup.html",'<div class="tooltip-arrow"></div>\n<div class="tooltip-inner" ng-bind="content"></div>\n')}]),angular.module("uib/template/tooltip/tooltip-template-popup.html",[]).run(["$templateCache",function(e){e.put("uib/template/tooltip/tooltip-template-popup.html",'<div class="tooltip-arrow"></div>\n<div class="tooltip-inner"\n  uib-tooltip-template-transclude="contentExp()"\n  tooltip-template-transclude-scope="originScope()"></div>\n')}]),angular.module("uib/template/popover/popover-html.html",[]).run(["$templateCache",function(e){e.put("uib/template/popover/popover-html.html",'<div class="arrow"></div>\n\n<div class="popover-inner">\n    <h3 class="popover-title" ng-bind="uibTitle" ng-if="uibTitle"></h3>\n    <div class="popover-content" ng-bind-html="contentExp()"></div>\n</div>\n')}]),angular.module("uib/template/popover/popover-template.html",[]).run(["$templateCache",function(e){e.put("uib/template/popover/popover-template.html",'<div class="arrow"></div>\n\n<div class="popover-inner">\n    <h3 class="popover-title" ng-bind="uibTitle" ng-if="uibTitle"></h3>\n    <div class="popover-content"\n      uib-tooltip-template-transclude="contentExp()"\n      tooltip-template-transclude-scope="originScope()"></div>\n</div>\n')}]),angular.module("uib/template/popover/popover.html",[]).run(["$templateCache",function(e){e.put("uib/template/popover/popover.html",'<div class="arrow"></div>\n\n<div class="popover-inner">\n    <h3 class="popover-title" ng-bind="uibTitle" ng-if="uibTitle"></h3>\n    <div class="popover-content" ng-bind="content"></div>\n</div>\n')}]),angular.module("uib/template/progressbar/bar.html",[]).run(["$templateCache",function(e){e.put("uib/template/progressbar/bar.html",'<div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: (percent < 100 ? percent : 100) + \'%\'}" aria-valuetext="{{percent | number:0}}%" aria-labelledby="{{::title}}" ng-transclude></div>\n')}]),angular.module("uib/template/progressbar/progress.html",[]).run(["$templateCache",function(e){e.put("uib/template/progressbar/progress.html",'<div class="progress" ng-transclude aria-labelledby="{{::title}}"></div>')}]),angular.module("uib/template/progressbar/progressbar.html",[]).run(["$templateCache",function(e){e.put("uib/template/progressbar/progressbar.html",'<div class="progress">\n  <div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: (percent < 100 ? percent : 100) + \'%\'}" aria-valuetext="{{percent | number:0}}%" aria-labelledby="{{::title}}" ng-transclude></div>\n</div>\n')}]),angular.module("uib/template/rating/rating.html",[]).run(["$templateCache",function(e){e.put("uib/template/rating/rating.html",'<span ng-mouseleave="reset()" ng-keydown="onKeydown($event)" tabindex="0" role="slider" aria-valuemin="0" aria-valuemax="{{range.length}}" aria-valuenow="{{value}}" aria-valuetext="{{title}}">\n    <span ng-repeat-start="r in range track by $index" class="sr-only">({{ $index < value ? \'*\' : \' \' }})</span>\n    <i ng-repeat-end ng-mouseenter="enter($index + 1)" ng-click="rate($index + 1)" class="glyphicon" ng-class="$index < value && (r.stateOn || \'glyphicon-star\') || (r.stateOff || \'glyphicon-star-empty\')" ng-attr-title="{{r.title}}"></i>\n</span>\n')}]),angular.module("uib/template/tabs/tab.html",[]).run(["$templateCache",function(e){e.put("uib/template/tabs/tab.html",'<li ng-class="[{active: active, disabled: disabled}, classes]" class="uib-tab nav-item">\n  <a href ng-click="select($event)" class="nav-link" uib-tab-heading-transclude>{{heading}}</a>\n</li>\n')}]),angular.module("uib/template/tabs/tabset.html",[]).run(["$templateCache",function(e){e.put("uib/template/tabs/tabset.html",'<div>\n  <ul class="nav nav-{{tabset.type || \'tabs\'}}" ng-class="{\'nav-stacked\': vertical, \'nav-justified\': justified}" ng-transclude></ul>\n  <div class="tab-content">\n    <div class="tab-pane"\n         ng-repeat="tab in tabset.tabs"\n         ng-class="{active: tabset.active === tab.index}"\n         uib-tab-content-transclude="tab">\n    </div>\n  </div>\n</div>\n')}]),angular.module("uib/template/timepicker/timepicker.html",[]).run(["$templateCache",function(e){e.put("uib/template/timepicker/timepicker.html",'<table class="uib-timepicker">\n  <tbody>\n    <tr class="text-center" ng-show="::showSpinners">\n      <td class="uib-increment hours"><a ng-click="incrementHours()" ng-class="{disabled: noIncrementHours()}" class="btn btn-link" ng-disabled="noIncrementHours()" tabindex="-1"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n      <td>&nbsp;</td>\n      <td class="uib-increment minutes"><a ng-click="incrementMinutes()" ng-class="{disabled: noIncrementMinutes()}" class="btn btn-link" ng-disabled="noIncrementMinutes()" tabindex="-1"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n      <td ng-show="showSeconds">&nbsp;</td>\n      <td ng-show="showSeconds" class="uib-increment seconds"><a ng-click="incrementSeconds()" ng-class="{disabled: noIncrementSeconds()}" class="btn btn-link" ng-disabled="noIncrementSeconds()" tabindex="-1"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n      <td ng-show="showMeridian"></td>\n    </tr>\n    <tr>\n      <td class="form-group uib-time hours" ng-class="{\'has-error\': invalidHours}">\n        <input type="text" placeholder="HH" ng-model="hours" ng-change="updateHours()" class="form-control text-center" ng-readonly="::readonlyInput" maxlength="2" tabindex="{{::tabindex}}" ng-disabled="noIncrementHours()" ng-blur="blur()">\n      </td>\n      <td class="uib-separator">:</td>\n      <td class="form-group uib-time minutes" ng-class="{\'has-error\': invalidMinutes}">\n        <input type="text" placeholder="MM" ng-model="minutes" ng-change="updateMinutes()" class="form-control text-center" ng-readonly="::readonlyInput" maxlength="2" tabindex="{{::tabindex}}" ng-disabled="noIncrementMinutes()" ng-blur="blur()">\n      </td>\n      <td ng-show="showSeconds" class="uib-separator">:</td>\n      <td class="form-group uib-time seconds" ng-class="{\'has-error\': invalidSeconds}" ng-show="showSeconds">\n        <input type="text" placeholder="SS" ng-model="seconds" ng-change="updateSeconds()" class="form-control text-center" ng-readonly="readonlyInput" maxlength="2" tabindex="{{::tabindex}}" ng-disabled="noIncrementSeconds()" ng-blur="blur()">\n      </td>\n      <td ng-show="showMeridian" class="uib-time am-pm"><button type="button" ng-class="{disabled: noToggleMeridian()}" class="btn btn-default text-center" ng-click="toggleMeridian()" ng-disabled="noToggleMeridian()" tabindex="{{::tabindex}}">{{meridian}}</button></td>\n    </tr>\n    <tr class="text-center" ng-show="::showSpinners">\n      <td class="uib-decrement hours"><a ng-click="decrementHours()" ng-class="{disabled: noDecrementHours()}" class="btn btn-link" ng-disabled="noDecrementHours()" tabindex="-1"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n      <td>&nbsp;</td>\n      <td class="uib-decrement minutes"><a ng-click="decrementMinutes()" ng-class="{disabled: noDecrementMinutes()}" class="btn btn-link" ng-disabled="noDecrementMinutes()" tabindex="-1"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n      <td ng-show="showSeconds">&nbsp;</td>\n      <td ng-show="showSeconds" class="uib-decrement seconds"><a ng-click="decrementSeconds()" ng-class="{disabled: noDecrementSeconds()}" class="btn btn-link" ng-disabled="noDecrementSeconds()" tabindex="-1"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n      <td ng-show="showMeridian"></td>\n    </tr>\n  </tbody>\n</table>\n')}]),angular.module("uib/template/typeahead/typeahead-match.html",[]).run(["$templateCache",function(e){e.put("uib/template/typeahead/typeahead-match.html",'<a href\n   tabindex="-1"\n   ng-bind-html="match.label | uibTypeaheadHighlight:query"\n   ng-attr-title="{{match.label}}"></a>\n')}]),angular.module("uib/template/typeahead/typeahead-popup.html",[]).run(["$templateCache",function(e){e.put("uib/template/typeahead/typeahead-popup.html",'<ul class="dropdown-menu" ng-show="isOpen() && !moveInProgress" ng-style="{top: position().top+\'px\', left: position().left+\'px\'}" role="listbox" aria-hidden="{{!isOpen()}}">\n    <li class="uib-typeahead-match" ng-repeat="match in matches track by $index" ng-class="{active: isActive($index) }" ng-mouseenter="selectActive($index)" ng-click="selectMatch($index, $event)" role="option" id="{{::match.id}}">\n        <div uib-typeahead-match index="$index" match="match" query="query" template-url="templateUrl"></div>\n    </li>\n</ul>\n')}]),angular.module("ui.bootstrap.carousel").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibCarouselCss&&angular.element(document).find("head").prepend('<style type="text/css">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style>'),angular.$$uibCarouselCss=!0}),angular.module("ui.bootstrap.datepicker").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibDatepickerCss&&angular.element(document).find("head").prepend('<style type="text/css">.uib-datepicker .uib-title{width:100%;}.uib-day button,.uib-month button,.uib-year button{min-width:100%;}.uib-left,.uib-right{width:100%}</style>'),angular.$$uibDatepickerCss=!0}),angular.module("ui.bootstrap.position").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibPositionCss&&angular.element(document).find("head").prepend('<style type="text/css">.uib-position-measure{display:block !important;visibility:hidden !important;position:absolute !important;top:-9999px !important;left:-9999px !important;}.uib-position-scrollbar-measure{position:absolute !important;top:-9999px !important;width:50px !important;height:50px !important;overflow:scroll !important;}.uib-position-body-scrollbar-measure{overflow:scroll !important;}</style>'),angular.$$uibPositionCss=!0}),angular.module("ui.bootstrap.datepickerPopup").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibDatepickerpopupCss&&angular.element(document).find("head").prepend('<style type="text/css">.uib-datepicker-popup.dropdown-menu{display:block;float:none;margin:0;}.uib-button-bar{padding:10px 9px 2px;}</style>'),angular.$$uibDatepickerpopupCss=!0}),angular.module("ui.bootstrap.tooltip").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibTooltipCss&&angular.element(document).find("head").prepend('<style type="text/css">[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.right-bottom > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.right-bottom > .tooltip-arrow,[uib-popover-popup].popover.top-left > .arrow,[uib-popover-popup].popover.top-right > .arrow,[uib-popover-popup].popover.bottom-left > .arrow,[uib-popover-popup].popover.bottom-right > .arrow,[uib-popover-popup].popover.left-top > .arrow,[uib-popover-popup].popover.left-bottom > .arrow,[uib-popover-popup].popover.right-top > .arrow,[uib-popover-popup].popover.right-bottom > .arrow,[uib-popover-html-popup].popover.top-left > .arrow,[uib-popover-html-popup].popover.top-right > .arrow,[uib-popover-html-popup].popover.bottom-left > .arrow,[uib-popover-html-popup].popover.bottom-right > .arrow,[uib-popover-html-popup].popover.left-top > .arrow,[uib-popover-html-popup].popover.left-bottom > .arrow,[uib-popover-html-popup].popover.right-top > .arrow,[uib-popover-html-popup].popover.right-bottom > .arrow,[uib-popover-template-popup].popover.top-left > .arrow,[uib-popover-template-popup].popover.top-right > .arrow,[uib-popover-template-popup].popover.bottom-left > .arrow,[uib-popover-template-popup].popover.bottom-right > .arrow,[uib-popover-template-popup].popover.left-top > .arrow,[uib-popover-template-popup].popover.left-bottom > .arrow,[uib-popover-template-popup].popover.right-top > .arrow,[uib-popover-template-popup].popover.right-bottom > .arrow{top:auto;bottom:auto;left:auto;right:auto;margin:0;}[uib-popover-popup].popover,[uib-popover-html-popup].popover,[uib-popover-template-popup].popover{display:block !important;}</style>'),angular.$$uibTooltipCss=!0}),angular.module("ui.bootstrap.timepicker").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibTimepickerCss&&angular.element(document).find("head").prepend('<style type="text/css">.uib-time input{width:50px;}</style>'),angular.$$uibTimepickerCss=!0}),angular.module("ui.bootstrap.typeahead").run(function(){!angular.$$csp().noInlineStyle&&!angular.$$uibTypeaheadCss&&angular.element(document).find("head").prepend('<style type="text/css">[uib-typeahead-popup].dropdown-menu{display:block;}</style>'),angular.$$uibTypeaheadCss=!0});
\ No newline at end of file
diff --git a/xos/core/xoslib/static/vendor/xosMcord-slicingVendor.js b/xos/core/xoslib/static/vendor/xosMcord-slicingVendor.js
deleted file mode 100644
index 9d37721..0000000
--- a/xos/core/xoslib/static/vendor/xosMcord-slicingVendor.js
+++ /dev/null
@@ -1,21 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-(function(){function n(n,t){return n.set(t[0],t[1]),n}function t(n,t){return n.add(t),n}function r(n,t,r){var e=r.length;switch(e){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function e(n,t,r,e){for(var i=-1,u=n.length;++i<u;){var o=n[i];t(e,o,r(o),n)}return e}function i(n,t){for(var r=-1,e=n.length,i=-1,u=t.length,o=Array(e+u);++r<e;)o[r]=n[r];for(;++i<u;)o[r++]=t[i];return o}function u(n,t){for(var r=-1,e=n.length;++r<e&&t(n[r],r,n)!==!1;);return n}function o(n,t){for(var r=n.length;r--&&t(n[r],r,n)!==!1;);return n}function a(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return!1;return!0}function f(n,t){for(var r=-1,e=n.length,i=0,u=[];++r<e;){var o=n[r];t(o,r,n)&&(u[i++]=o)}return u}function c(n,t){return!!n.length&&y(n,t,0)>-1}function s(n,t,r){for(var e=-1,i=n.length;++e<i;)if(r(t,n[e]))return!0;return!1}function l(n,t){for(var r=-1,e=n.length,i=Array(e);++r<e;)i[r]=t(n[r],r,n);return i}function h(n,t){for(var r=-1,e=t.length,i=n.length;++r<e;)n[i+r]=t[r];return n}function p(n,t,r,e){var i=-1,u=n.length;for(e&&u&&(r=n[++i]);++i<u;)r=t(r,n[i],i,n);return r}function v(n,t,r,e){var i=n.length;for(e&&i&&(r=n[--i]);i--;)r=t(r,n[i],i,n);return r}function _(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return!0;return!1}function d(n,t,r,e){var i;return r(n,function(n,r,u){if(t(n,r,u))return i=e?r:n,!1}),i}function g(n,t,r){for(var e=n.length,i=r?e:-1;r?i--:++i<e;)if(t(n[i],i,n))return i;return-1}function y(n,t,r){if(t!==t)return U(n,r);for(var e=r-1,i=n.length;++e<i;)if(n[e]===t)return e;return-1}function w(n,t,r,e){for(var i=r-1,u=n.length;++i<u;)if(e(n[i],t))return i;return-1}function b(n,t){var r=n?n.length:0;return r?j(n,t)/r:bn}function m(n,t,r,e,i){return i(n,function(n,i,u){r=e?(e=!1,n):t(r,n,i,u)}),r}function x(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].value;return n}function j(n,t){for(var r,e=-1,i=n.length;++e<i;){var u=t(n[e]);u!==V&&(r=r===V?u:r+u)}return r}function k(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function E(n,t){return l(t,function(t){return[t,n[t]]})}function A(n){return function(t){return n(t)}}function O(n,t){return l(t,function(t){return n[t]})}function I(n,t){for(var r=-1,e=n.length;++r<e&&y(t,n[r],0)>-1;);return r}function C(n,t){for(var r=n.length;r--&&y(t,n[r],0)>-1;);return r}function N(n){return n&&n.Object===Object?n:null}function L(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&e++;return e}function R(n){return xr[n]}function S(n){return jr[n]}function W(n){return"\\"+Ar[n]}function U(n,t,r){for(var e=n.length,i=t+(r?0:-1);r?i--:++i<e;){var u=n[i];if(u!==u)return i}return-1}function D(n){var t=!1;if(null!=n&&"function"!=typeof n.toString)try{t=!!(n+"")}catch(r){}return t}function F(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}function z(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function M(n,t){for(var r=-1,e=n.length,i=0,u=[];++r<e;){var o=n[r];o!==t&&o!==J||(n[r]=J,u[i++]=r)}return u}function B(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function P(n){if(!n||!dr.test(n))return n.length;for(var t=vr.lastIndex=0;vr.test(n);)t++;return t}function $(n){return n.match(vr)}function T(n){return kr[n]}function q(N){function Ct(n){if(ca(n)&&!tl(n)&&!(n instanceof Rt)){if(n instanceof Lt)return n;if(_c.call(n,"__wrapped__"))return tu(n)}return new Lt(n)}function Nt(){}function Lt(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=V}function Rt(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=mn,this.__views__=[]}function St(){var n=new Rt(this.__wrapped__);return n.__actions__=Je(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Je(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Je(this.__views__),n}function Wt(){if(this.__filtered__){var n=new Rt(this);n.__dir__=-1,n.__filtered__=!0}else n=this.clone(),n.__dir__*=-1;return n}function Ut(){var n=this.__wrapped__.value(),t=this.__dir__,r=tl(n),e=t<0,i=r?n.length:0,u=Si(0,i,this.__views__),o=u.start,a=u.end,f=a-o,c=e?a:o-1,s=this.__iteratees__,l=s.length,h=0,p=Bc(f,this.__takeCount__);if(!r||i<Z||i==f&&p==f)return Le(n,this.__actions__);var v=[];n:for(;f--&&h<p;){c+=t;for(var _=-1,d=n[c];++_<l;){var g=s[_],y=g.iteratee,w=g.type,b=y(d);if(w==_n)d=b;else if(!b){if(w==vn)continue n;break n}}v[h++]=d}return v}function Dt(){}function Ft(n,t){return Mt(n,t)&&delete n[t]}function zt(n,t){if(Qc){var r=n[t];return r===Y?V:r}return _c.call(n,t)?n[t]:V}function Mt(n,t){return Qc?n[t]!==V:_c.call(n,t)}function Bt(n,t,r){n[t]=Qc&&r===V?Y:r}function Pt(n){var t=-1,r=n?n.length:0;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function $t(){this.__data__={hash:new Dt,map:Zc?new Zc:[],string:new Dt}}function Tt(n){var t=this.__data__;return qi(n)?Ft("string"==typeof n?t.string:t.hash,n):Zc?t.map["delete"](n):rr(t.map,n)}function qt(n){var t=this.__data__;return qi(n)?zt("string"==typeof n?t.string:t.hash,n):Zc?t.map.get(n):er(t.map,n)}function Vt(n){var t=this.__data__;return qi(n)?Mt("string"==typeof n?t.string:t.hash,n):Zc?t.map.has(n):ir(t.map,n)}function Gt(n,t){var r=this.__data__;return qi(n)?Bt("string"==typeof n?r.string:r.hash,n,t):Zc?r.map.set(n,t):or(r.map,n,t),this}function Zt(n){var t=-1,r=n?n.length:0;for(this.__data__=new Pt;++t<r;)this.push(n[t])}function Kt(n,t){var r=n.__data__;if(qi(t)){var e=r.__data__,i="string"==typeof t?e.string:e.hash;return i[t]===Y}return r.has(t)}function Yt(n){var t=this.__data__;if(qi(n)){var r=t.__data__,e="string"==typeof n?r.string:r.hash;e[n]=Y}else t.set(n,Y)}function Jt(n){var t=-1,r=n?n.length:0;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Qt(){this.__data__={array:[],map:null}}function Ht(n){var t=this.__data__,r=t.array;return r?rr(r,n):t.map["delete"](n)}function Xt(n){var t=this.__data__,r=t.array;return r?er(r,n):t.map.get(n)}function nr(n){var t=this.__data__,r=t.array;return r?ir(r,n):t.map.has(n)}function tr(n,t){var r=this.__data__,e=r.array;e&&(e.length<Z-1?or(e,n,t):(r.array=null,r.map=new Pt(e)));var i=r.map;return i&&i.set(n,t),this}function rr(n,t){var r=ur(n,t);if(r<0)return!1;var e=n.length-1;return r==e?n.pop():Rc.call(n,r,1),!0}function er(n,t){var r=ur(n,t);return r<0?V:n[r][1]}function ir(n,t){return ur(n,t)>-1}function ur(n,t){for(var r=n.length;r--;)if(Go(n[r][0],t))return r;return-1}function or(n,t,r){var e=ur(n,t);e<0?n.push([t,r]):n[e][1]=r}function ar(n,t,r,e){return n===V||Go(n,hc[r])&&!_c.call(e,r)?t:n}function fr(n,t,r){(r===V||Go(n[t],r))&&("number"!=typeof t||r!==V||t in n)||(n[t]=r)}function cr(n,t,r){var e=n[t];_c.call(n,t)&&Go(e,r)&&(r!==V||t in n)||(n[t]=r)}function sr(n,t,r,e){return cs(n,function(n,i,u){t(e,n,r(n),u)}),e}function lr(n,t){return n&&Qe(t,Za(t),n)}function vr(n,t){for(var r=-1,e=null==n,i=t.length,u=Array(i);++r<i;)u[r]=e?V:qa(n,t[r]);return u}function xr(n,t,r){return n===n&&(r!==V&&(n=n<=r?n:r),t!==V&&(n=n>=t?n:t)),n}function jr(n,t,r,e,i,o,a){var f;if(e&&(f=o?e(n,i,o,a):e(n)),f!==V)return f;if(!fa(n))return n;var c=tl(n);if(c){if(f=Ui(n),!t)return Je(n,f)}else{var s=Ri(n),l=s==Cn||s==Nn;if(rl(n))return ze(n,t);if(s==Sn||s==kn||l&&!o){if(D(n))return o?n:{};if(f=Di(l?{}:n),!t)return He(n,lr(f,n))}else{if(!mr[s])return o?n:{};f=Fi(n,s,jr,t)}}a||(a=new Jt);var h=a.get(n);if(h)return h;if(a.set(n,f),!c)var p=r?ji(n):Za(n);return u(p||n,function(i,u){p&&(u=i,i=n[u]),cr(f,u,jr(i,t,r,e,u,n,a))}),f}function kr(n){var t=Za(n),r=t.length;return function(e){if(null==e)return!r;for(var i=r;i--;){var u=t[i],o=n[u],a=e[u];if(a===V&&!(u in Object(e))||!o(a))return!1}return!0}}function Er(n){return fa(n)?Cc(n):{}}function Ar(n,t,r){if("function"!=typeof n)throw new sc(K);return Lc(function(){n.apply(V,r)},t)}function Cr(n,t,r,e){var i=-1,u=c,o=!0,a=n.length,f=[],h=t.length;if(!a)return f;r&&(t=l(t,A(r))),e?(u=s,o=!1):t.length>=Z&&(u=Kt,o=!1,t=new Zt(t));n:for(;++i<a;){var p=n[i],v=r?r(p):p;if(p=e||0!==p?p:0,o&&v===v){for(var _=h;_--;)if(t[_]===v)continue n;f.push(p)}else u(t,v,e)||f.push(p)}return f}function Nr(n,t){var r=!0;return cs(n,function(n,e,i){return r=!!t(n,e,i)}),r}function Rr(n,t,r){for(var e=-1,i=n.length;++e<i;){var u=n[e],o=t(u);if(null!=o&&(a===V?o===o&&!ja(o):r(o,a)))var a=o,f=u}return f}function Sr(n,t,r,e){var i=n.length;for(r=Ca(r),r<0&&(r=-r>i?0:i+r),e=e===V||e>i?i:Ca(e),e<0&&(e+=i),e=r>e?0:Na(e);r<e;)n[r++]=t;return n}function Wr(n,t){var r=[];return cs(n,function(n,e,i){t(n,e,i)&&r.push(n)}),r}function Ur(n,t,r,e,i){var u=-1,o=n.length;for(r||(r=Mi),i||(i=[]);++u<o;){var a=n[u];t>0&&r(a)?t>1?Ur(a,t-1,r,e,i):h(i,a):e||(i[i.length]=a)}return i}function zr(n,t){return n&&ls(n,t,Za)}function Mr(n,t){return n&&hs(n,t,Za)}function Br(n,t){return f(t,function(t){return ua(n[t])})}function Pr(n,t){t=Ti(t,n)?[t]:De(t);for(var r=0,e=t.length;null!=n&&r<e;)n=n[Xi(t[r++])];return r&&r==e?n:V}function $r(n,t,r){var e=t(n);return tl(n)?e:h(e,r(n))}function Tr(n,t){return n>t}function qr(n,t){return _c.call(n,t)||"object"==typeof n&&t in n&&null===Ni(n)}function Vr(n,t){return t in Object(n)}function Gr(n,t,r){return n>=Bc(t,r)&&n<Mc(t,r)}function Zr(n,t,r){for(var e=r?s:c,i=n[0].length,u=n.length,o=u,a=Array(u),f=1/0,h=[];o--;){var p=n[o];o&&t&&(p=l(p,A(t))),f=Bc(p.length,f),a[o]=!r&&(t||i>=120&&p.length>=120)?new Zt(o&&p):V}p=n[0];var v=-1,_=a[0];n:for(;++v<i&&h.length<f;){var d=p[v],g=t?t(d):d;if(d=r||0!==d?d:0,!(_?Kt(_,g):e(h,g,r))){for(o=u;--o;){var y=a[o];if(!(y?Kt(y,g):e(n[o],g,r)))continue n}_&&_.push(g),h.push(d)}}return h}function Kr(n,t,r,e){return zr(n,function(n,i,u){t(e,r(n),i,u)}),e}function Yr(n,t,e){Ti(t,n)||(t=De(t),n=Qi(n,t),t=bu(t));var i=null==n?n:n[Xi(t)];return null==i?V:r(i,n,e)}function Jr(n,t,r,e,i){return n===t||(null==n||null==t||!fa(n)&&!ca(t)?n!==n&&t!==t:Qr(n,t,Jr,r,e,i))}function Qr(n,t,r,e,i,u){var o=tl(n),a=tl(t),f=En,c=En;o||(f=Ri(n),f=f==kn?Sn:f),a||(c=Ri(t),c=c==kn?Sn:c);var s=f==Sn&&!D(n),l=c==Sn&&!D(t),h=f==c;if(h&&!s)return u||(u=new Jt),o||ka(n)?bi(n,t,r,e,i,u):mi(n,t,f,r,e,i,u);if(!(i&cn)){var p=s&&_c.call(n,"__wrapped__"),v=l&&_c.call(t,"__wrapped__");if(p||v){var _=p?n.value():n,d=v?t.value():t;return u||(u=new Jt),r(_,d,e,i,u)}}return!!h&&(u||(u=new Jt),xi(n,t,r,e,i,u))}function Hr(n,t,r,e){var i=r.length,u=i,o=!e;if(null==n)return!u;for(n=Object(n);i--;){var a=r[i];if(o&&a[2]?a[1]!==n[a[0]]:!(a[0]in n))return!1}for(;++i<u;){a=r[i];var f=a[0],c=n[f],s=a[1];if(o&&a[2]){if(c===V&&!(f in n))return!1}else{var l=new Jt;if(e)var h=e(c,s,f,n,t,l);if(!(h===V?Jr(s,c,e,fn|cn,l):h))return!1}}return!0}function Xr(n){return"function"==typeof n?n:null==n?Mf:"object"==typeof n?tl(n)?ue(n[0],n[1]):ie(n):Zf(n)}function ne(n){return zc(Object(n))}function te(n){n=null==n?n:Object(n);var t=[];for(var r in n)t.push(r);return t}function re(n,t){return n<t}function ee(n,t){var r=-1,e=Yo(n)?Array(n.length):[];return cs(n,function(n,i,u){e[++r]=t(n,i,u)}),e}function ie(n){var t=Oi(n);return 1==t.length&&t[0][2]?Ki(t[0][0],t[0][1]):function(r){return r===n||Hr(r,n,t)}}function ue(n,t){return Ti(n)&&Zi(t)?Ki(Xi(n),t):function(r){var e=qa(r,n);return e===V&&e===t?Ga(r,n):Jr(t,e,V,fn|cn)}}function oe(n,t,r,e,i){if(n!==t){if(!tl(t)&&!ka(t))var o=Ka(t);u(o||t,function(u,a){if(o&&(a=u,u=t[a]),fa(u))i||(i=new Jt),ae(n,t,a,r,oe,e,i);else{var f=e?e(n[a],u,a+"",n,t,i):V;f===V&&(f=u),fr(n,a,f)}})}}function ae(n,t,r,e,i,u,o){var a=n[r],f=t[r],c=o.get(f);if(c)return void fr(n,r,c);var s=u?u(a,f,r+"",n,t,o):V,l=s===V;l&&(s=f,tl(f)||ka(f)?tl(a)?s=a:Jo(a)?s=Je(a):(l=!1,s=jr(f,!0)):ya(f)||Zo(f)?Zo(a)?s=Ra(a):!fa(a)||e&&ua(a)?(l=!1,s=jr(f,!0)):s=a:l=!1),o.set(f,s),l&&i(s,f,e,u,o),o["delete"](f),fr(n,r,s)}function fe(n,t){var r=n.length;if(r)return t+=t<0?r:0,Pi(t,r)?n[t]:V}function ce(n,t,r){var e=-1;t=l(t.length?t:[Mf],A(Ai()));var i=ee(n,function(n,r,i){var u=l(t,function(t){return t(n)});return{criteria:u,index:++e,value:n}});return x(i,function(n,t){return Ze(n,t,r)})}function se(n,t){return n=Object(n),p(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function le(n,t){for(var r=-1,e=ki(n),i=e.length,u={};++r<i;){var o=e[r],a=n[o];t(a,o)&&(u[o]=a)}return u}function he(n){return function(t){return null==t?V:t[n]}}function pe(n){return function(t){return Pr(t,n)}}function ve(n,t,r,e){var i=e?w:y,u=-1,o=t.length,a=n;for(r&&(a=l(n,A(r)));++u<o;)for(var f=0,c=t[u],s=r?r(c):c;(f=i(a,s,f,e))>-1;)a!==n&&Rc.call(a,f,1),Rc.call(n,f,1);return n}function _e(n,t){for(var r=n?t.length:0,e=r-1;r--;){var i=t[r];if(r==e||i!==u){var u=i;if(Pi(i))Rc.call(n,i,1);else if(Ti(i,n))delete n[Xi(i)];else{var o=De(i),a=Qi(n,o);null!=a&&delete a[Xi(bu(o))]}}}return n}function de(n,t){return n+Wc($c()*(t-n+1))}function ge(n,t,r,e){for(var i=-1,u=Mc(Sc((t-n)/(r||1)),0),o=Array(u);u--;)o[e?u:++i]=n,n+=r;return o}function ye(n,t){var r="";if(!n||t<1||t>yn)return r;do t%2&&(r+=n),t=Wc(t/2),t&&(n+=n);while(t);return r}function we(n,t,r,e){t=Ti(t,n)?[t]:De(t);for(var i=-1,u=t.length,o=u-1,a=n;null!=a&&++i<u;){var f=Xi(t[i]);if(fa(a)){var c=r;if(i!=o){var s=a[f];c=e?e(s,f,a):V,c===V&&(c=null==s?Pi(t[i+1])?[]:{}:s)}cr(a,f,c)}a=a[f]}return n}function be(n,t,r){var e=-1,i=n.length;t<0&&(t=-t>i?0:i+t),r=r>i?i:r,r<0&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var u=Array(i);++e<i;)u[e]=n[e+t];return u}function me(n,t){var r;return cs(n,function(n,e,i){return r=t(n,e,i),!r}),!!r}function xe(n,t,r){var e=0,i=n?n.length:e;if("number"==typeof t&&t===t&&i<=jn){for(;e<i;){var u=e+i>>>1,o=n[u];null!==o&&!ja(o)&&(r?o<=t:o<t)?e=u+1:i=u}return i}return je(n,t,Mf,r)}function je(n,t,r,e){t=r(t);for(var i=0,u=n?n.length:0,o=t!==t,a=null===t,f=ja(t),c=t===V;i<u;){var s=Wc((i+u)/2),l=r(n[s]),h=l!==V,p=null===l,v=l===l,_=ja(l);if(o)var d=e||v;else d=c?v&&(e||h):a?v&&h&&(e||!p):f?v&&h&&!p&&(e||!_):!p&&!_&&(e?l<=t:l<t);d?i=s+1:u=s}return Bc(u,xn)}function ke(n,t){for(var r=-1,e=n.length,i=0,u=[];++r<e;){var o=n[r],a=t?t(o):o;if(!r||!Go(a,f)){var f=a;u[i++]=0===o?0:o}}return u}function Ee(n){return"number"==typeof n?n:ja(n)?bn:+n}function Ae(n){if("string"==typeof n)return n;if(ja(n))return fs?fs.call(n):"";var t=n+"";return"0"==t&&1/n==-gn?"-0":t}function Oe(n,t,r){var e=-1,i=c,u=n.length,o=!0,a=[],f=a;if(r)o=!1,i=s;else if(u>=Z){var l=t?null:vs(n);if(l)return B(l);o=!1,i=Kt,f=new Zt}else f=t?[]:a;n:for(;++e<u;){var h=n[e],p=t?t(h):h;if(h=r||0!==h?h:0,o&&p===p){for(var v=f.length;v--;)if(f[v]===p)continue n;t&&f.push(p),a.push(h)}else i(f,p,r)||(f!==a&&f.push(p),a.push(h))}return a}function Ie(n,t){t=Ti(t,n)?[t]:De(t),n=Qi(n,t);var r=Xi(bu(t));return!(null!=n&&qr(n,r))||delete n[r]}function Ce(n,t,r,e){return we(n,t,r(Pr(n,t)),e)}function Ne(n,t,r,e){for(var i=n.length,u=e?i:-1;(e?u--:++u<i)&&t(n[u],u,n););return r?be(n,e?0:u,e?u+1:i):be(n,e?u+1:0,e?i:u)}function Le(n,t){var r=n;return r instanceof Rt&&(r=r.value()),p(t,function(n,t){return t.func.apply(t.thisArg,h([n],t.args))},r)}function Re(n,t,r){for(var e=-1,i=n.length;++e<i;)var u=u?h(Cr(u,n[e],t,r),Cr(n[e],u,t,r)):n[e];return u&&u.length?Oe(u,t,r):[]}function Se(n,t,r){for(var e=-1,i=n.length,u=t.length,o={};++e<i;){var a=e<u?t[e]:V;r(o,n[e],a)}return o}function We(n){return Jo(n)?n:[]}function Ue(n){return"function"==typeof n?n:Mf}function De(n){return tl(n)?n:ws(n)}function Fe(n,t,r){var e=n.length;return r=r===V?e:r,!t&&r>=e?n:be(n,t,r)}function ze(n,t){if(t)return n.slice();var r=new n.constructor(n.length);return n.copy(r),r}function Me(n){var t=new n.constructor(n.byteLength);return new kc(t).set(new kc(n)),t}function Be(n,t){var r=t?Me(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.byteLength)}function Pe(t,r,e){var i=r?e(z(t),!0):z(t);return p(i,n,new t.constructor)}function $e(n){var t=new n.constructor(n.source,wt.exec(n));return t.lastIndex=n.lastIndex,t}function Te(n,r,e){var i=r?e(B(n),!0):B(n);return p(i,t,new n.constructor)}function qe(n){return as?Object(as.call(n)):{}}function Ve(n,t){var r=t?Me(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.length)}function Ge(n,t){if(n!==t){var r=n!==V,e=null===n,i=n===n,u=ja(n),o=t!==V,a=null===t,f=t===t,c=ja(t);if(!a&&!c&&!u&&n>t||u&&o&&f&&!a&&!c||e&&o&&f||!r&&f||!i)return 1;if(!e&&!u&&!c&&n<t||c&&r&&i&&!e&&!u||a&&r&&i||!o&&i||!f)return-1}return 0}function Ze(n,t,r){for(var e=-1,i=n.criteria,u=t.criteria,o=i.length,a=r.length;++e<o;){var f=Ge(i[e],u[e]);if(f){if(e>=a)return f;var c=r[e];return f*("desc"==c?-1:1)}}return n.index-t.index}function Ke(n,t,r,e){for(var i=-1,u=n.length,o=r.length,a=-1,f=t.length,c=Mc(u-o,0),s=Array(f+c),l=!e;++a<f;)s[a]=t[a];for(;++i<o;)(l||i<u)&&(s[r[i]]=n[i]);for(;c--;)s[a++]=n[i++];return s}function Ye(n,t,r,e){for(var i=-1,u=n.length,o=-1,a=r.length,f=-1,c=t.length,s=Mc(u-a,0),l=Array(s+c),h=!e;++i<s;)l[i]=n[i];for(var p=i;++f<c;)l[p+f]=t[f];for(;++o<a;)(h||i<u)&&(l[p+r[o]]=n[i++]);return l}function Je(n,t){var r=-1,e=n.length;for(t||(t=Array(e));++r<e;)t[r]=n[r];return t}function Qe(n,t,r,e){r||(r={});for(var i=-1,u=t.length;++i<u;){var o=t[i],a=e?e(r[o],n[o],o,r,n):n[o];cr(r,o,a)}return r}function He(n,t){return Qe(n,Li(n),t)}function Xe(n,t){return function(r,i){var u=tl(r)?e:sr,o=t?t():{};return u(r,n,Ai(i),o)}}function ni(n){return Do(function(t,r){var e=-1,i=r.length,u=i>1?r[i-1]:V,o=i>2?r[2]:V;for(u="function"==typeof u?(i--,u):V,o&&$i(r[0],r[1],o)&&(u=i<3?V:u,i=1),t=Object(t);++e<i;){var a=r[e];a&&n(t,a,e,u)}return t})}function ti(n,t){return function(r,e){if(null==r)return r;if(!Yo(r))return n(r,e);for(var i=r.length,u=t?i:-1,o=Object(r);(t?u--:++u<i)&&e(o[u],u,o)!==!1;);return r}}function ri(n){return function(t,r,e){for(var i=-1,u=Object(t),o=e(t),a=o.length;a--;){var f=o[n?a:++i];if(r(u[f],f,u)===!1)break}return t}}function ei(n,t,r){function e(){var t=this&&this!==Dr&&this instanceof e?u:n;return t.apply(i?r:this,arguments)}var i=t&Q,u=oi(n);return e}function ii(n){return function(t){t=Wa(t);var r=dr.test(t)?$(t):V,e=r?r[0]:t.charAt(0),i=r?Fe(r,1).join(""):t.slice(1);return e[n]()+i}}function ui(n){return function(t){return p(Uf(_f(t).replace(hr,"")),n,"")}}function oi(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=Er(n.prototype),e=n.apply(r,t);return fa(e)?e:r}}function ai(n,t,e){function i(){for(var o=arguments.length,a=Array(o),f=o,c=Ci(i);f--;)a[f]=arguments[f];var s=o<3&&a[0]!==c&&a[o-1]!==c?[]:M(a,c);if(o-=s.length,o<e)return gi(n,t,ci,i.placeholder,V,a,s,V,V,e-o);var l=this&&this!==Dr&&this instanceof i?u:n;return r(l,this,a)}var u=oi(n);return i}function fi(n){return Do(function(t){t=Ur(t,1);var r=t.length,e=r,i=Lt.prototype.thru;for(n&&t.reverse();e--;){var u=t[e];if("function"!=typeof u)throw new sc(K);if(i&&!o&&"wrapper"==Ei(u))var o=new Lt([],(!0))}for(e=o?e:r;++e<r;){u=t[e];var a=Ei(u),f="wrapper"==a?_s(u):V;o=f&&Vi(f[0])&&f[1]==(un|nn|rn|on)&&!f[4].length&&1==f[9]?o[Ei(f[0])].apply(o,f[3]):1==u.length&&Vi(u)?o[a]():o.thru(u)}return function(){var n=arguments,e=n[0];if(o&&1==n.length&&tl(e)&&e.length>=Z)return o.plant(e).value();for(var i=0,u=r?t[i].apply(this,n):e;++i<r;)u=t[i].call(this,u);return u}})}function ci(n,t,r,e,i,u,o,a,f,c){function s(){for(var g=arguments.length,y=g,w=Array(g);y--;)w[y]=arguments[y];if(v)var b=Ci(s),m=L(w,b);if(e&&(w=Ke(w,e,i,v)),u&&(w=Ye(w,u,o,v)),g-=m,v&&g<c){var x=M(w,b);return gi(n,t,ci,s.placeholder,r,w,x,a,f,c-g)}var j=h?r:this,k=p?j[n]:n;return g=w.length,a?w=Hi(w,a):_&&g>1&&w.reverse(),l&&f<g&&(w.length=f),this&&this!==Dr&&this instanceof s&&(k=d||oi(k)),k.apply(j,w)}var l=t&un,h=t&Q,p=t&H,v=t&(nn|tn),_=t&an,d=p?V:oi(n);return s}function si(n,t){return function(r,e){return Kr(r,n,t(e),{})}}function li(n){return function(t,r){var e;if(t===V&&r===V)return 0;if(t!==V&&(e=t),r!==V){if(e===V)return r;"string"==typeof t||"string"==typeof r?(t=Ae(t),r=Ae(r)):(t=Ee(t),r=Ee(r)),e=n(t,r)}return e}}function hi(n){return Do(function(t){return t=1==t.length&&tl(t[0])?l(t[0],A(Ai())):l(Ur(t,1,Bi),A(Ai())),Do(function(e){var i=this;return n(t,function(n){return r(n,i,e)})})})}function pi(n,t){t=t===V?" ":Ae(t);var r=t.length;if(r<2)return r?ye(t,n):t;var e=ye(t,Sc(n/P(t)));return dr.test(t)?Fe($(e),0,n).join(""):e.slice(0,n)}function vi(n,t,e,i){function u(){for(var t=-1,f=arguments.length,c=-1,s=i.length,l=Array(s+f),h=this&&this!==Dr&&this instanceof u?a:n;++c<s;)l[c]=i[c];for(;f--;)l[c++]=arguments[++t];return r(h,o?e:this,l)}var o=t&Q,a=oi(n);return u}function _i(n){return function(t,r,e){return e&&"number"!=typeof e&&$i(t,r,e)&&(r=e=V),t=La(t),t=t===t?t:0,r===V?(r=t,t=0):r=La(r)||0,e=e===V?t<r?1:-1:La(e)||0,ge(t,r,e,n)}}function di(n){return function(t,r){return"string"==typeof t&&"string"==typeof r||(t=La(t),r=La(r)),n(t,r)}}function gi(n,t,r,e,i,u,o,a,f,c){var s=t&nn,l=s?o:V,h=s?V:o,p=s?u:V,v=s?V:u;t|=s?rn:en,t&=~(s?en:rn),t&X||(t&=~(Q|H));var _=[n,t,i,p,l,v,h,a,f,c],d=r.apply(V,_);return Vi(n)&&ys(d,_),d.placeholder=e,d}function yi(n){var t=fc[n];return function(n,r){if(n=La(n),r=Ca(r)){var e=(Wa(n)+"e").split("e"),i=t(e[0]+"e"+(+e[1]+r));return e=(Wa(i)+"e").split("e"),+(e[0]+"e"+(+e[1]-r))}return t(n)}}function wi(n,t,r,e,i,u,o,a){var f=t&H;if(!f&&"function"!=typeof n)throw new sc(K);var c=e?e.length:0;if(c||(t&=~(rn|en),e=i=V),o=o===V?o:Mc(Ca(o),0),a=a===V?a:Ca(a),c-=i?i.length:0,t&en){var s=e,l=i;e=i=V}var h=f?V:_s(n),p=[n,t,r,e,i,s,l,u,o,a];if(h&&Yi(p,h),n=p[0],t=p[1],r=p[2],e=p[3],i=p[4],a=p[9]=null==p[9]?f?0:n.length:Mc(p[9]-c,0),!a&&t&(nn|tn)&&(t&=~(nn|tn)),t&&t!=Q)v=t==nn||t==tn?ai(n,t,a):t!=rn&&t!=(Q|rn)||i.length?ci.apply(V,p):vi(n,t,r,e);else var v=ei(n,t,r);var _=h?ps:ys;return _(v,p)}function bi(n,t,r,e,i,u){var o=-1,a=i&cn,f=i&fn,c=n.length,s=t.length;if(c!=s&&!(a&&s>c))return!1;var l=u.get(n);if(l)return l==t;var h=!0;for(u.set(n,t);++o<c;){var p=n[o],v=t[o];if(e)var d=a?e(v,p,o,t,n,u):e(p,v,o,n,t,u);if(d!==V){if(d)continue;h=!1;break}if(f){if(!_(t,function(n){return p===n||r(p,n,e,i,u)})){h=!1;break}}else if(p!==v&&!r(p,v,e,i,u)){h=!1;break}}return u["delete"](n),h}function mi(n,t,r,e,i,u,o){switch(r){case $n:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;n=n.buffer,t=t.buffer;case Pn:return!(n.byteLength!=t.byteLength||!e(new kc(n),new kc(t)));case An:case On:return+n==+t;case In:return n.name==t.name&&n.message==t.message;case Rn:return n!=+n?t!=+t:n==+t;case Un:case Fn:return n==t+"";case Ln:var a=z;case Dn:var f=u&cn;if(a||(a=B),n.size!=t.size&&!f)return!1;var c=o.get(n);return c?c==t:(u|=fn,o.set(n,t),bi(a(n),a(t),e,i,u,o));case zn:if(as)return as.call(n)==as.call(t)}return!1}function xi(n,t,r,e,i,u){var o=i&cn,a=Za(n),f=a.length,c=Za(t),s=c.length;if(f!=s&&!o)return!1;for(var l=f;l--;){var h=a[l];if(!(o?h in t:qr(t,h)))return!1}var p=u.get(n);if(p)return p==t;var v=!0;u.set(n,t);for(var _=o;++l<f;){h=a[l];var d=n[h],g=t[h];if(e)var y=o?e(g,d,h,t,n,u):e(d,g,h,n,t,u);if(!(y===V?d===g||r(d,g,e,i,u):y)){v=!1;break}_||(_="constructor"==h)}if(v&&!_){var w=n.constructor,b=t.constructor;w!=b&&"constructor"in n&&"constructor"in t&&!("function"==typeof w&&w instanceof w&&"function"==typeof b&&b instanceof b)&&(v=!1)}return u["delete"](n),v}function ji(n){return $r(n,Za,Li)}function ki(n){return $r(n,Ka,gs)}function Ei(n){for(var t=n.name+"",r=ns[t],e=_c.call(ns,t)?r.length:0;e--;){var i=r[e],u=i.func;if(null==u||u==n)return i.name}return t}function Ai(){var n=Ct.iteratee||Bf;return n=n===Bf?Xr:n,arguments.length?n(arguments[0],arguments[1]):n}function Oi(n){for(var t=rf(n),r=t.length;r--;)t[r][2]=Zi(t[r][1]);return t}function Ii(n,t){var r=n[t];return va(r)?r:V}function Ci(n){var t=_c.call(Ct,"placeholder")?Ct:n;return t.placeholder}function Ni(n){return Uc(Object(n))}function Li(n){return Oc(Object(n))}function Ri(n){return yc.call(n)}function Si(n,t,r){for(var e=-1,i=r.length;++e<i;){var u=r[e],o=u.size;switch(u.type){case"drop":n+=o;break;case"dropRight":t-=o;break;case"take":t=Bc(t,n+o);break;case"takeRight":n=Mc(n,t-o)}}return{start:n,end:t}}function Wi(n,t,r){t=Ti(t,n)?[t]:De(t);for(var e,i=-1,u=t.length;++i<u;){var o=Xi(t[i]);if(!(e=null!=n&&r(n,o)))break;n=n[o]}if(e)return e;var u=n?n.length:0;return!!u&&aa(u)&&Pi(o,u)&&(tl(n)||xa(n)||Zo(n))}function Ui(n){var t=n.length,r=n.constructor(t);return t&&"string"==typeof n[0]&&_c.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Di(n){return"function"!=typeof n.constructor||Gi(n)?{}:Er(Ni(n))}function Fi(n,t,r,e){var i=n.constructor;switch(t){case Pn:return Me(n);case An:case On:return new i((+n));case $n:return Be(n,e);case Tn:case qn:case Vn:case Gn:case Zn:case Kn:case Yn:case Jn:case Qn:return Ve(n,e);case Ln:return Pe(n,e,r);case Rn:case Fn:return new i(n);case Un:return $e(n);case Dn:return Te(n,e,r);case zn:return qe(n)}}function zi(n){var t=n?n.length:V;return aa(t)&&(tl(n)||xa(n)||Zo(n))?k(t,String):null}function Mi(n){return Jo(n)&&(tl(n)||Zo(n))}function Bi(n){return tl(n)&&!(2==n.length&&!ua(n[0]))}function Pi(n,t){return t=null==t?yn:t,!!t&&("number"==typeof n||Et.test(n))&&n>-1&&n%1==0&&n<t}function $i(n,t,r){if(!fa(r))return!1;var e=typeof t;return!!("number"==e?Yo(r)&&Pi(t,r.length):"string"==e&&t in r)&&Go(r[t],n)}function Ti(n,t){if(tl(n))return!1;var r=typeof n;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=n&&!ja(n))||(ct.test(n)||!ft.test(n)||null!=t&&n in Object(t))}function qi(n){var t=typeof n;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==n:null===n}function Vi(n){var t=Ei(n),r=Ct[t];if("function"!=typeof r||!(t in Rt.prototype))return!1;if(n===r)return!0;var e=_s(r);return!!e&&n===e[0]}function Gi(n){var t=n&&n.constructor,r="function"==typeof t&&t.prototype||hc;return n===r}function Zi(n){return n===n&&!fa(n)}function Ki(n,t){return function(r){return null!=r&&(r[n]===t&&(t!==V||n in Object(r)))}}function Yi(n,t){var r=n[1],e=t[1],i=r|e,u=i<(Q|H|un),o=e==un&&r==nn||e==un&&r==on&&n[7].length<=t[8]||e==(un|on)&&t[7].length<=t[8]&&r==nn;if(!u&&!o)return n;e&Q&&(n[2]=t[2],i|=r&Q?0:X);var a=t[3];if(a){var f=n[3];n[3]=f?Ke(f,a,t[4]):a,n[4]=f?M(n[3],J):t[4]}return a=t[5],a&&(f=n[5],n[5]=f?Ye(f,a,t[6]):a,n[6]=f?M(n[5],J):t[6]),a=t[7],a&&(n[7]=a),e&un&&(n[8]=null==n[8]?t[8]:Bc(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=i,n}function Ji(n,t,r,e,i,u){return fa(n)&&fa(t)&&oe(n,t,V,Ji,u.set(t,n)),n}function Qi(n,t){return 1==t.length?n:Pr(n,be(t,0,-1))}function Hi(n,t){for(var r=n.length,e=Bc(t.length,r),i=Je(n);e--;){var u=t[e];n[e]=Pi(u,r)?i[u]:V}return n}function Xi(n){if("string"==typeof n||ja(n))return n;var t=n+"";return"0"==t&&1/n==-gn?"-0":t}function nu(n){if(null!=n){try{return vc.call(n)}catch(t){}try{return n+""}catch(t){}}return""}function tu(n){if(n instanceof Rt)return n.clone();var t=new Lt(n.__wrapped__,n.__chain__);return t.__actions__=Je(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function ru(n,t,r){t=(r?$i(n,t,r):t===V)?1:Mc(Ca(t),0);var e=n?n.length:0;if(!e||t<1)return[];for(var i=0,u=0,o=Array(Sc(e/t));i<e;)o[u++]=be(n,i,i+=t);return o}function eu(n){for(var t=-1,r=n?n.length:0,e=0,i=[];++t<r;){var u=n[t];u&&(i[e++]=u)}return i}function iu(){var n=arguments.length,t=Po(arguments[0]);if(n<2)return n?Je(t):[];for(var r=Array(n-1);n--;)r[n-1]=arguments[n];return i(t,Ur(r,1))}function uu(n,t,r){var e=n?n.length:0;return e?(t=r||t===V?1:Ca(t),be(n,t<0?0:t,e)):[]}function ou(n,t,r){var e=n?n.length:0;return e?(t=r||t===V?1:Ca(t),t=e-t,be(n,0,t<0?0:t)):[]}function au(n,t){return n&&n.length?Ne(n,Ai(t,3),!0,!0):[]}function fu(n,t){return n&&n.length?Ne(n,Ai(t,3),!0):[]}function cu(n,t,r,e){var i=n?n.length:0;return i?(r&&"number"!=typeof r&&$i(n,t,r)&&(r=0,e=i),Sr(n,t,r,e)):[]}function su(n,t){return n&&n.length?g(n,Ai(t,3)):-1}function lu(n,t){return n&&n.length?g(n,Ai(t,3),!0):-1}function hu(n){var t=n?n.length:0;return t?Ur(n,1):[]}function pu(n){var t=n?n.length:0;return t?Ur(n,gn):[]}function vu(n,t){var r=n?n.length:0;return r?(t=t===V?1:Ca(t),Ur(n,t)):[]}function _u(n){for(var t=-1,r=n?n.length:0,e={};++t<r;){var i=n[t];e[i[0]]=i[1]}return e}function du(n){return n&&n.length?n[0]:V}function gu(n,t,r){var e=n?n.length:0;return e?(r=Ca(r),r<0&&(r=Mc(e+r,0)),y(n,t,r)):-1}function yu(n){return ou(n,1)}function wu(n,t){return n?Fc.call(n,t):""}function bu(n){var t=n?n.length:0;return t?n[t-1]:V}function mu(n,t,r){var e=n?n.length:0;if(!e)return-1;var i=e;if(r!==V&&(i=Ca(r),i=(i<0?Mc(e+i,0):Bc(i,e-1))+1),t!==t)return U(n,i,!0);for(;i--;)if(n[i]===t)return i;return-1}function xu(n,t){return n&&n.length?fe(n,Ca(t)):V}function ju(n,t){return n&&n.length&&t&&t.length?ve(n,t):n}function ku(n,t,r){return n&&n.length&&t&&t.length?ve(n,t,Ai(r)):n}function Eu(n,t,r){return n&&n.length&&t&&t.length?ve(n,t,V,r):n}function Au(n,t){var r=[];if(!n||!n.length)return r;var e=-1,i=[],u=n.length;for(t=Ai(t,3);++e<u;){var o=n[e];t(o,e,n)&&(r.push(o),i.push(e))}return _e(n,i),r}function Ou(n){return n?qc.call(n):n}function Iu(n,t,r){var e=n?n.length:0;return e?(r&&"number"!=typeof r&&$i(n,t,r)?(t=0,r=e):(t=null==t?0:Ca(t),r=r===V?e:Ca(r)),be(n,t,r)):[]}function Cu(n,t){return xe(n,t)}function Nu(n,t,r){return je(n,t,Ai(r))}function Lu(n,t){var r=n?n.length:0;if(r){var e=xe(n,t);if(e<r&&Go(n[e],t))return e}return-1}function Ru(n,t){return xe(n,t,!0)}function Su(n,t,r){return je(n,t,Ai(r),!0)}function Wu(n,t){var r=n?n.length:0;if(r){var e=xe(n,t,!0)-1;if(Go(n[e],t))return e}return-1}function Uu(n){return n&&n.length?ke(n):[]}function Du(n,t){return n&&n.length?ke(n,Ai(t)):[]}function Fu(n){return uu(n,1)}function zu(n,t,r){return n&&n.length?(t=r||t===V?1:Ca(t),be(n,0,t<0?0:t)):[]}function Mu(n,t,r){var e=n?n.length:0;return e?(t=r||t===V?1:Ca(t),t=e-t,be(n,t<0?0:t,e)):[]}function Bu(n,t){return n&&n.length?Ne(n,Ai(t,3),!1,!0):[]}function Pu(n,t){return n&&n.length?Ne(n,Ai(t,3)):[]}function $u(n){return n&&n.length?Oe(n):[]}function Tu(n,t){return n&&n.length?Oe(n,Ai(t)):[]}function qu(n,t){return n&&n.length?Oe(n,V,t):[]}function Vu(n){if(!n||!n.length)return[];var t=0;return n=f(n,function(n){if(Jo(n))return t=Mc(n.length,t),!0}),k(t,function(t){return l(n,he(t))})}function Gu(n,t){if(!n||!n.length)return[];var e=Vu(n);return null==t?e:l(e,function(n){return r(t,V,n)})}function Zu(n,t){return Se(n||[],t||[],cr)}function Ku(n,t){return Se(n||[],t||[],we)}function Yu(n){var t=Ct(n);return t.__chain__=!0,t}function Ju(n,t){return t(n),n}function Qu(n,t){return t(n)}function Hu(){return Yu(this)}function Xu(){return new Lt(this.value(),this.__chain__)}function no(){this.__values__===V&&(this.__values__=Ia(this.value()));var n=this.__index__>=this.__values__.length,t=n?V:this.__values__[this.__index__++];return{done:n,value:t}}function to(){return this}function ro(n){for(var t,r=this;r instanceof Nt;){var e=tu(r);e.__index__=0,e.__values__=V,t?i.__wrapped__=e:t=e;var i=e;r=r.__wrapped__}return i.__wrapped__=n,t}function eo(){var n=this.__wrapped__;if(n instanceof Rt){var t=n;return this.__actions__.length&&(t=new Rt(this)),t=t.reverse(),t.__actions__.push({func:Qu,args:[Ou],thisArg:V}),new Lt(t,this.__chain__)}return this.thru(Ou)}function io(){return Le(this.__wrapped__,this.__actions__)}function uo(n,t,r){var e=tl(n)?a:Nr;return r&&$i(n,t,r)&&(t=V),e(n,Ai(t,3))}function oo(n,t){var r=tl(n)?f:Wr;return r(n,Ai(t,3))}function ao(n,t){if(t=Ai(t,3),tl(n)){var r=g(n,t);return r>-1?n[r]:V}return d(n,t,cs)}function fo(n,t){if(t=Ai(t,3),tl(n)){var r=g(n,t,!0);return r>-1?n[r]:V}return d(n,t,ss)}function co(n,t){return Ur(_o(n,t),1)}function so(n,t){return Ur(_o(n,t),gn)}function lo(n,t,r){return r=r===V?1:Ca(r),Ur(_o(n,t),r)}function ho(n,t){return"function"==typeof t&&tl(n)?u(n,t):cs(n,Ai(t))}function po(n,t){return"function"==typeof t&&tl(n)?o(n,t):ss(n,Ai(t))}function vo(n,t,r,e){n=Yo(n)?n:cf(n),r=r&&!e?Ca(r):0;var i=n.length;return r<0&&(r=Mc(i+r,0)),xa(n)?r<=i&&n.indexOf(t,r)>-1:!!i&&y(n,t,r)>-1;
-}function _o(n,t){var r=tl(n)?l:ee;return r(n,Ai(t,3))}function go(n,t,r,e){return null==n?[]:(tl(t)||(t=null==t?[]:[t]),r=e?V:r,tl(r)||(r=null==r?[]:[r]),ce(n,t,r))}function yo(n,t,r){var e=tl(n)?p:m,i=arguments.length<3;return e(n,Ai(t,4),r,i,cs)}function wo(n,t,r){var e=tl(n)?v:m,i=arguments.length<3;return e(n,Ai(t,4),r,i,ss)}function bo(n,t){var r=tl(n)?f:Wr;return t=Ai(t,3),r(n,function(n,r,e){return!t(n,r,e)})}function mo(n){var t=Yo(n)?n:cf(n),r=t.length;return r>0?t[de(0,r-1)]:V}function xo(n,t,r){var e=-1,i=Ia(n),u=i.length,o=u-1;for(t=(r?$i(n,t,r):t===V)?1:xr(Ca(t),0,u);++e<t;){var a=de(e,o),f=i[a];i[a]=i[e],i[e]=f}return i.length=t,i}function jo(n){return xo(n,mn)}function ko(n){if(null==n)return 0;if(Yo(n)){var t=n.length;return t&&xa(n)?P(n):t}if(ca(n)){var r=Ri(n);if(r==Ln||r==Dn)return n.size}return Za(n).length}function Eo(n,t,r){var e=tl(n)?_:me;return r&&$i(n,t,r)&&(t=V),e(n,Ai(t,3))}function Ao(n,t){if("function"!=typeof t)throw new sc(K);return n=Ca(n),function(){if(--n<1)return t.apply(this,arguments)}}function Oo(n,t,r){return t=r?V:t,t=n&&null==t?n.length:t,wi(n,un,V,V,V,V,t)}function Io(n,t){var r;if("function"!=typeof t)throw new sc(K);return n=Ca(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=V),r}}function Co(n,t,r){t=r?V:t;var e=wi(n,nn,V,V,V,V,V,t);return e.placeholder=Co.placeholder,e}function No(n,t,r){t=r?V:t;var e=wi(n,tn,V,V,V,V,V,t);return e.placeholder=No.placeholder,e}function Lo(n,t,r){function e(t){var r=h,e=p;return h=p=V,y=t,_=n.apply(e,r)}function i(n){return y=n,d=Lc(a,t),w?e(n):_}function u(n){var r=n-g,e=n-y,i=t-r;return b?Bc(i,v-e):i}function o(n){var r=n-g,e=n-y;return!g||r>=t||r<0||b&&e>=v}function a(){var n=qs();return o(n)?f(n):void(d=Lc(a,u(n)))}function f(n){return Ec(d),d=V,m&&h?e(n):(h=p=V,_)}function c(){d!==V&&Ec(d),g=y=0,h=p=d=V}function s(){return d===V?_:f(qs())}function l(){var n=qs(),r=o(n);if(h=arguments,p=this,g=n,r){if(d===V)return i(g);if(b)return Ec(d),d=Lc(a,t),e(g)}return d===V&&(d=Lc(a,t)),_}var h,p,v,_,d,g=0,y=0,w=!1,b=!1,m=!0;if("function"!=typeof n)throw new sc(K);return t=La(t)||0,fa(r)&&(w=!!r.leading,b="maxWait"in r,v=b?Mc(La(r.maxWait)||0,t):v,m="trailing"in r?!!r.trailing:m),l.cancel=c,l.flush=s,l}function Ro(n){return wi(n,an)}function So(n,t){if("function"!=typeof n||t&&"function"!=typeof t)throw new sc(K);var r=function(){var e=arguments,i=t?t.apply(this,e):e[0],u=r.cache;if(u.has(i))return u.get(i);var o=n.apply(this,e);return r.cache=u.set(i,o),o};return r.cache=new(So.Cache||Pt),r}function Wo(n){if("function"!=typeof n)throw new sc(K);return function(){return!n.apply(this,arguments)}}function Uo(n){return Io(2,n)}function Do(n,t){if("function"!=typeof n)throw new sc(K);return t=Mc(t===V?n.length-1:Ca(t),0),function(){for(var e=arguments,i=-1,u=Mc(e.length-t,0),o=Array(u);++i<u;)o[i]=e[t+i];switch(t){case 0:return n.call(this,o);case 1:return n.call(this,e[0],o);case 2:return n.call(this,e[0],e[1],o)}var a=Array(t+1);for(i=-1;++i<t;)a[i]=e[i];return a[t]=o,r(n,this,a)}}function Fo(n,t){if("function"!=typeof n)throw new sc(K);return t=t===V?0:Mc(Ca(t),0),Do(function(e){var i=e[t],u=Fe(e,0,t);return i&&h(u,i),r(n,this,u)})}function zo(n,t,r){var e=!0,i=!0;if("function"!=typeof n)throw new sc(K);return fa(r)&&(e="leading"in r?!!r.leading:e,i="trailing"in r?!!r.trailing:i),Lo(n,t,{leading:e,maxWait:t,trailing:i})}function Mo(n){return Oo(n,1)}function Bo(n,t){return t=null==t?Mf:t,Js(t,n)}function Po(){if(!arguments.length)return[];var n=arguments[0];return tl(n)?n:[n]}function $o(n){return jr(n,!1,!0)}function To(n,t){return jr(n,!1,!0,t)}function qo(n){return jr(n,!0,!0)}function Vo(n,t){return jr(n,!0,!0,t)}function Go(n,t){return n===t||n!==n&&t!==t}function Zo(n){return Jo(n)&&_c.call(n,"callee")&&(!Nc.call(n,"callee")||yc.call(n)==kn)}function Ko(n){return ca(n)&&yc.call(n)==Pn}function Yo(n){return null!=n&&aa(ds(n))&&!ua(n)}function Jo(n){return ca(n)&&Yo(n)}function Qo(n){return n===!0||n===!1||ca(n)&&yc.call(n)==An}function Ho(n){return ca(n)&&yc.call(n)==On}function Xo(n){return!!n&&1===n.nodeType&&ca(n)&&!ya(n)}function na(n){if(Yo(n)&&(tl(n)||xa(n)||ua(n.splice)||Zo(n)||rl(n)))return!n.length;if(ca(n)){var t=Ri(n);if(t==Ln||t==Dn)return!n.size}for(var r in n)if(_c.call(n,r))return!1;return!(Xc&&Za(n).length)}function ta(n,t){return Jr(n,t)}function ra(n,t,r){r="function"==typeof r?r:V;var e=r?r(n,t):V;return e===V?Jr(n,t,r):!!e}function ea(n){return!!ca(n)&&(yc.call(n)==In||"string"==typeof n.message&&"string"==typeof n.name)}function ia(n){return"number"==typeof n&&Dc(n)}function ua(n){var t=fa(n)?yc.call(n):"";return t==Cn||t==Nn}function oa(n){return"number"==typeof n&&n==Ca(n)}function aa(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=yn}function fa(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function ca(n){return!!n&&"object"==typeof n}function sa(n){return ca(n)&&Ri(n)==Ln}function la(n,t){return n===t||Hr(n,t,Oi(t))}function ha(n,t,r){return r="function"==typeof r?r:V,Hr(n,t,Oi(t),r)}function pa(n){return ga(n)&&n!=+n}function va(n){if(!fa(n))return!1;var t=ua(n)||D(n)?bc:jt;return t.test(nu(n))}function _a(n){return null===n}function da(n){return null==n}function ga(n){return"number"==typeof n||ca(n)&&yc.call(n)==Rn}function ya(n){if(!ca(n)||yc.call(n)!=Sn||D(n))return!1;var t=Ni(n);if(null===t)return!0;var r=_c.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&vc.call(r)==gc}function wa(n){return fa(n)&&yc.call(n)==Un}function ba(n){return oa(n)&&n>=-yn&&n<=yn}function ma(n){return ca(n)&&Ri(n)==Dn}function xa(n){return"string"==typeof n||!tl(n)&&ca(n)&&yc.call(n)==Fn}function ja(n){return"symbol"==typeof n||ca(n)&&yc.call(n)==zn}function ka(n){return ca(n)&&aa(n.length)&&!!br[yc.call(n)]}function Ea(n){return n===V}function Aa(n){return ca(n)&&Ri(n)==Mn}function Oa(n){return ca(n)&&yc.call(n)==Bn}function Ia(n){if(!n)return[];if(Yo(n))return xa(n)?$(n):Je(n);if(Ic&&n[Ic])return F(n[Ic]());var t=Ri(n),r=t==Ln?z:t==Dn?B:cf;return r(n)}function Ca(n){if(!n)return 0===n?n:0;if(n=La(n),n===gn||n===-gn){var t=n<0?-1:1;return t*wn}var r=n%1;return n===n?r?n-r:n:0}function Na(n){return n?xr(Ca(n),0,mn):0}function La(n){if("number"==typeof n)return n;if(ja(n))return bn;if(fa(n)){var t=ua(n.valueOf)?n.valueOf():n;n=fa(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=n.replace(pt,"");var r=xt.test(n);return r||kt.test(n)?Ir(n.slice(2),r?2:8):mt.test(n)?bn:+n}function Ra(n){return Qe(n,Ka(n))}function Sa(n){return xr(Ca(n),-yn,yn)}function Wa(n){return null==n?"":Ae(n)}function Ua(n,t){var r=Er(n);return t?lr(r,t):r}function Da(n,t){return d(n,Ai(t,3),zr,!0)}function Fa(n,t){return d(n,Ai(t,3),Mr,!0)}function za(n,t){return null==n?n:ls(n,Ai(t),Ka)}function Ma(n,t){return null==n?n:hs(n,Ai(t),Ka)}function Ba(n,t){return n&&zr(n,Ai(t))}function Pa(n,t){return n&&Mr(n,Ai(t))}function $a(n){return null==n?[]:Br(n,Za(n))}function Ta(n){return null==n?[]:Br(n,Ka(n))}function qa(n,t,r){var e=null==n?V:Pr(n,t);return e===V?r:e}function Va(n,t){return null!=n&&Wi(n,t,qr)}function Ga(n,t){return null!=n&&Wi(n,t,Vr)}function Za(n){var t=Gi(n);if(!t&&!Yo(n))return ne(n);var r=zi(n),e=!!r,i=r||[],u=i.length;for(var o in n)!qr(n,o)||e&&("length"==o||Pi(o,u))||t&&"constructor"==o||i.push(o);return i}function Ka(n){for(var t=-1,r=Gi(n),e=te(n),i=e.length,u=zi(n),o=!!u,a=u||[],f=a.length;++t<i;){var c=e[t];o&&("length"==c||Pi(c,f))||"constructor"==c&&(r||!_c.call(n,c))||a.push(c)}return a}function Ya(n,t){var r={};return t=Ai(t,3),zr(n,function(n,e,i){r[t(n,e,i)]=n}),r}function Ja(n,t){var r={};return t=Ai(t,3),zr(n,function(n,e,i){r[e]=t(n,e,i)}),r}function Qa(n,t){return t=Ai(t),le(n,function(n,r){return!t(n,r)})}function Ha(n,t){return null==n?{}:le(n,Ai(t))}function Xa(n,t,r){t=Ti(t,n)?[t]:De(t);var e=-1,i=t.length;for(i||(n=V,i=1);++e<i;){var u=null==n?V:n[Xi(t[e])];u===V&&(e=i,u=r),n=ua(u)?u.call(n):u}return n}function nf(n,t,r){return null==n?n:we(n,t,r)}function tf(n,t,r,e){return e="function"==typeof e?e:V,null==n?n:we(n,t,r,e)}function rf(n){return E(n,Za(n))}function ef(n){return E(n,Ka(n))}function uf(n,t,r){var e=tl(n)||ka(n);if(t=Ai(t,4),null==r)if(e||fa(n)){var i=n.constructor;r=e?tl(n)?new i:[]:ua(i)?Er(Ni(n)):{}}else r={};return(e?u:zr)(n,function(n,e,i){return t(r,n,e,i)}),r}function of(n,t){return null==n||Ie(n,t)}function af(n,t,r){return null==n?n:Ce(n,t,Ue(r))}function ff(n,t,r,e){return e="function"==typeof e?e:V,null==n?n:Ce(n,t,Ue(r),e)}function cf(n){return n?O(n,Za(n)):[]}function sf(n){return null==n?[]:O(n,Ka(n))}function lf(n,t,r){return r===V&&(r=t,t=V),r!==V&&(r=La(r),r=r===r?r:0),t!==V&&(t=La(t),t=t===t?t:0),xr(La(n),t,r)}function hf(n,t,r){return t=La(t)||0,r===V?(r=t,t=0):r=La(r)||0,n=La(n),Gr(n,t,r)}function pf(n,t,r){if(r&&"boolean"!=typeof r&&$i(n,t,r)&&(t=r=V),r===V&&("boolean"==typeof t?(r=t,t=V):"boolean"==typeof n&&(r=n,n=V)),n===V&&t===V?(n=0,t=1):(n=La(n)||0,t===V?(t=n,n=0):t=La(t)||0),n>t){var e=n;n=t,t=e}if(r||n%1||t%1){var i=$c();return Bc(n+i*(t-n+Or("1e-"+((i+"").length-1))),t)}return de(n,t)}function vf(n){return Al(Wa(n).toLowerCase())}function _f(n){return n=Wa(n),n&&n.replace(At,R).replace(pr,"")}function df(n,t,r){n=Wa(n),t=Ae(t);var e=n.length;return r=r===V?e:xr(Ca(r),0,e),r-=t.length,r>=0&&n.indexOf(t,r)==r}function gf(n){return n=Wa(n),n&&it.test(n)?n.replace(rt,S):n}function yf(n){return n=Wa(n),n&&ht.test(n)?n.replace(lt,"\\$&"):n}function wf(n,t,r){n=Wa(n),t=Ca(t);var e=t?P(n):0;if(!t||e>=t)return n;var i=(t-e)/2;return pi(Wc(i),r)+n+pi(Sc(i),r)}function bf(n,t,r){n=Wa(n),t=Ca(t);var e=t?P(n):0;return t&&e<t?n+pi(t-e,r):n}function mf(n,t,r){n=Wa(n),t=Ca(t);var e=t?P(n):0;return t&&e<t?pi(t-e,r)+n:n}function xf(n,t,r){return r||null==t?t=0:t&&(t=+t),n=Wa(n).replace(pt,""),Pc(n,t||(bt.test(n)?16:10))}function jf(n,t,r){return t=(r?$i(n,t,r):t===V)?1:Ca(t),ye(Wa(n),t)}function kf(){var n=arguments,t=Wa(n[0]);return n.length<3?t:Tc.call(t,n[1],n[2])}function Ef(n,t,r){return r&&"number"!=typeof r&&$i(n,t,r)&&(t=r=V),(r=r===V?mn:r>>>0)?(n=Wa(n),n&&("string"==typeof t||null!=t&&!wa(t))&&(t=Ae(t),""==t&&dr.test(n))?Fe($(n),0,r):Vc.call(n,t,r)):[]}function Af(n,t,r){return n=Wa(n),r=xr(Ca(r),0,n.length),n.lastIndexOf(Ae(t),r)==r}function Of(n,t,r){var e=Ct.templateSettings;r&&$i(n,t,r)&&(t=V),n=Wa(n),t=al({},t,e,ar);var i,u,o=al({},t.imports,e.imports,ar),a=Za(o),f=O(o,a),c=0,s=t.interpolate||Ot,l="__p += '",h=cc((t.escape||Ot).source+"|"+s.source+"|"+(s===at?yt:Ot).source+"|"+(t.evaluate||Ot).source+"|$","g"),p="//# sourceURL="+("sourceURL"in t?t.sourceURL:"lodash.templateSources["+ ++wr+"]")+"\n";n.replace(h,function(t,r,e,o,a,f){return e||(e=o),l+=n.slice(c,f).replace(It,W),r&&(i=!0,l+="' +\n__e("+r+") +\n'"),a&&(u=!0,l+="';\n"+a+";\n__p += '"),e&&(l+="' +\n((__t = ("+e+")) == null ? '' : __t) +\n'"),c=f+t.length,t}),l+="';\n";var v=t.variable;v||(l="with (obj) {\n"+l+"\n}\n"),l=(u?l.replace(Hn,""):l).replace(Xn,"$1").replace(nt,"$1;"),l="function("+(v||"obj")+") {\n"+(v?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(u?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+l+"return __p\n}";var _=Ol(function(){return Function(a,p+"return "+l).apply(V,f)});if(_.source=l,ea(_))throw _;return _}function If(n){return Wa(n).toLowerCase()}function Cf(n){return Wa(n).toUpperCase()}function Nf(n,t,r){if(n=Wa(n),n&&(r||t===V))return n.replace(pt,"");if(!n||!(t=Ae(t)))return n;var e=$(n),i=$(t),u=I(e,i),o=C(e,i)+1;return Fe(e,u,o).join("")}function Lf(n,t,r){if(n=Wa(n),n&&(r||t===V))return n.replace(_t,"");if(!n||!(t=Ae(t)))return n;var e=$(n),i=C(e,$(t))+1;return Fe(e,0,i).join("")}function Rf(n,t,r){if(n=Wa(n),n&&(r||t===V))return n.replace(vt,"");if(!n||!(t=Ae(t)))return n;var e=$(n),i=I(e,$(t));return Fe(e,i).join("")}function Sf(n,t){var r=sn,e=ln;if(fa(t)){var i="separator"in t?t.separator:i;r="length"in t?Ca(t.length):r,e="omission"in t?Ae(t.omission):e}n=Wa(n);var u=n.length;if(dr.test(n)){var o=$(n);u=o.length}if(r>=u)return n;var a=r-P(e);if(a<1)return e;var f=o?Fe(o,0,a).join(""):n.slice(0,a);if(i===V)return f+e;if(o&&(a+=f.length-a),wa(i)){if(n.slice(a).search(i)){var c,s=f;for(i.global||(i=cc(i.source,Wa(wt.exec(i))+"g")),i.lastIndex=0;c=i.exec(s);)var l=c.index;f=f.slice(0,l===V?a:l)}}else if(n.indexOf(Ae(i),a)!=a){var h=f.lastIndexOf(i);h>-1&&(f=f.slice(0,h))}return f+e}function Wf(n){return n=Wa(n),n&&et.test(n)?n.replace(tt,T):n}function Uf(n,t,r){return n=Wa(n),t=r?V:t,t===V&&(t=gr.test(n)?_r:dt),n.match(t)||[]}function Df(n){var t=n?n.length:0,e=Ai();return n=t?l(n,function(n){if("function"!=typeof n[1])throw new sc(K);return[e(n[0]),n[1]]}):[],Do(function(e){for(var i=-1;++i<t;){var u=n[i];if(r(u[0],this,e))return r(u[1],this,e)}})}function Ff(n){return kr(jr(n,!0))}function zf(n){return function(){return n}}function Mf(n){return n}function Bf(n){return Xr("function"==typeof n?n:jr(n,!0))}function Pf(n){return ie(jr(n,!0))}function $f(n,t){return ue(n,jr(t,!0))}function Tf(n,t,r){var e=Za(t),i=Br(t,e);null!=r||fa(t)&&(i.length||!e.length)||(r=t,t=n,n=this,i=Br(t,Za(t)));var o=!(fa(r)&&"chain"in r&&!r.chain),a=ua(n);return u(i,function(r){var e=t[r];n[r]=e,a&&(n.prototype[r]=function(){var t=this.__chain__;if(o||t){var r=n(this.__wrapped__),i=r.__actions__=Je(this.__actions__);return i.push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,h([this.value()],arguments))})}),n}function qf(){return Dr._===this&&(Dr._=wc),this}function Vf(){}function Gf(n){return n=Ca(n),Do(function(t){return fe(t,n)})}function Zf(n){return Ti(n)?he(Xi(n)):pe(n)}function Kf(n){return function(t){return null==n?V:Pr(n,t)}}function Yf(n,t){if(n=Ca(n),n<1||n>yn)return[];var r=mn,e=Bc(n,mn);t=Ai(t),n-=mn;for(var i=k(e,t);++r<n;)t(r);return i}function Jf(n){return tl(n)?l(n,Xi):ja(n)?[n]:Je(ws(n))}function Qf(n){var t=++dc;return Wa(n)+t}function Hf(n){return n&&n.length?Rr(n,Mf,Tr):V}function Xf(n,t){return n&&n.length?Rr(n,Ai(t),Tr):V}function nc(n){return b(n,Mf)}function tc(n,t){return b(n,Ai(t))}function rc(n){return n&&n.length?Rr(n,Mf,re):V}function ec(n,t){return n&&n.length?Rr(n,Ai(t),re):V}function ic(n){return n&&n.length?j(n,Mf):0}function uc(n,t){return n&&n.length?j(n,Ai(t)):0}N=N?Fr.defaults({},N,Fr.pick(Dr,yr)):Dr;var oc=N.Date,ac=N.Error,fc=N.Math,cc=N.RegExp,sc=N.TypeError,lc=N.Array.prototype,hc=N.Object.prototype,pc=N.String.prototype,vc=N.Function.prototype.toString,_c=hc.hasOwnProperty,dc=0,gc=vc.call(Object),yc=hc.toString,wc=Dr._,bc=cc("^"+vc.call(_c).replace(lt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),mc=Lr?N.Buffer:V,xc=N.Reflect,jc=N.Symbol,kc=N.Uint8Array,Ec=N.clearTimeout,Ac=xc?xc.enumerate:V,Oc=Object.getOwnPropertySymbols,Ic="symbol"==typeof(Ic=jc&&jc.iterator)?Ic:V,Cc=Object.create,Nc=hc.propertyIsEnumerable,Lc=N.setTimeout,Rc=lc.splice,Sc=fc.ceil,Wc=fc.floor,Uc=Object.getPrototypeOf,Dc=N.isFinite,Fc=lc.join,zc=Object.keys,Mc=fc.max,Bc=fc.min,Pc=N.parseInt,$c=fc.random,Tc=pc.replace,qc=lc.reverse,Vc=pc.split,Gc=Ii(N,"DataView"),Zc=Ii(N,"Map"),Kc=Ii(N,"Promise"),Yc=Ii(N,"Set"),Jc=Ii(N,"WeakMap"),Qc=Ii(Object,"create"),Hc=Jc&&new Jc,Xc=!Nc.call({valueOf:1},"valueOf"),ns={},ts=nu(Gc),rs=nu(Zc),es=nu(Kc),is=nu(Yc),us=nu(Jc),os=jc?jc.prototype:V,as=os?os.valueOf:V,fs=os?os.toString:V;Ct.templateSettings={escape:ut,evaluate:ot,interpolate:at,variable:"",imports:{_:Ct}},Ct.prototype=Nt.prototype,Ct.prototype.constructor=Ct,Lt.prototype=Er(Nt.prototype),Lt.prototype.constructor=Lt,Rt.prototype=Er(Nt.prototype),Rt.prototype.constructor=Rt,Dt.prototype=Qc?Qc(null):hc,Pt.prototype.clear=$t,Pt.prototype["delete"]=Tt,Pt.prototype.get=qt,Pt.prototype.has=Vt,Pt.prototype.set=Gt,Zt.prototype.push=Yt,Jt.prototype.clear=Qt,Jt.prototype["delete"]=Ht,Jt.prototype.get=Xt,Jt.prototype.has=nr,Jt.prototype.set=tr;var cs=ti(zr),ss=ti(Mr,!0),ls=ri(),hs=ri(!0);Ac&&!Nc.call({valueOf:1},"valueOf")&&(te=function(n){return F(Ac(n))});var ps=Hc?function(n,t){return Hc.set(n,t),n}:Mf,vs=Yc&&1/B(new Yc([,-0]))[1]==gn?function(n){return new Yc(n)}:Vf,_s=Hc?function(n){return Hc.get(n)}:Vf,ds=he("length");Oc||(Li=function(){return[]});var gs=Oc?function(n){for(var t=[];n;)h(t,Li(n)),n=Ni(n);return t}:Li;(Gc&&Ri(new Gc(new ArrayBuffer(1)))!=$n||Zc&&Ri(new Zc)!=Ln||Kc&&Ri(Kc.resolve())!=Wn||Yc&&Ri(new Yc)!=Dn||Jc&&Ri(new Jc)!=Mn)&&(Ri=function(n){var t=yc.call(n),r=t==Sn?n.constructor:V,e=r?nu(r):V;if(e)switch(e){case ts:return $n;case rs:return Ln;case es:return Wn;case is:return Dn;case us:return Mn}return t});var ys=function(){var n=0,t=0;return function(r,e){var i=qs(),u=pn-(i-t);if(t=i,u>0){if(++n>=hn)return r}else n=0;return ps(r,e)}}(),ws=So(function(n){var t=[];return Wa(n).replace(st,function(n,r,e,i){t.push(e?i.replace(gt,"$1"):r||n)}),t}),bs=Do(function(n,t){return Jo(n)?Cr(n,Ur(t,1,Jo,!0)):[]}),ms=Do(function(n,t){var r=bu(t);return Jo(r)&&(r=V),Jo(n)?Cr(n,Ur(t,1,Jo,!0),Ai(r)):[]}),xs=Do(function(n,t){var r=bu(t);return Jo(r)&&(r=V),Jo(n)?Cr(n,Ur(t,1,Jo,!0),V,r):[]}),js=Do(function(n){var t=l(n,We);return t.length&&t[0]===n[0]?Zr(t):[]}),ks=Do(function(n){var t=bu(n),r=l(n,We);return t===bu(r)?t=V:r.pop(),r.length&&r[0]===n[0]?Zr(r,Ai(t)):[]}),Es=Do(function(n){var t=bu(n),r=l(n,We);return t===bu(r)?t=V:r.pop(),r.length&&r[0]===n[0]?Zr(r,V,t):[]}),As=Do(ju),Os=Do(function(n,t){t=Ur(t,1);var r=n?n.length:0,e=vr(n,t);return _e(n,l(t,function(n){return Pi(n,r)?+n:n}).sort(Ge)),e}),Is=Do(function(n){return Oe(Ur(n,1,Jo,!0))}),Cs=Do(function(n){var t=bu(n);return Jo(t)&&(t=V),Oe(Ur(n,1,Jo,!0),Ai(t))}),Ns=Do(function(n){var t=bu(n);return Jo(t)&&(t=V),Oe(Ur(n,1,Jo,!0),V,t)}),Ls=Do(function(n,t){return Jo(n)?Cr(n,t):[]}),Rs=Do(function(n){return Re(f(n,Jo))}),Ss=Do(function(n){var t=bu(n);return Jo(t)&&(t=V),Re(f(n,Jo),Ai(t))}),Ws=Do(function(n){var t=bu(n);return Jo(t)&&(t=V),Re(f(n,Jo),V,t)}),Us=Do(Vu),Ds=Do(function(n){var t=n.length,r=t>1?n[t-1]:V;return r="function"==typeof r?(n.pop(),r):V,Gu(n,r)}),Fs=Do(function(n){n=Ur(n,1);var t=n.length,r=t?n[0]:0,e=this.__wrapped__,i=function(t){return vr(t,n)};return!(t>1||this.__actions__.length)&&e instanceof Rt&&Pi(r)?(e=e.slice(r,+r+(t?1:0)),e.__actions__.push({func:Qu,args:[i],thisArg:V}),new Lt(e,this.__chain__).thru(function(n){return t&&!n.length&&n.push(V),n})):this.thru(i)}),zs=Xe(function(n,t,r){_c.call(n,r)?++n[r]:n[r]=1}),Ms=Xe(function(n,t,r){_c.call(n,r)?n[r].push(t):n[r]=[t]}),Bs=Do(function(n,t,e){var i=-1,u="function"==typeof t,o=Ti(t),a=Yo(n)?Array(n.length):[];return cs(n,function(n){var f=u?t:o&&null!=n?n[t]:V;a[++i]=f?r(f,n,e):Yr(n,t,e)}),a}),Ps=Xe(function(n,t,r){n[r]=t}),$s=Xe(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Ts=Do(function(n,t){if(null==n)return[];var r=t.length;return r>1&&$i(n,t[0],t[1])?t=[]:r>2&&$i(t[0],t[1],t[2])&&(t=[t[0]]),t=1==t.length&&tl(t[0])?t[0]:Ur(t,1,Bi),ce(n,t,[])}),qs=oc.now,Vs=Do(function(n,t,r){var e=Q;if(r.length){var i=M(r,Ci(Vs));e|=rn}return wi(n,e,t,r,i)}),Gs=Do(function(n,t,r){var e=Q|H;if(r.length){var i=M(r,Ci(Gs));e|=rn}return wi(t,e,n,r,i)}),Zs=Do(function(n,t){return Ar(n,1,t)}),Ks=Do(function(n,t,r){return Ar(n,La(t)||0,r)});So.Cache=Pt;var Ys=Do(function(n,t){t=1==t.length&&tl(t[0])?l(t[0],A(Ai())):l(Ur(t,1,Bi),A(Ai()));var e=t.length;return Do(function(i){for(var u=-1,o=Bc(i.length,e);++u<o;)i[u]=t[u].call(this,i[u]);return r(n,this,i)})}),Js=Do(function(n,t){var r=M(t,Ci(Js));return wi(n,rn,V,t,r)}),Qs=Do(function(n,t){var r=M(t,Ci(Qs));return wi(n,en,V,t,r)}),Hs=Do(function(n,t){return wi(n,on,V,V,V,Ur(t,1))}),Xs=di(Tr),nl=di(function(n,t){return n>=t}),tl=Array.isArray,rl=mc?function(n){return n instanceof mc}:zf(!1),el=di(re),il=di(function(n,t){return n<=t}),ul=ni(function(n,t){if(Xc||Gi(t)||Yo(t))return void Qe(t,Za(t),n);for(var r in t)_c.call(t,r)&&cr(n,r,t[r])}),ol=ni(function(n,t){if(Xc||Gi(t)||Yo(t))return void Qe(t,Ka(t),n);for(var r in t)cr(n,r,t[r])}),al=ni(function(n,t,r,e){Qe(t,Ka(t),n,e)}),fl=ni(function(n,t,r,e){Qe(t,Za(t),n,e)}),cl=Do(function(n,t){return vr(n,Ur(t,1))}),sl=Do(function(n){return n.push(V,ar),r(al,V,n)}),ll=Do(function(n){return n.push(V,Ji),r(dl,V,n)}),hl=si(function(n,t,r){n[t]=r},zf(Mf)),pl=si(function(n,t,r){_c.call(n,t)?n[t].push(r):n[t]=[r]},Ai),vl=Do(Yr),_l=ni(function(n,t,r){oe(n,t,r)}),dl=ni(function(n,t,r,e){oe(n,t,r,e)}),gl=Do(function(n,t){return null==n?{}:(t=l(Ur(t,1),Xi),se(n,Cr(ki(n),t)))}),yl=Do(function(n,t){return null==n?{}:se(n,l(Ur(t,1),Xi))}),wl=ui(function(n,t,r){return t=t.toLowerCase(),n+(r?vf(t):t)}),bl=ui(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),ml=ui(function(n,t,r){return n+(r?" ":"")+t.toLowerCase()}),xl=ii("toLowerCase"),jl=ui(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),kl=ui(function(n,t,r){return n+(r?" ":"")+Al(t)}),El=ui(function(n,t,r){return n+(r?" ":"")+t.toUpperCase()}),Al=ii("toUpperCase"),Ol=Do(function(n,t){try{return r(n,V,t)}catch(e){return ea(e)?e:new ac(e)}}),Il=Do(function(n,t){return u(Ur(t,1),function(t){t=Xi(t),n[t]=Vs(n[t],n)}),n}),Cl=fi(),Nl=fi(!0),Ll=Do(function(n,t){return function(r){return Yr(r,n,t)}}),Rl=Do(function(n,t){return function(r){return Yr(n,r,t)}}),Sl=hi(l),Wl=hi(a),Ul=hi(_),Dl=_i(),Fl=_i(!0),zl=li(function(n,t){return n+t}),Ml=yi("ceil"),Bl=li(function(n,t){return n/t}),Pl=yi("floor"),$l=li(function(n,t){return n*t}),Tl=yi("round"),ql=li(function(n,t){return n-t});return Ct.after=Ao,Ct.ary=Oo,Ct.assign=ul,Ct.assignIn=ol,Ct.assignInWith=al,Ct.assignWith=fl,Ct.at=cl,Ct.before=Io,Ct.bind=Vs,Ct.bindAll=Il,Ct.bindKey=Gs,Ct.castArray=Po,Ct.chain=Yu,Ct.chunk=ru,Ct.compact=eu,Ct.concat=iu,Ct.cond=Df,Ct.conforms=Ff,Ct.constant=zf,Ct.countBy=zs,Ct.create=Ua,Ct.curry=Co,Ct.curryRight=No,Ct.debounce=Lo,Ct.defaults=sl,Ct.defaultsDeep=ll,Ct.defer=Zs,Ct.delay=Ks,Ct.difference=bs,Ct.differenceBy=ms,Ct.differenceWith=xs,Ct.drop=uu,Ct.dropRight=ou,Ct.dropRightWhile=au,Ct.dropWhile=fu,Ct.fill=cu,Ct.filter=oo,Ct.flatMap=co,Ct.flatMapDeep=so,Ct.flatMapDepth=lo,Ct.flatten=hu,Ct.flattenDeep=pu,Ct.flattenDepth=vu,Ct.flip=Ro,Ct.flow=Cl,Ct.flowRight=Nl,Ct.fromPairs=_u,Ct.functions=$a,Ct.functionsIn=Ta,Ct.groupBy=Ms,Ct.initial=yu,Ct.intersection=js,Ct.intersectionBy=ks,Ct.intersectionWith=Es,Ct.invert=hl,Ct.invertBy=pl,Ct.invokeMap=Bs,Ct.iteratee=Bf,Ct.keyBy=Ps,Ct.keys=Za,Ct.keysIn=Ka,Ct.map=_o,Ct.mapKeys=Ya,Ct.mapValues=Ja,Ct.matches=Pf,Ct.matchesProperty=$f,Ct.memoize=So,Ct.merge=_l,Ct.mergeWith=dl,Ct.method=Ll,Ct.methodOf=Rl,Ct.mixin=Tf,Ct.negate=Wo,Ct.nthArg=Gf,Ct.omit=gl,Ct.omitBy=Qa,Ct.once=Uo,Ct.orderBy=go,Ct.over=Sl,Ct.overArgs=Ys,Ct.overEvery=Wl,Ct.overSome=Ul,Ct.partial=Js,Ct.partialRight=Qs,Ct.partition=$s,Ct.pick=yl,Ct.pickBy=Ha,Ct.property=Zf,Ct.propertyOf=Kf,Ct.pull=As,Ct.pullAll=ju,Ct.pullAllBy=ku,Ct.pullAllWith=Eu,Ct.pullAt=Os,Ct.range=Dl,Ct.rangeRight=Fl,Ct.rearg=Hs,Ct.reject=bo,Ct.remove=Au,Ct.rest=Do,Ct.reverse=Ou,Ct.sampleSize=xo,Ct.set=nf,Ct.setWith=tf,Ct.shuffle=jo,Ct.slice=Iu,Ct.sortBy=Ts,Ct.sortedUniq=Uu,Ct.sortedUniqBy=Du,Ct.split=Ef,Ct.spread=Fo,Ct.tail=Fu,Ct.take=zu,Ct.takeRight=Mu,Ct.takeRightWhile=Bu,Ct.takeWhile=Pu,Ct.tap=Ju,Ct.throttle=zo,Ct.thru=Qu,Ct.toArray=Ia,Ct.toPairs=rf,Ct.toPairsIn=ef,Ct.toPath=Jf,Ct.toPlainObject=Ra,Ct.transform=uf,Ct.unary=Mo,Ct.union=Is,Ct.unionBy=Cs,Ct.unionWith=Ns,Ct.uniq=$u,Ct.uniqBy=Tu,Ct.uniqWith=qu,Ct.unset=of,Ct.unzip=Vu,Ct.unzipWith=Gu,Ct.update=af,Ct.updateWith=ff,Ct.values=cf,Ct.valuesIn=sf,Ct.without=Ls,Ct.words=Uf,Ct.wrap=Bo,Ct.xor=Rs,Ct.xorBy=Ss,Ct.xorWith=Ws,Ct.zip=Us,Ct.zipObject=Zu,Ct.zipObjectDeep=Ku,Ct.zipWith=Ds,Ct.entries=rf,Ct.entriesIn=ef,Ct.extend=ol,Ct.extendWith=al,Tf(Ct,Ct),Ct.add=zl,Ct.attempt=Ol,Ct.camelCase=wl,Ct.capitalize=vf,Ct.ceil=Ml,Ct.clamp=lf,Ct.clone=$o,Ct.cloneDeep=qo,Ct.cloneDeepWith=Vo,Ct.cloneWith=To,Ct.deburr=_f,Ct.divide=Bl,Ct.endsWith=df,Ct.eq=Go,Ct.escape=gf,Ct.escapeRegExp=yf,Ct.every=uo,Ct.find=ao,Ct.findIndex=su,Ct.findKey=Da,Ct.findLast=fo,Ct.findLastIndex=lu,Ct.findLastKey=Fa,Ct.floor=Pl,Ct.forEach=ho,Ct.forEachRight=po,Ct.forIn=za,Ct.forInRight=Ma,Ct.forOwn=Ba,Ct.forOwnRight=Pa,Ct.get=qa,Ct.gt=Xs,Ct.gte=nl,Ct.has=Va,Ct.hasIn=Ga,Ct.head=du,Ct.identity=Mf,Ct.includes=vo,Ct.indexOf=gu,Ct.inRange=hf,Ct.invoke=vl,Ct.isArguments=Zo,Ct.isArray=tl,Ct.isArrayBuffer=Ko,Ct.isArrayLike=Yo,Ct.isArrayLikeObject=Jo,Ct.isBoolean=Qo,Ct.isBuffer=rl,Ct.isDate=Ho,Ct.isElement=Xo,Ct.isEmpty=na,Ct.isEqual=ta,Ct.isEqualWith=ra,Ct.isError=ea,Ct.isFinite=ia,Ct.isFunction=ua,Ct.isInteger=oa,Ct.isLength=aa,Ct.isMap=sa,Ct.isMatch=la,Ct.isMatchWith=ha,Ct.isNaN=pa,Ct.isNative=va,Ct.isNil=da,Ct.isNull=_a,Ct.isNumber=ga,Ct.isObject=fa,Ct.isObjectLike=ca,Ct.isPlainObject=ya,Ct.isRegExp=wa,Ct.isSafeInteger=ba,Ct.isSet=ma,Ct.isString=xa,Ct.isSymbol=ja,Ct.isTypedArray=ka,Ct.isUndefined=Ea,Ct.isWeakMap=Aa,Ct.isWeakSet=Oa,Ct.join=wu,Ct.kebabCase=bl,Ct.last=bu,Ct.lastIndexOf=mu,Ct.lowerCase=ml,Ct.lowerFirst=xl,Ct.lt=el,Ct.lte=il,Ct.max=Hf,Ct.maxBy=Xf,Ct.mean=nc,Ct.meanBy=tc,Ct.min=rc,Ct.minBy=ec,Ct.multiply=$l,Ct.nth=xu,Ct.noConflict=qf,Ct.noop=Vf,Ct.now=qs,Ct.pad=wf,Ct.padEnd=bf,Ct.padStart=mf,Ct.parseInt=xf,Ct.random=pf,Ct.reduce=yo,Ct.reduceRight=wo,Ct.repeat=jf,Ct.replace=kf,Ct.result=Xa,Ct.round=Tl,Ct.runInContext=q,Ct.sample=mo,Ct.size=ko,Ct.snakeCase=jl,Ct.some=Eo,Ct.sortedIndex=Cu,Ct.sortedIndexBy=Nu,Ct.sortedIndexOf=Lu,Ct.sortedLastIndex=Ru,Ct.sortedLastIndexBy=Su,Ct.sortedLastIndexOf=Wu,Ct.startCase=kl,Ct.startsWith=Af,Ct.subtract=ql,Ct.sum=ic,Ct.sumBy=uc,Ct.template=Of,Ct.times=Yf,Ct.toInteger=Ca,Ct.toLength=Na,Ct.toLower=If,Ct.toNumber=La,Ct.toSafeInteger=Sa,Ct.toString=Wa,Ct.toUpper=Cf,Ct.trim=Nf,Ct.trimEnd=Lf,Ct.trimStart=Rf,Ct.truncate=Sf,Ct.unescape=Wf,Ct.uniqueId=Qf,Ct.upperCase=El,Ct.upperFirst=Al,Ct.each=ho,Ct.eachRight=po,Ct.first=du,Tf(Ct,function(){var n={};return zr(Ct,function(t,r){_c.call(Ct.prototype,r)||(n[r]=t)}),n}(),{chain:!1}),Ct.VERSION=G,u(["bind","bindKey","curry","curryRight","partial","partialRight"],function(n){Ct[n].placeholder=Ct}),u(["drop","take"],function(n,t){Rt.prototype[n]=function(r){var e=this.__filtered__;if(e&&!t)return new Rt(this);r=r===V?1:Mc(Ca(r),0);var i=this.clone();return e?i.__takeCount__=Bc(r,i.__takeCount__):i.__views__.push({size:Bc(r,mn),type:n+(i.__dir__<0?"Right":"")}),i},Rt.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),u(["filter","map","takeWhile"],function(n,t){var r=t+1,e=r==vn||r==dn;Rt.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:Ai(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),u(["head","last"],function(n,t){var r="take"+(t?"Right":"");Rt.prototype[n]=function(){return this[r](1).value()[0]}}),u(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");Rt.prototype[n]=function(){return this.__filtered__?new Rt(this):this[r](1)}}),Rt.prototype.compact=function(){return this.filter(Mf)},Rt.prototype.find=function(n){return this.filter(n).head()},Rt.prototype.findLast=function(n){return this.reverse().find(n)},Rt.prototype.invokeMap=Do(function(n,t){return"function"==typeof n?new Rt(this):this.map(function(r){return Yr(r,n,t)})}),Rt.prototype.reject=function(n){return n=Ai(n,3),this.filter(function(t){return!n(t)})},Rt.prototype.slice=function(n,t){n=Ca(n);var r=this;return r.__filtered__&&(n>0||t<0)?new Rt(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==V&&(t=Ca(t),r=t<0?r.dropRight(-t):r.take(t-n)),r)},Rt.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Rt.prototype.toArray=function(){return this.take(mn)},zr(Rt.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),i=Ct[e?"take"+("last"==t?"Right":""):t],u=e||/^find/.test(t);i&&(Ct.prototype[t]=function(){var t=this.__wrapped__,o=e?[1]:arguments,a=t instanceof Rt,f=o[0],c=a||tl(t),s=function(n){var t=i.apply(Ct,h([n],o));return e&&l?t[0]:t};c&&r&&"function"==typeof f&&1!=f.length&&(a=c=!1);var l=this.__chain__,p=!!this.__actions__.length,v=u&&!l,_=a&&!p;if(!u&&c){t=_?t:new Rt(this);var d=n.apply(t,o);return d.__actions__.push({func:Qu,args:[s],thisArg:V}),new Lt(d,l)}return v&&_?n.apply(this,o):(d=this.thru(s),v?e?d.value()[0]:d.value():d)})}),u(["pop","push","shift","sort","splice","unshift"],function(n){var t=lc[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);Ct.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var i=this.value();return t.apply(tl(i)?i:[],n)}return this[r](function(r){return t.apply(tl(r)?r:[],n)})}}),zr(Rt.prototype,function(n,t){var r=Ct[t];if(r){var e=r.name+"",i=ns[e]||(ns[e]=[]);i.push({name:t,func:r})}}),ns[ci(V,H).name]=[{name:"wrapper",func:V}],Rt.prototype.clone=St,Rt.prototype.reverse=Wt,Rt.prototype.value=Ut,Ct.prototype.at=Fs,Ct.prototype.chain=Hu,Ct.prototype.commit=Xu,Ct.prototype.next=no,Ct.prototype.plant=ro,Ct.prototype.reverse=eo,Ct.prototype.toJSON=Ct.prototype.valueOf=Ct.prototype.value=io,Ic&&(Ct.prototype[Ic]=to),Ct}var V,G="4.11.2",Z=200,K="Expected a function",Y="__lodash_hash_undefined__",J="__lodash_placeholder__",Q=1,H=2,X=4,nn=8,tn=16,rn=32,en=64,un=128,on=256,an=512,fn=1,cn=2,sn=30,ln="...",hn=150,pn=16,vn=1,_n=2,dn=3,gn=1/0,yn=9007199254740991,wn=1.7976931348623157e308,bn=NaN,mn=4294967295,xn=mn-1,jn=mn>>>1,kn="[object Arguments]",En="[object Array]",An="[object Boolean]",On="[object Date]",In="[object Error]",Cn="[object Function]",Nn="[object GeneratorFunction]",Ln="[object Map]",Rn="[object Number]",Sn="[object Object]",Wn="[object Promise]",Un="[object RegExp]",Dn="[object Set]",Fn="[object String]",zn="[object Symbol]",Mn="[object WeakMap]",Bn="[object WeakSet]",Pn="[object ArrayBuffer]",$n="[object DataView]",Tn="[object Float32Array]",qn="[object Float64Array]",Vn="[object Int8Array]",Gn="[object Int16Array]",Zn="[object Int32Array]",Kn="[object Uint8Array]",Yn="[object Uint8ClampedArray]",Jn="[object Uint16Array]",Qn="[object Uint32Array]",Hn=/\b__p \+= '';/g,Xn=/\b(__p \+=) '' \+/g,nt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,tt=/&(?:amp|lt|gt|quot|#39|#96);/g,rt=/[&<>"'`]/g,et=RegExp(tt.source),it=RegExp(rt.source),ut=/<%-([\s\S]+?)%>/g,ot=/<%([\s\S]+?)%>/g,at=/<%=([\s\S]+?)%>/g,ft=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ct=/^\w*$/,st=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g,lt=/[\\^$.*+?()[\]{}|]/g,ht=RegExp(lt.source),pt=/^\s+|\s+$/g,vt=/^\s+/,_t=/\s+$/,dt=/[a-zA-Z0-9]+/g,gt=/\\(\\)?/g,yt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,wt=/\w*$/,bt=/^0x/i,mt=/^[-+]0x[0-9a-f]+$/i,xt=/^0b[01]+$/i,jt=/^\[object .+?Constructor\]$/,kt=/^0o[0-7]+$/i,Et=/^(?:0|[1-9]\d*)$/,At=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Ot=/($^)/,It=/['\n\r\u2028\u2029\\]/g,Ct="\\ud800-\\udfff",Nt="\\u0300-\\u036f\\ufe20-\\ufe23",Lt="\\u20d0-\\u20f0",Rt="\\u2700-\\u27bf",St="a-z\\xdf-\\xf6\\xf8-\\xff",Wt="\\xac\\xb1\\xd7\\xf7",Ut="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Dt="\\u2000-\\u206f",Ft=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",zt="A-Z\\xc0-\\xd6\\xd8-\\xde",Mt="\\ufe0e\\ufe0f",Bt=Wt+Ut+Dt+Ft,Pt="['’]",$t="["+Ct+"]",Tt="["+Bt+"]",qt="["+Nt+Lt+"]",Vt="\\d+",Gt="["+Rt+"]",Zt="["+St+"]",Kt="[^"+Ct+Bt+Vt+Rt+St+zt+"]",Yt="\\ud83c[\\udffb-\\udfff]",Jt="(?:"+qt+"|"+Yt+")",Qt="[^"+Ct+"]",Ht="(?:\\ud83c[\\udde6-\\uddff]){2}",Xt="[\\ud800-\\udbff][\\udc00-\\udfff]",nr="["+zt+"]",tr="\\u200d",rr="(?:"+Zt+"|"+Kt+")",er="(?:"+nr+"|"+Kt+")",ir="(?:"+Pt+"(?:d|ll|m|re|s|t|ve))?",ur="(?:"+Pt+"(?:D|LL|M|RE|S|T|VE))?",or=Jt+"?",ar="["+Mt+"]?",fr="(?:"+tr+"(?:"+[Qt,Ht,Xt].join("|")+")"+ar+or+")*",cr=ar+or+fr,sr="(?:"+[Gt,Ht,Xt].join("|")+")"+cr,lr="(?:"+[Qt+qt+"?",qt,Ht,Xt,$t].join("|")+")",hr=RegExp(Pt,"g"),pr=RegExp(qt,"g"),vr=RegExp(Yt+"(?="+Yt+")|"+lr+cr,"g"),_r=RegExp([nr+"?"+Zt+"+"+ir+"(?="+[Tt,nr,"$"].join("|")+")",er+"+"+ur+"(?="+[Tt,nr+rr,"$"].join("|")+")",nr+"?"+rr+"+"+ir,nr+"+"+ur,Vt,sr].join("|"),"g"),dr=RegExp("["+tr+Ct+Nt+Lt+Mt+"]"),gr=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,yr=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","Reflect","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],wr=-1,br={};
-br[Tn]=br[qn]=br[Vn]=br[Gn]=br[Zn]=br[Kn]=br[Yn]=br[Jn]=br[Qn]=!0,br[kn]=br[En]=br[Pn]=br[An]=br[$n]=br[On]=br[In]=br[Cn]=br[Ln]=br[Rn]=br[Sn]=br[Un]=br[Dn]=br[Fn]=br[Mn]=!1;var mr={};mr[kn]=mr[En]=mr[Pn]=mr[$n]=mr[An]=mr[On]=mr[Tn]=mr[qn]=mr[Vn]=mr[Gn]=mr[Zn]=mr[Ln]=mr[Rn]=mr[Sn]=mr[Un]=mr[Dn]=mr[Fn]=mr[zn]=mr[Kn]=mr[Yn]=mr[Jn]=mr[Qn]=!0,mr[In]=mr[Cn]=mr[Mn]=!1;var xr={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},jr={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},kr={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},Er={"function":!0,object:!0},Ar={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Or=parseFloat,Ir=parseInt,Cr=Er[typeof exports]&&exports&&!exports.nodeType?exports:V,Nr=Er[typeof module]&&module&&!module.nodeType?module:V,Lr=Nr&&Nr.exports===Cr?Cr:V,Rr=N(Cr&&Nr&&"object"==typeof global&&global),Sr=N(Er[typeof self]&&self),Wr=N(Er[typeof window]&&window),Ur=N(Er[typeof this]&&this),Dr=Rr||Wr!==(Ur&&Ur.window)&&Wr||Sr||Ur||Function("return this")(),Fr=q();(Wr||Sr||{})._=Fr,"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return Fr}):Cr&&Nr?(Lr&&((Nr.exports=Fr)._=Fr),Cr._=Fr):Dr._=Fr}).call(this),function(n){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.graphlib=n()}}(function(){return function n(t,r,e){function i(o,a){if(!r[o]){if(!t[o]){var f="function"==typeof require&&require;if(!a&&f)return f(o,!0);if(u)return u(o,!0);var c=new Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var s=r[o]={exports:{}};t[o][0].call(s.exports,function(n){var r=t[o][1][n];return i(r?r:n)},s,s.exports,n,t,r,e)}return r[o].exports}for(var u="function"==typeof require&&require,o=0;o<e.length;o++)i(e[o]);return i}({1:[function(n,t,r){var e=n("./lib");t.exports={Graph:e.Graph,json:n("./lib/json"),alg:n("./lib/alg"),version:e.version}},{"./lib":17,"./lib/alg":8,"./lib/json":18}],2:[function(n,t,r){function e(n){function t(u){i.has(e,u)||(e[u]=!0,r.push(u),i.each(n.successors(u),t),i.each(n.predecessors(u),t))}var r,e={},u=[];return i.each(n.nodes(),function(n){r=[],t(n),r.length&&u.push(r)}),u}var i=n("../lodash");t.exports=e},{"../lodash":19}],3:[function(n,t,r){function e(n,t,r){u.isArray(t)||(t=[t]);var e=(n.isDirected()?n.successors:n.neighbors).bind(n),o=[],a={};return u.each(t,function(t){if(!n.hasNode(t))throw new Error("Graph does not have node: "+t);i(n,t,"post"===r,a,e,o)}),o}function i(n,t,r,e,o,a){u.has(e,t)||(e[t]=!0,r||a.push(t),u.each(o(t),function(t){i(n,t,r,e,o,a)}),r&&a.push(t))}var u=n("../lodash");t.exports=e},{"../lodash":19}],4:[function(n,t,r){function e(n,t,r){return u.transform(n.nodes(),function(e,u){e[u]=i(n,u,t,r)},{})}var i=n("./dijkstra"),u=n("../lodash");t.exports=e},{"../lodash":19,"./dijkstra":5}],5:[function(n,t,r){function e(n,t,r,e){return i(n,String(t),r||a,e||function(t){return n.outEdges(t)})}function i(n,t,r,e){var i,u,a={},f=new o,c=function(n){var t=n.v!==i?n.v:n.w,e=a[t],o=r(n),c=u.distance+o;if(o<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+n+" Weight: "+o);c<e.distance&&(e.distance=c,e.predecessor=i,f.decrease(t,c))};for(n.nodes().forEach(function(n){var r=n===t?0:Number.POSITIVE_INFINITY;a[n]={distance:r},f.add(n,r)});f.size()>0&&(i=f.removeMin(),u=a[i],u.distance!==Number.POSITIVE_INFINITY);)e(i).forEach(c);return a}var u=n("../lodash"),o=n("../data/priority-queue");t.exports=e;var a=u.constant(1)},{"../data/priority-queue":15,"../lodash":19}],6:[function(n,t,r){function e(n){return i.filter(u(n),function(t){return t.length>1||1===t.length&&n.hasEdge(t[0],t[0])})}var i=n("../lodash"),u=n("./tarjan");t.exports=e},{"../lodash":19,"./tarjan":13}],7:[function(n,t,r){function e(n,t,r){return i(n,t||o,r||function(t){return n.outEdges(t)})}function i(n,t,r){var e={},i=n.nodes();return i.forEach(function(n){e[n]={},e[n][n]={distance:0},i.forEach(function(t){n!==t&&(e[n][t]={distance:Number.POSITIVE_INFINITY})}),r(n).forEach(function(r){var i=r.v===n?r.w:r.v,u=t(r);e[n][i]={distance:u,predecessor:n}})}),i.forEach(function(n){var t=e[n];i.forEach(function(r){var u=e[r];i.forEach(function(r){var e=u[n],i=t[r],o=u[r],a=e.distance+i.distance;a<o.distance&&(o.distance=a,o.predecessor=i.predecessor)})})}),e}var u=n("../lodash");t.exports=e;var o=u.constant(1)},{"../lodash":19}],8:[function(n,t,r){t.exports={components:n("./components"),dijkstra:n("./dijkstra"),dijkstraAll:n("./dijkstra-all"),findCycles:n("./find-cycles"),floydWarshall:n("./floyd-warshall"),isAcyclic:n("./is-acyclic"),postorder:n("./postorder"),preorder:n("./preorder"),prim:n("./prim"),tarjan:n("./tarjan"),topsort:n("./topsort")}},{"./components":2,"./dijkstra":5,"./dijkstra-all":4,"./find-cycles":6,"./floyd-warshall":7,"./is-acyclic":9,"./postorder":10,"./preorder":11,"./prim":12,"./tarjan":13,"./topsort":14}],9:[function(n,t,r){function e(n){try{i(n)}catch(t){if(t instanceof i.CycleException)return!1;throw t}return!0}var i=n("./topsort");t.exports=e},{"./topsort":14}],10:[function(n,t,r){function e(n,t){return i(n,t,"post")}var i=n("./dfs");t.exports=e},{"./dfs":3}],11:[function(n,t,r){function e(n,t){return i(n,t,"pre")}var i=n("./dfs");t.exports=e},{"./dfs":3}],12:[function(n,t,r){function e(n,t){function r(n){var r=n.v===e?n.w:n.v,i=c.priority(r);if(void 0!==i){var u=t(n);u<i&&(f[r]=e,c.decrease(r,u))}}var e,a=new u,f={},c=new o;if(0===n.nodeCount())return a;i.each(n.nodes(),function(n){c.add(n,Number.POSITIVE_INFINITY),a.setNode(n)}),c.decrease(n.nodes()[0],0);for(var s=!1;c.size()>0;){if(e=c.removeMin(),i.has(f,e))a.setEdge(e,f[e]);else{if(s)throw new Error("Input graph is not connected: "+n);s=!0}n.nodeEdges(e).forEach(r)}return a}var i=n("../lodash"),u=n("../graph"),o=n("../data/priority-queue");t.exports=e},{"../data/priority-queue":15,"../graph":16,"../lodash":19}],13:[function(n,t,r){function e(n){function t(a){var f=u[a]={onStack:!0,lowlink:r,index:r++};if(e.push(a),n.successors(a).forEach(function(n){i.has(u,n)?u[n].onStack&&(f.lowlink=Math.min(f.lowlink,u[n].index)):(t(n),f.lowlink=Math.min(f.lowlink,u[n].lowlink))}),f.lowlink===f.index){var c,s=[];do c=e.pop(),u[c].onStack=!1,s.push(c);while(a!==c);o.push(s)}}var r=0,e=[],u={},o=[];return n.nodes().forEach(function(n){i.has(u,n)||t(n)}),o}var i=n("../lodash");t.exports=e},{"../lodash":19}],14:[function(n,t,r){function e(n){function t(a){if(u.has(e,a))throw new i;u.has(r,a)||(e[a]=!0,r[a]=!0,u.each(n.predecessors(a),t),delete e[a],o.push(a))}var r={},e={},o=[];if(u.each(n.sinks(),t),u.size(r)!==n.nodeCount())throw new i;return o}function i(){}var u=n("../lodash");t.exports=e,e.CycleException=i},{"../lodash":19}],15:[function(n,t,r){function e(){this._arr=[],this._keyIndices={}}var i=n("../lodash");t.exports=e,e.prototype.size=function(){return this._arr.length},e.prototype.keys=function(){return this._arr.map(function(n){return n.key})},e.prototype.has=function(n){return i.has(this._keyIndices,n)},e.prototype.priority=function(n){var t=this._keyIndices[n];if(void 0!==t)return this._arr[t].priority},e.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},e.prototype.add=function(n,t){var r=this._keyIndices;if(n=String(n),!i.has(r,n)){var e=this._arr,u=e.length;return r[n]=u,e.push({key:n,priority:t}),this._decrease(u),!0}return!1},e.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var n=this._arr.pop();return delete this._keyIndices[n.key],this._heapify(0),n.key},e.prototype.decrease=function(n,t){var r=this._keyIndices[n];if(t>this._arr[r].priority)throw new Error("New priority is greater than current priority. Key: "+n+" Old: "+this._arr[r].priority+" New: "+t);this._arr[r].priority=t,this._decrease(r)},e.prototype._heapify=function(n){var t=this._arr,r=2*n,e=r+1,i=n;r<t.length&&(i=t[r].priority<t[i].priority?r:i,e<t.length&&(i=t[e].priority<t[i].priority?e:i),i!==n&&(this._swap(n,i),this._heapify(i)))},e.prototype._decrease=function(n){for(var t,r=this._arr,e=r[n].priority;0!==n&&(t=n>>1,!(r[t].priority<e));)this._swap(n,t),n=t},e.prototype._swap=function(n,t){var r=this._arr,e=this._keyIndices,i=r[n],u=r[t];r[n]=u,r[t]=i,e[u.key]=n,e[i.key]=t}},{"../lodash":19}],16:[function(n,t,r){"use strict";function e(n){this._isDirected=!c.has(n,"directed")||n.directed,this._isMultigraph=!!c.has(n,"multigraph")&&n.multigraph,this._isCompound=!!c.has(n,"compound")&&n.compound,this._label=void 0,this._defaultNodeLabelFn=c.constant(void 0),this._defaultEdgeLabelFn=c.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[l]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function i(n,t){n[t]?n[t]++:n[t]=1}function u(n,t){--n[t]||delete n[t]}function o(n,t,r,e){var i=""+t,u=""+r;if(!n&&i>u){var o=i;i=u,u=o}return i+h+u+h+(c.isUndefined(e)?s:e)}function a(n,t,r,e){var i=""+t,u=""+r;if(!n&&i>u){var o=i;i=u,u=o}var a={v:i,w:u};return e&&(a.name=e),a}function f(n,t){return o(n,t.v,t.w,t.name)}var c=n("./lodash");t.exports=e;var s="\0",l="\0",h="";e.prototype._nodeCount=0,e.prototype._edgeCount=0,e.prototype.isDirected=function(){return this._isDirected},e.prototype.isMultigraph=function(){return this._isMultigraph},e.prototype.isCompound=function(){return this._isCompound},e.prototype.setGraph=function(n){return this._label=n,this},e.prototype.graph=function(){return this._label},e.prototype.setDefaultNodeLabel=function(n){return c.isFunction(n)||(n=c.constant(n)),this._defaultNodeLabelFn=n,this},e.prototype.nodeCount=function(){return this._nodeCount},e.prototype.nodes=function(){return c.keys(this._nodes)},e.prototype.sources=function(){return c.filter(this.nodes(),c.bind(function(n){return c.isEmpty(this._in[n])},this))},e.prototype.sinks=function(){return c.filter(this.nodes(),c.bind(function(n){return c.isEmpty(this._out[n])},this))},e.prototype.setNodes=function(n,t){var r=arguments;return c.each(n,c.bind(function(n){r.length>1?this.setNode(n,t):this.setNode(n)},this)),this},e.prototype.setNode=function(n,t){return c.has(this._nodes,n)?(arguments.length>1&&(this._nodes[n]=t),this):(this._nodes[n]=arguments.length>1?t:this._defaultNodeLabelFn(n),this._isCompound&&(this._parent[n]=l,this._children[n]={},this._children[l][n]=!0),this._in[n]={},this._preds[n]={},this._out[n]={},this._sucs[n]={},++this._nodeCount,this)},e.prototype.node=function(n){return this._nodes[n]},e.prototype.hasNode=function(n){return c.has(this._nodes,n)},e.prototype.removeNode=function(n){var t=this;if(c.has(this._nodes,n)){var r=function(n){t.removeEdge(t._edgeObjs[n])};delete this._nodes[n],this._isCompound&&(this._removeFromParentsChildList(n),delete this._parent[n],c.each(this.children(n),c.bind(function(n){this.setParent(n)},this)),delete this._children[n]),c.each(c.keys(this._in[n]),r),delete this._in[n],delete this._preds[n],c.each(c.keys(this._out[n]),r),delete this._out[n],delete this._sucs[n],--this._nodeCount}return this},e.prototype.setParent=function(n,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(c.isUndefined(t))t=l;else{t+="";for(var r=t;!c.isUndefined(r);r=this.parent(r))if(r===n)throw new Error("Setting "+t+" as parent of "+n+" would create create a cycle");this.setNode(t)}return this.setNode(n),this._removeFromParentsChildList(n),this._parent[n]=t,this._children[t][n]=!0,this},e.prototype._removeFromParentsChildList=function(n){delete this._children[this._parent[n]][n]},e.prototype.parent=function(n){if(this._isCompound){var t=this._parent[n];if(t!==l)return t}},e.prototype.children=function(n){if(c.isUndefined(n)&&(n=l),this._isCompound){var t=this._children[n];if(t)return c.keys(t)}else{if(n===l)return this.nodes();if(this.hasNode(n))return[]}},e.prototype.predecessors=function(n){var t=this._preds[n];if(t)return c.keys(t)},e.prototype.successors=function(n){var t=this._sucs[n];if(t)return c.keys(t)},e.prototype.neighbors=function(n){var t=this.predecessors(n);if(t)return c.union(t,this.successors(n))},e.prototype.filterNodes=function(n){function t(n){var u=e.parent(n);return void 0===u||r.hasNode(u)?(i[n]=u,u):u in i?i[u]:t(u)}var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph()),c.each(this._nodes,c.bind(function(t,e){n(e)&&r.setNode(e,t)},this)),c.each(this._edgeObjs,c.bind(function(n){r.hasNode(n.v)&&r.hasNode(n.w)&&r.setEdge(n,this.edge(n))},this));var e=this,i={};return this._isCompound&&c.each(r.nodes(),function(n){r.setParent(n,t(n))}),r},e.prototype.setDefaultEdgeLabel=function(n){return c.isFunction(n)||(n=c.constant(n)),this._defaultEdgeLabelFn=n,this},e.prototype.edgeCount=function(){return this._edgeCount},e.prototype.edges=function(){return c.values(this._edgeObjs)},e.prototype.setPath=function(n,t){var r=this,e=arguments;return c.reduce(n,function(n,i){return e.length>1?r.setEdge(n,i,t):r.setEdge(n,i),i}),this},e.prototype.setEdge=function(){var n,t,r,e,u=!1,f=arguments[0];"object"==typeof f&&null!==f&&"v"in f?(n=f.v,t=f.w,r=f.name,2===arguments.length&&(e=arguments[1],u=!0)):(n=f,t=arguments[1],r=arguments[3],arguments.length>2&&(e=arguments[2],u=!0)),n=""+n,t=""+t,c.isUndefined(r)||(r=""+r);var s=o(this._isDirected,n,t,r);if(c.has(this._edgeLabels,s))return u&&(this._edgeLabels[s]=e),this;if(!c.isUndefined(r)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(n),this.setNode(t),this._edgeLabels[s]=u?e:this._defaultEdgeLabelFn(n,t,r);var l=a(this._isDirected,n,t,r);return n=l.v,t=l.w,Object.freeze(l),this._edgeObjs[s]=l,i(this._preds[t],n),i(this._sucs[n],t),this._in[t][s]=l,this._out[n][s]=l,this._edgeCount++,this},e.prototype.edge=function(n,t,r){var e=1===arguments.length?f(this._isDirected,arguments[0]):o(this._isDirected,n,t,r);return this._edgeLabels[e]},e.prototype.hasEdge=function(n,t,r){var e=1===arguments.length?f(this._isDirected,arguments[0]):o(this._isDirected,n,t,r);return c.has(this._edgeLabels,e)},e.prototype.removeEdge=function(n,t,r){var e=1===arguments.length?f(this._isDirected,arguments[0]):o(this._isDirected,n,t,r),i=this._edgeObjs[e];return i&&(n=i.v,t=i.w,delete this._edgeLabels[e],delete this._edgeObjs[e],u(this._preds[t],n),u(this._sucs[n],t),delete this._in[t][e],delete this._out[n][e],this._edgeCount--),this},e.prototype.inEdges=function(n,t){var r=this._in[n];if(r){var e=c.values(r);return t?c.filter(e,function(n){return n.v===t}):e}},e.prototype.outEdges=function(n,t){var r=this._out[n];if(r){var e=c.values(r);return t?c.filter(e,function(n){return n.w===t}):e}},e.prototype.nodeEdges=function(n,t){var r=this.inEdges(n,t);if(r)return r.concat(this.outEdges(n,t))}},{"./lodash":19}],17:[function(n,t,r){t.exports={Graph:n("./graph"),version:n("./version")}},{"./graph":16,"./version":20}],18:[function(n,t,r){function e(n){var t={options:{directed:n.isDirected(),multigraph:n.isMultigraph(),compound:n.isCompound()},nodes:i(n),edges:u(n)};return a.isUndefined(n.graph())||(t.value=a.clone(n.graph())),t}function i(n){return a.map(n.nodes(),function(t){var r=n.node(t),e=n.parent(t),i={v:t};return a.isUndefined(r)||(i.value=r),a.isUndefined(e)||(i.parent=e),i})}function u(n){return a.map(n.edges(),function(t){var r=n.edge(t),e={v:t.v,w:t.w};return a.isUndefined(t.name)||(e.name=t.name),a.isUndefined(r)||(e.value=r),e})}function o(n){var t=new f(n.options).setGraph(n.value);return a.each(n.nodes,function(n){t.setNode(n.v,n.value),n.parent&&t.setParent(n.v,n.parent)}),a.each(n.edges,function(n){t.setEdge({v:n.v,w:n.w,name:n.name},n.value)}),t}var a=n("./lodash"),f=n("./graph");t.exports={write:e,read:o}},{"./graph":16,"./lodash":19}],19:[function(n,t,r){var e;if("function"==typeof n)try{e=n("lodash")}catch(i){}e||(e=window._),t.exports=e},{lodash:void 0}],20:[function(n,t,r){t.exports="2.1.1"},{}]},{},[1])(1)});
\ No newline at end of file
diff --git a/xos/core/xoslib/static/vendor/xosMcordTopologyVendor.js b/xos/core/xoslib/static/vendor/xosMcordTopologyVendor.js
deleted file mode 100644
index 231163f..0000000
--- a/xos/core/xoslib/static/vendor/xosMcordTopologyVendor.js
+++ /dev/null
@@ -1,23 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&0>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
-r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
-return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.16"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
-shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
-if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();
\ No newline at end of file
diff --git a/xos/core/xoslib/static/vendor/xosServiceGridVendor.js b/xos/core/xoslib/static/vendor/xosServiceGridVendor.js
deleted file mode 100644
index b626679..0000000
--- a/xos/core/xoslib/static/vendor/xosServiceGridVendor.js
+++ /dev/null
@@ -1,25 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.jsyaml=t()}}(function(){return function t(e,n,r){function i(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(o)return o(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[a]={exports:{}};e[a][0].call(f.exports,function(t){var n=e[a][1][t];return i(n?n:t)},f,f.exports,t,e,n,r)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a<r.length;a++)i(r[a]);return i}({1:[function(t,e,n){"use strict";function r(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}var i=t("./js-yaml/loader"),o=t("./js-yaml/dumper");e.exports.Type=t("./js-yaml/type"),e.exports.Schema=t("./js-yaml/schema"),e.exports.FAILSAFE_SCHEMA=t("./js-yaml/schema/failsafe"),e.exports.JSON_SCHEMA=t("./js-yaml/schema/json"),e.exports.CORE_SCHEMA=t("./js-yaml/schema/core"),e.exports.DEFAULT_SAFE_SCHEMA=t("./js-yaml/schema/default_safe"),e.exports.DEFAULT_FULL_SCHEMA=t("./js-yaml/schema/default_full"),e.exports.load=i.load,e.exports.loadAll=i.loadAll,e.exports.safeLoad=i.safeLoad,e.exports.safeLoadAll=i.safeLoadAll,e.exports.dump=o.dump,e.exports.safeDump=o.safeDump,e.exports.YAMLException=t("./js-yaml/exception"),e.exports.MINIMAL_SCHEMA=t("./js-yaml/schema/failsafe"),e.exports.SAFE_SCHEMA=t("./js-yaml/schema/default_safe"),e.exports.DEFAULT_SCHEMA=t("./js-yaml/schema/default_full"),e.exports.scan=r("scan"),e.exports.parse=r("parse"),e.exports.compose=r("compose"),e.exports.addConstructor=r("addConstructor")},{"./js-yaml/dumper":3,"./js-yaml/exception":4,"./js-yaml/loader":5,"./js-yaml/schema":7,"./js-yaml/schema/core":8,"./js-yaml/schema/default_full":9,"./js-yaml/schema/default_safe":10,"./js-yaml/schema/failsafe":11,"./js-yaml/schema/json":12,"./js-yaml/type":13}],2:[function(t,e,n){"use strict";function r(t){return"undefined"==typeof t||null===t}function i(t){return"object"==typeof t&&null!==t}function o(t){return Array.isArray(t)?t:r(t)?[]:[t]}function a(t,e){var n,r,i,o;if(e)for(o=Object.keys(e),n=0,r=o.length;n<r;n+=1)i=o[n],t[i]=e[i];return t}function s(t,e){var n,r="";for(n=0;n<e;n+=1)r+=t;return r}function u(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t}e.exports.isNothing=r,e.exports.isObject=i,e.exports.toArray=o,e.exports.repeat=s,e.exports.isNegativeZero=u,e.exports.extend=a},{}],3:[function(t,e,n){"use strict";function r(t,e){var n,r,i,o,a,s,u;if(null===e)return{};for(n={},r=Object.keys(e),i=0,o=r.length;i<o;i+=1)a=r[i],s=String(e[a]),"!!"===a.slice(0,2)&&(a="tag:yaml.org,2002:"+a.slice(2)),u=t.compiledTypeMap[a],u&&R.call(u.styleAliases,s)&&(s=u.styleAliases[s]),n[a]=s;return n}function i(t){var e,n,r;if(e=t.toString(16).toUpperCase(),t<=255)n="x",r=2;else if(t<=65535)n="u",r=4;else{if(!(t<=4294967295))throw new j("code point within a string may not be greater than 0xFFFFFFFF");n="U",r=8}return"\\"+n+z.repeat("0",r-e.length)+e}function o(t){this.schema=t.schema||T,this.indent=Math.max(1,t.indent||2),this.skipInvalid=t.skipInvalid||!1,this.flowLevel=z.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=r(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function a(t,e){for(var n,r=z.repeat(" ",e),i=0,o=-1,a="",s=t.length;i<s;)o=t.indexOf("\n",i),o===-1?(n=t.slice(i),i=s):(n=t.slice(i,o+1),i=o+1),n.length&&"\n"!==n&&(a+=r),a+=n;return a}function s(t,e){return"\n"+z.repeat(" ",t.indent*e)}function u(t,e){var n,r,i;for(n=0,r=t.implicitTypes.length;n<r;n+=1)if(i=t.implicitTypes[n],i.resolve(e))return!0;return!1}function c(t){return t===L||t===D}function f(t){return 32<=t&&t<=126||161<=t&&t<=55295&&8232!==t&&8233!==t||57344<=t&&t<=65533&&65279!==t||65536<=t&&t<=1114111}function l(t){return f(t)&&65279!==t&&t!==H&&t!==J&&t!==Q&&t!==et&&t!==rt&&t!==K&&t!==M}function h(t){return f(t)&&65279!==t&&!c(t)&&t!==G&&t!==V&&t!==K&&t!==H&&t!==J&&t!==Q&&t!==et&&t!==rt&&t!==M&&t!==Z&&t!==Y&&t!==U&&t!==nt&&t!==$&&t!==q&&t!==P&&t!==W&&t!==X&&t!==tt}function d(t,e,n,r,i){var o,a,s=!1,u=!1,d=r!==-1,p=-1,_=h(t.charCodeAt(0))&&!c(t.charCodeAt(t.length-1));if(e)for(o=0;o<t.length;o++){if(a=t.charCodeAt(o),!f(a))return ft;_=_&&l(a)}else{for(o=0;o<t.length;o++){if(a=t.charCodeAt(o),a===B)s=!0,d&&(u=u||o-p-1>r&&" "!==t[p+1],p=o);else if(!f(a))return ft;_=_&&l(a)}u=u||d&&o-p-1>r&&" "!==t[p+1]}return s||u?" "===t[0]&&n>9?ft:u?ct:ut:_&&!i(t)?at:st}function p(t,e,n,r){t.dump=function(){function i(e){return u(t,e)}if(0===e.length)return"''";if(!t.noCompatMode&&ot.indexOf(e)!==-1)return"'"+e+"'";var o=t.indent*Math.max(1,n),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-o),c=r||t.flowLevel>-1&&n>=t.flowLevel;switch(d(e,c,t.indent,s,i)){case at:return e;case st:return"'"+e.replace(/'/g,"''")+"'";case ut:return"|"+_(e,t.indent)+g(a(e,o));case ct:return">"+_(e,t.indent)+g(a(m(e,s),o));case ft:return'"'+y(e,s)+'"';default:throw new j("impossible error: invalid scalar style")}}()}function _(t,e){var n=" "===t[0]?String(e):"",r="\n"===t[t.length-1],i=r&&("\n"===t[t.length-2]||"\n"===t),o=i?"+":r?"":"-";return n+o+"\n"}function g(t){return"\n"===t[t.length-1]?t.slice(0,-1):t}function m(t,e){for(var n,r,i=/(\n+)([^\n]*)/g,o=function(){var n=t.indexOf("\n");return n=n!==-1?n:t.length,i.lastIndex=n,v(t.slice(0,n),e)}(),a="\n"===t[0]||" "===t[0];r=i.exec(t);){var s=r[1],u=r[2];n=" "===u[0],o+=s+(a||n||""===u?"":"\n")+v(u,e),a=n}return o}function v(t,e){if(""===t||" "===t[0])return t;for(var n,r,i=/ [^ ]/g,o=0,a=0,s=0,u="";n=i.exec(t);)s=n.index,s-o>e&&(r=a>o?a:s,u+="\n"+t.slice(o,r),o=r+1),a=s;return u+="\n",u+=t.length-o>e&&a>o?t.slice(o,a)+"\n"+t.slice(a+1):t.slice(o),u.slice(1)}function y(t){for(var e,n,r="",o=0;o<t.length;o++)e=t.charCodeAt(o),n=it[e],r+=!n&&f(e)?t[o]:n||i(e);return r}function w(t,e,n){var r,i,o="",a=t.tag;for(r=0,i=n.length;r<i;r+=1)C(t,e,n[r],!1,!1)&&(0!==r&&(o+=", "),o+=t.dump);t.tag=a,t.dump="["+o+"]"}function b(t,e,n,r){var i,o,a="",u=t.tag;for(i=0,o=n.length;i<o;i+=1)C(t,e+1,n[i],!0,!0)&&(r&&0===i||(a+=s(t,e)),a+="- "+t.dump);t.tag=u,t.dump=a||"[]"}function k(t,e,n){var r,i,o,a,s,u="",c=t.tag,f=Object.keys(n);for(r=0,i=f.length;r<i;r+=1)s="",0!==r&&(s+=", "),o=f[r],a=n[o],C(t,e,o,!1,!1)&&(t.dump.length>1024&&(s+="? "),s+=t.dump+": ",C(t,e,a,!1,!1)&&(s+=t.dump,u+=s));t.tag=c,t.dump="{"+u+"}"}function x(t,e,n,r){var i,o,a,u,c,f,l="",h=t.tag,d=Object.keys(n);if(t.sortKeys===!0)d.sort();else if("function"==typeof t.sortKeys)d.sort(t.sortKeys);else if(t.sortKeys)throw new j("sortKeys must be a boolean or a function");for(i=0,o=d.length;i<o;i+=1)f="",r&&0===i||(f+=s(t,e)),a=d[i],u=n[a],C(t,e+1,a,!0,!0,!0)&&(c=null!==t.tag&&"?"!==t.tag||t.dump&&t.dump.length>1024,c&&(f+=t.dump&&B===t.dump.charCodeAt(0)?"?":"? "),f+=t.dump,c&&(f+=s(t,e)),C(t,e+1,u,!0,c)&&(f+=t.dump&&B===t.dump.charCodeAt(0)?":":": ",f+=t.dump,l+=f));t.tag=h,t.dump=l||"{}"}function A(t,e,n){var r,i,o,a,s,u;for(i=n?t.explicitTypes:t.implicitTypes,o=0,a=i.length;o<a;o+=1)if(s=i[o],(s.instanceOf||s.predicate)&&(!s.instanceOf||"object"==typeof e&&e instanceof s.instanceOf)&&(!s.predicate||s.predicate(e))){if(t.tag=n?s.tag:"?",s.represent){if(u=t.styleMap[s.tag]||s.defaultStyle,"[object Function]"===F.call(s.represent))r=s.represent(e,u);else{if(!R.call(s.represent,u))throw new j("!<"+s.tag+'> tag resolver accepts not "'+u+'" style');r=s.represent[u](e,u)}t.dump=r}return!0}return!1}function C(t,e,n,r,i,o){t.tag=null,t.dump=n,A(t,n,!1)||A(t,n,!0);var a=F.call(t.dump);r&&(r=t.flowLevel<0||t.flowLevel>e);var s,u,c="[object Object]"===a||"[object Array]"===a;if(c&&(s=t.duplicates.indexOf(n),u=s!==-1),(null!==t.tag&&"?"!==t.tag||u||2!==t.indent&&e>0)&&(i=!1),u&&t.usedDuplicates[s])t.dump="*ref_"+s;else{if(c&&u&&!t.usedDuplicates[s]&&(t.usedDuplicates[s]=!0),"[object Object]"===a)r&&0!==Object.keys(t.dump).length?(x(t,e,t.dump,i),u&&(t.dump="&ref_"+s+t.dump)):(k(t,e,t.dump),u&&(t.dump="&ref_"+s+" "+t.dump));else if("[object Array]"===a)r&&0!==t.dump.length?(b(t,e,t.dump,i),u&&(t.dump="&ref_"+s+t.dump)):(w(t,e,t.dump),u&&(t.dump="&ref_"+s+" "+t.dump));else{if("[object String]"!==a){if(t.skipInvalid)return!1;throw new j("unacceptable kind of an object to dump "+a)}"?"!==t.tag&&p(t,t.dump,e,o)}null!==t.tag&&"?"!==t.tag&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function S(t,e){var n,r,i=[],o=[];for(E(t,i,o),n=0,r=o.length;n<r;n+=1)e.duplicates.push(i[o[n]]);e.usedDuplicates=new Array(r)}function E(t,e,n){var r,i,o;if(null!==t&&"object"==typeof t)if(i=e.indexOf(t),i!==-1)n.indexOf(i)===-1&&n.push(i);else if(e.push(t),Array.isArray(t))for(i=0,o=t.length;i<o;i+=1)E(t[i],e,n);else for(r=Object.keys(t),i=0,o=r.length;i<o;i+=1)E(t[r[i]],e,n)}function I(t,e){e=e||{};var n=new o(e);return n.noRefs||S(t,n),C(n,0,t,!0,!0)?n.dump+"\n":""}function O(t,e){return I(t,z.extend({schema:N},e))}var z=t("./common"),j=t("./exception"),T=t("./schema/default_full"),N=t("./schema/default_safe"),F=Object.prototype.toString,R=Object.prototype.hasOwnProperty,D=9,B=10,L=32,U=33,P=34,M=35,W=37,Z=38,q=39,Y=42,H=44,G=45,K=58,$=62,V=63,X=64,J=91,Q=93,tt=96,et=123,nt=124,rt=125,it={};it[0]="\\0",it[7]="\\a",it[8]="\\b",it[9]="\\t",it[10]="\\n",it[11]="\\v",it[12]="\\f",it[13]="\\r",it[27]="\\e",it[34]='\\"',it[92]="\\\\",it[133]="\\N",it[160]="\\_",it[8232]="\\L",it[8233]="\\P";var ot=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],at=1,st=2,ut=3,ct=4,ft=5;e.exports.dump=I,e.exports.safeDump=O},{"./common":2,"./exception":4,"./schema/default_full":9,"./schema/default_safe":10}],4:[function(t,e,n){"use strict";function r(t,e){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||"",this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():"")}r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r.prototype.toString=function(t){var e=this.name+": ";return e+=this.reason||"(unknown reason)",!t&&this.mark&&(e+=" "+this.mark.toString()),e},e.exports=r},{}],5:[function(t,e,n){"use strict";function r(t){return 10===t||13===t}function i(t){return 9===t||32===t}function o(t){return 9===t||32===t||10===t||13===t}function a(t){return 44===t||91===t||93===t||123===t||125===t}function s(t){var e;return 48<=t&&t<=57?t-48:(e=32|t,97<=e&&e<=102?e-97+10:-1)}function u(t){return 120===t?2:117===t?4:85===t?8:0}function c(t){return 48<=t&&t<=57?t-48:-1}function f(t){return 48===t?"\0":97===t?"":98===t?"\b":116===t?"\t":9===t?"\t":110===t?"\n":118===t?"\x0B":102===t?"\f":114===t?"\r":101===t?"":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"Â…":95===t?" ":76===t?"\u2028":80===t?"\u2029":""}function l(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}function h(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||q,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function d(t,e){return new M(e,new W(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function p(t,e){throw d(t,e)}function _(t,e){t.onWarning&&t.onWarning.call(null,d(t,e))}function g(t,e,n,r){var i,o,a,s;if(e<n){if(s=t.input.slice(e,n),r)for(i=0,o=s.length;i<o;i+=1)a=s.charCodeAt(i),9===a||32<=a&&a<=1114111||p(t,"expected valid JSON character");else Q.test(s)&&p(t,"the stream contains non-printable characters");t.result+=s}}function m(t,e,n,r){var i,o,a,s;for(P.isObject(n)||p(t,"cannot merge mappings; the provided source object is unacceptable"),i=Object.keys(n),a=0,s=i.length;a<s;a+=1)o=i[a],Y.call(e,o)||(e[o]=n[o],r[o]=!0)}function v(t,e,n,r,i,o){var a,s;if(i=String(i),null===e&&(e={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(o))for(a=0,s=o.length;a<s;a+=1)m(t,e,o[a],n);else m(t,e,o,n);else t.json||Y.call(n,i)||!Y.call(e,i)||p(t,"duplicated mapping key"),e[i]=o,delete n[i];return e}function y(t){var e;e=t.input.charCodeAt(t.position),10===e?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):p(t,"a line break is expected"),t.line+=1,t.lineStart=t.position}function w(t,e,n){for(var o=0,a=t.input.charCodeAt(t.position);0!==a;){for(;i(a);)a=t.input.charCodeAt(++t.position);if(e&&35===a)do a=t.input.charCodeAt(++t.position);while(10!==a&&13!==a&&0!==a);if(!r(a))break;for(y(t),a=t.input.charCodeAt(t.position),o++,t.lineIndent=0;32===a;)t.lineIndent++,a=t.input.charCodeAt(++t.position)}return n!==-1&&0!==o&&t.lineIndent<n&&_(t,"deficient indentation"),o}function b(t){var e,n=t.position;return e=t.input.charCodeAt(n),!(45!==e&&46!==e||e!==t.input.charCodeAt(n+1)||e!==t.input.charCodeAt(n+2)||(n+=3,e=t.input.charCodeAt(n),0!==e&&!o(e)))}function k(t,e){1===e?t.result+=" ":e>1&&(t.result+=P.repeat("\n",e-1))}function x(t,e,n){var s,u,c,f,l,h,d,p,_,m=t.kind,v=t.result;if(_=t.input.charCodeAt(t.position),o(_)||a(_)||35===_||38===_||42===_||33===_||124===_||62===_||39===_||34===_||37===_||64===_||96===_)return!1;if((63===_||45===_)&&(u=t.input.charCodeAt(t.position+1),o(u)||n&&a(u)))return!1;for(t.kind="scalar",t.result="",c=f=t.position,l=!1;0!==_;){if(58===_){if(u=t.input.charCodeAt(t.position+1),o(u)||n&&a(u))break}else if(35===_){if(s=t.input.charCodeAt(t.position-1),o(s))break}else{if(t.position===t.lineStart&&b(t)||n&&a(_))break;if(r(_)){if(h=t.line,d=t.lineStart,p=t.lineIndent,w(t,!1,-1),t.lineIndent>=e){l=!0,_=t.input.charCodeAt(t.position);continue}t.position=f,t.line=h,t.lineStart=d,t.lineIndent=p;break}}l&&(g(t,c,f,!1),k(t,t.line-h),c=f=t.position,l=!1),i(_)||(f=t.position+1),_=t.input.charCodeAt(++t.position)}return g(t,c,f,!1),!!t.result||(t.kind=m,t.result=v,!1)}function A(t,e){var n,i,o;if(n=t.input.charCodeAt(t.position),39!==n)return!1;for(t.kind="scalar",t.result="",t.position++,i=o=t.position;0!==(n=t.input.charCodeAt(t.position));)if(39===n){if(g(t,i,t.position,!0),n=t.input.charCodeAt(++t.position),39!==n)return!0;i=o=t.position,t.position++}else r(n)?(g(t,i,o,!0),k(t,w(t,!1,e)),i=o=t.position):t.position===t.lineStart&&b(t)?p(t,"unexpected end of the document within a single quoted scalar"):(t.position++,o=t.position);p(t,"unexpected end of the stream within a single quoted scalar")}function C(t,e){var n,i,o,a,c,f;if(f=t.input.charCodeAt(t.position),34!==f)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;0!==(f=t.input.charCodeAt(t.position));){if(34===f)return g(t,n,t.position,!0),t.position++,!0;if(92===f){if(g(t,n,t.position,!0),f=t.input.charCodeAt(++t.position),r(f))w(t,!1,e);else if(f<256&&it[f])t.result+=ot[f],t.position++;else if((c=u(f))>0){for(o=c,a=0;o>0;o--)f=t.input.charCodeAt(++t.position),(c=s(f))>=0?a=(a<<4)+c:p(t,"expected hexadecimal character");t.result+=l(a),t.position++}else p(t,"unknown escape sequence");n=i=t.position}else r(f)?(g(t,n,i,!0),k(t,w(t,!1,e)),n=i=t.position):t.position===t.lineStart&&b(t)?p(t,"unexpected end of the document within a double quoted scalar"):(t.position++,i=t.position)}p(t,"unexpected end of the stream within a double quoted scalar")}function S(t,e){var n,r,i,a,s,u,c,f,l,h,d,_=!0,g=t.tag,m=t.anchor,y={};if(d=t.input.charCodeAt(t.position),91===d)a=93,c=!1,r=[];else{if(123!==d)return!1;a=125,c=!0,r={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=r),d=t.input.charCodeAt(++t.position);0!==d;){if(w(t,!0,e),d=t.input.charCodeAt(t.position),d===a)return t.position++,t.tag=g,t.anchor=m,t.kind=c?"mapping":"sequence",t.result=r,!0;_||p(t,"missed comma between flow collection entries"),l=f=h=null,s=u=!1,63===d&&(i=t.input.charCodeAt(t.position+1),o(i)&&(s=u=!0,t.position++,w(t,!0,e))),n=t.line,N(t,e,H,!1,!0),l=t.tag,f=t.result,w(t,!0,e),d=t.input.charCodeAt(t.position),!u&&t.line!==n||58!==d||(s=!0,d=t.input.charCodeAt(++t.position),w(t,!0,e),N(t,e,H,!1,!0),h=t.result),c?v(t,r,y,l,f,h):s?r.push(v(t,null,y,l,f,h)):r.push(f),w(t,!0,e),d=t.input.charCodeAt(t.position),44===d?(_=!0,d=t.input.charCodeAt(++t.position)):_=!1}p(t,"unexpected end of the stream within a flow collection")}function E(t,e){var n,o,a,s,u=V,f=!1,l=!1,h=e,d=0,_=!1;if(s=t.input.charCodeAt(t.position),124===s)o=!1;else{if(62!==s)return!1;o=!0}for(t.kind="scalar",t.result="";0!==s;)if(s=t.input.charCodeAt(++t.position),43===s||45===s)V===u?u=43===s?J:X:p(t,"repeat of a chomping mode identifier");else{if(!((a=c(s))>=0))break;0===a?p(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?p(t,"repeat of an indentation width identifier"):(h=e+a-1,l=!0)}if(i(s)){do s=t.input.charCodeAt(++t.position);while(i(s));if(35===s)do s=t.input.charCodeAt(++t.position);while(!r(s)&&0!==s)}for(;0!==s;){for(y(t),t.lineIndent=0,s=t.input.charCodeAt(t.position);(!l||t.lineIndent<h)&&32===s;)t.lineIndent++,s=t.input.charCodeAt(++t.position);if(!l&&t.lineIndent>h&&(h=t.lineIndent),r(s))d++;else{if(t.lineIndent<h){u===J?t.result+=P.repeat("\n",f?1+d:d):u===V&&f&&(t.result+="\n");break}for(o?i(s)?(_=!0,t.result+=P.repeat("\n",f?1+d:d)):_?(_=!1,t.result+=P.repeat("\n",d+1)):0===d?f&&(t.result+=" "):t.result+=P.repeat("\n",d):t.result+=P.repeat("\n",f?1+d:d),f=!0,l=!0,d=0,n=t.position;!r(s)&&0!==s;)s=t.input.charCodeAt(++t.position);g(t,n,t.position,!1)}}return!0}function I(t,e){var n,r,i,a=t.tag,s=t.anchor,u=[],c=!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=u),i=t.input.charCodeAt(t.position);0!==i&&45===i&&(r=t.input.charCodeAt(t.position+1),o(r));)if(c=!0,t.position++,w(t,!0,-1)&&t.lineIndent<=e)u.push(null),i=t.input.charCodeAt(t.position);else if(n=t.line,N(t,e,K,!1,!0),u.push(t.result),w(t,!0,-1),i=t.input.charCodeAt(t.position),(t.line===n||t.lineIndent>e)&&0!==i)p(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break;return!!c&&(t.tag=a,t.anchor=s,t.kind="sequence",t.result=u,!0)}function O(t,e,n){var r,a,s,u,c=t.tag,f=t.anchor,l={},h={},d=null,_=null,g=null,m=!1,y=!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=l),u=t.input.charCodeAt(t.position);0!==u;){if(r=t.input.charCodeAt(t.position+1),s=t.line,63!==u&&58!==u||!o(r)){if(!N(t,n,G,!1,!0))break;if(t.line===s){for(u=t.input.charCodeAt(t.position);i(u);)u=t.input.charCodeAt(++t.position);if(58===u)u=t.input.charCodeAt(++t.position),o(u)||p(t,"a whitespace character is expected after the key-value separator within a block mapping"),m&&(v(t,l,h,d,_,null),d=_=g=null),y=!0,m=!1,a=!1,d=t.tag,_=t.result;else{if(!y)return t.tag=c,t.anchor=f,!0;p(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!y)return t.tag=c,t.anchor=f,!0;p(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===u?(m&&(v(t,l,h,d,_,null),d=_=g=null),y=!0,m=!0,a=!0):m?(m=!1,a=!0):p(t,"incomplete explicit mapping pair; a key node is missed"),t.position+=1,u=r;if((t.line===s||t.lineIndent>e)&&(N(t,e,$,!0,a)&&(m?_=t.result:g=t.result),m||(v(t,l,h,d,_,g),d=_=g=null),w(t,!0,-1),u=t.input.charCodeAt(t.position)),t.lineIndent>e&&0!==u)p(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return m&&v(t,l,h,d,_,null),y&&(t.tag=c,t.anchor=f,t.kind="mapping",t.result=l),y}function z(t){var e,n,r,i,a=!1,s=!1;if(i=t.input.charCodeAt(t.position),33!==i)return!1;if(null!==t.tag&&p(t,"duplication of a tag property"),i=t.input.charCodeAt(++t.position),60===i?(a=!0,i=t.input.charCodeAt(++t.position)):33===i?(s=!0,n="!!",i=t.input.charCodeAt(++t.position)):n="!",e=t.position,a){do i=t.input.charCodeAt(++t.position);while(0!==i&&62!==i);t.position<t.length?(r=t.input.slice(e,t.position),i=t.input.charCodeAt(++t.position)):p(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==i&&!o(i);)33===i&&(s?p(t,"tag suffix cannot contain exclamation marks"):(n=t.input.slice(e-1,t.position+1),nt.test(n)||p(t,"named tag handle cannot contain such characters"),s=!0,e=t.position+1)),i=t.input.charCodeAt(++t.position);r=t.input.slice(e,t.position),et.test(r)&&p(t,"tag suffix cannot contain flow indicator characters")}return r&&!rt.test(r)&&p(t,"tag name cannot contain such characters: "+r),a?t.tag=r:Y.call(t.tagMap,n)?t.tag=t.tagMap[n]+r:"!"===n?t.tag="!"+r:"!!"===n?t.tag="tag:yaml.org,2002:"+r:p(t,'undeclared tag handle "'+n+'"'),!0}function j(t){var e,n;if(n=t.input.charCodeAt(t.position),38!==n)return!1;for(null!==t.anchor&&p(t,"duplication of an anchor property"),n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!o(n)&&!a(n);)n=t.input.charCodeAt(++t.position);return t.position===e&&p(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function T(t){var e,n,r;if(r=t.input.charCodeAt(t.position),42!==r)return!1;for(r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!o(r)&&!a(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&p(t,"name of an alias node must contain at least one character"),n=t.input.slice(e,t.position),t.anchorMap.hasOwnProperty(n)||p(t,'unidentified alias "'+n+'"'),t.result=t.anchorMap[n],w(t,!0,-1),!0}function N(t,e,n,r,i){var o,a,s,u,c,f,l,h,d=1,_=!1,g=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,o=a=s=$===n||K===n,r&&w(t,!0,-1)&&(_=!0,t.lineIndent>e?d=1:t.lineIndent===e?d=0:t.lineIndent<e&&(d=-1)),1===d)for(;z(t)||j(t);)w(t,!0,-1)?(_=!0,s=o,t.lineIndent>e?d=1:t.lineIndent===e?d=0:t.lineIndent<e&&(d=-1)):s=!1;if(s&&(s=_||i),1!==d&&$!==n||(l=H===n||G===n?e:e+1,h=t.position-t.lineStart,1===d?s&&(I(t,h)||O(t,h,l))||S(t,l)?g=!0:(a&&E(t,l)||A(t,l)||C(t,l)?g=!0:T(t)?(g=!0,null===t.tag&&null===t.anchor||p(t,"alias node should not have any properties")):x(t,l,H===n)&&(g=!0,null===t.tag&&(t.tag="?")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===d&&(g=s&&I(t,h))),null!==t.tag&&"!"!==t.tag)if("?"===t.tag){for(u=0,c=t.implicitTypes.length;u<c;u+=1)if(f=t.implicitTypes[u],f.resolve(t.result)){t.result=f.construct(t.result),t.tag=f.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else Y.call(t.typeMap,t.tag)?(f=t.typeMap[t.tag],null!==t.result&&f.kind!==t.kind&&p(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+f.kind+'", not "'+t.kind+'"'),f.resolve(t.result)?(t.result=f.construct(t.result),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):p(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):p(t,"unknown tag !<"+t.tag+">");return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||g}function F(t){var e,n,a,s,u=t.position,c=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};0!==(s=t.input.charCodeAt(t.position))&&(w(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==s));){for(c=!0,s=t.input.charCodeAt(++t.position),e=t.position;0!==s&&!o(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(e,t.position),a=[],n.length<1&&p(t,"directive name must not be less than one character in length");0!==s;){for(;i(s);)s=t.input.charCodeAt(++t.position);if(35===s){do s=t.input.charCodeAt(++t.position);while(0!==s&&!r(s));break}if(r(s))break;for(e=t.position;0!==s&&!o(s);)s=t.input.charCodeAt(++t.position);a.push(t.input.slice(e,t.position))}0!==s&&y(t),Y.call(st,n)?st[n](t,n,a):_(t,'unknown document directive "'+n+'"')}return w(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,w(t,!0,-1)):c&&p(t,"directives end mark is expected"),N(t,t.lineIndent-1,$,!1,!0),w(t,!0,-1),t.checkLineBreaks&&tt.test(t.input.slice(u,t.position))&&_(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&b(t)?void(46===t.input.charCodeAt(t.position)&&(t.position+=3,w(t,!0,-1))):void(t.position<t.length-1&&p(t,"end of the stream or a document separator is expected"))}function R(t,e){t=String(t),e=e||{},0!==t.length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var n=new h(t,e);for(n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)F(n);return n.documents}function D(t,e,n){var r,i,o=R(t,n);for(r=0,i=o.length;r<i;r+=1)e(o[r])}function B(t,e){var n=R(t,e);if(0!==n.length){if(1===n.length)return n[0];throw new M("expected a single document in the stream, but found more")}}function L(t,e,n){D(t,e,P.extend({schema:Z},n))}function U(t,e){return B(t,P.extend({schema:Z},e))}for(var P=t("./common"),M=t("./exception"),W=t("./mark"),Z=t("./schema/default_safe"),q=t("./schema/default_full"),Y=Object.prototype.hasOwnProperty,H=1,G=2,K=3,$=4,V=1,X=2,J=3,Q=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,tt=/[\x85\u2028\u2029]/,et=/[,\[\]\{\}]/,nt=/^(?:!|!!|![a-z\-]+!)$/i,rt=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i,it=new Array(256),ot=new Array(256),at=0;at<256;at++)it[at]=f(at)?1:0,ot[at]=f(at);var st={YAML:function(t,e,n){var r,i,o;null!==t.version&&p(t,"duplication of %YAML directive"),1!==n.length&&p(t,"YAML directive accepts exactly one argument"),r=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),null===r&&p(t,"ill-formed argument of the YAML directive"),i=parseInt(r[1],10),o=parseInt(r[2],10),1!==i&&p(t,"unacceptable YAML version of the document"),t.version=n[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&_(t,"unsupported YAML version of the document")},TAG:function(t,e,n){var r,i;2!==n.length&&p(t,"TAG directive accepts exactly two arguments"),r=n[0],i=n[1],nt.test(r)||p(t,"ill-formed tag handle (first argument) of the TAG directive"),Y.call(t.tagMap,r)&&p(t,'there is a previously declared suffix for "'+r+'" tag handle'),rt.test(i)||p(t,"ill-formed tag prefix (second argument) of the TAG directive"),t.tagMap[r]=i}};e.exports.loadAll=D,e.exports.load=B,e.exports.safeLoadAll=L,e.exports.safeLoad=U},{"./common":2,"./exception":4,"./mark":6,"./schema/default_full":9,"./schema/default_safe":10}],6:[function(t,e,n){"use strict";function r(t,e,n,r,i){this.name=t,this.buffer=e,this.position=n,this.line=r,this.column=i}var i=t("./common");r.prototype.getSnippet=function(t,e){var n,r,o,a,s;if(!this.buffer)return null;for(t=t||4,e=e||75,n="",r=this.position;r>0&&"\0\r\nÂ…\u2028\u2029".indexOf(this.buffer.charAt(r-1))===-1;)if(r-=1,this.position-r>e/2-1){n=" ... ",r+=5;break}for(o="",a=this.position;a<this.buffer.length&&"\0\r\nÂ…\u2028\u2029".indexOf(this.buffer.charAt(a))===-1;)if(a+=1,a-this.position>e/2-1){o=" ... ",a-=5;break}return s=this.buffer.slice(r,a),i.repeat(" ",t)+n+s+o+"\n"+i.repeat(" ",t+this.position-r+n.length)+"^"},r.prototype.toString=function(t){var e,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),t||(e=this.getSnippet(),e&&(n+=":\n"+e)),n},e.exports=r},{"./common":2}],7:[function(t,e,n){"use strict";function r(t,e,n){var i=[];return t.include.forEach(function(t){n=r(t,e,n)}),t[e].forEach(function(t){n.forEach(function(e,n){e.tag===t.tag&&i.push(n)}),n.push(t)}),n.filter(function(t,e){return i.indexOf(e)===-1})}function i(){function t(t){r[t.tag]=t}var e,n,r={};for(e=0,n=arguments.length;e<n;e+=1)arguments[e].forEach(t);return r}function o(t){this.include=t.include||[],this.implicit=t.implicit||[],this.explicit=t.explicit||[],this.implicit.forEach(function(t){if(t.loadKind&&"scalar"!==t.loadKind)throw new s("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")}),this.compiledImplicit=r(this,"implicit",[]),this.compiledExplicit=r(this,"explicit",[]),this.compiledTypeMap=i(this.compiledImplicit,this.compiledExplicit)}var a=t("./common"),s=t("./exception"),u=t("./type");o.DEFAULT=null,o.create=function(){var t,e;switch(arguments.length){case 1:t=o.DEFAULT,e=arguments[0];break;case 2:t=arguments[0],e=arguments[1];break;default:throw new s("Wrong number of arguments for Schema.create function")}if(t=a.toArray(t),e=a.toArray(e),!t.every(function(t){return t instanceof o}))throw new s("Specified list of super schemas (or a single Schema object) contains a non-Schema object.");if(!e.every(function(t){return t instanceof u}))throw new s("Specified list of YAML types (or a single Type object) contains a non-Type object.");return new o({include:t,explicit:e})},e.exports=o},{"./common":2,"./exception":4,"./type":13}],8:[function(t,e,n){"use strict";var r=t("../schema");e.exports=new r({include:[t("./json")]})},{"../schema":7,"./json":12}],9:[function(t,e,n){"use strict";var r=t("../schema");e.exports=r.DEFAULT=new r({include:[t("./default_safe")],explicit:[t("../type/js/undefined"),t("../type/js/regexp"),t("../type/js/function")]})},{"../schema":7,"../type/js/function":18,"../type/js/regexp":19,"../type/js/undefined":20,"./default_safe":10}],10:[function(t,e,n){"use strict";var r=t("../schema");e.exports=new r({include:[t("./core")],implicit:[t("../type/timestamp"),t("../type/merge")],explicit:[t("../type/binary"),t("../type/omap"),t("../type/pairs"),t("../type/set")]})},{"../schema":7,"../type/binary":14,"../type/merge":22,"../type/omap":24,"../type/pairs":25,"../type/set":27,"../type/timestamp":29,"./core":8}],11:[function(t,e,n){"use strict";var r=t("../schema");e.exports=new r({explicit:[t("../type/str"),t("../type/seq"),t("../type/map")]})},{"../schema":7,"../type/map":21,"../type/seq":26,"../type/str":28}],12:[function(t,e,n){"use strict";var r=t("../schema");e.exports=new r({include:[t("./failsafe")],implicit:[t("../type/null"),t("../type/bool"),t("../type/int"),t("../type/float")]})},{"../schema":7,"../type/bool":15,"../type/float":16,"../type/int":17,"../type/null":23,"./failsafe":11}],13:[function(t,e,n){"use strict";function r(t){var e={};return null!==t&&Object.keys(t).forEach(function(n){t[n].forEach(function(t){e[String(t)]=n})}),e}function i(t,e){if(e=e||{},Object.keys(e).forEach(function(e){if(a.indexOf(e)===-1)throw new o('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=r(e.styleAliases||null),s.indexOf(this.kind)===-1)throw new o('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}var o=t("./exception"),a=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],s=["scalar","sequence","mapping"];e.exports=i},{"./exception":4}],14:[function(t,e,n){"use strict";function r(t){if(null===t)return!1;var e,n,r=0,i=t.length,o=l;for(n=0;n<i;n++)if(e=o.indexOf(t.charAt(n)),!(e>64)){if(e<0)return!1;r+=6}return r%8===0}function i(t){var e,n,r=t.replace(/[\r\n=]/g,""),i=r.length,o=l,a=0,u=[];for(e=0;e<i;e++)e%4===0&&e&&(u.push(a>>16&255),u.push(a>>8&255),u.push(255&a)),a=a<<6|o.indexOf(r.charAt(e));return n=i%4*6,0===n?(u.push(a>>16&255),u.push(a>>8&255),u.push(255&a)):18===n?(u.push(a>>10&255),u.push(a>>2&255)):12===n&&u.push(a>>4&255),s?new s(u):u}function o(t){var e,n,r="",i=0,o=t.length,a=l;for(e=0;e<o;e++)e%3===0&&e&&(r+=a[i>>18&63],r+=a[i>>12&63],r+=a[i>>6&63],r+=a[63&i]),i=(i<<8)+t[e];return n=o%3,0===n?(r+=a[i>>18&63],r+=a[i>>12&63],r+=a[i>>6&63],r+=a[63&i]):2===n?(r+=a[i>>10&63],r+=a[i>>4&63],r+=a[i<<2&63],r+=a[64]):1===n&&(r+=a[i>>2&63],r+=a[i<<4&63],r+=a[64],r+=a[64]),r}function a(t){return s&&s.isBuffer(t)}var s;try{var u=t;s=u("buffer").Buffer;
-}catch(c){}var f=t("../type"),l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";e.exports=new f("tag:yaml.org,2002:binary",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o})},{"../type":13}],15:[function(t,e,n){"use strict";function r(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)}function i(t){return"true"===t||"True"===t||"TRUE"===t}function o(t){return"[object Boolean]"===Object.prototype.toString.call(t)}var a=t("../type");e.exports=new a("tag:yaml.org,2002:bool",{kind:"scalar",resolve:r,construct:i,predicate:o,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})},{"../type":13}],16:[function(t,e,n){"use strict";function r(t){return null!==t&&!!c.test(t)}function i(t){var e,n,r,i;return e=t.replace(/_/g,"").toLowerCase(),n="-"===e[0]?-1:1,i=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(t){i.unshift(parseFloat(t,10))}),e=0,r=1,i.forEach(function(t){e+=t*r,r*=60}),n*e):n*parseFloat(e,10)}function o(t,e){var n;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(s.isNegativeZero(t))return"-0.0";return n=t.toString(10),f.test(n)?n.replace("e",".e"):n}function a(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!==0||s.isNegativeZero(t))}var s=t("../common"),u=t("../type"),c=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?|\\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),f=/^[-+]?[0-9]+e/;e.exports=new u("tag:yaml.org,2002:float",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o,defaultStyle:"lowercase"})},{"../common":2,"../type":13}],17:[function(t,e,n){"use strict";function r(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function i(t){return 48<=t&&t<=55}function o(t){return 48<=t&&t<=57}function a(t){if(null===t)return!1;var e,n=t.length,a=0,s=!1;if(!n)return!1;if(e=t[a],"-"!==e&&"+"!==e||(e=t[++a]),"0"===e){if(a+1===n)return!0;if(e=t[++a],"b"===e){for(a++;a<n;a++)if(e=t[a],"_"!==e){if("0"!==e&&"1"!==e)return!1;s=!0}return s}if("x"===e){for(a++;a<n;a++)if(e=t[a],"_"!==e){if(!r(t.charCodeAt(a)))return!1;s=!0}return s}for(;a<n;a++)if(e=t[a],"_"!==e){if(!i(t.charCodeAt(a)))return!1;s=!0}return s}for(;a<n;a++)if(e=t[a],"_"!==e){if(":"===e)break;if(!o(t.charCodeAt(a)))return!1;s=!0}return!!s&&(":"!==e||/^(:[0-5]?[0-9])+$/.test(t.slice(a)))}function s(t){var e,n,r=t,i=1,o=[];return r.indexOf("_")!==-1&&(r=r.replace(/_/g,"")),e=r[0],"-"!==e&&"+"!==e||("-"===e&&(i=-1),r=r.slice(1),e=r[0]),"0"===r?0:"0"===e?"b"===r[1]?i*parseInt(r.slice(2),2):"x"===r[1]?i*parseInt(r,16):i*parseInt(r,8):r.indexOf(":")!==-1?(r.split(":").forEach(function(t){o.unshift(parseInt(t,10))}),r=0,n=1,o.forEach(function(t){r+=t*n,n*=60}),i*r):i*parseInt(r,10)}function u(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1===0&&!c.isNegativeZero(t)}var c=t("../common"),f=t("../type");e.exports=new f("tag:yaml.org,2002:int",{kind:"scalar",resolve:a,construct:s,predicate:u,represent:{binary:function(t){return"0b"+t.toString(2)},octal:function(t){return"0"+t.toString(8)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return"0x"+t.toString(16).toUpperCase()}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})},{"../common":2,"../type":13}],18:[function(t,e,n){"use strict";function r(t){if(null===t)return!1;try{var e="("+t+")",n=s.parse(e,{range:!0});return"Program"===n.type&&1===n.body.length&&"ExpressionStatement"===n.body[0].type&&"FunctionExpression"===n.body[0].expression.type}catch(r){return!1}}function i(t){var e,n="("+t+")",r=s.parse(n,{range:!0}),i=[];if("Program"!==r.type||1!==r.body.length||"ExpressionStatement"!==r.body[0].type||"FunctionExpression"!==r.body[0].expression.type)throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(t){i.push(t.name)}),e=r.body[0].expression.body.range,new Function(i,n.slice(e[0]+1,e[1]-1))}function o(t){return t.toString()}function a(t){return"[object Function]"===Object.prototype.toString.call(t)}var s;try{var u=t;s=u("esprima")}catch(c){"undefined"!=typeof window&&(s=window.esprima)}var f=t("../../type");e.exports=new f("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o})},{"../../type":13}],19:[function(t,e,n){"use strict";function r(t){if(null===t)return!1;if(0===t.length)return!1;var e=t,n=/\/([gim]*)$/.exec(t),r="";if("/"===e[0]){if(n&&(r=n[1]),r.length>3)return!1;if("/"!==e[e.length-r.length-1])return!1}return!0}function i(t){var e=t,n=/\/([gim]*)$/.exec(t),r="";return"/"===e[0]&&(n&&(r=n[1]),e=e.slice(1,e.length-r.length-1)),new RegExp(e,r)}function o(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function a(t){return"[object RegExp]"===Object.prototype.toString.call(t)}var s=t("../../type");e.exports=new s("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o})},{"../../type":13}],20:[function(t,e,n){"use strict";function r(){return!0}function i(){}function o(){return""}function a(t){return"undefined"==typeof t}var s=t("../../type");e.exports=new s("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o})},{"../../type":13}],21:[function(t,e,n){"use strict";var r=t("../type");e.exports=new r("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})},{"../type":13}],22:[function(t,e,n){"use strict";function r(t){return"<<"===t||null===t}var i=t("../type");e.exports=new i("tag:yaml.org,2002:merge",{kind:"scalar",resolve:r})},{"../type":13}],23:[function(t,e,n){"use strict";function r(t){if(null===t)return!0;var e=t.length;return 1===e&&"~"===t||4===e&&("null"===t||"Null"===t||"NULL"===t)}function i(){return null}function o(t){return null===t}var a=t("../type");e.exports=new a("tag:yaml.org,2002:null",{kind:"scalar",resolve:r,construct:i,predicate:o,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},{"../type":13}],24:[function(t,e,n){"use strict";function r(t){if(null===t)return!0;var e,n,r,i,o,u=[],c=t;for(e=0,n=c.length;e<n;e+=1){if(r=c[e],o=!1,"[object Object]"!==s.call(r))return!1;for(i in r)if(a.call(r,i)){if(o)return!1;o=!0}if(!o)return!1;if(u.indexOf(i)!==-1)return!1;u.push(i)}return!0}function i(t){return null!==t?t:[]}var o=t("../type"),a=Object.prototype.hasOwnProperty,s=Object.prototype.toString;e.exports=new o("tag:yaml.org,2002:omap",{kind:"sequence",resolve:r,construct:i})},{"../type":13}],25:[function(t,e,n){"use strict";function r(t){if(null===t)return!0;var e,n,r,i,o,s=t;for(o=new Array(s.length),e=0,n=s.length;e<n;e+=1){if(r=s[e],"[object Object]"!==a.call(r))return!1;if(i=Object.keys(r),1!==i.length)return!1;o[e]=[i[0],r[i[0]]]}return!0}function i(t){if(null===t)return[];var e,n,r,i,o,a=t;for(o=new Array(a.length),e=0,n=a.length;e<n;e+=1)r=a[e],i=Object.keys(r),o[e]=[i[0],r[i[0]]];return o}var o=t("../type"),a=Object.prototype.toString;e.exports=new o("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:r,construct:i})},{"../type":13}],26:[function(t,e,n){"use strict";var r=t("../type");e.exports=new r("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}})},{"../type":13}],27:[function(t,e,n){"use strict";function r(t){if(null===t)return!0;var e,n=t;for(e in n)if(a.call(n,e)&&null!==n[e])return!1;return!0}function i(t){return null!==t?t:{}}var o=t("../type"),a=Object.prototype.hasOwnProperty;e.exports=new o("tag:yaml.org,2002:set",{kind:"mapping",resolve:r,construct:i})},{"../type":13}],28:[function(t,e,n){"use strict";var r=t("../type");e.exports=new r("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}})},{"../type":13}],29:[function(t,e,n){"use strict";function r(t){return null!==t&&(null!==s.exec(t)||null!==u.exec(t))}function i(t){var e,n,r,i,o,a,c,f,l,h,d=0,p=null;if(e=s.exec(t),null===e&&(e=u.exec(t)),null===e)throw new Error("Date resolve error");if(n=+e[1],r=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(n,r,i));if(o=+e[4],a=+e[5],c=+e[6],e[7]){for(d=e[7].slice(0,3);d.length<3;)d+="0";d=+d}return e[9]&&(f=+e[10],l=+(e[11]||0),p=6e4*(60*f+l),"-"===e[9]&&(p=-p)),h=new Date(Date.UTC(n,r,i,o,a,c,d)),p&&h.setTime(h.getTime()-p),h}function o(t){return t.toISOString()}var a=t("../type"),s=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),u=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");e.exports=new a("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:r,construct:i,instanceOf:Date,represent:o})},{"../type":13}],"/":[function(t,e,n){"use strict";var r=t("./lib/js-yaml.js");e.exports=r},{"./lib/js-yaml.js":1}]},{},[])("/")}),function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.JSZip=t()}}(function(){var t;return function e(t,n,r){function i(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(o)return o(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[a]={exports:{}};t[a][0].call(f.exports,function(e){var n=t[a][1][e];return i(n?n:e)},f,f.exports,e,t,n,r)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a<r.length;a++)i(r[a]);return i}({1:[function(t,e,n){"use strict";var r=t("./utils"),i=t("./support"),o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.encode=function(t){for(var e,n,i,a,s,u,c,f=[],l=0,h=t.length,d=h,p="string"!==r.getTypeOf(t);l<t.length;)d=h-l,p?(e=t[l++],n=l<h?t[l++]:0,i=l<h?t[l++]:0):(e=t.charCodeAt(l++),n=l<h?t.charCodeAt(l++):0,i=l<h?t.charCodeAt(l++):0),a=e>>2,s=(3&e)<<4|n>>4,u=d>1?(15&n)<<2|i>>6:64,c=d>2?63&i:64,f.push(o.charAt(a)+o.charAt(s)+o.charAt(u)+o.charAt(c));return f.join("")},n.decode=function(t){var e,n,r,a,s,u,c,f=0,l=0;t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");var h=3*t.length/4;t.charAt(t.length-1)===o.charAt(64)&&h--,t.charAt(t.length-2)===o.charAt(64)&&h--;var d;for(d=i.uint8array?new Uint8Array(h):new Array(h);f<t.length;)a=o.indexOf(t.charAt(f++)),s=o.indexOf(t.charAt(f++)),u=o.indexOf(t.charAt(f++)),c=o.indexOf(t.charAt(f++)),e=a<<2|s>>4,n=(15&s)<<4|u>>2,r=(3&u)<<6|c,d[l++]=e,64!==u&&(d[l++]=n),64!==c&&(d[l++]=r);return d}},{"./support":27,"./utils":29}],2:[function(t,e,n){"use strict";function r(t,e,n,r,i){this.compressedSize=t,this.uncompressedSize=e,this.crc32=n,this.compression=r,this.compressedContent=i}var i=t("./external"),o=t("./stream/DataWorker"),a=t("./stream/DataLengthProbe"),s=t("./stream/Crc32Probe"),a=t("./stream/DataLengthProbe");r.prototype={getContentWorker:function(){var t=new o(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),e=this;return t.on("end",function(){if(this.streamInfo.data_length!==e.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),t},getCompressedWorker:function(){return new o(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},r.createWorkerFrom=function(t,e,n){return t.pipe(new s).pipe(new a("uncompressedSize")).pipe(e.compressWorker(n)).pipe(new a("compressedSize")).withStreamInfo("compression",e)},e.exports=r},{"./external":6,"./stream/Crc32Probe":22,"./stream/DataLengthProbe":23,"./stream/DataWorker":24}],3:[function(t,e,n){"use strict";var r=t("./stream/GenericWorker");n.STORE={magic:"\0\0",compressWorker:function(t){return new r("STORE compression")},uncompressWorker:function(){return new r("STORE decompression")}},n.DEFLATE=t("./flate")},{"./flate":7,"./stream/GenericWorker":25}],4:[function(t,e,n){"use strict";function r(){for(var t,e=[],n=0;n<256;n++){t=n;for(var r=0;r<8;r++)t=1&t?3988292384^t>>>1:t>>>1;e[n]=t}return e}function i(t,e,n,r){var i=s,o=r+n;t^=-1;for(var a=r;a<o;a++)t=t>>>8^i[255&(t^e[a])];return t^-1}function o(t,e,n,r){var i=s,o=r+n;t^=-1;for(var a=r;a<o;a++)t=t>>>8^i[255&(t^e.charCodeAt(a))];return t^-1}var a=t("./utils"),s=r();e.exports=function(t,e){if("undefined"==typeof t||!t.length)return 0;var n="string"!==a.getTypeOf(t);return n?i(0|e,t,t.length,0):o(0|e,t,t.length,0)}},{"./utils":29}],5:[function(t,e,n){"use strict";n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!0,n.date=null,n.compression=null,n.compressionOptions=null,n.comment=null,n.unixPermissions=null,n.dosPermissions=null},{}],6:[function(t,e,n){"use strict";var r=t("es6-promise").Promise;e.exports={Promise:r}},{"es6-promise":37}],7:[function(t,e,n){"use strict";function r(t,e){s.call(this,"FlateWorker/"+t),this._pako=new o[t]({raw:!0,level:e.level||-1}),this.meta={};var n=this;this._pako.onData=function(t){n.push({data:t,meta:n.meta})}}var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,o=t("pako"),a=t("./utils"),s=t("./stream/GenericWorker"),u=i?"uint8array":"array";n.magic="\b\0",a.inherits(r,s),r.prototype.processChunk=function(t){this.meta=t.meta,this._pako.push(a.transformTo(u,t.data),!1)},r.prototype.flush=function(){s.prototype.flush.call(this),this._pako.push([],!0)},r.prototype.cleanUp=function(){s.prototype.cleanUp.call(this),this._pako=null},n.compressWorker=function(t){return new r("Deflate",t)},n.uncompressWorker=function(){return new r("Inflate",{})}},{"./stream/GenericWorker":25,"./utils":29,pako:38}],8:[function(t,e,n){"use strict";function r(t,e,n,r){o.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=e,this.zipPlatform=n,this.encodeFileName=r,this.streamFiles=t,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}var i=t("../utils"),o=t("../stream/GenericWorker"),a=t("../utf8"),s=t("../crc32"),u=t("../signature"),c=function(t,e){var n,r="";for(n=0;n<e;n++)r+=String.fromCharCode(255&t),t>>>=8;return r},f=function(t,e){var n=t;return t||(n=e?16893:33204),(65535&n)<<16},l=function(t,e){return 63&(t||0)},h=function(t,e,n,r,o,h){var d,p,_=t.file,g=t.compression,m=h!==a.utf8encode,v=i.transformTo("string",h(_.name)),y=i.transformTo("string",a.utf8encode(_.name)),w=_.comment,b=i.transformTo("string",h(w)),k=i.transformTo("string",a.utf8encode(w)),x=y.length!==_.name.length,A=k.length!==w.length,C="",S="",E="",I=_.dir,O=_.date,z={crc32:0,compressedSize:0,uncompressedSize:0};e&&!n||(z.crc32=t.crc32,z.compressedSize=t.compressedSize,z.uncompressedSize=t.uncompressedSize);var j=0;e&&(j|=8),m||!x&&!A||(j|=2048);var T=0,N=0;I&&(T|=16),"UNIX"===o?(N=798,T|=f(_.unixPermissions,I)):(N=20,T|=l(_.dosPermissions,I)),d=O.getUTCHours(),d<<=6,d|=O.getUTCMinutes(),d<<=5,d|=O.getUTCSeconds()/2,p=O.getUTCFullYear()-1980,p<<=4,p|=O.getUTCMonth()+1,p<<=5,p|=O.getUTCDate(),x&&(S=c(1,1)+c(s(v),4)+y,C+="up"+c(S.length,2)+S),A&&(E=c(1,1)+c(s(b),4)+k,C+="uc"+c(E.length,2)+E);var F="";F+="\n\0",F+=c(j,2),F+=g.magic,F+=c(d,2),F+=c(p,2),F+=c(z.crc32,4),F+=c(z.compressedSize,4),F+=c(z.uncompressedSize,4),F+=c(v.length,2),F+=c(C.length,2);var R=u.LOCAL_FILE_HEADER+F+v+C,D=u.CENTRAL_FILE_HEADER+c(N,2)+F+c(b.length,2)+"\0\0\0\0"+c(T,4)+c(r,4)+v+C+b;return{fileRecord:R,dirRecord:D}},d=function(t,e,n,r,o){var a="",s=i.transformTo("string",o(r));return a=u.CENTRAL_DIRECTORY_END+"\0\0\0\0"+c(t,2)+c(t,2)+c(e,4)+c(n,4)+c(s.length,2)+s},p=function(t){var e="";return e=u.DATA_DESCRIPTOR+c(t.crc32,4)+c(t.compressedSize,4)+c(t.uncompressedSize,4)};i.inherits(r,o),r.prototype.push=function(t){var e=t.meta.percent||0,n=this.entriesCount,r=this._sources.length;this.accumulate?this.contentBuffer.push(t):(this.bytesWritten+=t.data.length,o.prototype.push.call(this,{data:t.data,meta:{currentFile:this.currentFile,percent:n?(e+100*(n-r-1))/n:100}}))},r.prototype.openedSource=function(t){if(this.currentSourceOffset=this.bytesWritten,this.currentFile=t.file.name,this.streamFiles&&!t.file.dir){var e=h(t,this.streamFiles,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:e.fileRecord,meta:{percent:0}})}else this.accumulate=!0},r.prototype.closedSource=function(t){this.accumulate=!1;var e=h(t,this.streamFiles,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(e.dirRecord),this.streamFiles&&!t.file.dir)this.push({data:p(t),meta:{percent:100}});else for(this.push({data:e.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},r.prototype.flush=function(){for(var t=this.bytesWritten,e=0;e<this.dirRecords.length;e++)this.push({data:this.dirRecords[e],meta:{percent:100}});var n=this.bytesWritten-t,r=d(this.dirRecords.length,n,t,this.zipComment,this.encodeFileName);this.push({data:r,meta:{percent:100}})},r.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},r.prototype.registerPrevious=function(t){this._sources.push(t);var e=this;return t.on("data",function(t){e.processChunk(t)}),t.on("end",function(){e.closedSource(e.previous.streamInfo),e._sources.length?e.prepareNextSource():e.end()}),t.on("error",function(t){e.error(t)}),this},r.prototype.resume=function(){return!!o.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},r.prototype.error=function(t){var e=this._sources;if(!o.prototype.error.call(this,t))return!1;for(var n=0;n<e.length;n++)try{e[n].error(t)}catch(t){}return!0},r.prototype.lock=function(){o.prototype.lock.call(this);for(var t=this._sources,e=0;e<t.length;e++)t[e].lock()},e.exports=r},{"../crc32":4,"../signature":20,"../stream/GenericWorker":25,"../utf8":28,"../utils":29}],9:[function(t,e,n){"use strict";var r=t("../compressions"),i=t("./ZipFileWorker"),o=function(t,e){var n=t||e,i=r[n];if(!i)throw new Error(n+" is not a valid compression method !");return i};n.generateWorker=function(t,e,n){var r=new i(e.streamFiles,n,e.platform,e.encodeFileName),a=0;try{t.forEach(function(t,n){a++;var i=o(n.options.compression,e.compression),s=n.options.compressionOptions||e.compressionOptions||{},u=n.dir,c=n.date;n._compressWorker(i,s).withStreamInfo("file",{name:t,dir:u,date:c,comment:n.comment||"",unixPermissions:n.unixPermissions,dosPermissions:n.dosPermissions}).pipe(r)}),r.entriesCount=a}catch(s){r.error(s)}return r}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(t,e,n){"use strict";function r(){if(!(this instanceof r))return new r;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files={},this.comment=null,this.root="",this.clone=function(){var t=new r;for(var e in this)"function"!=typeof this[e]&&(t[e]=this[e]);return t}}r.prototype=t("./object"),r.prototype.loadAsync=t("./load"),r.support=t("./support"),r.defaults=t("./defaults"),r.loadAsync=function(t,e){return(new r).loadAsync(t,e)},r.external=t("./external"),e.exports=r},{"./defaults":5,"./external":6,"./load":11,"./object":13,"./support":27}],11:[function(t,e,n){"use strict";function r(t){return new o.Promise(function(e,n){var r=t.decompressed.getContentWorker().pipe(new u);r.on("error",function(t){n(t)}).on("end",function(){r.streamInfo.crc32!==t.decompressed.crc32?n(new Error("Corrupted zip : CRC32 mismatch")):e()}).resume()})}var i=t("./utils"),o=t("./external"),a=t("./utf8"),i=t("./utils"),s=t("./zipEntries"),u=t("./stream/Crc32Probe"),c=t("./nodejsUtils");e.exports=function(t,e){var n=this;return e=i.extend(e||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:a.utf8decode}),c.isNode&&c.isStream(t)?o.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):i.prepareContent("the loaded zip file",t,!0,e.optimizedBinaryString,e.base64).then(function(t){var n=new s(e);return n.load(t),n}).then(function(t){var n=[o.Promise.resolve(t)],i=t.files;if(e.checkCRC32)for(var a=0;a<i.length;a++)n.push(r(i[a]));return o.Promise.all(n)}).then(function(t){for(var r=t.shift(),i=r.files,o=0;o<i.length;o++){var a=i[o];n.file(a.fileNameStr,a.decompressed,{binary:!0,optimizedBinaryString:!0,date:a.date,dir:a.dir,comment:a.fileCommentStr.length?a.fileCommentStr:null,unixPermissions:a.unixPermissions,dosPermissions:a.dosPermissions,createFolders:e.createFolders})}return r.zipComment.length&&(n.comment=r.zipComment),n})}},{"./external":6,"./nodejsUtils":12,"./stream/Crc32Probe":22,"./utf8":28,"./utils":29,"./zipEntries":30}],12:[function(t,e,n){(function(t){"use strict";e.exports={isNode:"undefined"!=typeof t,newBuffer:function(e,n){return new t(e,n)},isBuffer:function(e){return t.isBuffer(e)},isStream:function(t){return t&&"function"==typeof t.on&&"function"==typeof t.pause&&"function"==typeof t.resume}}}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{}],13:[function(t,e,n){"use strict";function r(t){return"[object RegExp]"===Object.prototype.toString.call(t)}var i=t("./utf8"),o=t("./utils"),a=t("./stream/GenericWorker"),s=t("./stream/StreamHelper"),u=t("./defaults"),c=t("./compressedObject"),f=t("./zipObject"),l=t("./generate"),h=t("./nodejsUtils"),d=t("./nodejs/NodejsStreamInputAdapter"),p=function(t,e,n){var r,i=o.getTypeOf(e);n=o.extend(n||{},u),n.date=n.date||new Date,null!==n.compression&&(n.compression=n.compression.toUpperCase()),"string"==typeof n.unixPermissions&&(n.unixPermissions=parseInt(n.unixPermissions,8)),n.unixPermissions&&16384&n.unixPermissions&&(n.dir=!0),n.dosPermissions&&16&n.dosPermissions&&(n.dir=!0),n.dir&&(t=g(t)),n.createFolders&&(r=_(t))&&m.call(this,r,!0);var s="string"===i&&n.binary===!1&&n.base64===!1;n.binary=!s;var l=e instanceof c&&0===e.uncompressedSize;(l||n.dir||!e||0===e.length)&&(n.base64=!1,n.binary=!0,e="",n.compression="STORE",i="string");var p=null;p=e instanceof c||e instanceof a?e:h.isNode&&h.isStream(e)?new d(t,e):o.prepareContent(t,e,n.binary,n.optimizedBinaryString,n.base64);var v=new f(t,p,n);this.files[t]=v},_=function(t){"/"===t.slice(-1)&&(t=t.substring(0,t.length-1));var e=t.lastIndexOf("/");return e>0?t.substring(0,e):""},g=function(t){return"/"!==t.slice(-1)&&(t+="/"),t},m=function(t,e){return e="undefined"!=typeof e?e:u.createFolders,t=g(t),this.files[t]||p.call(this,t,null,{dir:!0,createFolders:e}),this.files[t]},v={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(t){var e,n,r;for(e in this.files)this.files.hasOwnProperty(e)&&(r=this.files[e],n=e.slice(this.root.length,e.length),n&&e.slice(0,this.root.length)===this.root&&t(n,r))},filter:function(t){var e=[];return this.forEach(function(n,r){t(n,r)&&e.push(r)}),e},file:function(t,e,n){if(1===arguments.length){if(r(t)){var i=t;return this.filter(function(t,e){return!e.dir&&i.test(t)})}var o=this.files[this.root+t];return o&&!o.dir?o:null}return t=this.root+t,p.call(this,t,e,n),this},folder:function(t){if(!t)return this;if(r(t))return this.filter(function(e,n){return n.dir&&t.test(e)});var e=this.root+t,n=m.call(this,e),i=this.clone();return i.root=n.name,i},remove:function(t){t=this.root+t;var e=this.files[t];if(e||("/"!==t.slice(-1)&&(t+="/"),e=this.files[t]),e&&!e.dir)delete this.files[t];else for(var n=this.filter(function(e,n){return n.name.slice(0,t.length)===t}),r=0;r<n.length;r++)delete this.files[n[r].name];return this},generate:function(t){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(t){var e,n={};try{if(n=o.extend(t||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:i.utf8encode}),n.type=n.type.toLowerCase(),n.compression=n.compression.toUpperCase(),"binarystring"===n.type&&(n.type="string"),!n.type)throw new Error("No output type specified.");o.checkSupport(n.type),"darwin"!==t.platform&&"freebsd"!==t.platform&&"linux"!==t.platform&&"sunos"!==t.platform||(t.platform="UNIX"),"win32"===t.platform&&(t.platform="DOS");var r=n.comment||this.comment||"";e=l.generateWorker(this,n,r)}catch(u){e=new a("error"),e.error(u)}return new s(e,n.type||"string",n.mimeType)},generateAsync:function(t,e){return this.generateInternalStream(t).accumulate(e)},generateNodeStream:function(t,e){return t=t||{},t.type||(t.type="nodebuffer"),this.generateInternalStream(t).toNodejsStream(e)}};e.exports=v},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":35,"./nodejsUtils":12,"./stream/GenericWorker":25,"./stream/StreamHelper":26,"./utf8":28,"./utils":29,"./zipObject":32}],14:[function(t,e,n){"use strict";function r(t){i.call(this,t);for(var e=0;e<this.data.length;e++)t[e]=255&t[e]}var i=t("./DataReader"),o=t("../utils");o.inherits(r,i),r.prototype.byteAt=function(t){return this.data[this.zero+t]},r.prototype.lastIndexOfSignature=function(t){for(var e=t.charCodeAt(0),n=t.charCodeAt(1),r=t.charCodeAt(2),i=t.charCodeAt(3),o=this.length-4;o>=0;--o)if(this.data[o]===e&&this.data[o+1]===n&&this.data[o+2]===r&&this.data[o+3]===i)return o-this.zero;return-1},r.prototype.readAndCheckSignature=function(t){var e=t.charCodeAt(0),n=t.charCodeAt(1),r=t.charCodeAt(2),i=t.charCodeAt(3),o=this.readData(4);return e===o[0]&&n===o[1]&&r===o[2]&&i===o[3]},r.prototype.readData=function(t){if(this.checkOffset(t),0===t)return[];var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=r},{"../utils":29,"./DataReader":15}],15:[function(t,e,n){"use strict";function r(t){this.data=t,this.length=t.length,this.index=0,this.zero=0}var i=t("../utils");r.prototype={checkOffset:function(t){this.checkIndex(this.index+t)},checkIndex:function(t){if(this.length<this.zero+t||t<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+t+"). Corrupted zip ?")},setIndex:function(t){this.checkIndex(t),this.index=t},skip:function(t){this.setIndex(this.index+t)},byteAt:function(t){},readInt:function(t){var e,n=0;for(this.checkOffset(t),e=this.index+t-1;e>=this.index;e--)n=(n<<8)+this.byteAt(e);return this.index+=t,n},readString:function(t){return i.transformTo("string",this.readData(t))},readData:function(t){},lastIndexOfSignature:function(t){},readAndCheckSignature:function(t){},readDate:function(){var t=this.readInt(4);return new Date(Date.UTC((t>>25&127)+1980,(t>>21&15)-1,t>>16&31,t>>11&31,t>>5&63,(31&t)<<1))}},e.exports=r},{"../utils":29}],16:[function(t,e,n){"use strict";function r(t){i.call(this,t)}var i=t("./Uint8ArrayReader"),o=t("../utils");o.inherits(r,i),r.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=r},{"../utils":29,"./Uint8ArrayReader":18}],17:[function(t,e,n){"use strict";function r(t){i.call(this,t)}var i=t("./DataReader"),o=t("../utils");o.inherits(r,i),r.prototype.byteAt=function(t){return this.data.charCodeAt(this.zero+t)},r.prototype.lastIndexOfSignature=function(t){return this.data.lastIndexOf(t)-this.zero},r.prototype.readAndCheckSignature=function(t){var e=this.readData(4);return t===e},r.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=r},{"../utils":29,"./DataReader":15}],18:[function(t,e,n){"use strict";function r(t){i.call(this,t)}var i=t("./ArrayReader"),o=t("../utils");o.inherits(r,i),r.prototype.readData=function(t){if(this.checkOffset(t),0===t)return new Uint8Array(0);var e=this.data.subarray(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=r},{"../utils":29,"./ArrayReader":14}],19:[function(t,e,n){"use strict";var r=t("../utils"),i=t("../support"),o=t("./ArrayReader"),a=t("./StringReader"),s=t("./NodeBufferReader"),u=t("./Uint8ArrayReader");e.exports=function(t){var e=r.getTypeOf(t);return r.checkSupport(e),"string"!==e||i.uint8array?"nodebuffer"===e?new s(t):i.uint8array?new u(r.transformTo("uint8array",t)):new o(r.transformTo("array",t)):new a(t)}},{"../support":27,"../utils":29,"./ArrayReader":14,"./NodeBufferReader":16,"./StringReader":17,"./Uint8ArrayReader":18}],20:[function(t,e,n){"use strict";n.LOCAL_FILE_HEADER="PK",n.CENTRAL_FILE_HEADER="PK",n.CENTRAL_DIRECTORY_END="PK",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",n.ZIP64_CENTRAL_DIRECTORY_END="PK",n.DATA_DESCRIPTOR="PK\b"},{}],21:[function(t,e,n){"use strict";function r(t){i.call(this,"ConvertWorker to "+t),this.destType=t}var i=t("./GenericWorker"),o=t("../utils");o.inherits(r,i),r.prototype.processChunk=function(t){this.push({data:o.transformTo(this.destType,t.data),meta:t.meta})},e.exports=r},{"../utils":29,"./GenericWorker":25}],22:[function(t,e,n){"use strict";function r(){i.call(this,"Crc32Probe")}var i=t("./GenericWorker"),o=t("../crc32"),a=t("../utils");a.inherits(r,i),r.prototype.processChunk=function(t){this.streamInfo.crc32=o(t.data,this.streamInfo.crc32||0),this.push(t)},e.exports=r},{"../crc32":4,"../utils":29,"./GenericWorker":25}],23:[function(t,e,n){"use strict";function r(t){o.call(this,"DataLengthProbe for "+t),this.propName=t,this.withStreamInfo(t,0)}var i=t("../utils"),o=t("./GenericWorker");i.inherits(r,o),r.prototype.processChunk=function(t){if(t){var e=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=e+t.data.length}o.prototype.processChunk.call(this,t)},e.exports=r},{"../utils":29,"./GenericWorker":25}],24:[function(t,e,n){"use strict";function r(t){o.call(this,"DataWorker");var e=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,t.then(function(t){e.dataIsReady=!0,e.data=t,e.max=t&&t.length||0,e.type=i.getTypeOf(t),e.isPaused||e._tickAndRepeat()},function(t){e.error(t)})}var i=t("../utils"),o=t("./GenericWorker"),a=16384;i.inherits(r,o),r.prototype.cleanUp=function(){o.prototype.cleanUp.call(this),this.data=null},r.prototype.resume=function(){return!!o.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},r.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},r.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var t=a,e=null,n=Math.min(this.max,this.index+t);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,n);break;case"uint8array":e=this.data.subarray(this.index,n);break;case"array":case"nodebuffer":e=this.data.slice(this.index,n)}return this.index=n,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},e.exports=r},{"../utils":29,"./GenericWorker":25}],25:[function(t,e,n){
-"use strict";function r(t){this.name=t||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}r.prototype={push:function(t){this.emit("data",t)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(t){this.emit("error",t)}return!0},error:function(t){return!this.isFinished&&(this.isPaused?this.generatedError=t:(this.isFinished=!0,this.emit("error",t),this.previous&&this.previous.error(t),this.cleanUp()),!0)},on:function(t,e){return this._listeners[t].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(t,e){if(this._listeners[t])for(var n=0;n<this._listeners[t].length;n++)this._listeners[t][n].call(this,e)},pipe:function(t){return t.registerPrevious(this)},registerPrevious:function(t){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=t.streamInfo,this.mergeStreamInfo(),this.previous=t;var e=this;return t.on("data",function(t){e.processChunk(t)}),t.on("end",function(){e.end()}),t.on("error",function(t){e.error(t)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;this.isPaused=!1;var t=!1;return this.generatedError&&(this.error(this.generatedError),t=!0),this.previous&&this.previous.resume(),!t},flush:function(){},processChunk:function(t){this.push(t)},withStreamInfo:function(t,e){return this.extraStreamInfo[t]=e,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var t in this.extraStreamInfo)this.extraStreamInfo.hasOwnProperty(t)&&(this.streamInfo[t]=this.extraStreamInfo[t])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var t="Worker "+this.name;return this.previous?this.previous+" -> "+t:t}},e.exports=r},{}],26:[function(t,e,n){(function(n){"use strict";function r(t,e,n){switch(t){case"blob":return s.newBlob(s.transformTo("arraybuffer",e),n);case"base64":return f.encode(e);default:return s.transformTo(t,e)}}function i(t,e){var r,i=0,o=null,a=0;for(r=0;r<e.length;r++)a+=e[r].length;switch(t){case"string":return e.join("");case"array":return Array.prototype.concat.apply([],e);case"uint8array":for(o=new Uint8Array(a),r=0;r<e.length;r++)o.set(e[r],i),i+=e[r].length;return o;case"nodebuffer":return n.concat(e);default:throw new Error("concat : unsupported type '"+t+"'")}}function o(t,e){return new h.Promise(function(n,o){var a=[],s=t._internalType,u=t._outputType,c=t._mimeType;t.on("data",function(t,n){a.push(t),e&&e(n)}).on("error",function(t){a=[],o(t)}).on("end",function(){try{var t=r(u,i(s,a),c);n(t)}catch(e){o(e)}a=[]}).resume()})}function a(t,e,n){var r=e;switch(e){case"blob":case"arraybuffer":r="uint8array";break;case"base64":r="string"}try{this._internalType=r,this._outputType=e,this._mimeType=n,s.checkSupport(r),this._worker=t.pipe(new u(r)),t.lock()}catch(i){this._worker=new c("error"),this._worker.error(i)}}var s=t("../utils"),u=t("./ConvertWorker"),c=t("./GenericWorker"),f=t("../base64"),l=t("../nodejs/NodejsStreamOutputAdapter"),h=t("../external");a.prototype={accumulate:function(t){return o(this,t)},on:function(t,e){var n=this;return"data"===t?this._worker.on(t,function(t){e.call(n,t.data,t.meta)}):this._worker.on(t,function(){s.delay(e,arguments,n)}),this},resume:function(){return s.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(t){if(s.checkSupport("nodestream"),"nodebuffer"!==this._outputType)throw new Error(this._outputType+" is not supported by this method");return new l(this,{objectMode:"nodebuffer"!==this._outputType},t)}},e.exports=a}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":35,"../utils":29,"./ConvertWorker":21,"./GenericWorker":25}],27:[function(t,e,n){(function(e){"use strict";if(n.base64=!0,n.array=!0,n.string=!0,n.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,n.nodebuffer="undefined"!=typeof e,n.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)n.blob=!1;else{var r=new ArrayBuffer(0);try{n.blob=0===new Blob([r],{type:"application/zip"}).size}catch(i){try{var o=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,a=new o;a.append(r),n.blob=0===a.getBlob("application/zip").size}catch(i){n.blob=!1}}}n.nodestream=!!t("./nodejs/NodejsStreamOutputAdapter").prototype}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{"./nodejs/NodejsStreamOutputAdapter":35}],28:[function(t,e,n){"use strict";function r(){u.call(this,"utf-8 decode"),this.leftOver=null}function i(){u.call(this,"utf-8 encode")}for(var o=t("./utils"),a=t("./support"),s=t("./nodejsUtils"),u=t("./stream/GenericWorker"),c=new Array(256),f=0;f<256;f++)c[f]=f>=252?6:f>=248?5:f>=240?4:f>=224?3:f>=192?2:1;c[254]=c[254]=1;var l=function(t){var e,n,r,i,o,s=t.length,u=0;for(i=0;i<s;i++)n=t.charCodeAt(i),55296===(64512&n)&&i+1<s&&(r=t.charCodeAt(i+1),56320===(64512&r)&&(n=65536+(n-55296<<10)+(r-56320),i++)),u+=n<128?1:n<2048?2:n<65536?3:4;for(e=a.uint8array?new Uint8Array(u):new Array(u),o=0,i=0;o<u;i++)n=t.charCodeAt(i),55296===(64512&n)&&i+1<s&&(r=t.charCodeAt(i+1),56320===(64512&r)&&(n=65536+(n-55296<<10)+(r-56320),i++)),n<128?e[o++]=n:n<2048?(e[o++]=192|n>>>6,e[o++]=128|63&n):n<65536?(e[o++]=224|n>>>12,e[o++]=128|n>>>6&63,e[o++]=128|63&n):(e[o++]=240|n>>>18,e[o++]=128|n>>>12&63,e[o++]=128|n>>>6&63,e[o++]=128|63&n);return e},h=function(t,e){var n;for(e=e||t.length,e>t.length&&(e=t.length),n=e-1;n>=0&&128===(192&t[n]);)n--;return n<0?e:0===n?e:n+c[t[n]]>e?n:e},d=function(t){var e,n,r,i,a=t.length,s=new Array(2*a);for(n=0,e=0;e<a;)if(r=t[e++],r<128)s[n++]=r;else if(i=c[r],i>4)s[n++]=65533,e+=i-1;else{for(r&=2===i?31:3===i?15:7;i>1&&e<a;)r=r<<6|63&t[e++],i--;i>1?s[n++]=65533:r<65536?s[n++]=r:(r-=65536,s[n++]=55296|r>>10&1023,s[n++]=56320|1023&r)}return s.length!==n&&(s.subarray?s=s.subarray(0,n):s.length=n),o.applyFromCharCode(s)};n.utf8encode=function(t){return a.nodebuffer?s.newBuffer(t,"utf-8"):l(t)},n.utf8decode=function(t){return a.nodebuffer?o.transformTo("nodebuffer",t).toString("utf-8"):(t=o.transformTo(a.uint8array?"uint8array":"array",t),d(t))},o.inherits(r,u),r.prototype.processChunk=function(t){var e=o.transformTo(a.uint8array?"uint8array":"array",t.data);if(this.leftOver&&this.leftOver.length){if(a.uint8array){var r=e;e=new Uint8Array(r.length+this.leftOver.length),e.set(this.leftOver,0),e.set(r,this.leftOver.length)}else e=this.leftOver.concat(e);this.leftOver=null}var i=h(e),s=e;i!==e.length&&(a.uint8array?(s=e.subarray(0,i),this.leftOver=e.subarray(i,e.length)):(s=e.slice(0,i),this.leftOver=e.slice(i,e.length))),this.push({data:n.utf8decode(s),meta:t.meta})},r.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:n.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},n.Utf8DecodeWorker=r,o.inherits(i,u),i.prototype.processChunk=function(t){this.push({data:n.utf8encode(t.data),meta:t.meta})},n.Utf8EncodeWorker=i},{"./nodejsUtils":12,"./stream/GenericWorker":25,"./support":27,"./utils":29}],29:[function(t,e,n){"use strict";function r(t){var e=null;return e=u.uint8array?new Uint8Array(t.length):new Array(t.length),o(t,e)}function i(t){return t}function o(t,e){for(var n=0;n<t.length;++n)e[n]=255&t.charCodeAt(n);return e}function a(t){var e=65536,r=n.getTypeOf(t),i=!0;if("uint8array"===r?i=d.applyCanBeUsed.uint8array:"nodebuffer"===r&&(i=d.applyCanBeUsed.nodebuffer),i)for(;e>1;)try{return d.stringifyByChunk(t,r,e)}catch(o){e=Math.floor(e/2)}return d.stringifyByChar(t)}function s(t,e){for(var n=0;n<t.length;n++)e[n]=t[n];return e}var u=t("./support"),c=t("./base64"),f=t("./nodejsUtils"),l=t("asap"),h=t("./external");n.newBlob=function(t,e){n.checkSupport("blob");try{return new Blob([t],{type:e})}catch(r){try{var i=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,o=new i;return o.append(t),o.getBlob(e)}catch(r){throw new Error("Bug : can't construct the Blob.")}}};var d={stringifyByChunk:function(t,e,n){var r=[],i=0,o=t.length;if(o<=n)return String.fromCharCode.apply(null,t);for(;i<o;)"array"===e||"nodebuffer"===e?r.push(String.fromCharCode.apply(null,t.slice(i,Math.min(i+n,o)))):r.push(String.fromCharCode.apply(null,t.subarray(i,Math.min(i+n,o)))),i+=n;return r.join("")},stringifyByChar:function(t){for(var e="",n=0;n<t.length;n++)e+=String.fromCharCode(t[n]);return e},applyCanBeUsed:{uint8array:function(){try{return u.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(t){return!1}}(),nodebuffer:function(){try{return u.nodebuffer&&1===String.fromCharCode.apply(null,f.newBuffer(1)).length}catch(t){return!1}}()}};n.applyFromCharCode=a;var p={};p.string={string:i,array:function(t){return o(t,new Array(t.length))},arraybuffer:function(t){return p.string.uint8array(t).buffer},uint8array:function(t){return o(t,new Uint8Array(t.length))},nodebuffer:function(t){return o(t,f.newBuffer(t.length))}},p.array={string:a,array:i,arraybuffer:function(t){return new Uint8Array(t).buffer},uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return f.newBuffer(t)}},p.arraybuffer={string:function(t){return a(new Uint8Array(t))},array:function(t){return s(new Uint8Array(t),new Array(t.byteLength))},arraybuffer:i,uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return f.newBuffer(new Uint8Array(t))}},p.uint8array={string:a,array:function(t){return s(t,new Array(t.length))},arraybuffer:function(t){return t.buffer},uint8array:i,nodebuffer:function(t){return f.newBuffer(t)}},p.nodebuffer={string:a,array:function(t){return s(t,new Array(t.length))},arraybuffer:function(t){return p.nodebuffer.uint8array(t).buffer},uint8array:function(t){return s(t,new Uint8Array(t.length))},nodebuffer:i},n.transformTo=function(t,e){if(e||(e=""),!t)return e;n.checkSupport(t);var r=n.getTypeOf(e),i=p[r][t](e);return i},n.getTypeOf=function(t){return"string"==typeof t?"string":"[object Array]"===Object.prototype.toString.call(t)?"array":u.nodebuffer&&f.isBuffer(t)?"nodebuffer":u.uint8array&&t instanceof Uint8Array?"uint8array":u.arraybuffer&&t instanceof ArrayBuffer?"arraybuffer":void 0},n.checkSupport=function(t){var e=u[t.toLowerCase()];if(!e)throw new Error(t+" is not supported by this platform")},n.MAX_VALUE_16BITS=65535,n.MAX_VALUE_32BITS=-1,n.pretty=function(t){var e,n,r="";for(n=0;n<(t||"").length;n++)e=t.charCodeAt(n),r+="\\x"+(e<16?"0":"")+e.toString(16).toUpperCase();return r},n.delay=function(t,e,n){l(function(){t.apply(n||null,e||[])})},n.inherits=function(t,e){var n=function(){};n.prototype=e.prototype,t.prototype=new n},n.extend=function(){var t,e,n={};for(t=0;t<arguments.length;t++)for(e in arguments[t])arguments[t].hasOwnProperty(e)&&"undefined"==typeof n[e]&&(n[e]=arguments[t][e]);return n},n.prepareContent=function(t,e,i,o,a){var s=null;return s=u.blob&&e instanceof Blob&&"undefined"!=typeof FileReader?new h.Promise(function(t,n){var r=new FileReader;r.onload=function(e){t(e.target.result)},r.onerror=function(t){n(t.target.error)},r.readAsArrayBuffer(e)}):h.Promise.resolve(e),s.then(function(e){var s=n.getTypeOf(e);return s?("arraybuffer"===s?e=n.transformTo("uint8array",e):"string"===s&&(a?e=c.decode(e):i&&o!==!0&&(e=r(e))),e):h.Promise.reject(new Error("The data of '"+t+"' is in an unsupported format !"))})}},{"./base64":1,"./external":6,"./nodejsUtils":12,"./support":27,asap:33}],30:[function(t,e,n){"use strict";function r(t){this.files=[],this.loadOptions=t}var i=t("./reader/readerFor"),o=t("./utils"),a=t("./signature"),s=t("./zipEntry"),u=(t("./utf8"),t("./support"));r.prototype={checkSignature:function(t){if(!this.reader.readAndCheckSignature(t)){this.reader.index-=4;var e=this.reader.readString(4);throw new Error("Corrupted zip or bug : unexpected signature ("+o.pretty(e)+", expected "+o.pretty(t)+")")}},isSignature:function(t,e){var n=this.reader.index;this.reader.setIndex(t);var r=this.reader.readString(4),i=r===e;return this.reader.setIndex(n),i},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var t=this.reader.readData(this.zipCommentLength),e=u.uint8array?"uint8array":"array",n=o.transformTo(e,t);this.zipComment=this.loadOptions.decodeFileName(n)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var t,e,n,r=this.zip64EndOfCentralSize-44,i=0;i<r;)t=this.reader.readInt(2),e=this.reader.readInt(4),n=this.reader.readData(e),this.zip64ExtensibleData[t]={id:t,length:e,value:n}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var t,e;for(t=0;t<this.files.length;t++)e=this.files[t],this.reader.setIndex(e.localHeaderOffset),this.checkSignature(a.LOCAL_FILE_HEADER),e.readLocalPart(this.reader),e.handleUTF8(),e.processAttributes()},readCentralDir:function(){var t;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(a.CENTRAL_FILE_HEADER);)t=new s({zip64:this.zip64},this.loadOptions),t.readCentralPart(this.reader),this.files.push(t);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var t=this.reader.lastIndexOfSignature(a.CENTRAL_DIRECTORY_END);if(t<0){var e=!this.isSignature(0,a.LOCAL_FILE_HEADER);throw e?new Error("Can't find end of central directory : is this a zip file ? If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html"):new Error("Corrupted zip : can't find end of central directory")}this.reader.setIndex(t);var n=t;if(this.checkSignature(a.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===o.MAX_VALUE_16BITS||this.diskWithCentralDirStart===o.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===o.MAX_VALUE_16BITS||this.centralDirRecords===o.MAX_VALUE_16BITS||this.centralDirSize===o.MAX_VALUE_32BITS||this.centralDirOffset===o.MAX_VALUE_32BITS){if(this.zip64=!0,t=this.reader.lastIndexOfSignature(a.ZIP64_CENTRAL_DIRECTORY_LOCATOR),t<0)throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(t),this.checkSignature(a.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,a.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(a.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip : can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(a.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var i=n-r;if(i>0)this.isSignature(n,a.CENTRAL_FILE_HEADER)||(this.reader.zero=i);else if(i<0)throw new Error("Corrupted zip: missing "+Math.abs(i)+" bytes.")},prepareReader:function(t){this.reader=i(t)},load:function(t){this.prepareReader(t),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},e.exports=r},{"./reader/readerFor":19,"./signature":20,"./support":27,"./utf8":28,"./utils":29,"./zipEntry":31}],31:[function(t,e,n){"use strict";function r(t,e){this.options=t,this.loadOptions=e}var i=t("./reader/readerFor"),o=t("./utils"),a=t("./compressedObject"),s=t("./crc32"),u=t("./utf8"),c=t("./compressions"),f=t("./support"),l=0,h=3,d=function(t){for(var e in c)if(c.hasOwnProperty(e)&&c[e].magic===t)return c[e];return null};r.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},readLocalPart:function(t){var e,n;if(t.skip(22),this.fileNameLength=t.readInt(2),n=t.readInt(2),this.fileName=t.readData(this.fileNameLength),t.skip(n),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(e=d(this.compressionMethod),null===e)throw new Error("Corrupted zip : compression "+o.pretty(this.compressionMethod)+" unknown (inner file : "+o.transformTo("string",this.fileName)+")");this.decompressed=new a(this.compressedSize,this.uncompressedSize,this.crc32,e,t.readData(this.compressedSize))},readCentralPart:function(t){this.versionMadeBy=t.readInt(2),t.skip(2),this.bitFlag=t.readInt(2),this.compressionMethod=t.readString(2),this.date=t.readDate(),this.crc32=t.readInt(4),this.compressedSize=t.readInt(4),this.uncompressedSize=t.readInt(4);var e=t.readInt(2);if(this.extraFieldsLength=t.readInt(2),this.fileCommentLength=t.readInt(2),this.diskNumberStart=t.readInt(2),this.internalFileAttributes=t.readInt(2),this.externalFileAttributes=t.readInt(4),this.localHeaderOffset=t.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");t.skip(e),this.readExtraFields(t),this.parseZIP64ExtraField(t),this.fileComment=t.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var t=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),t===l&&(this.dosPermissions=63&this.externalFileAttributes),t===h&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(t){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===o.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===o.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===o.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===o.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(t){var e,n,r,i=t.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});t.index<i;)e=t.readInt(2),n=t.readInt(2),r=t.readData(n),this.extraFields[e]={id:e,length:n,value:r}},handleUTF8:function(){var t=f.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=u.utf8decode(this.fileName),this.fileCommentStr=u.utf8decode(this.fileComment);else{var e=this.findExtraFieldUnicodePath();if(null!==e)this.fileNameStr=e;else{var n=o.transformTo(t,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(n)}var r=this.findExtraFieldUnicodeComment();if(null!==r)this.fileCommentStr=r;else{var i=o.transformTo(t,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var t=this.extraFields[28789];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:s(this.fileName)!==e.readInt(4)?null:u.utf8decode(e.readData(t.length-5))}return null},findExtraFieldUnicodeComment:function(){var t=this.extraFields[25461];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:s(this.fileComment)!==e.readInt(4)?null:u.utf8decode(e.readData(t.length-5))}return null}},e.exports=r},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":19,"./support":27,"./utf8":28,"./utils":29}],32:[function(t,e,n){"use strict";var r=t("./stream/StreamHelper"),i=t("./stream/DataWorker"),o=t("./utf8"),a=t("./compressedObject"),s=t("./stream/GenericWorker"),u=function(t,e,n){this.name=t,this.dir=n.dir,this.date=n.date,this.comment=n.comment,this.unixPermissions=n.unixPermissions,this.dosPermissions=n.dosPermissions,this._data=e,this._dataBinary=n.binary,this.options={compression:n.compression,compressionOptions:n.compressionOptions}};u.prototype={internalStream:function(t){var e=t.toLowerCase(),n="string"===e||"text"===e;"binarystring"!==e&&"text"!==e||(e="string");var i=this._decompressWorker(),a=!this._dataBinary;return a&&!n&&(i=i.pipe(new o.Utf8EncodeWorker)),!a&&n&&(i=i.pipe(new o.Utf8DecodeWorker)),new r(i,e,"")},async:function(t,e){return this.internalStream(t).accumulate(e)},nodeStream:function(t,e){return this.internalStream(t||"nodebuffer").toNodejsStream(e)},_compressWorker:function(t,e){if(this._data instanceof a&&this._data.compression.magic===t.magic)return this._data.getCompressedWorker();var n=this._decompressWorker();return this._dataBinary||(n=n.pipe(new o.Utf8EncodeWorker)),a.createWorkerFrom(n,t,e)},_decompressWorker:function(){return this._data instanceof a?this._data.getContentWorker():this._data instanceof s?this._data:new i(this._data)}};for(var c=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],f=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},l=0;l<c.length;l++)u.prototype[c[l]]=f;e.exports=u},{"./compressedObject":2,"./stream/DataWorker":24,"./stream/GenericWorker":25,"./stream/StreamHelper":26,"./utf8":28}],33:[function(t,e,n){"use strict";function r(){if(u.length)throw u.shift()}function i(t){var e;e=s.length?s.pop():new o,e.task=t,a(e)}function o(){this.task=null}var a=t("./raw"),s=[],u=[],c=a.makeRequestCallFromTimer(r);e.exports=i,o.prototype.call=function(){try{this.task.call()}catch(t){i.onerror?i.onerror(t):(u.push(t),c())}finally{this.task=null,s[s.length]=this}}},{"./raw":34}],34:[function(t,e,n){(function(t){"use strict";function n(t){s.length||(a(),u=!0),s[s.length]=t}function r(){for(;c<s.length;){var t=c;if(c+=1,s[t].call(),c>f){for(var e=0,n=s.length-c;e<n;e++)s[e]=s[e+c];s.length-=c,c=0}}s.length=0,c=0,u=!1}function i(t){var e=1,n=new l(t),r=document.createTextNode("");return n.observe(r,{characterData:!0}),function(){e=-e,r.data=e}}function o(t){return function(){function e(){clearTimeout(n),clearInterval(r),t()}var n=setTimeout(e,0),r=setInterval(e,50)}}e.exports=n;var a,s=[],u=!1,c=0,f=1024,l=t.MutationObserver||t.WebKitMutationObserver;a="function"==typeof l?i(r):o(r),n.requestFlush=a,n.makeRequestCallFromTimer=o}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],35:[function(t,e,n){},{}],36:[function(t,e,n){function r(){f=!1,s.length?c=s.concat(c):l=-1,c.length&&i()}function i(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(s=c,c=[];++l<e;)s&&s[l].run();l=-1,e=c.length}s=null,f=!1,clearTimeout(t)}}function o(t,e){this.fun=t,this.array=e}function a(){}var s,u=e.exports={},c=[],f=!1,l=-1;u.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new o(t,e)),1!==c.length||f||setTimeout(i,0)},o.prototype.run=function(){this.fun.apply(null,this.array)},u.title="browser",u.browser=!0,u.env={},u.argv=[],u.version="",u.versions={},u.on=a,u.addListener=a,u.once=a,u.off=a,u.removeListener=a,u.removeAllListeners=a,u.emit=a,u.binding=function(t){throw new Error("process.binding is not supported")},u.cwd=function(){return"/"},u.chdir=function(t){throw new Error("process.chdir is not supported")},u.umask=function(){return 0}},{}],37:[function(e,n,r){(function(r,i){(function(){"use strict";function o(t){return"function"==typeof t||"object"==typeof t&&null!==t}function a(t){return"function"==typeof t}function s(t){return"object"==typeof t&&null!==t}function u(t){H=t}function c(t){V=t}function f(){return function(){r.nextTick(_)}}function l(){return function(){Y(_)}}function h(){var t=0,e=new Q(_),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function d(){var t=new MessageChannel;return t.port1.onmessage=_,function(){t.port2.postMessage(0)}}function p(){return function(){setTimeout(_,1)}}function _(){for(var t=0;t<$;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}$=0}function g(){try{var t=e,n=t("vertx");return Y=n.runOnLoop||n.runOnContext,l()}catch(r){return p()}}function m(){}function v(){return new TypeError("You cannot resolve a promise with itself")}function y(){return new TypeError("A promises callback cannot return that same promise.")}function w(t){try{return t.then}catch(e){return at.error=e,at}}function b(t,e,n,r){try{t.call(e,n,r)}catch(i){return i}}function k(t,e,n){V(function(t){var r=!1,i=b(n,e,function(n){r||(r=!0,e!==n?C(t,n):E(t,n))},function(e){r||(r=!0,I(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&i&&(r=!0,I(t,i))},t)}function x(t,e){e._state===it?E(t,e._result):e._state===ot?I(t,e._result):O(e,void 0,function(e){C(t,e)},function(e){I(t,e)})}function A(t,e){if(e.constructor===t.constructor)x(t,e);else{var n=w(e);n===at?I(t,at.error):void 0===n?E(t,e):a(n)?k(t,e,n):E(t,e)}}function C(t,e){t===e?I(t,v()):o(e)?A(t,e):E(t,e)}function S(t){t._onerror&&t._onerror(t._result),z(t)}function E(t,e){t._state===rt&&(t._result=e,t._state=it,0!==t._subscribers.length&&V(z,t))}function I(t,e){t._state===rt&&(t._state=ot,t._result=e,V(S,t))}function O(t,e,n,r){var i=t._subscribers,o=i.length;t._onerror=null,i[o]=e,i[o+it]=n,i[o+ot]=r,0===o&&t._state&&V(z,t)}function z(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,i,o=t._result,a=0;a<e.length;a+=3)r=e[a],i=e[a+n],r?N(n,r,i,o):i(o);t._subscribers.length=0}}function j(){this.error=null}function T(t,e){try{return t(e)}catch(n){return st.error=n,st}}function N(t,e,n,r){var i,o,s,u,c=a(n);if(c){if(i=T(n,r),i===st?(u=!0,o=i.error,i=null):s=!0,e===i)return void I(e,y())}else i=r,s=!0;e._state!==rt||(c&&s?C(e,i):u?I(e,o):t===it?E(e,i):t===ot&&I(e,i))}function F(t,e){try{e(function(e){C(t,e)},function(e){I(t,e)})}catch(n){I(t,n)}}function R(t,e){var n=this;n._instanceConstructor=t,n.promise=new t(m),n._validateInput(e)?(n._input=e,n.length=e.length,n._remaining=e.length,n._init(),0===n.length?E(n.promise,n._result):(n.length=n.length||0,n._enumerate(),0===n._remaining&&E(n.promise,n._result))):I(n.promise,n._validationError())}function D(t){return new ut(this,t).promise}function B(t){function e(t){C(i,t)}function n(t){I(i,t)}var r=this,i=new r(m);if(!K(t))return I(i,new TypeError("You must pass an array to race.")),i;for(var o=t.length,a=0;i._state===rt&&a<o;a++)O(r.resolve(t[a]),void 0,e,n);return i}function L(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(m);return C(n,t),n}function U(t){var e=this,n=new e(m);return I(n,t),n}function P(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function M(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function W(t){this._id=dt++,this._state=void 0,this._result=void 0,this._subscribers=[],m!==t&&(a(t)||P(),this instanceof W||M(),F(this,t))}function Z(){var t;if("undefined"!=typeof i)t=i;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;n&&"[object Promise]"===Object.prototype.toString.call(n.resolve())&&!n.cast||(t.Promise=pt)}var q;q=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var Y,H,G,K=q,$=0,V=({}.toString,function(t,e){nt[$]=t,nt[$+1]=e,$+=2,2===$&&(H?H(_):G())}),X="undefined"!=typeof window?window:void 0,J=X||{},Q=J.MutationObserver||J.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);G=tt?f():Q?h():et?d():void 0===X&&"function"==typeof e?g():p();var rt=void 0,it=1,ot=2,at=new j,st=new j;R.prototype._validateInput=function(t){return K(t)},R.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},R.prototype._init=function(){this._result=new Array(this.length)};var ut=R;R.prototype._enumerate=function(){for(var t=this,e=t.length,n=t.promise,r=t._input,i=0;n._state===rt&&i<e;i++)t._eachEntry(r[i],i)},R.prototype._eachEntry=function(t,e){var n=this,r=n._instanceConstructor;s(t)?t.constructor===r&&t._state!==rt?(t._onerror=null,n._settledAt(t._state,e,t._result)):n._willSettleAt(r.resolve(t),e):(n._remaining--,n._result[e]=t)},R.prototype._settledAt=function(t,e,n){var r=this,i=r.promise;i._state===rt&&(r._remaining--,t===ot?I(i,n):r._result[e]=n),0===r._remaining&&E(i,r._result)},R.prototype._willSettleAt=function(t,e){var n=this;O(t,void 0,function(t){n._settledAt(it,e,t)},function(t){n._settledAt(ot,e,t)})};var ct=D,ft=B,lt=L,ht=U,dt=0,pt=W;W.all=ct,W.race=ft,W.resolve=lt,W.reject=ht,W._setScheduler=u,W._setAsap=c,W._asap=V,W.prototype={constructor:W,then:function(t,e){var n=this,r=n._state;if(r===it&&!t||r===ot&&!e)return this;var i=new this.constructor(m),o=n._result;if(r){var a=arguments[r-1];V(function(){N(r,i,a,o)})}else O(n,i,t,e);return i},"catch":function(t){return this.then(null,t)}};var _t=Z,gt={Promise:pt,polyfill:_t};"function"==typeof t&&t.amd?t(function(){return gt}):"undefined"!=typeof n&&n.exports?n.exports=gt:"undefined"!=typeof this&&(this.ES6Promise=gt),_t()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:36}],38:[function(t,e,n){"use strict";var r=t("./lib/utils/common").assign,i=t("./lib/deflate"),o=t("./lib/inflate"),a=t("./lib/zlib/constants"),s={};r(s,i,o,a),e.exports=s},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(t,e,n){"use strict";function r(t){if(!(this instanceof r))return new r(t);this.options=u.assign({level:v,method:w,chunkSize:16384,windowBits:15,memLevel:8,strategy:y,to:""},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var n=s.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(n!==_)throw new Error(f[n]);if(e.header&&s.deflateSetHeader(this.strm,e.header),e.dictionary){var i;if(i="string"==typeof e.dictionary?c.string2buf(e.dictionary):"[object ArrayBuffer]"===h.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,n=s.deflateSetDictionary(this.strm,i),n!==_)throw new Error(f[n]);this._dict_set=!0}}function i(t,e){var n=new r(e);if(n.push(t,!0),n.err)throw n.msg;return n.result}function o(t,e){return e=e||{},e.raw=!0,i(t,e)}function a(t,e){return e=e||{},e.gzip=!0,i(t,e)}var s=t("./zlib/deflate"),u=t("./utils/common"),c=t("./utils/strings"),f=t("./zlib/messages"),l=t("./zlib/zstream"),h=Object.prototype.toString,d=0,p=4,_=0,g=1,m=2,v=-1,y=0,w=8;r.prototype.push=function(t,e){var n,r,i=this.strm,o=this.options.chunkSize;if(this.ended)return!1;r=e===~~e?e:e===!0?p:d,"string"==typeof t?i.input=c.string2buf(t):"[object ArrayBuffer]"===h.call(t)?i.input=new Uint8Array(t):i.input=t,
-i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new u.Buf8(o),i.next_out=0,i.avail_out=o),n=s.deflate(i,r),n!==g&&n!==_)return this.onEnd(n),this.ended=!0,!1;0!==i.avail_out&&(0!==i.avail_in||r!==p&&r!==m)||("string"===this.options.to?this.onData(c.buf2binstring(u.shrinkBuf(i.output,i.next_out))):this.onData(u.shrinkBuf(i.output,i.next_out)))}while((i.avail_in>0||0===i.avail_out)&&n!==g);return r===p?(n=s.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===_):r!==m||(this.onEnd(_),i.avail_out=0,!0)},r.prototype.onData=function(t){this.chunks.push(t)},r.prototype.onEnd=function(t){t===_&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=u.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},n.Deflate=r,n.deflate=i,n.deflateRaw=o,n.gzip=a},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(t,e,n){"use strict";function r(t){if(!(this instanceof r))return new r(t);this.options=s.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0===(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var n=a.inflateInit2(this.strm,e.windowBits);if(n!==c.Z_OK)throw new Error(f[n]);this.header=new h,a.inflateGetHeader(this.strm,this.header)}function i(t,e){var n=new r(e);if(n.push(t,!0),n.err)throw n.msg;return n.result}function o(t,e){return e=e||{},e.raw=!0,i(t,e)}var a=t("./zlib/inflate"),s=t("./utils/common"),u=t("./utils/strings"),c=t("./zlib/constants"),f=t("./zlib/messages"),l=t("./zlib/zstream"),h=t("./zlib/gzheader"),d=Object.prototype.toString;r.prototype.push=function(t,e){var n,r,i,o,f,l,h=this.strm,p=this.options.chunkSize,_=this.options.dictionary,g=!1;if(this.ended)return!1;r=e===~~e?e:e===!0?c.Z_FINISH:c.Z_NO_FLUSH,"string"==typeof t?h.input=u.binstring2buf(t):"[object ArrayBuffer]"===d.call(t)?h.input=new Uint8Array(t):h.input=t,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new s.Buf8(p),h.next_out=0,h.avail_out=p),n=a.inflate(h,c.Z_NO_FLUSH),n===c.Z_NEED_DICT&&_&&(l="string"==typeof _?u.string2buf(_):"[object ArrayBuffer]"===d.call(_)?new Uint8Array(_):_,n=a.inflateSetDictionary(this.strm,l)),n===c.Z_BUF_ERROR&&g===!0&&(n=c.Z_OK,g=!1),n!==c.Z_STREAM_END&&n!==c.Z_OK)return this.onEnd(n),this.ended=!0,!1;h.next_out&&(0!==h.avail_out&&n!==c.Z_STREAM_END&&(0!==h.avail_in||r!==c.Z_FINISH&&r!==c.Z_SYNC_FLUSH)||("string"===this.options.to?(i=u.utf8border(h.output,h.next_out),o=h.next_out-i,f=u.buf2string(h.output,i),h.next_out=o,h.avail_out=p-o,o&&s.arraySet(h.output,h.output,i,o,0),this.onData(f)):this.onData(s.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(g=!0)}while((h.avail_in>0||0===h.avail_out)&&n!==c.Z_STREAM_END);return n===c.Z_STREAM_END&&(r=c.Z_FINISH),r===c.Z_FINISH?(n=a.inflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===c.Z_OK):r!==c.Z_SYNC_FLUSH||(this.onEnd(c.Z_OK),h.avail_out=0,!0)},r.prototype.onData=function(t){this.chunks.push(t)},r.prototype.onEnd=function(t){t===c.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},n.Inflate=r,n.inflate=i,n.inflateRaw=o,n.ungzip=i},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(t,e,n){"use strict";var r="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;n.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var n=e.shift();if(n){if("object"!=typeof n)throw new TypeError(n+"must be non-object");for(var r in n)n.hasOwnProperty(r)&&(t[r]=n[r])}}return t},n.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var i={arraySet:function(t,e,n,r,i){if(e.subarray&&t.subarray)return void t.set(e.subarray(n,n+r),i);for(var o=0;o<r;o++)t[i+o]=e[n+o]},flattenChunks:function(t){var e,n,r,i,o,a;for(r=0,e=0,n=t.length;e<n;e++)r+=t[e].length;for(a=new Uint8Array(r),i=0,e=0,n=t.length;e<n;e++)o=t[e],a.set(o,i),i+=o.length;return a}},o={arraySet:function(t,e,n,r,i){for(var o=0;o<r;o++)t[i+o]=e[n+o]},flattenChunks:function(t){return[].concat.apply([],t)}};n.setTyped=function(t){t?(n.Buf8=Uint8Array,n.Buf16=Uint16Array,n.Buf32=Int32Array,n.assign(n,i)):(n.Buf8=Array,n.Buf16=Array,n.Buf32=Array,n.assign(n,o))},n.setTyped(r)},{}],42:[function(t,e,n){"use strict";function r(t,e){if(e<65537&&(t.subarray&&a||!t.subarray&&o))return String.fromCharCode.apply(null,i.shrinkBuf(t,e));for(var n="",r=0;r<e;r++)n+=String.fromCharCode(t[r]);return n}var i=t("./common"),o=!0,a=!0;try{String.fromCharCode.apply(null,[0])}catch(s){o=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(s){a=!1}for(var u=new i.Buf8(256),c=0;c<256;c++)u[c]=c>=252?6:c>=248?5:c>=240?4:c>=224?3:c>=192?2:1;u[254]=u[254]=1,n.string2buf=function(t){var e,n,r,o,a,s=t.length,u=0;for(o=0;o<s;o++)n=t.charCodeAt(o),55296===(64512&n)&&o+1<s&&(r=t.charCodeAt(o+1),56320===(64512&r)&&(n=65536+(n-55296<<10)+(r-56320),o++)),u+=n<128?1:n<2048?2:n<65536?3:4;for(e=new i.Buf8(u),a=0,o=0;a<u;o++)n=t.charCodeAt(o),55296===(64512&n)&&o+1<s&&(r=t.charCodeAt(o+1),56320===(64512&r)&&(n=65536+(n-55296<<10)+(r-56320),o++)),n<128?e[a++]=n:n<2048?(e[a++]=192|n>>>6,e[a++]=128|63&n):n<65536?(e[a++]=224|n>>>12,e[a++]=128|n>>>6&63,e[a++]=128|63&n):(e[a++]=240|n>>>18,e[a++]=128|n>>>12&63,e[a++]=128|n>>>6&63,e[a++]=128|63&n);return e},n.buf2binstring=function(t){return r(t,t.length)},n.binstring2buf=function(t){for(var e=new i.Buf8(t.length),n=0,r=e.length;n<r;n++)e[n]=t.charCodeAt(n);return e},n.buf2string=function(t,e){var n,i,o,a,s=e||t.length,c=new Array(2*s);for(i=0,n=0;n<s;)if(o=t[n++],o<128)c[i++]=o;else if(a=u[o],a>4)c[i++]=65533,n+=a-1;else{for(o&=2===a?31:3===a?15:7;a>1&&n<s;)o=o<<6|63&t[n++],a--;a>1?c[i++]=65533:o<65536?c[i++]=o:(o-=65536,c[i++]=55296|o>>10&1023,c[i++]=56320|1023&o)}return r(c,i)},n.utf8border=function(t,e){var n;for(e=e||t.length,e>t.length&&(e=t.length),n=e-1;n>=0&&128===(192&t[n]);)n--;return n<0?e:0===n?e:n+u[t[n]]>e?n:e}},{"./common":41}],43:[function(t,e,n){"use strict";function r(t,e,n,r){for(var i=65535&t|0,o=t>>>16&65535|0,a=0;0!==n;){a=n>2e3?2e3:n,n-=a;do i=i+e[r++]|0,o=o+i|0;while(--a);i%=65521,o%=65521}return i|o<<16|0}e.exports=r},{}],44:[function(t,e,n){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(t,e,n){"use strict";function r(){for(var t,e=[],n=0;n<256;n++){t=n;for(var r=0;r<8;r++)t=1&t?3988292384^t>>>1:t>>>1;e[n]=t}return e}function i(t,e,n,r){var i=o,a=r+n;t^=-1;for(var s=r;s<a;s++)t=t>>>8^i[255&(t^e[s])];return t^-1}var o=r();e.exports=i},{}],46:[function(t,e,n){"use strict";function r(t,e){return t.msg=F[e],e}function i(t){return(t<<1)-(t>4?9:0)}function o(t){for(var e=t.length;--e>=0;)t[e]=0}function a(t){var e=t.state,n=e.pending;n>t.avail_out&&(n=t.avail_out),0!==n&&(z.arraySet(t.output,e.pending_buf,e.pending_out,n,t.next_out),t.next_out+=n,e.pending_out+=n,t.total_out+=n,t.avail_out-=n,e.pending-=n,0===e.pending&&(e.pending_out=0))}function s(t,e){j._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,a(t.strm)}function u(t,e){t.pending_buf[t.pending++]=e}function c(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function f(t,e,n,r){var i=t.avail_in;return i>r&&(i=r),0===i?0:(t.avail_in-=i,z.arraySet(e,t.input,t.next_in,i,n),1===t.state.wrap?t.adler=T(t.adler,e,i,n):2===t.state.wrap&&(t.adler=N(t.adler,e,i,n)),t.next_in+=i,t.total_in+=i,i)}function l(t,e){var n,r,i=t.max_chain_length,o=t.strstart,a=t.prev_length,s=t.nice_match,u=t.strstart>t.w_size-lt?t.strstart-(t.w_size-lt):0,c=t.window,f=t.w_mask,l=t.prev,h=t.strstart+ft,d=c[o+a-1],p=c[o+a];t.prev_length>=t.good_match&&(i>>=2),s>t.lookahead&&(s=t.lookahead);do if(n=e,c[n+a]===p&&c[n+a-1]===d&&c[n]===c[o]&&c[++n]===c[o+1]){o+=2,n++;do;while(c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&o<h);if(r=ft-(h-o),o=h-ft,r>a){if(t.match_start=e,a=r,r>=s)break;d=c[o+a-1],p=c[o+a]}}while((e=l[e&f])>u&&0!==--i);return a<=t.lookahead?a:t.lookahead}function h(t){var e,n,r,i,o,a=t.w_size;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=a+(a-lt)){z.arraySet(t.window,t.window,a,a,0),t.match_start-=a,t.strstart-=a,t.block_start-=a,n=t.hash_size,e=n;do r=t.head[--e],t.head[e]=r>=a?r-a:0;while(--n);n=a,e=n;do r=t.prev[--e],t.prev[e]=r>=a?r-a:0;while(--n);i+=a}if(0===t.strm.avail_in)break;if(n=f(t.strm,t.window,t.strstart+t.lookahead,i),t.lookahead+=n,t.lookahead+t.insert>=ct)for(o=t.strstart-t.insert,t.ins_h=t.window[o],t.ins_h=(t.ins_h<<t.hash_shift^t.window[o+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[o+ct-1])&t.hash_mask,t.prev[o&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=o,o++,t.insert--,!(t.lookahead+t.insert<ct)););}while(t.lookahead<lt&&0!==t.strm.avail_in)}function d(t,e){var n=65535;for(n>t.pending_buf_size-5&&(n=t.pending_buf_size-5);;){if(t.lookahead<=1){if(h(t),0===t.lookahead&&e===R)return wt;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var r=t.block_start+n;if((0===t.strstart||t.strstart>=r)&&(t.lookahead=t.strstart-r,t.strstart=r,s(t,!1),0===t.strm.avail_out))return wt;if(t.strstart-t.block_start>=t.w_size-lt&&(s(t,!1),0===t.strm.avail_out))return wt}return t.insert=0,e===L?(s(t,!0),0===t.strm.avail_out?kt:xt):t.strstart>t.block_start&&(s(t,!1),0===t.strm.avail_out)?wt:wt}function p(t,e){for(var n,r;;){if(t.lookahead<lt){if(h(t),t.lookahead<lt&&e===R)return wt;if(0===t.lookahead)break}if(n=0,t.lookahead>=ct&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+ct-1])&t.hash_mask,n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==n&&t.strstart-n<=t.w_size-lt&&(t.match_length=l(t,n)),t.match_length>=ct)if(r=j._tr_tally(t,t.strstart-t.match_start,t.match_length-ct),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=ct){t.match_length--;do t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+ct-1])&t.hash_mask,n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else r=j._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(r&&(s(t,!1),0===t.strm.avail_out))return wt}return t.insert=t.strstart<ct-1?t.strstart:ct-1,e===L?(s(t,!0),0===t.strm.avail_out?kt:xt):t.last_lit&&(s(t,!1),0===t.strm.avail_out)?wt:bt}function _(t,e){for(var n,r,i;;){if(t.lookahead<lt){if(h(t),t.lookahead<lt&&e===R)return wt;if(0===t.lookahead)break}if(n=0,t.lookahead>=ct&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+ct-1])&t.hash_mask,n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=ct-1,0!==n&&t.prev_length<t.max_lazy_match&&t.strstart-n<=t.w_size-lt&&(t.match_length=l(t,n),t.match_length<=5&&(t.strategy===H||t.match_length===ct&&t.strstart-t.match_start>4096)&&(t.match_length=ct-1)),t.prev_length>=ct&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-ct,r=j._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-ct),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=i&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+ct-1])&t.hash_mask,n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(0!==--t.prev_length);if(t.match_available=0,t.match_length=ct-1,t.strstart++,r&&(s(t,!1),0===t.strm.avail_out))return wt}else if(t.match_available){if(r=j._tr_tally(t,0,t.window[t.strstart-1]),r&&s(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return wt}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(r=j._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<ct-1?t.strstart:ct-1,e===L?(s(t,!0),0===t.strm.avail_out?kt:xt):t.last_lit&&(s(t,!1),0===t.strm.avail_out)?wt:bt}function g(t,e){for(var n,r,i,o,a=t.window;;){if(t.lookahead<=ft){if(h(t),t.lookahead<=ft&&e===R)return wt;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=ct&&t.strstart>0&&(i=t.strstart-1,r=a[i],r===a[++i]&&r===a[++i]&&r===a[++i])){o=t.strstart+ft;do;while(r===a[++i]&&r===a[++i]&&r===a[++i]&&r===a[++i]&&r===a[++i]&&r===a[++i]&&r===a[++i]&&r===a[++i]&&i<o);t.match_length=ft-(o-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=ct?(n=j._tr_tally(t,1,t.match_length-ct),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(n=j._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),n&&(s(t,!1),0===t.strm.avail_out))return wt}return t.insert=0,e===L?(s(t,!0),0===t.strm.avail_out?kt:xt):t.last_lit&&(s(t,!1),0===t.strm.avail_out)?wt:bt}function m(t,e){for(var n;;){if(0===t.lookahead&&(h(t),0===t.lookahead)){if(e===R)return wt;break}if(t.match_length=0,n=j._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,n&&(s(t,!1),0===t.strm.avail_out))return wt}return t.insert=0,e===L?(s(t,!0),0===t.strm.avail_out?kt:xt):t.last_lit&&(s(t,!1),0===t.strm.avail_out)?wt:bt}function v(t,e,n,r,i){this.good_length=t,this.max_lazy=e,this.nice_length=n,this.max_chain=r,this.func=i}function y(t){t.window_size=2*t.w_size,o(t.head),t.max_lazy_match=O[t.level].max_lazy,t.good_match=O[t.level].good_length,t.nice_match=O[t.level].nice_length,t.max_chain_length=O[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=ct-1,t.match_available=0,t.ins_h=0}function w(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=J,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new z.Buf16(2*st),this.dyn_dtree=new z.Buf16(2*(2*ot+1)),this.bl_tree=new z.Buf16(2*(2*at+1)),o(this.dyn_ltree),o(this.dyn_dtree),o(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new z.Buf16(ut+1),this.heap=new z.Buf16(2*it+1),o(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new z.Buf16(2*it+1),o(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function b(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=X,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?dt:vt,t.adler=2===e.wrap?0:1,e.last_flush=R,j._tr_init(e),P):r(t,W)}function k(t){var e=b(t);return e===P&&y(t.state),e}function x(t,e){return t&&t.state?2!==t.state.wrap?W:(t.state.gzhead=e,P):W}function A(t,e,n,i,o,a){if(!t)return W;var s=1;if(e===Y&&(e=6),i<0?(s=0,i=-i):i>15&&(s=2,i-=16),o<1||o>Q||n!==J||i<8||i>15||e<0||e>9||a<0||a>$)return r(t,W);8===i&&(i=9);var u=new w;return t.state=u,u.strm=t,u.wrap=s,u.gzhead=null,u.w_bits=i,u.w_size=1<<u.w_bits,u.w_mask=u.w_size-1,u.hash_bits=o+7,u.hash_size=1<<u.hash_bits,u.hash_mask=u.hash_size-1,u.hash_shift=~~((u.hash_bits+ct-1)/ct),u.window=new z.Buf8(2*u.w_size),u.head=new z.Buf16(u.hash_size),u.prev=new z.Buf16(u.w_size),u.lit_bufsize=1<<o+6,u.pending_buf_size=4*u.lit_bufsize,u.pending_buf=new z.Buf8(u.pending_buf_size),u.d_buf=u.lit_bufsize>>1,u.l_buf=3*u.lit_bufsize,u.level=e,u.strategy=a,u.method=n,k(t)}function C(t,e){return A(t,e,J,tt,et,V)}function S(t,e){var n,s,f,l;if(!t||!t.state||e>U||e<0)return t?r(t,W):W;if(s=t.state,!t.output||!t.input&&0!==t.avail_in||s.status===yt&&e!==L)return r(t,0===t.avail_out?q:W);if(s.strm=t,n=s.last_flush,s.last_flush=e,s.status===dt)if(2===s.wrap)t.adler=0,u(s,31),u(s,139),u(s,8),s.gzhead?(u(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(s.gzhead.extra?4:0)+(s.gzhead.name?8:0)+(s.gzhead.comment?16:0)),u(s,255&s.gzhead.time),u(s,s.gzhead.time>>8&255),u(s,s.gzhead.time>>16&255),u(s,s.gzhead.time>>24&255),u(s,9===s.level?2:s.strategy>=G||s.level<2?4:0),u(s,255&s.gzhead.os),s.gzhead.extra&&s.gzhead.extra.length&&(u(s,255&s.gzhead.extra.length),u(s,s.gzhead.extra.length>>8&255)),s.gzhead.hcrc&&(t.adler=N(t.adler,s.pending_buf,s.pending,0)),s.gzindex=0,s.status=pt):(u(s,0),u(s,0),u(s,0),u(s,0),u(s,0),u(s,9===s.level?2:s.strategy>=G||s.level<2?4:0),u(s,At),s.status=vt);else{var h=J+(s.w_bits-8<<4)<<8,d=-1;d=s.strategy>=G||s.level<2?0:s.level<6?1:6===s.level?2:3,h|=d<<6,0!==s.strstart&&(h|=ht),h+=31-h%31,s.status=vt,c(s,h),0!==s.strstart&&(c(s,t.adler>>>16),c(s,65535&t.adler)),t.adler=1}if(s.status===pt)if(s.gzhead.extra){for(f=s.pending;s.gzindex<(65535&s.gzhead.extra.length)&&(s.pending!==s.pending_buf_size||(s.gzhead.hcrc&&s.pending>f&&(t.adler=N(t.adler,s.pending_buf,s.pending-f,f)),a(t),f=s.pending,s.pending!==s.pending_buf_size));)u(s,255&s.gzhead.extra[s.gzindex]),s.gzindex++;s.gzhead.hcrc&&s.pending>f&&(t.adler=N(t.adler,s.pending_buf,s.pending-f,f)),s.gzindex===s.gzhead.extra.length&&(s.gzindex=0,s.status=_t)}else s.status=_t;if(s.status===_t)if(s.gzhead.name){f=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>f&&(t.adler=N(t.adler,s.pending_buf,s.pending-f,f)),a(t),f=s.pending,s.pending===s.pending_buf_size)){l=1;break}l=s.gzindex<s.gzhead.name.length?255&s.gzhead.name.charCodeAt(s.gzindex++):0,u(s,l)}while(0!==l);s.gzhead.hcrc&&s.pending>f&&(t.adler=N(t.adler,s.pending_buf,s.pending-f,f)),0===l&&(s.gzindex=0,s.status=gt)}else s.status=gt;if(s.status===gt)if(s.gzhead.comment){f=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>f&&(t.adler=N(t.adler,s.pending_buf,s.pending-f,f)),a(t),f=s.pending,s.pending===s.pending_buf_size)){l=1;break}l=s.gzindex<s.gzhead.comment.length?255&s.gzhead.comment.charCodeAt(s.gzindex++):0,u(s,l)}while(0!==l);s.gzhead.hcrc&&s.pending>f&&(t.adler=N(t.adler,s.pending_buf,s.pending-f,f)),0===l&&(s.status=mt)}else s.status=mt;if(s.status===mt&&(s.gzhead.hcrc?(s.pending+2>s.pending_buf_size&&a(t),s.pending+2<=s.pending_buf_size&&(u(s,255&t.adler),u(s,t.adler>>8&255),t.adler=0,s.status=vt)):s.status=vt),0!==s.pending){if(a(t),0===t.avail_out)return s.last_flush=-1,P}else if(0===t.avail_in&&i(e)<=i(n)&&e!==L)return r(t,q);if(s.status===yt&&0!==t.avail_in)return r(t,q);if(0!==t.avail_in||0!==s.lookahead||e!==R&&s.status!==yt){var p=s.strategy===G?m(s,e):s.strategy===K?g(s,e):O[s.level].func(s,e);if(p!==kt&&p!==xt||(s.status=yt),p===wt||p===kt)return 0===t.avail_out&&(s.last_flush=-1),P;if(p===bt&&(e===D?j._tr_align(s):e!==U&&(j._tr_stored_block(s,0,0,!1),e===B&&(o(s.head),0===s.lookahead&&(s.strstart=0,s.block_start=0,s.insert=0))),a(t),0===t.avail_out))return s.last_flush=-1,P}return e!==L?P:s.wrap<=0?M:(2===s.wrap?(u(s,255&t.adler),u(s,t.adler>>8&255),u(s,t.adler>>16&255),u(s,t.adler>>24&255),u(s,255&t.total_in),u(s,t.total_in>>8&255),u(s,t.total_in>>16&255),u(s,t.total_in>>24&255)):(c(s,t.adler>>>16),c(s,65535&t.adler)),a(t),s.wrap>0&&(s.wrap=-s.wrap),0!==s.pending?P:M)}function E(t){var e;return t&&t.state?(e=t.state.status,e!==dt&&e!==pt&&e!==_t&&e!==gt&&e!==mt&&e!==vt&&e!==yt?r(t,W):(t.state=null,e===vt?r(t,Z):P)):W}function I(t,e){var n,r,i,a,s,u,c,f,l=e.length;if(!t||!t.state)return W;if(n=t.state,a=n.wrap,2===a||1===a&&n.status!==dt||n.lookahead)return W;for(1===a&&(t.adler=T(t.adler,e,l,0)),n.wrap=0,l>=n.w_size&&(0===a&&(o(n.head),n.strstart=0,n.block_start=0,n.insert=0),f=new z.Buf8(n.w_size),z.arraySet(f,e,l-n.w_size,n.w_size,0),e=f,l=n.w_size),s=t.avail_in,u=t.next_in,c=t.input,t.avail_in=l,t.next_in=0,t.input=e,h(n);n.lookahead>=ct;){r=n.strstart,i=n.lookahead-(ct-1);do n.ins_h=(n.ins_h<<n.hash_shift^n.window[r+ct-1])&n.hash_mask,n.prev[r&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=r,r++;while(--i);n.strstart=r,n.lookahead=ct-1,h(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=ct-1,n.match_available=0,t.next_in=u,t.input=c,t.avail_in=s,n.wrap=a,P}var O,z=t("../utils/common"),j=t("./trees"),T=t("./adler32"),N=t("./crc32"),F=t("./messages"),R=0,D=1,B=3,L=4,U=5,P=0,M=1,W=-2,Z=-3,q=-5,Y=-1,H=1,G=2,K=3,$=4,V=0,X=2,J=8,Q=9,tt=15,et=8,nt=29,rt=256,it=rt+1+nt,ot=30,at=19,st=2*it+1,ut=15,ct=3,ft=258,lt=ft+ct+1,ht=32,dt=42,pt=69,_t=73,gt=91,mt=103,vt=113,yt=666,wt=1,bt=2,kt=3,xt=4,At=3;O=[new v(0,0,0,0,d),new v(4,4,8,4,p),new v(4,5,16,8,p),new v(4,6,32,32,p),new v(4,4,16,16,_),new v(8,16,32,32,_),new v(8,16,128,128,_),new v(8,32,128,256,_),new v(32,128,258,1024,_),new v(32,258,258,4096,_)],n.deflateInit=C,n.deflateInit2=A,n.deflateReset=k,n.deflateResetKeep=b,n.deflateSetHeader=x,n.deflate=S,n.deflateEnd=E,n.deflateSetDictionary=I,n.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(t,e,n){"use strict";function r(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}e.exports=r},{}],48:[function(t,e,n){"use strict";var r=30,i=12;e.exports=function(t,e){var n,o,a,s,u,c,f,l,h,d,p,_,g,m,v,y,w,b,k,x,A,C,S,E,I;n=t.state,o=t.next_in,E=t.input,a=o+(t.avail_in-5),s=t.next_out,I=t.output,u=s-(e-t.avail_out),c=s+(t.avail_out-257),f=n.dmax,l=n.wsize,h=n.whave,d=n.wnext,p=n.window,_=n.hold,g=n.bits,m=n.lencode,v=n.distcode,y=(1<<n.lenbits)-1,w=(1<<n.distbits)-1;t:do{g<15&&(_+=E[o++]<<g,g+=8,_+=E[o++]<<g,g+=8),b=m[_&y];e:for(;;){if(k=b>>>24,_>>>=k,g-=k,k=b>>>16&255,0===k)I[s++]=65535&b;else{if(!(16&k)){if(0===(64&k)){b=m[(65535&b)+(_&(1<<k)-1)];continue e}if(32&k){n.mode=i;break t}t.msg="invalid literal/length code",n.mode=r;break t}x=65535&b,k&=15,k&&(g<k&&(_+=E[o++]<<g,g+=8),x+=_&(1<<k)-1,_>>>=k,g-=k),g<15&&(_+=E[o++]<<g,g+=8,_+=E[o++]<<g,g+=8),b=v[_&w];n:for(;;){if(k=b>>>24,_>>>=k,g-=k,k=b>>>16&255,!(16&k)){if(0===(64&k)){b=v[(65535&b)+(_&(1<<k)-1)];continue n}t.msg="invalid distance code",n.mode=r;break t}if(A=65535&b,k&=15,g<k&&(_+=E[o++]<<g,g+=8,g<k&&(_+=E[o++]<<g,g+=8)),A+=_&(1<<k)-1,A>f){t.msg="invalid distance too far back",n.mode=r;break t}if(_>>>=k,g-=k,k=s-u,A>k){if(k=A-k,k>h&&n.sane){t.msg="invalid distance too far back",n.mode=r;break t}if(C=0,S=p,0===d){if(C+=l-k,k<x){x-=k;do I[s++]=p[C++];while(--k);C=s-A,S=I}}else if(d<k){if(C+=l+d-k,k-=d,k<x){x-=k;do I[s++]=p[C++];while(--k);if(C=0,d<x){k=d,x-=k;do I[s++]=p[C++];while(--k);C=s-A,S=I}}}else if(C+=d-k,k<x){x-=k;do I[s++]=p[C++];while(--k);C=s-A,S=I}for(;x>2;)I[s++]=S[C++],I[s++]=S[C++],I[s++]=S[C++],x-=3;x&&(I[s++]=S[C++],x>1&&(I[s++]=S[C++]))}else{C=s-A;do I[s++]=I[C++],I[s++]=I[C++],I[s++]=I[C++],x-=3;while(x>2);x&&(I[s++]=I[C++],x>1&&(I[s++]=I[C++]))}break}}break}}while(o<a&&s<c);x=g>>3,o-=x,g-=x<<3,_&=(1<<g)-1,t.next_in=o,t.next_out=s,t.avail_in=o<a?5+(a-o):5-(o-a),t.avail_out=s<c?257+(c-s):257-(s-c),n.hold=_,n.bits=g}},{}],49:[function(t,e,n){"use strict";function r(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function i(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new v.Buf16(320),this.work=new v.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function o(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=B,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new v.Buf32(_t),e.distcode=e.distdyn=new v.Buf32(gt),e.sane=1,e.back=-1,O):T}function a(t){var e;return t&&t.state?(e=t.state,e.wsize=0,e.whave=0,e.wnext=0,o(t)):T}function s(t,e){var n,r;return t&&t.state?(r=t.state,e<0?(n=0,e=-e):(n=(e>>4)+1,e<48&&(e&=15)),e&&(e<8||e>15)?T:(null!==r.window&&r.wbits!==e&&(r.window=null),r.wrap=n,r.wbits=e,a(t))):T}function u(t,e){var n,r;return t?(r=new i,t.state=r,r.window=null,n=s(t,e),n!==O&&(t.state=null),n):T}function c(t){return u(t,vt)}function f(t){if(yt){var e;for(g=new v.Buf32(512),m=new v.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(k(A,t.lens,0,288,g,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;k(C,t.lens,0,32,m,0,t.work,{bits:5}),yt=!1}t.lencode=g,t.lenbits=9,t.distcode=m,t.distbits=5}function l(t,e,n,r){var i,o=t.state;return null===o.window&&(o.wsize=1<<o.wbits,o.wnext=0,o.whave=0,o.window=new v.Buf8(o.wsize)),r>=o.wsize?(v.arraySet(o.window,e,n-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):(i=o.wsize-o.wnext,i>r&&(i=r),v.arraySet(o.window,e,n-r,i,o.wnext),r-=i,r?(v.arraySet(o.window,e,n-r,r,0),o.wnext=r,o.whave=o.wsize):(o.wnext+=i,o.wnext===o.wsize&&(o.wnext=0),o.whave<o.wsize&&(o.whave+=i))),0}function h(t,e){var n,i,o,a,s,u,c,h,d,p,_,g,m,_t,gt,mt,vt,yt,wt,bt,kt,xt,At,Ct,St=0,Et=new v.Buf8(4),It=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return T;n=t.state,n.mode===K&&(n.mode=$),s=t.next_out,o=t.output,c=t.avail_out,a=t.next_in,i=t.input,u=t.avail_in,h=n.hold,d=n.bits,p=u,_=c,xt=O;t:for(;;)switch(n.mode){case B:if(0===n.wrap){n.mode=$;break}for(;d<16;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}if(2&n.wrap&&35615===h){n.check=0,Et[0]=255&h,Et[1]=h>>>8&255,n.check=w(n.check,Et,2,0),h=0,d=0,n.mode=L;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&h)<<8)+(h>>8))%31){t.msg="incorrect header check",n.mode=ht;break}if((15&h)!==D){t.msg="unknown compression method",n.mode=ht;break}if(h>>>=4,d-=4,kt=(15&h)+8,0===n.wbits)n.wbits=kt;else if(kt>n.wbits){t.msg="invalid window size",n.mode=ht;break}n.dmax=1<<kt,t.adler=n.check=1,n.mode=512&h?H:K,h=0,d=0;break;case L:for(;d<16;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}if(n.flags=h,(255&n.flags)!==D){t.msg="unknown compression method",n.mode=ht;break}if(57344&n.flags){t.msg="unknown header flags set",n.mode=ht;break}n.head&&(n.head.text=h>>8&1),512&n.flags&&(Et[0]=255&h,Et[1]=h>>>8&255,n.check=w(n.check,Et,2,0)),h=0,d=0,n.mode=U;case U:for(;d<32;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}n.head&&(n.head.time=h),512&n.flags&&(Et[0]=255&h,Et[1]=h>>>8&255,Et[2]=h>>>16&255,Et[3]=h>>>24&255,n.check=w(n.check,Et,4,0)),h=0,d=0,n.mode=P;case P:for(;d<16;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}n.head&&(n.head.xflags=255&h,n.head.os=h>>8),512&n.flags&&(Et[0]=255&h,Et[1]=h>>>8&255,n.check=w(n.check,Et,2,0)),h=0,d=0,n.mode=M;case M:if(1024&n.flags){for(;d<16;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}n.length=h,n.head&&(n.head.extra_len=h),512&n.flags&&(Et[0]=255&h,Et[1]=h>>>8&255,n.check=w(n.check,Et,2,0)),h=0,d=0}else n.head&&(n.head.extra=null);n.mode=W;case W:if(1024&n.flags&&(g=n.length,g>u&&(g=u),g&&(n.head&&(kt=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),v.arraySet(n.head.extra,i,a,g,kt)),512&n.flags&&(n.check=w(n.check,i,g,a)),u-=g,a+=g,n.length-=g),n.length))break t;n.length=0,n.mode=Z;case Z:if(2048&n.flags){if(0===u)break t;g=0;do kt=i[a+g++],n.head&&kt&&n.length<65536&&(n.head.name+=String.fromCharCode(kt));while(kt&&g<u);if(512&n.flags&&(n.check=w(n.check,i,g,a)),u-=g,a+=g,kt)break t}else n.head&&(n.head.name=null);n.length=0,n.mode=q;case q:if(4096&n.flags){if(0===u)break t;g=0;do kt=i[a+g++],n.head&&kt&&n.length<65536&&(n.head.comment+=String.fromCharCode(kt));while(kt&&g<u);if(512&n.flags&&(n.check=w(n.check,i,g,a)),u-=g,a+=g,kt)break t}else n.head&&(n.head.comment=null);n.mode=Y;case Y:if(512&n.flags){for(;d<16;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}if(h!==(65535&n.check)){t.msg="header crc mismatch",n.mode=ht;break}h=0,d=0}n.head&&(n.head.hcrc=n.flags>>9&1,n.head.done=!0),t.adler=n.check=0,n.mode=K;break;case H:for(;d<32;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}t.adler=n.check=r(h),h=0,d=0,n.mode=G;case G:if(0===n.havedict)return t.next_out=s,t.avail_out=c,t.next_in=a,t.avail_in=u,n.hold=h,n.bits=d,j;t.adler=n.check=1,n.mode=K;case K:if(e===E||e===I)break t;case $:if(n.last){h>>>=7&d,d-=7&d,n.mode=ct;break}for(;d<3;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}switch(n.last=1&h,h>>>=1,d-=1,3&h){case 0:n.mode=V;break;case 1:if(f(n),n.mode=nt,e===I){h>>>=2,d-=2;break t}break;case 2:n.mode=Q;break;case 3:t.msg="invalid block type",n.mode=ht}h>>>=2,d-=2;break;case V:for(h>>>=7&d,d-=7&d;d<32;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}if((65535&h)!==(h>>>16^65535)){t.msg="invalid stored block lengths",n.mode=ht;break}if(n.length=65535&h,h=0,d=0,n.mode=X,e===I)break t;case X:n.mode=J;case J:if(g=n.length){if(g>u&&(g=u),g>c&&(g=c),0===g)break t;v.arraySet(o,i,a,g,s),u-=g,a+=g,c-=g,s+=g,n.length-=g;break}n.mode=K;break;case Q:for(;d<14;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}if(n.nlen=(31&h)+257,h>>>=5,d-=5,n.ndist=(31&h)+1,h>>>=5,d-=5,n.ncode=(15&h)+4,h>>>=4,d-=4,n.nlen>286||n.ndist>30){t.msg="too many length or distance symbols",n.mode=ht;break}n.have=0,n.mode=tt;case tt:for(;n.have<n.ncode;){for(;d<3;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}n.lens[It[n.have++]]=7&h,h>>>=3,d-=3}for(;n.have<19;)n.lens[It[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,At={bits:n.lenbits},xt=k(x,n.lens,0,19,n.lencode,0,n.work,At),n.lenbits=At.bits,xt){t.msg="invalid code lengths set",n.mode=ht;break}n.have=0,n.mode=et;case et:for(;n.have<n.nlen+n.ndist;){for(;St=n.lencode[h&(1<<n.lenbits)-1],gt=St>>>24,mt=St>>>16&255,vt=65535&St,!(gt<=d);){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}if(vt<16)h>>>=gt,d-=gt,n.lens[n.have++]=vt;else{if(16===vt){for(Ct=gt+2;d<Ct;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}if(h>>>=gt,d-=gt,0===n.have){t.msg="invalid bit length repeat",n.mode=ht;break}kt=n.lens[n.have-1],g=3+(3&h),h>>>=2,d-=2}else if(17===vt){for(Ct=gt+3;d<Ct;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}h>>>=gt,d-=gt,kt=0,g=3+(7&h),h>>>=3,d-=3}else{for(Ct=gt+7;d<Ct;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}h>>>=gt,d-=gt,kt=0,g=11+(127&h),h>>>=7,d-=7}if(n.have+g>n.nlen+n.ndist){t.msg="invalid bit length repeat",n.mode=ht;break}for(;g--;)n.lens[n.have++]=kt}}if(n.mode===ht)break;if(0===n.lens[256]){t.msg="invalid code -- missing end-of-block",n.mode=ht;break}if(n.lenbits=9,At={bits:n.lenbits},xt=k(A,n.lens,0,n.nlen,n.lencode,0,n.work,At),n.lenbits=At.bits,xt){t.msg="invalid literal/lengths set",n.mode=ht;break}if(n.distbits=6,n.distcode=n.distdyn,At={bits:n.distbits},xt=k(C,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,At),n.distbits=At.bits,xt){t.msg="invalid distances set",n.mode=ht;break}if(n.mode=nt,e===I)break t;case nt:n.mode=rt;case rt:if(u>=6&&c>=258){t.next_out=s,t.avail_out=c,t.next_in=a,t.avail_in=u,n.hold=h,n.bits=d,b(t,_),s=t.next_out,o=t.output,c=t.avail_out,a=t.next_in,i=t.input,u=t.avail_in,h=n.hold,d=n.bits,n.mode===K&&(n.back=-1);break}for(n.back=0;St=n.lencode[h&(1<<n.lenbits)-1],gt=St>>>24,mt=St>>>16&255,vt=65535&St,!(gt<=d);){if(0===u)break t;u--,h+=i[a++]<<d,
-d+=8}if(mt&&0===(240&mt)){for(yt=gt,wt=mt,bt=vt;St=n.lencode[bt+((h&(1<<yt+wt)-1)>>yt)],gt=St>>>24,mt=St>>>16&255,vt=65535&St,!(yt+gt<=d);){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}h>>>=yt,d-=yt,n.back+=yt}if(h>>>=gt,d-=gt,n.back+=gt,n.length=vt,0===mt){n.mode=ut;break}if(32&mt){n.back=-1,n.mode=K;break}if(64&mt){t.msg="invalid literal/length code",n.mode=ht;break}n.extra=15&mt,n.mode=it;case it:if(n.extra){for(Ct=n.extra;d<Ct;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}n.length+=h&(1<<n.extra)-1,h>>>=n.extra,d-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=ot;case ot:for(;St=n.distcode[h&(1<<n.distbits)-1],gt=St>>>24,mt=St>>>16&255,vt=65535&St,!(gt<=d);){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}if(0===(240&mt)){for(yt=gt,wt=mt,bt=vt;St=n.distcode[bt+((h&(1<<yt+wt)-1)>>yt)],gt=St>>>24,mt=St>>>16&255,vt=65535&St,!(yt+gt<=d);){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}h>>>=yt,d-=yt,n.back+=yt}if(h>>>=gt,d-=gt,n.back+=gt,64&mt){t.msg="invalid distance code",n.mode=ht;break}n.offset=vt,n.extra=15&mt,n.mode=at;case at:if(n.extra){for(Ct=n.extra;d<Ct;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}n.offset+=h&(1<<n.extra)-1,h>>>=n.extra,d-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){t.msg="invalid distance too far back",n.mode=ht;break}n.mode=st;case st:if(0===c)break t;if(g=_-c,n.offset>g){if(g=n.offset-g,g>n.whave&&n.sane){t.msg="invalid distance too far back",n.mode=ht;break}g>n.wnext?(g-=n.wnext,m=n.wsize-g):m=n.wnext-g,g>n.length&&(g=n.length),_t=n.window}else _t=o,m=s-n.offset,g=n.length;g>c&&(g=c),c-=g,n.length-=g;do o[s++]=_t[m++];while(--g);0===n.length&&(n.mode=rt);break;case ut:if(0===c)break t;o[s++]=n.length,c--,n.mode=rt;break;case ct:if(n.wrap){for(;d<32;){if(0===u)break t;u--,h|=i[a++]<<d,d+=8}if(_-=c,t.total_out+=_,n.total+=_,_&&(t.adler=n.check=n.flags?w(n.check,o,_,s-_):y(n.check,o,_,s-_)),_=c,(n.flags?h:r(h))!==n.check){t.msg="incorrect data check",n.mode=ht;break}h=0,d=0}n.mode=ft;case ft:if(n.wrap&&n.flags){for(;d<32;){if(0===u)break t;u--,h+=i[a++]<<d,d+=8}if(h!==(4294967295&n.total)){t.msg="incorrect length check",n.mode=ht;break}h=0,d=0}n.mode=lt;case lt:xt=z;break t;case ht:xt=N;break t;case dt:return F;case pt:default:return T}return t.next_out=s,t.avail_out=c,t.next_in=a,t.avail_in=u,n.hold=h,n.bits=d,(n.wsize||_!==t.avail_out&&n.mode<ht&&(n.mode<ct||e!==S))&&l(t,t.output,t.next_out,_-t.avail_out)?(n.mode=dt,F):(p-=t.avail_in,_-=t.avail_out,t.total_in+=p,t.total_out+=_,n.total+=_,n.wrap&&_&&(t.adler=n.check=n.flags?w(n.check,o,_,t.next_out-_):y(n.check,o,_,t.next_out-_)),t.data_type=n.bits+(n.last?64:0)+(n.mode===K?128:0)+(n.mode===nt||n.mode===X?256:0),(0===p&&0===_||e===S)&&xt===O&&(xt=R),xt)}function d(t){if(!t||!t.state)return T;var e=t.state;return e.window&&(e.window=null),t.state=null,O}function p(t,e){var n;return t&&t.state?(n=t.state,0===(2&n.wrap)?T:(n.head=e,e.done=!1,O)):T}function _(t,e){var n,r,i,o=e.length;return t&&t.state?(n=t.state,0!==n.wrap&&n.mode!==G?T:n.mode===G&&(r=1,r=y(r,e,o,0),r!==n.check)?N:(i=l(t,e,o,o))?(n.mode=dt,F):(n.havedict=1,O)):T}var g,m,v=t("../utils/common"),y=t("./adler32"),w=t("./crc32"),b=t("./inffast"),k=t("./inftrees"),x=0,A=1,C=2,S=4,E=5,I=6,O=0,z=1,j=2,T=-2,N=-3,F=-4,R=-5,D=8,B=1,L=2,U=3,P=4,M=5,W=6,Z=7,q=8,Y=9,H=10,G=11,K=12,$=13,V=14,X=15,J=16,Q=17,tt=18,et=19,nt=20,rt=21,it=22,ot=23,at=24,st=25,ut=26,ct=27,ft=28,lt=29,ht=30,dt=31,pt=32,_t=852,gt=592,mt=15,vt=mt,yt=!0;n.inflateReset=a,n.inflateReset2=s,n.inflateResetKeep=o,n.inflateInit=c,n.inflateInit2=u,n.inflate=h,n.inflateEnd=d,n.inflateGetHeader=p,n.inflateSetDictionary=_,n.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(t,e,n){"use strict";var r=t("../utils/common"),i=15,o=852,a=592,s=0,u=1,c=2,f=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],l=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],h=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],d=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(t,e,n,p,_,g,m,v){var y,w,b,k,x,A,C,S,E,I=v.bits,O=0,z=0,j=0,T=0,N=0,F=0,R=0,D=0,B=0,L=0,U=null,P=0,M=new r.Buf16(i+1),W=new r.Buf16(i+1),Z=null,q=0;for(O=0;O<=i;O++)M[O]=0;for(z=0;z<p;z++)M[e[n+z]]++;for(N=I,T=i;T>=1&&0===M[T];T--);if(N>T&&(N=T),0===T)return _[g++]=20971520,_[g++]=20971520,v.bits=1,0;for(j=1;j<T&&0===M[j];j++);for(N<j&&(N=j),D=1,O=1;O<=i;O++)if(D<<=1,D-=M[O],D<0)return-1;if(D>0&&(t===s||1!==T))return-1;for(W[1]=0,O=1;O<i;O++)W[O+1]=W[O]+M[O];for(z=0;z<p;z++)0!==e[n+z]&&(m[W[e[n+z]]++]=z);if(t===s?(U=Z=m,A=19):t===u?(U=f,P-=257,Z=l,q-=257,A=256):(U=h,Z=d,A=-1),L=0,z=0,O=j,x=g,F=N,R=0,b=-1,B=1<<N,k=B-1,t===u&&B>o||t===c&&B>a)return 1;for(var Y=0;;){Y++,C=O-R,m[z]<A?(S=0,E=m[z]):m[z]>A?(S=Z[q+m[z]],E=U[P+m[z]]):(S=96,E=0),y=1<<O-R,w=1<<F,j=w;do w-=y,_[x+(L>>R)+w]=C<<24|S<<16|E|0;while(0!==w);for(y=1<<O-1;L&y;)y>>=1;if(0!==y?(L&=y-1,L+=y):L=0,z++,0===--M[O]){if(O===T)break;O=e[n+m[z]]}if(O>N&&(L&k)!==b){for(0===R&&(R=N),x+=j,F=O-R,D=1<<F;F+R<T&&(D-=M[F+R],!(D<=0));)F++,D<<=1;if(B+=1<<F,t===u&&B>o||t===c&&B>a)return 1;b=L&k,_[b]=N<<24|F<<16|x-g|0}}return 0!==L&&(_[x+L]=O-R<<24|64<<16|0),v.bits=N,0}},{"../utils/common":41}],51:[function(t,e,n){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(t,e,n){"use strict";function r(t){for(var e=t.length;--e>=0;)t[e]=0}function i(t,e,n,r,i){this.static_tree=t,this.extra_bits=e,this.extra_base=n,this.elems=r,this.max_length=i,this.has_stree=t&&t.length}function o(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function a(t){return t<256?ut[t]:ut[256+(t>>>7)]}function s(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function u(t,e,n){t.bi_valid>$-n?(t.bi_buf|=e<<t.bi_valid&65535,s(t,t.bi_buf),t.bi_buf=e>>$-t.bi_valid,t.bi_valid+=n-$):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=n)}function c(t,e,n){u(t,n[2*e],n[2*e+1])}function f(t,e){var n=0;do n|=1&t,t>>>=1,n<<=1;while(--e>0);return n>>>1}function l(t){16===t.bi_valid?(s(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}function h(t,e){var n,r,i,o,a,s,u=e.dyn_tree,c=e.max_code,f=e.stat_desc.static_tree,l=e.stat_desc.has_stree,h=e.stat_desc.extra_bits,d=e.stat_desc.extra_base,p=e.stat_desc.max_length,_=0;for(o=0;o<=K;o++)t.bl_count[o]=0;for(u[2*t.heap[t.heap_max]+1]=0,n=t.heap_max+1;n<G;n++)r=t.heap[n],o=u[2*u[2*r+1]+1]+1,o>p&&(o=p,_++),u[2*r+1]=o,r>c||(t.bl_count[o]++,a=0,r>=d&&(a=h[r-d]),s=u[2*r],t.opt_len+=s*(o+a),l&&(t.static_len+=s*(f[2*r+1]+a)));if(0!==_){do{for(o=p-1;0===t.bl_count[o];)o--;t.bl_count[o]--,t.bl_count[o+1]+=2,t.bl_count[p]--,_-=2}while(_>0);for(o=p;0!==o;o--)for(r=t.bl_count[o];0!==r;)i=t.heap[--n],i>c||(u[2*i+1]!==o&&(t.opt_len+=(o-u[2*i+1])*u[2*i],u[2*i+1]=o),r--)}}function d(t,e,n){var r,i,o=new Array(K+1),a=0;for(r=1;r<=K;r++)o[r]=a=a+n[r-1]<<1;for(i=0;i<=e;i++){var s=t[2*i+1];0!==s&&(t[2*i]=f(o[s]++,s))}}function p(){var t,e,n,r,o,a=new Array(K+1);for(n=0,r=0;r<W-1;r++)for(ft[r]=n,t=0;t<1<<et[r];t++)ct[n++]=r;for(ct[n-1]=r,o=0,r=0;r<16;r++)for(lt[r]=o,t=0;t<1<<nt[r];t++)ut[o++]=r;for(o>>=7;r<Y;r++)for(lt[r]=o<<7,t=0;t<1<<nt[r]-7;t++)ut[256+o++]=r;for(e=0;e<=K;e++)a[e]=0;for(t=0;t<=143;)at[2*t+1]=8,t++,a[8]++;for(;t<=255;)at[2*t+1]=9,t++,a[9]++;for(;t<=279;)at[2*t+1]=7,t++,a[7]++;for(;t<=287;)at[2*t+1]=8,t++,a[8]++;for(d(at,q+1,a),t=0;t<Y;t++)st[2*t+1]=5,st[2*t]=f(t,5);ht=new i(at,et,Z+1,q,K),dt=new i(st,nt,0,Y,K),pt=new i(new Array(0),rt,0,H,V)}function _(t){var e;for(e=0;e<q;e++)t.dyn_ltree[2*e]=0;for(e=0;e<Y;e++)t.dyn_dtree[2*e]=0;for(e=0;e<H;e++)t.bl_tree[2*e]=0;t.dyn_ltree[2*X]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function g(t){t.bi_valid>8?s(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function m(t,e,n,r){g(t),r&&(s(t,n),s(t,~n)),T.arraySet(t.pending_buf,t.window,e,n,t.pending),t.pending+=n}function v(t,e,n,r){var i=2*e,o=2*n;return t[i]<t[o]||t[i]===t[o]&&r[e]<=r[n]}function y(t,e,n){for(var r=t.heap[n],i=n<<1;i<=t.heap_len&&(i<t.heap_len&&v(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!v(e,r,t.heap[i],t.depth));)t.heap[n]=t.heap[i],n=i,i<<=1;t.heap[n]=r}function w(t,e,n){var r,i,o,s,f=0;if(0!==t.last_lit)do r=t.pending_buf[t.d_buf+2*f]<<8|t.pending_buf[t.d_buf+2*f+1],i=t.pending_buf[t.l_buf+f],f++,0===r?c(t,i,e):(o=ct[i],c(t,o+Z+1,e),s=et[o],0!==s&&(i-=ft[o],u(t,i,s)),r--,o=a(r),c(t,o,n),s=nt[o],0!==s&&(r-=lt[o],u(t,r,s)));while(f<t.last_lit);c(t,X,e)}function b(t,e){var n,r,i,o=e.dyn_tree,a=e.stat_desc.static_tree,s=e.stat_desc.has_stree,u=e.stat_desc.elems,c=-1;for(t.heap_len=0,t.heap_max=G,n=0;n<u;n++)0!==o[2*n]?(t.heap[++t.heap_len]=c=n,t.depth[n]=0):o[2*n+1]=0;for(;t.heap_len<2;)i=t.heap[++t.heap_len]=c<2?++c:0,o[2*i]=1,t.depth[i]=0,t.opt_len--,s&&(t.static_len-=a[2*i+1]);for(e.max_code=c,n=t.heap_len>>1;n>=1;n--)y(t,o,n);i=u;do n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],y(t,o,1),r=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=r,o[2*i]=o[2*n]+o[2*r],t.depth[i]=(t.depth[n]>=t.depth[r]?t.depth[n]:t.depth[r])+1,o[2*n+1]=o[2*r+1]=i,t.heap[1]=i++,y(t,o,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],h(t,e),d(o,c,t.bl_count)}function k(t,e,n){var r,i,o=-1,a=e[1],s=0,u=7,c=4;for(0===a&&(u=138,c=3),e[2*(n+1)+1]=65535,r=0;r<=n;r++)i=a,a=e[2*(r+1)+1],++s<u&&i===a||(s<c?t.bl_tree[2*i]+=s:0!==i?(i!==o&&t.bl_tree[2*i]++,t.bl_tree[2*J]++):s<=10?t.bl_tree[2*Q]++:t.bl_tree[2*tt]++,s=0,o=i,0===a?(u=138,c=3):i===a?(u=6,c=3):(u=7,c=4))}function x(t,e,n){var r,i,o=-1,a=e[1],s=0,f=7,l=4;for(0===a&&(f=138,l=3),r=0;r<=n;r++)if(i=a,a=e[2*(r+1)+1],!(++s<f&&i===a)){if(s<l){do c(t,i,t.bl_tree);while(0!==--s)}else 0!==i?(i!==o&&(c(t,i,t.bl_tree),s--),c(t,J,t.bl_tree),u(t,s-3,2)):s<=10?(c(t,Q,t.bl_tree),u(t,s-3,3)):(c(t,tt,t.bl_tree),u(t,s-11,7));s=0,o=i,0===a?(f=138,l=3):i===a?(f=6,l=3):(f=7,l=4)}}function A(t){var e;for(k(t,t.dyn_ltree,t.l_desc.max_code),k(t,t.dyn_dtree,t.d_desc.max_code),b(t,t.bl_desc),e=H-1;e>=3&&0===t.bl_tree[2*it[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}function C(t,e,n,r){var i;for(u(t,e-257,5),u(t,n-1,5),u(t,r-4,4),i=0;i<r;i++)u(t,t.bl_tree[2*it[i]+1],3);x(t,t.dyn_ltree,e-1),x(t,t.dyn_dtree,n-1)}function S(t){var e,n=4093624447;for(e=0;e<=31;e++,n>>>=1)if(1&n&&0!==t.dyn_ltree[2*e])return F;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return R;for(e=32;e<Z;e++)if(0!==t.dyn_ltree[2*e])return R;return F}function E(t){_t||(p(),_t=!0),t.l_desc=new o(t.dyn_ltree,ht),t.d_desc=new o(t.dyn_dtree,dt),t.bl_desc=new o(t.bl_tree,pt),t.bi_buf=0,t.bi_valid=0,_(t)}function I(t,e,n,r){u(t,(B<<1)+(r?1:0),3),m(t,e,n,!0)}function O(t){u(t,L<<1,3),c(t,X,at),l(t)}function z(t,e,n,r){var i,o,a=0;t.level>0?(t.strm.data_type===D&&(t.strm.data_type=S(t)),b(t,t.l_desc),b(t,t.d_desc),a=A(t),i=t.opt_len+3+7>>>3,o=t.static_len+3+7>>>3,o<=i&&(i=o)):i=o=n+5,n+4<=i&&e!==-1?I(t,e,n,r):t.strategy===N||o===i?(u(t,(L<<1)+(r?1:0),3),w(t,at,st)):(u(t,(U<<1)+(r?1:0),3),C(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),w(t,t.dyn_ltree,t.dyn_dtree)),_(t),r&&g(t)}function j(t,e,n){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&n,t.last_lit++,0===e?t.dyn_ltree[2*n]++:(t.matches++,e--,t.dyn_ltree[2*(ct[n]+Z+1)]++,t.dyn_dtree[2*a(e)]++),t.last_lit===t.lit_bufsize-1}var T=t("../utils/common"),N=4,F=0,R=1,D=2,B=0,L=1,U=2,P=3,M=258,W=29,Z=256,q=Z+1+W,Y=30,H=19,G=2*q+1,K=15,$=16,V=7,X=256,J=16,Q=17,tt=18,et=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],nt=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],rt=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],it=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ot=512,at=new Array(2*(q+2));r(at);var st=new Array(2*Y);r(st);var ut=new Array(ot);r(ut);var ct=new Array(M-P+1);r(ct);var ft=new Array(W);r(ft);var lt=new Array(Y);r(lt);var ht,dt,pt,_t=!1;n._tr_init=E,n._tr_stored_block=I,n._tr_flush_block=z,n._tr_tally=j,n._tr_align=O},{"../utils/common":41}],53:[function(t,e,n){"use strict";function r(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}e.exports=r},{}]},{},[10])(10)});var saveAs=saveAs||function(t){"use strict";if(!("undefined"==typeof t||"undefined"!=typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent))){var e=t.document,n=function(){return t.URL||t.webkitURL||t},r=e.createElementNS("http://www.w3.org/1999/xhtml","a"),i="download"in r,o=function(t){var e=new MouseEvent("click");t.dispatchEvent(e)},a=/constructor/i.test(t.HTMLElement)||t.safari,s=/CriOS\/[\d]+/.test(navigator.userAgent),u=function(e){(t.setImmediate||t.setTimeout)(function(){throw e},0)},c="application/octet-stream",f=4e4,l=function(t){var e=function(){"string"==typeof t?n().revokeObjectURL(t):t.remove()};setTimeout(e,f)},h=function(t,e,n){e=[].concat(e);for(var r=e.length;r--;){var i=t["on"+e[r]];if("function"==typeof i)try{i.call(t,n||t)}catch(o){u(o)}}},d=function(t){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob([String.fromCharCode(65279),t],{type:t.type}):t},p=function(e,u,f){f||(e=d(e));var p,_=this,g=e.type,m=g===c,v=function(){h(_,"writestart progress write writeend".split(" "))},y=function(){if((s||m&&a)&&t.FileReader){var r=new FileReader;return r.onloadend=function(){var e=s?r.result:r.result.replace(/^data:[^;]*;/,"data:attachment/file;"),n=t.open(e,"_blank");n||(t.location.href=e),e=void 0,_.readyState=_.DONE,v()},r.readAsDataURL(e),void(_.readyState=_.INIT)}if(p||(p=n().createObjectURL(e)),m)t.location.href=p;else{var i=t.open(p,"_blank");i||(t.location.href=p)}_.readyState=_.DONE,v(),l(p)};return _.readyState=_.INIT,i?(p=n().createObjectURL(e),void setTimeout(function(){r.href=p,r.download=u,o(r),v(),l(p),_.readyState=_.DONE})):void y()},_=p.prototype,g=function(t,e,n){return new p(t,e||t.name||"download",n)};return"undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(t,e,n){return e=e||t.name||"download",n||(t=d(t)),navigator.msSaveOrOpenBlob(t,e)}:(_.abort=function(){},_.readyState=_.INIT=0,_.WRITING=1,_.DONE=2,_.error=_.onwritestart=_.onprogress=_.onwrite=_.onabort=_.onerror=_.onwriteend=null,g)}}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content);"undefined"!=typeof module&&module.exports?module.exports.saveAs=saveAs:"undefined"!=typeof define&&null!==define&&null!==define.amd&&define("FileSaver.js",function(){return saveAs}),function(){function t(t,e){return t.set(e[0],e[1]),t}function e(t,e){return t.add(e),t}function n(t,e,n){var r=n.length;switch(r){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function r(t,e,n,r){for(var i=-1,o=t.length;++i<o;){var a=t[i];e(r,a,n(a),t)}return r}function i(t,e){for(var n=-1,r=t.length,i=-1,o=e.length,a=Array(r+o);++n<r;)a[n]=t[n];for(;++i<o;)a[n++]=e[i];return a}function o(t,e){for(var n=-1,r=t.length;++n<r&&e(t[n],n,t)!==!1;);return t}function a(t,e){for(var n=t.length;n--&&e(t[n],n,t)!==!1;);return t}function s(t,e){for(var n=-1,r=t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function u(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];e(a,n,t)&&(o[i++]=a)}return o}function c(t,e){return!!t.length&&v(t,e,0)>-1}function f(t,e,n){for(var r=-1,i=t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function l(t,e){for(var n=-1,r=t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function h(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function d(t,e,n,r){var i=-1,o=t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function p(t,e,n,r){var i=t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function _(t,e){for(var n=-1,r=t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}function g(t,e,n,r){var i;return n(t,function(t,n,o){if(e(t,n,o))return i=r?n:t,!1}),i}function m(t,e,n){for(var r=t.length,i=n?r:-1;n?i--:++i<r;)if(e(t[i],i,t))return i;return-1}function v(t,e,n){if(e!==e)return R(t,n);for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}function y(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function w(t,e){var n=t?t.length:0;return n?x(t,e)/n:yt}function b(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function k(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}function x(t,e){for(var n,r=-1,i=t.length;++r<i;){var o=e(t[r]);o!==Y&&(n=n===Y?o:n+o)}return n}function A(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function C(t,e){return l(e,function(e){return[e,t[e]]})}function S(t){return function(e){return t(e)}}function E(t,e){return l(e,function(e){return t[e]})}function I(t,e){for(var n=-1,r=t.length;++n<r&&v(e,t[n],0)>-1;);return n}function O(t,e){for(var n=t.length;n--&&v(e,t[n],0)>-1;);return n}function z(t){return t&&t.Object===Object?t:null}function j(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&r++;return r}function T(t){return kn[t]}function N(t){return xn[t]}function F(t){return"\\"+Sn[t]}function R(t,e,n){for(var r=t.length,i=e+(n?0:-1);n?i--:++i<r;){var o=t[i];if(o!==o)return i}return-1}function D(t){var e=!1;if(null!=t&&"function"!=typeof t.toString)try{e=!!(t+"")}catch(n){}return e}function B(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}function L(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function U(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];a!==e&&a!==V||(t[n]=V,o[i++]=n)}return o}function P(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function M(t){if(!t||!gn.test(t))return t.length;for(var e=pn.lastIndex=0;pn.test(t);)e++;return e}function W(t){return t.match(pn)}function Z(t){return An[t]}function q(z){function Ie(t){if(cs(t)&&!el(t)&&!(t instanceof je)){if(t instanceof ze)return t;if(pc.call(t,"__wrapped__"))return eo(t)}return new ze(t)}function Oe(){}function ze(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=Y}function je(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=wt,this.__views__=[]}function Te(){var t=new je(this.__wrapped__);return t.__actions__=Vr(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Vr(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Vr(this.__views__),t}function Ne(){if(this.__filtered__){var t=new je(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function Fe(){var t=this.__wrapped__.value(),e=this.__dir__,n=el(t),r=e<0,i=n?t.length:0,o=Ni(0,i,this.__views__),a=o.start,s=o.end,u=s-a,c=r?s:a-1,f=this.__iteratees__,l=f.length,h=0,d=Uc(u,this.__takeCount__);if(!n||i<G||i==u&&d==u)return jr(t,this.__actions__);var p=[];t:for(;u--&&h<d;){c+=e;for(var _=-1,g=t[c];++_<l;){var m=f[_],v=m.iteratee,y=m.type,w=v(g);if(y==pt)g=w;else if(!w){if(y==dt)continue t;break t}}p[h++]=g}return p}function Re(){}function De(t,e){return Le(t,e)&&delete t[e]}function Be(t,e){if(Vc){var n=t[e];return n===$?Y:n}return pc.call(t,e)?t[e]:Y}function Le(t,e){return Vc?t[e]!==Y:pc.call(t,e)}function Ue(t,e,n){t[e]=Vc&&n===Y?$:n}function Pe(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Me(){this.__data__={hash:new Re,map:Hc?new Hc:[],string:new Re}}function We(t){var e=this.__data__;return qi(t)?De("string"==typeof t?e.string:e.hash,t):Hc?e.map["delete"](t):en(e.map,t)}function Ze(t){var e=this.__data__;return qi(t)?Be("string"==typeof t?e.string:e.hash,t):Hc?e.map.get(t):nn(e.map,t)}function qe(t){var e=this.__data__;return qi(t)?Le("string"==typeof t?e.string:e.hash,t):Hc?e.map.has(t):rn(e.map,t)}function Ye(t,e){var n=this.__data__;return qi(t)?Ue("string"==typeof t?n.string:n.hash,t,e):Hc?n.map.set(t,e):an(n.map,t,e),this}function He(t){var e=-1,n=t?t.length:0;for(this.__data__=new Pe;++e<n;)this.push(t[e])}function Ge(t,e){var n=t.__data__;if(qi(e)){var r=n.__data__,i="string"==typeof e?r.string:r.hash;return i[e]===$}return n.has(e)}function Ke(t){var e=this.__data__;if(qi(t)){var n=e.__data__,r="string"==typeof t?n.string:n.hash;r[t]=$}else e.set(t,$)}function $e(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Ve(){this.__data__={array:[],map:null}}function Xe(t){var e=this.__data__,n=e.array;return n?en(n,t):e.map["delete"](t)}function Je(t){var e=this.__data__,n=e.array;return n?nn(n,t):e.map.get(t)}function Qe(t){var e=this.__data__,n=e.array;return n?rn(n,t):e.map.has(t)}function tn(t,e){var n=this.__data__,r=n.array;r&&(r.length<G-1?an(r,t,e):(n.array=null,n.map=new Pe(r)));var i=n.map;return i&&i.set(t,e),this}function en(t,e){var n=on(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():jc.call(t,n,1),!0}function nn(t,e){var n=on(t,e);return n<0?Y:t[n][1]}function rn(t,e){return on(t,e)>-1}function on(t,e){for(var n=t.length;n--;)if(Ha(t[n][0],e))return n;return-1}function an(t,e,n){var r=on(t,e);r<0?t.push([e,n]):t[r][1]=n}function sn(t,e,n,r){return t===Y||Ha(t,lc[n])&&!pc.call(r,n)?e:t}function un(t,e,n){(n===Y||Ha(t[e],n))&&("number"!=typeof e||n!==Y||e in t)||(t[e]=n)}function cn(t,e,n){var r=t[e];pc.call(t,e)&&Ha(r,n)&&(n!==Y||e in t)||(t[e]=n)}function fn(t,e,n,r){return cf(t,function(t,i,o){e(r,t,n(t),o)}),r}function ln(t,e){return t&&Xr(e,Gs(e),t)}function pn(t,e){for(var n=-1,r=null==t,i=e.length,o=Array(i);++n<i;)o[n]=r?Y:qs(t,e[n]);return o}function kn(t,e,n){return t===t&&(n!==Y&&(t=t<=n?t:n),e!==Y&&(t=t>=e?t:e)),t}function xn(t,e,n,r,i,a,s){var u;if(r&&(u=a?r(t,i,a,s):r(t)),u!==Y)return u;if(!us(t))return t;var c=el(t);if(c){if(u=Ri(t),!e)return Vr(t,u)}else{var f=Ti(t),l=f==It||f==Ot;if(nl(t))return Lr(t,e);if(f==Tt||f==xt||l&&!a){if(D(t))return a?t:{};if(u=Di(l?{}:t),!e)return Jr(t,ln(u,t))}else{if(!bn[f])return a?t:{};u=Bi(t,f,xn,e)}}s||(s=new $e);var h=s.get(t);if(h)return h;if(s.set(t,u),!c)var d=n?xi(t):Gs(t);return o(d||t,function(i,o){d&&(o=i,i=t[o]),cn(u,o,xn(i,e,n,r,o,t,s))}),u}function An(t){var e=Gs(t),n=e.length;return function(r){if(null==r)return!n;for(var i=n;i--;){var o=e[i],a=t[o],s=r[o];if(s===Y&&!(o in Object(r))||!a(s))return!1}return!0}}function Cn(t){return us(t)?Ic(t):{}}function Sn(t,e,n){if("function"!=typeof t)throw new cc(K);return zc(function(){t.apply(Y,n)},e)}function On(t,e,n,r){var i=-1,o=c,a=!0,s=t.length,u=[],h=e.length;if(!s)return u;n&&(e=l(e,S(n))),r?(o=f,a=!1):e.length>=G&&(o=Ge,a=!1,e=new He(e));t:for(;++i<s;){var d=t[i],p=n?n(d):d;if(d=r||0!==d?d:0,a&&p===p){for(var _=h;_--;)if(e[_]===p)continue t;u.push(d)}else o(e,p,r)||u.push(d)}return u}function zn(t,e){var n=!0;return cf(t,function(t,r,i){return n=!!e(t,r,i)}),n}function Tn(t,e,n){for(var r=-1,i=t.length;++r<i;){var o=t[r],a=e(o);if(null!=a&&(s===Y?a===a&&!xs(a):n(a,s)))var s=a,u=o}return u}function Nn(t,e,n,r){var i=t.length;for(n=Os(n),n<0&&(n=-n>i?0:i+n),r=r===Y||r>i?i:Os(r),r<0&&(r+=i),r=n>r?0:zs(r);n<r;)t[n++]=e;return t}function Fn(t,e){var n=[];return cf(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function Rn(t,e,n,r,i){var o=-1,a=t.length;for(n||(n=Ui),i||(i=[]);++o<a;){var s=t[o];e>0&&n(s)?e>1?Rn(s,e-1,n,r,i):h(i,s):r||(i[i.length]=s)}return i}function Ln(t,e){return t&&lf(t,e,Gs)}function Un(t,e){return t&&hf(t,e,Gs)}function Pn(t,e){return u(e,function(e){return os(t[e])})}function Mn(t,e){e=Zi(e,t)?[e]:Dr(e);for(var n=0,r=e.length;null!=t&&n<r;)t=t[Qi(e[n++])];return n&&n==r?t:Y}function Wn(t,e,n){var r=e(t);return el(t)?r:h(r,n(t))}function Zn(t,e){return t>e}function qn(t,e){return pc.call(t,e)||"object"==typeof t&&e in t&&null===zi(t)}function Yn(t,e){return e in Object(t)}function Hn(t,e,n){return t>=Uc(e,n)&&t<Lc(e,n)}function Gn(t,e,n){for(var r=n?f:c,i=t[0].length,o=t.length,a=o,s=Array(o),u=1/0,h=[];a--;){var d=t[a];a&&e&&(d=l(d,S(e))),u=Uc(d.length,u),s[a]=!n&&(e||i>=120&&d.length>=120)?new He(a&&d):Y}d=t[0];var p=-1,_=s[0];t:for(;++p<i&&h.length<u;){var g=d[p],m=e?e(g):g;if(g=n||0!==g?g:0,!(_?Ge(_,m):r(h,m,n))){for(a=o;--a;){var v=s[a];if(!(v?Ge(v,m):r(t[a],m,n)))continue t}_&&_.push(m),h.push(g)}}return h}function Kn(t,e,n,r){return Ln(t,function(t,i,o){e(r,n(t),i,o)}),r}function $n(t,e,r){Zi(e,t)||(e=Dr(e),t=Xi(t,e),e=bo(e));var i=null==t?t:t[Qi(e)];return null==i?Y:n(i,t,r)}function Vn(t,e,n,r,i){return t===e||(null==t||null==e||!us(t)&&!cs(e)?t!==t&&e!==e:Xn(t,e,Vn,n,r,i))}function Xn(t,e,n,r,i,o){var a=el(t),s=el(e),u=At,c=At;a||(u=Ti(t),u=u==xt?Tt:u),s||(c=Ti(e),c=c==xt?Tt:c);var f=u==Tt&&!D(t),l=c==Tt&&!D(e),h=u==c;if(h&&!f)return o||(o=new $e),a||As(t)?wi(t,e,n,r,i,o):bi(t,e,u,n,r,i,o);if(!(i&ut)){var d=f&&pc.call(t,"__wrapped__"),p=l&&pc.call(e,"__wrapped__");if(d||p){var _=d?t.value():t,g=p?e.value():e;return o||(o=new $e),n(_,g,r,i,o)}}return!!h&&(o||(o=new $e),ki(t,e,n,r,i,o))}function Jn(t,e,n,r){var i=n.length,o=i,a=!r;if(null==t)return!o;for(t=Object(t);i--;){var s=n[i];if(a&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++i<o;){s=n[i];var u=s[0],c=t[u],f=s[1];if(a&&s[2]){if(c===Y&&!(u in t))return!1}else{var l=new $e;if(r)var h=r(c,f,u,t,e,l);if(!(h===Y?Vn(f,c,r,st|ut,l):h))return!1}}return!0}function Qn(t){return"function"==typeof t?t:null==t?Lu:"object"==typeof t?el(t)?or(t[0],t[1]):ir(t):Hu(t)}function tr(t){return Bc(Object(t))}function er(t){t=null==t?t:Object(t);var e=[];for(var n in t)e.push(n);return e}function nr(t,e){return t<e}function rr(t,e){var n=-1,r=$a(t)?Array(t.length):[];return cf(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function ir(t){var e=Ei(t);return 1==e.length&&e[0][2]?Ki(e[0][0],e[0][1]):function(n){return n===t||Jn(n,t,e)}}function or(t,e){return Zi(t)&&Gi(e)?Ki(Qi(t),e):function(n){var r=qs(n,t);return r===Y&&r===e?Hs(n,t):Vn(e,r,Y,st|ut)}}function ar(t,e,n,r,i){if(t!==e){if(!el(e)&&!As(e))var a=Ks(e);o(a||e,function(o,s){if(a&&(s=o,o=e[s]),us(o))i||(i=new $e),sr(t,e,s,n,ar,r,i);else{var u=r?r(t[s],o,s+"",t,e,i):Y;u===Y&&(u=o),un(t,s,u)}})}}function sr(t,e,n,r,i,o,a){var s=t[n],u=e[n],c=a.get(u);if(c)return void un(t,n,c);var f=o?o(s,u,n+"",t,e,a):Y,l=f===Y;l&&(f=u,el(u)||As(u)?el(s)?f=s:Va(s)?f=Vr(s):(l=!1,f=xn(u,!0)):vs(u)||Ga(u)?Ga(s)?f=Ts(s):!us(s)||r&&os(s)?(l=!1,f=xn(u,!0)):f=s:l=!1),a.set(u,f),l&&i(f,u,r,o,a),a["delete"](u),un(t,n,f)}function ur(t,e){var n=t.length;if(n)return e+=e<0?n:0,Mi(e,n)?t[e]:Y}function cr(t,e,n){var r=-1;e=l(e.length?e:[Lu],S(Si()));var i=rr(t,function(t,n,i){var o=l(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return k(i,function(t,e){return Gr(t,e,n)})}function fr(t,e){return t=Object(t),d(e,function(e,n){return n in t&&(e[n]=t[n]),e},{})}function lr(t,e){for(var n=-1,r=Ai(t),i=r.length,o={};++n<i;){var a=r[n],s=t[a];e(s,a)&&(o[a]=s)}return o}function hr(t){return function(e){return null==e?Y:e[t]}}function dr(t){return function(e){return Mn(e,t)}}function pr(t,e,n,r){var i=r?y:v,o=-1,a=e.length,s=t;for(n&&(s=l(t,S(n)));++o<a;)for(var u=0,c=e[o],f=n?n(c):c;(u=i(s,f,u,r))>-1;)s!==t&&jc.call(s,u,1),jc.call(t,u,1);return t}function _r(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;if(Mi(i))jc.call(t,i,1);else if(Zi(i,t))delete t[Qi(i)];else{var a=Dr(i),s=Xi(t,a);null!=s&&delete s[Qi(bo(a))]}}}return t}function gr(t,e){return t+Nc(Mc()*(e-t+1))}function mr(t,e,n,r){for(var i=-1,o=Lc(Tc((e-t)/(n||1)),0),a=Array(o);o--;)a[r?o:++i]=t,t+=n;return a}function vr(t,e){var n="";if(!t||e<1||e>mt)return n;do e%2&&(n+=t),e=Nc(e/2),e&&(t+=t);while(e);return n}function yr(t,e,n,r){e=Zi(e,t)?[e]:Dr(e);for(var i=-1,o=e.length,a=o-1,s=t;null!=s&&++i<o;){var u=Qi(e[i]);if(us(s)){var c=n;if(i!=a){var f=s[u];c=r?r(f,u,s):Y,c===Y&&(c=null==f?Mi(e[i+1])?[]:{}:f)}cn(s,u,c)}s=s[u]}return t}function wr(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),n=n>i?i:n,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=Array(i);++r<i;)o[r]=t[r+e];return o}function br(t,e){var n;return cf(t,function(t,r,i){return n=e(t,r,i),!n}),!!n}function kr(t,e,n){var r=0,i=t?t.length:r;if("number"==typeof e&&e===e&&i<=kt){for(;r<i;){var o=r+i>>>1,a=t[o];null!==a&&!xs(a)&&(n?a<=e:a<e)?r=o+1:i=o}return i}return xr(t,e,Lu,n)}function xr(t,e,n,r){e=n(e);for(var i=0,o=t?t.length:0,a=e!==e,s=null===e,u=xs(e),c=e===Y;i<o;){var f=Nc((i+o)/2),l=n(t[f]),h=l!==Y,d=null===l,p=l===l,_=xs(l);if(a)var g=r||p;else g=c?p&&(r||h):s?p&&h&&(r||!d):u?p&&h&&!d&&(r||!_):!d&&!_&&(r?l<=e:l<e);g?i=f+1:o=f}return Uc(o,bt)}function Ar(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n],s=e?e(a):a;if(!n||!Ha(s,u)){var u=s;o[i++]=0===a?0:a}}return o}function Cr(t){return"number"==typeof t?t:xs(t)?yt:+t}function Sr(t){if("string"==typeof t)return t;if(xs(t))return uf?uf.call(t):"";var e=t+"";return"0"==e&&1/t==-gt?"-0":e}function Er(t,e,n){var r=-1,i=c,o=t.length,a=!0,s=[],u=s;if(n)a=!1,i=f;else if(o>=G){var l=e?null:pf(t);if(l)return P(l);a=!1,i=Ge,u=new He}else u=e?[]:s;t:for(;++r<o;){var h=t[r],d=e?e(h):h;if(h=n||0!==h?h:0,a&&d===d){for(var p=u.length;p--;)if(u[p]===d)continue t;e&&u.push(d),s.push(h)}else i(u,d,n)||(u!==s&&u.push(d),s.push(h))}return s}function Ir(t,e){e=Zi(e,t)?[e]:Dr(e),t=Xi(t,e);var n=Qi(bo(e));return!(null!=t&&qn(t,n))||delete t[n]}function Or(t,e,n,r){return yr(t,e,n(Mn(t,e)),r)}function zr(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?wr(t,r?0:o,r?o+1:i):wr(t,r?o+1:0,r?i:o)}function jr(t,e){var n=t;return n instanceof je&&(n=n.value()),d(e,function(t,e){return e.func.apply(e.thisArg,h([t],e.args))},n)}function Tr(t,e,n){for(var r=-1,i=t.length;++r<i;)var o=o?h(On(o,t[r],e,n),On(t[r],o,e,n)):t[r];return o&&o.length?Er(o,e,n):[]}function Nr(t,e,n){for(var r=-1,i=t.length,o=e.length,a={};++r<i;){var s=r<o?e[r]:Y;n(a,t[r],s)}return a}function Fr(t){return Va(t)?t:[]}function Rr(t){return"function"==typeof t?t:Lu}function Dr(t){return el(t)?t:yf(t)}function Br(t,e,n){var r=t.length;return n=n===Y?r:n,!e&&n>=r?t:wr(t,e,n)}function Lr(t,e){if(e)return t.slice();var n=new t.constructor(t.length);return t.copy(n),n}function Ur(t){var e=new t.constructor(t.byteLength);return new xc(e).set(new xc(t)),e}function Pr(t,e){var n=e?Ur(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Mr(e,n,r){var i=n?r(L(e),!0):L(e);return d(i,t,new e.constructor)}function Wr(t){var e=new t.constructor(t.source,ve.exec(t));return e.lastIndex=t.lastIndex,e}function Zr(t,n,r){var i=n?r(P(t),!0):P(t);return d(i,e,new t.constructor)}function qr(t){return sf?Object(sf.call(t)):{}}function Yr(t,e){var n=e?Ur(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Hr(t,e){if(t!==e){var n=t!==Y,r=null===t,i=t===t,o=xs(t),a=e!==Y,s=null===e,u=e===e,c=xs(e);if(!s&&!c&&!o&&t>e||o&&a&&u&&!s&&!c||r&&a&&u||!n&&u||!i)return 1;if(!r&&!o&&!c&&t<e||c&&n&&i&&!r&&!o||s&&n&&i||!a&&i||!u)return-1}return 0}function Gr(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,a=i.length,s=n.length;++r<a;){var u=Hr(i[r],o[r]);if(u){if(r>=s)return u;var c=n[r];return u*("desc"==c?-1:1)}}return t.index-e.index}function Kr(t,e,n,r){for(var i=-1,o=t.length,a=n.length,s=-1,u=e.length,c=Lc(o-a,0),f=Array(u+c),l=!r;++s<u;)f[s]=e[s];for(;++i<a;)(l||i<o)&&(f[n[i]]=t[i]);for(;c--;)f[s++]=t[i++];return f}function $r(t,e,n,r){for(var i=-1,o=t.length,a=-1,s=n.length,u=-1,c=e.length,f=Lc(o-s,0),l=Array(f+c),h=!r;++i<f;)l[i]=t[i];for(var d=i;++u<c;)l[d+u]=e[u];for(;++a<s;)(h||i<o)&&(l[d+n[a]]=t[i++]);return l}function Vr(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}function Xr(t,e,n,r){n||(n={});for(var i=-1,o=e.length;++i<o;){var a=e[i],s=r?r(n[a],t[a],a,n,t):t[a];cn(n,a,s)}return n}function Jr(t,e){return Xr(t,ji(t),e)}function Qr(t,e){
-return function(n,i){var o=el(n)?r:fn,a=e?e():{};return o(n,t,Si(i),a)}}function ti(t){return Da(function(e,n){var r=-1,i=n.length,o=i>1?n[i-1]:Y,a=i>2?n[2]:Y;for(o="function"==typeof o?(i--,o):Y,a&&Wi(n[0],n[1],a)&&(o=i<3?Y:o,i=1),e=Object(e);++r<i;){var s=n[r];s&&t(e,s,r,o)}return e})}function ei(t,e){return function(n,r){if(null==n)return n;if(!$a(n))return t(n,r);for(var i=n.length,o=e?i:-1,a=Object(n);(e?o--:++o<i)&&r(a[o],o,a)!==!1;);return n}}function ni(t){return function(e,n,r){for(var i=-1,o=Object(e),a=r(e),s=a.length;s--;){var u=a[t?s:++i];if(n(o[u],u,o)===!1)break}return e}}function ri(t,e,n){function r(){var e=this&&this!==Dn&&this instanceof r?o:t;return e.apply(i?n:this,arguments)}var i=e&X,o=ai(t);return r}function ii(t){return function(e){e=Fs(e);var n=gn.test(e)?W(e):Y,r=n?n[0]:e.charAt(0),i=n?Br(n,1).join(""):e.slice(1);return r[t]()+i}}function oi(t){return function(e){return d(Fu(pu(e).replace(hn,"")),t,"")}}function ai(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Cn(t.prototype),r=t.apply(n,e);return us(r)?r:n}}function si(t,e,r){function i(){for(var a=arguments.length,s=Array(a),u=a,c=Oi(i);u--;)s[u]=arguments[u];var f=a<3&&s[0]!==c&&s[a-1]!==c?[]:U(s,c);if(a-=f.length,a<r)return mi(t,e,ci,i.placeholder,Y,s,f,Y,Y,r-a);var l=this&&this!==Dn&&this instanceof i?o:t;return n(l,this,s)}var o=ai(t);return i}function ui(t){return Da(function(e){e=Rn(e,1);var n=e.length,r=n,i=ze.prototype.thru;for(t&&e.reverse();r--;){var o=e[r];if("function"!=typeof o)throw new cc(K);if(i&&!a&&"wrapper"==Ci(o))var a=new ze([],(!0))}for(r=a?r:n;++r<n;){o=e[r];var s=Ci(o),u="wrapper"==s?_f(o):Y;a=u&&Yi(u[0])&&u[1]==(it|tt|nt|ot)&&!u[4].length&&1==u[9]?a[Ci(u[0])].apply(a,u[3]):1==o.length&&Yi(o)?a[s]():a.thru(o)}return function(){var t=arguments,r=t[0];if(a&&1==t.length&&el(r)&&r.length>=G)return a.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function ci(t,e,n,r,i,o,a,s,u,c){function f(){for(var m=arguments.length,v=m,y=Array(m);v--;)y[v]=arguments[v];if(p)var w=Oi(f),b=j(y,w);if(r&&(y=Kr(y,r,i,p)),o&&(y=$r(y,o,a,p)),m-=b,p&&m<c){var k=U(y,w);return mi(t,e,ci,f.placeholder,n,y,k,s,u,c-m)}var x=h?n:this,A=d?x[t]:t;return m=y.length,s?y=Ji(y,s):_&&m>1&&y.reverse(),l&&u<m&&(y.length=u),this&&this!==Dn&&this instanceof f&&(A=g||ai(A)),A.apply(x,y)}var l=e&it,h=e&X,d=e&J,p=e&(tt|et),_=e&at,g=d?Y:ai(t);return f}function fi(t,e){return function(n,r){return Kn(n,t,e(r),{})}}function li(t){return function(e,n){var r;if(e===Y&&n===Y)return 0;if(e!==Y&&(r=e),n!==Y){if(r===Y)return n;"string"==typeof e||"string"==typeof n?(e=Sr(e),n=Sr(n)):(e=Cr(e),n=Cr(n)),r=t(e,n)}return r}}function hi(t){return Da(function(e){return e=1==e.length&&el(e[0])?l(e[0],S(Si())):l(Rn(e,1,Pi),S(Si())),Da(function(r){var i=this;return t(e,function(t){return n(t,i,r)})})})}function di(t,e){e=e===Y?" ":Sr(e);var n=e.length;if(n<2)return n?vr(e,t):e;var r=vr(e,Tc(t/M(e)));return gn.test(e)?Br(W(r),0,t).join(""):r.slice(0,t)}function pi(t,e,r,i){function o(){for(var e=-1,u=arguments.length,c=-1,f=i.length,l=Array(f+u),h=this&&this!==Dn&&this instanceof o?s:t;++c<f;)l[c]=i[c];for(;u--;)l[c++]=arguments[++e];return n(h,a?r:this,l)}var a=e&X,s=ai(t);return o}function _i(t){return function(e,n,r){return r&&"number"!=typeof r&&Wi(e,n,r)&&(n=r=Y),e=js(e),e=e===e?e:0,n===Y?(n=e,e=0):n=js(n)||0,r=r===Y?e<n?1:-1:js(r)||0,mr(e,n,r,t)}}function gi(t){return function(e,n){return"string"==typeof e&&"string"==typeof n||(e=js(e),n=js(n)),t(e,n)}}function mi(t,e,n,r,i,o,a,s,u,c){var f=e&tt,l=f?a:Y,h=f?Y:a,d=f?o:Y,p=f?Y:o;e|=f?nt:rt,e&=~(f?rt:nt),e&Q||(e&=~(X|J));var _=[t,e,i,d,l,p,h,s,u,c],g=n.apply(Y,_);return Yi(t)&&vf(g,_),g.placeholder=r,g}function vi(t){var e=sc[t];return function(t,n){if(t=js(t),n=Os(n)){var r=(Fs(t)+"e").split("e"),i=e(r[0]+"e"+(+r[1]+n));return r=(Fs(i)+"e").split("e"),+(r[0]+"e"+(+r[1]-n))}return e(t)}}function yi(t,e,n,r,i,o,a,s){var u=e&J;if(!u&&"function"!=typeof t)throw new cc(K);var c=r?r.length:0;if(c||(e&=~(nt|rt),r=i=Y),a=a===Y?a:Lc(Os(a),0),s=s===Y?s:Os(s),c-=i?i.length:0,e&rt){var f=r,l=i;r=i=Y}var h=u?Y:_f(t),d=[t,e,n,r,i,f,l,o,a,s];if(h&&$i(d,h),t=d[0],e=d[1],n=d[2],r=d[3],i=d[4],s=d[9]=null==d[9]?u?0:t.length:Lc(d[9]-c,0),!s&&e&(tt|et)&&(e&=~(tt|et)),e&&e!=X)p=e==tt||e==et?si(t,e,s):e!=nt&&e!=(X|nt)||i.length?ci.apply(Y,d):pi(t,e,n,r);else var p=ri(t,e,n);var _=h?df:vf;return _(p,d)}function wi(t,e,n,r,i,o){var a=-1,s=i&ut,u=i&st,c=t.length,f=e.length;if(c!=f&&!(s&&f>c))return!1;var l=o.get(t);if(l)return l==e;var h=!0;for(o.set(t,e);++a<c;){var d=t[a],p=e[a];if(r)var g=s?r(p,d,a,e,t,o):r(d,p,a,t,e,o);if(g!==Y){if(g)continue;h=!1;break}if(u){if(!_(e,function(t){return d===t||n(d,t,r,i,o)})){h=!1;break}}else if(d!==p&&!n(d,p,r,i,o)){h=!1;break}}return o["delete"](t),h}function bi(t,e,n,r,i,o,a){switch(n){case Mt:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case Pt:return!(t.byteLength!=e.byteLength||!r(new xc(t),new xc(e)));case Ct:case St:return+t==+e;case Et:return t.name==e.name&&t.message==e.message;case jt:return t!=+t?e!=+e:t==+e;case Ft:case Dt:return t==e+"";case zt:var s=L;case Rt:var u=o&ut;if(s||(s=P),t.size!=e.size&&!u)return!1;var c=a.get(t);return c?c==e:(o|=st,a.set(t,e),wi(s(t),s(e),r,i,o,a));case Bt:if(sf)return sf.call(t)==sf.call(e)}return!1}function ki(t,e,n,r,i,o){var a=i&ut,s=Gs(t),u=s.length,c=Gs(e),f=c.length;if(u!=f&&!a)return!1;for(var l=u;l--;){var h=s[l];if(!(a?h in e:qn(e,h)))return!1}var d=o.get(t);if(d)return d==e;var p=!0;o.set(t,e);for(var _=a;++l<u;){h=s[l];var g=t[h],m=e[h];if(r)var v=a?r(m,g,h,e,t,o):r(g,m,h,t,e,o);if(!(v===Y?g===m||n(g,m,r,i,o):v)){p=!1;break}_||(_="constructor"==h)}if(p&&!_){var y=t.constructor,w=e.constructor;y!=w&&"constructor"in t&&"constructor"in e&&!("function"==typeof y&&y instanceof y&&"function"==typeof w&&w instanceof w)&&(p=!1)}return o["delete"](t),p}function xi(t){return Wn(t,Gs,ji)}function Ai(t){return Wn(t,Ks,mf)}function Ci(t){for(var e=t.name+"",n=Qc[e],r=pc.call(Qc,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function Si(){var t=Ie.iteratee||Uu;return t=t===Uu?Qn:t,arguments.length?t(arguments[0],arguments[1]):t}function Ei(t){for(var e=nu(t),n=e.length;n--;)e[n][2]=Gi(e[n][1]);return e}function Ii(t,e){var n=t[e];return ps(n)?n:Y}function Oi(t){var e=pc.call(Ie,"placeholder")?Ie:t;return e.placeholder}function zi(t){return Fc(Object(t))}function ji(t){return Sc(Object(t))}function Ti(t){return mc.call(t)}function Ni(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case"drop":t+=a;break;case"dropRight":e-=a;break;case"take":e=Uc(e,t+a);break;case"takeRight":t=Lc(t,e-a)}}return{start:t,end:e}}function Fi(t,e,n){e=Zi(e,t)?[e]:Dr(e);for(var r,i=-1,o=e.length;++i<o;){var a=Qi(e[i]);if(!(r=null!=t&&n(t,a)))break;t=t[a]}if(r)return r;var o=t?t.length:0;return!!o&&ss(o)&&Mi(a,o)&&(el(t)||ks(t)||Ga(t))}function Ri(t){var e=t.length,n=t.constructor(e);return e&&"string"==typeof t[0]&&pc.call(t,"index")&&(n.index=t.index,n.input=t.input),n}function Di(t){return"function"!=typeof t.constructor||Hi(t)?{}:Cn(zi(t))}function Bi(t,e,n,r){var i=t.constructor;switch(e){case Pt:return Ur(t);case Ct:case St:return new i((+t));case Mt:return Pr(t,r);case Wt:case Zt:case qt:case Yt:case Ht:case Gt:case Kt:case $t:case Vt:return Yr(t,r);case zt:return Mr(t,r,n);case jt:case Dt:return new i(t);case Ft:return Wr(t);case Rt:return Zr(t,r,n);case Bt:return qr(t)}}function Li(t){var e=t?t.length:Y;return ss(e)&&(el(t)||ks(t)||Ga(t))?A(e,String):null}function Ui(t){return Va(t)&&(el(t)||Ga(t))}function Pi(t){return el(t)&&!(2==t.length&&!os(t[0]))}function Mi(t,e){return e=null==e?mt:e,!!e&&("number"==typeof t||Ae.test(t))&&t>-1&&t%1==0&&t<e}function Wi(t,e,n){if(!us(n))return!1;var r=typeof e;return!!("number"==r?$a(n)&&Mi(e,n.length):"string"==r&&e in n)&&Ha(n[e],t)}function Zi(t,e){if(el(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!xs(t))||(ue.test(t)||!se.test(t)||null!=e&&t in Object(e))}function qi(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}function Yi(t){var e=Ci(t),n=Ie[e];if("function"!=typeof n||!(e in je.prototype))return!1;if(t===n)return!0;var r=_f(n);return!!r&&t===r[0]}function Hi(t){var e=t&&t.constructor,n="function"==typeof e&&e.prototype||lc;return t===n}function Gi(t){return t===t&&!us(t)}function Ki(t,e){return function(n){return null!=n&&(n[t]===e&&(e!==Y||t in Object(n)))}}function $i(t,e){var n=t[1],r=e[1],i=n|r,o=i<(X|J|it),a=r==it&&n==tt||r==it&&n==ot&&t[7].length<=e[8]||r==(it|ot)&&e[7].length<=e[8]&&n==tt;if(!o&&!a)return t;r&X&&(t[2]=e[2],i|=n&X?0:Q);var s=e[3];if(s){var u=t[3];t[3]=u?Kr(u,s,e[4]):s,t[4]=u?U(t[3],V):e[4]}return s=e[5],s&&(u=t[5],t[5]=u?$r(u,s,e[6]):s,t[6]=u?U(t[5],V):e[6]),s=e[7],s&&(t[7]=s),r&it&&(t[8]=null==t[8]?e[8]:Uc(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i,t}function Vi(t,e,n,r,i,o){return us(t)&&us(e)&&ar(t,e,Y,Vi,o.set(e,t)),t}function Xi(t,e){return 1==e.length?t:Mn(t,wr(e,0,-1))}function Ji(t,e){for(var n=t.length,r=Uc(e.length,n),i=Vr(t);r--;){var o=e[r];t[r]=Mi(o,n)?i[o]:Y}return t}function Qi(t){if("string"==typeof t||xs(t))return t;var e=t+"";return"0"==e&&1/t==-gt?"-0":e}function to(t){if(null!=t){try{return dc.call(t)}catch(e){}try{return t+""}catch(e){}}return""}function eo(t){if(t instanceof je)return t.clone();var e=new ze(t.__wrapped__,t.__chain__);return e.__actions__=Vr(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}function no(t,e,n){e=(n?Wi(t,e,n):e===Y)?1:Lc(Os(e),0);var r=t?t.length:0;if(!r||e<1)return[];for(var i=0,o=0,a=Array(Tc(r/e));i<r;)a[o++]=wr(t,i,i+=e);return a}function ro(t){for(var e=-1,n=t?t.length:0,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i}function io(){var t=arguments.length,e=Ma(arguments[0]);if(t<2)return t?Vr(e):[];for(var n=Array(t-1);t--;)n[t-1]=arguments[t];return i(e,Rn(n,1))}function oo(t,e,n){var r=t?t.length:0;return r?(e=n||e===Y?1:Os(e),wr(t,e<0?0:e,r)):[]}function ao(t,e,n){var r=t?t.length:0;return r?(e=n||e===Y?1:Os(e),e=r-e,wr(t,0,e<0?0:e)):[]}function so(t,e){return t&&t.length?zr(t,Si(e,3),!0,!0):[]}function uo(t,e){return t&&t.length?zr(t,Si(e,3),!0):[]}function co(t,e,n,r){var i=t?t.length:0;return i?(n&&"number"!=typeof n&&Wi(t,e,n)&&(n=0,r=i),Nn(t,e,n,r)):[]}function fo(t,e){return t&&t.length?m(t,Si(e,3)):-1}function lo(t,e){return t&&t.length?m(t,Si(e,3),!0):-1}function ho(t){var e=t?t.length:0;return e?Rn(t,1):[]}function po(t){var e=t?t.length:0;return e?Rn(t,gt):[]}function _o(t,e){var n=t?t.length:0;return n?(e=e===Y?1:Os(e),Rn(t,e)):[]}function go(t){for(var e=-1,n=t?t.length:0,r={};++e<n;){var i=t[e];r[i[0]]=i[1]}return r}function mo(t){return t&&t.length?t[0]:Y}function vo(t,e,n){var r=t?t.length:0;return r?(n=Os(n),n<0&&(n=Lc(r+n,0)),v(t,e,n)):-1}function yo(t){return ao(t,1)}function wo(t,e){return t?Dc.call(t,e):""}function bo(t){var e=t?t.length:0;return e?t[e-1]:Y}function ko(t,e,n){var r=t?t.length:0;if(!r)return-1;var i=r;if(n!==Y&&(i=Os(n),i=(i<0?Lc(r+i,0):Uc(i,r-1))+1),e!==e)return R(t,i,!0);for(;i--;)if(t[i]===e)return i;return-1}function xo(t,e){return t&&t.length?ur(t,Os(e)):Y}function Ao(t,e){return t&&t.length&&e&&e.length?pr(t,e):t}function Co(t,e,n){return t&&t.length&&e&&e.length?pr(t,e,Si(n)):t}function So(t,e,n){return t&&t.length&&e&&e.length?pr(t,e,Y,n):t}function Eo(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=Si(e,3);++r<o;){var a=t[r];e(a,r,t)&&(n.push(a),i.push(r))}return _r(t,i),n}function Io(t){return t?Zc.call(t):t}function Oo(t,e,n){var r=t?t.length:0;return r?(n&&"number"!=typeof n&&Wi(t,e,n)?(e=0,n=r):(e=null==e?0:Os(e),n=n===Y?r:Os(n)),wr(t,e,n)):[]}function zo(t,e){return kr(t,e)}function jo(t,e,n){return xr(t,e,Si(n))}function To(t,e){var n=t?t.length:0;if(n){var r=kr(t,e);if(r<n&&Ha(t[r],e))return r}return-1}function No(t,e){return kr(t,e,!0)}function Fo(t,e,n){return xr(t,e,Si(n),!0)}function Ro(t,e){var n=t?t.length:0;if(n){var r=kr(t,e,!0)-1;if(Ha(t[r],e))return r}return-1}function Do(t){return t&&t.length?Ar(t):[]}function Bo(t,e){return t&&t.length?Ar(t,Si(e)):[]}function Lo(t){return oo(t,1)}function Uo(t,e,n){return t&&t.length?(e=n||e===Y?1:Os(e),wr(t,0,e<0?0:e)):[]}function Po(t,e,n){var r=t?t.length:0;return r?(e=n||e===Y?1:Os(e),e=r-e,wr(t,e<0?0:e,r)):[]}function Mo(t,e){return t&&t.length?zr(t,Si(e,3),!1,!0):[]}function Wo(t,e){return t&&t.length?zr(t,Si(e,3)):[]}function Zo(t){return t&&t.length?Er(t):[]}function qo(t,e){return t&&t.length?Er(t,Si(e)):[]}function Yo(t,e){return t&&t.length?Er(t,Y,e):[]}function Ho(t){if(!t||!t.length)return[];var e=0;return t=u(t,function(t){if(Va(t))return e=Lc(t.length,e),!0}),A(e,function(e){return l(t,hr(e))})}function Go(t,e){if(!t||!t.length)return[];var r=Ho(t);return null==e?r:l(r,function(t){return n(e,Y,t)})}function Ko(t,e){return Nr(t||[],e||[],cn)}function $o(t,e){return Nr(t||[],e||[],yr)}function Vo(t){var e=Ie(t);return e.__chain__=!0,e}function Xo(t,e){return e(t),t}function Jo(t,e){return e(t)}function Qo(){return Vo(this)}function ta(){return new ze(this.value(),this.__chain__)}function ea(){this.__values__===Y&&(this.__values__=Is(this.value()));var t=this.__index__>=this.__values__.length,e=t?Y:this.__values__[this.__index__++];return{done:t,value:e}}function na(){return this}function ra(t){for(var e,n=this;n instanceof Oe;){var r=eo(n);r.__index__=0,r.__values__=Y,e?i.__wrapped__=r:e=r;var i=r;n=n.__wrapped__}return i.__wrapped__=t,e}function ia(){var t=this.__wrapped__;if(t instanceof je){var e=t;return this.__actions__.length&&(e=new je(this)),e=e.reverse(),e.__actions__.push({func:Jo,args:[Io],thisArg:Y}),new ze(e,this.__chain__)}return this.thru(Io)}function oa(){return jr(this.__wrapped__,this.__actions__)}function aa(t,e,n){var r=el(t)?s:zn;return n&&Wi(t,e,n)&&(e=Y),r(t,Si(e,3))}function sa(t,e){var n=el(t)?u:Fn;return n(t,Si(e,3))}function ua(t,e){if(e=Si(e,3),el(t)){var n=m(t,e);return n>-1?t[n]:Y}return g(t,e,cf)}function ca(t,e){if(e=Si(e,3),el(t)){var n=m(t,e,!0);return n>-1?t[n]:Y}return g(t,e,ff)}function fa(t,e){return Rn(ga(t,e),1)}function la(t,e){return Rn(ga(t,e),gt)}function ha(t,e,n){return n=n===Y?1:Os(n),Rn(ga(t,e),n)}function da(t,e){return"function"==typeof e&&el(t)?o(t,e):cf(t,Si(e))}function pa(t,e){return"function"==typeof e&&el(t)?a(t,e):ff(t,Si(e))}function _a(t,e,n,r){t=$a(t)?t:uu(t),n=n&&!r?Os(n):0;var i=t.length;return n<0&&(n=Lc(i+n,0)),ks(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&v(t,e,n)>-1}function ga(t,e){var n=el(t)?l:rr;return n(t,Si(e,3))}function ma(t,e,n,r){return null==t?[]:(el(e)||(e=null==e?[]:[e]),n=r?Y:n,el(n)||(n=null==n?[]:[n]),cr(t,e,n))}function va(t,e,n){var r=el(t)?d:b,i=arguments.length<3;return r(t,Si(e,4),n,i,cf)}function ya(t,e,n){var r=el(t)?p:b,i=arguments.length<3;return r(t,Si(e,4),n,i,ff)}function wa(t,e){var n=el(t)?u:Fn;return e=Si(e,3),n(t,function(t,n,r){return!e(t,n,r)})}function ba(t){var e=$a(t)?t:uu(t),n=e.length;return n>0?e[gr(0,n-1)]:Y}function ka(t,e,n){var r=-1,i=Is(t),o=i.length,a=o-1;for(e=(n?Wi(t,e,n):e===Y)?1:kn(Os(e),0,o);++r<e;){var s=gr(r,a),u=i[s];i[s]=i[r],i[r]=u}return i.length=e,i}function xa(t){return ka(t,wt)}function Aa(t){if(null==t)return 0;if($a(t)){var e=t.length;return e&&ks(t)?M(t):e}if(cs(t)){var n=Ti(t);if(n==zt||n==Rt)return t.size}return Gs(t).length}function Ca(t,e,n){var r=el(t)?_:br;return n&&Wi(t,e,n)&&(e=Y),r(t,Si(e,3))}function Sa(t,e){if("function"!=typeof e)throw new cc(K);return t=Os(t),function(){if(--t<1)return e.apply(this,arguments)}}function Ea(t,e,n){return e=n?Y:e,e=t&&null==e?t.length:e,yi(t,it,Y,Y,Y,Y,e)}function Ia(t,e){var n;if("function"!=typeof e)throw new cc(K);return t=Os(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=Y),n}}function Oa(t,e,n){e=n?Y:e;var r=yi(t,tt,Y,Y,Y,Y,Y,e);return r.placeholder=Oa.placeholder,r}function za(t,e,n){e=n?Y:e;var r=yi(t,et,Y,Y,Y,Y,Y,e);return r.placeholder=za.placeholder,r}function ja(t,e,n){function r(e){var n=h,r=d;return h=d=Y,v=e,_=t.apply(r,n)}function i(t){return v=t,g=zc(s,e),y?r(t):_}function o(t){var n=t-m,r=t-v,i=e-n;return w?Uc(i,p-r):i}function a(t){var n=t-m,r=t-v;return!m||n>=e||n<0||w&&r>=p}function s(){var t=qf();return a(t)?u(t):void(g=zc(s,o(t)))}function u(t){return Ac(g),g=Y,b&&h?r(t):(h=d=Y,_)}function c(){g!==Y&&Ac(g),m=v=0,h=d=g=Y}function f(){return g===Y?_:u(qf())}function l(){var t=qf(),n=a(t);if(h=arguments,d=this,m=t,n){if(g===Y)return i(m);if(w)return Ac(g),g=zc(s,e),r(m)}return g===Y&&(g=zc(s,e)),_}var h,d,p,_,g,m=0,v=0,y=!1,w=!1,b=!0;if("function"!=typeof t)throw new cc(K);return e=js(e)||0,us(n)&&(y=!!n.leading,w="maxWait"in n,p=w?Lc(js(n.maxWait)||0,e):p,b="trailing"in n?!!n.trailing:b),l.cancel=c,l.flush=f,l}function Ta(t){return yi(t,at)}function Na(t,e){if("function"!=typeof t||e&&"function"!=typeof e)throw new cc(K);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a),a};return n.cache=new(Na.Cache||Pe),n}function Fa(t){if("function"!=typeof t)throw new cc(K);return function(){return!t.apply(this,arguments)}}function Ra(t){return Ia(2,t)}function Da(t,e){if("function"!=typeof t)throw new cc(K);return e=Lc(e===Y?t.length-1:Os(e),0),function(){for(var r=arguments,i=-1,o=Lc(r.length-e,0),a=Array(o);++i<o;)a[i]=r[e+i];switch(e){case 0:return t.call(this,a);case 1:return t.call(this,r[0],a);case 2:return t.call(this,r[0],r[1],a)}var s=Array(e+1);for(i=-1;++i<e;)s[i]=r[i];return s[e]=a,n(t,this,s)}}function Ba(t,e){if("function"!=typeof t)throw new cc(K);return e=e===Y?0:Lc(Os(e),0),Da(function(r){var i=r[e],o=Br(r,0,e);return i&&h(o,i),n(t,this,o)})}function La(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new cc(K);return us(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),ja(t,e,{leading:r,maxWait:e,trailing:i})}function Ua(t){return Ea(t,1)}function Pa(t,e){return e=null==e?Lu:e,Vf(e,t)}function Ma(){if(!arguments.length)return[];var t=arguments[0];return el(t)?t:[t]}function Wa(t){return xn(t,!1,!0)}function Za(t,e){return xn(t,!1,!0,e)}function qa(t){return xn(t,!0,!0)}function Ya(t,e){return xn(t,!0,!0,e)}function Ha(t,e){return t===e||t!==t&&e!==e}function Ga(t){return Va(t)&&pc.call(t,"callee")&&(!Oc.call(t,"callee")||mc.call(t)==xt)}function Ka(t){return cs(t)&&mc.call(t)==Pt}function $a(t){return null!=t&&ss(gf(t))&&!os(t)}function Va(t){return cs(t)&&$a(t)}function Xa(t){return t===!0||t===!1||cs(t)&&mc.call(t)==Ct}function Ja(t){return cs(t)&&mc.call(t)==St}function Qa(t){return!!t&&1===t.nodeType&&cs(t)&&!vs(t)}function ts(t){if($a(t)&&(el(t)||ks(t)||os(t.splice)||Ga(t)||nl(t)))return!t.length;if(cs(t)){var e=Ti(t);if(e==zt||e==Rt)return!t.size}for(var n in t)if(pc.call(t,n))return!1;return!(Jc&&Gs(t).length)}function es(t,e){return Vn(t,e)}function ns(t,e,n){n="function"==typeof n?n:Y;var r=n?n(t,e):Y;return r===Y?Vn(t,e,n):!!r}function rs(t){return!!cs(t)&&(mc.call(t)==Et||"string"==typeof t.message&&"string"==typeof t.name)}function is(t){return"number"==typeof t&&Rc(t)}function os(t){var e=us(t)?mc.call(t):"";return e==It||e==Ot}function as(t){return"number"==typeof t&&t==Os(t)}function ss(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=mt}function us(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function cs(t){return!!t&&"object"==typeof t}function fs(t){return cs(t)&&Ti(t)==zt}function ls(t,e){return t===e||Jn(t,e,Ei(e))}function hs(t,e,n){return n="function"==typeof n?n:Y,Jn(t,e,Ei(e),n)}function ds(t){return ms(t)&&t!=+t}function ps(t){if(!us(t))return!1;var e=os(t)||D(t)?yc:ke;return e.test(to(t))}function _s(t){return null===t}function gs(t){return null==t}function ms(t){return"number"==typeof t||cs(t)&&mc.call(t)==jt}function vs(t){if(!cs(t)||mc.call(t)!=Tt||D(t))return!1;var e=zi(t);if(null===e)return!0;var n=pc.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&dc.call(n)==gc}function ys(t){return us(t)&&mc.call(t)==Ft}function ws(t){return as(t)&&t>=-mt&&t<=mt}function bs(t){return cs(t)&&Ti(t)==Rt}function ks(t){return"string"==typeof t||!el(t)&&cs(t)&&mc.call(t)==Dt}function xs(t){return"symbol"==typeof t||cs(t)&&mc.call(t)==Bt}function As(t){return cs(t)&&ss(t.length)&&!!wn[mc.call(t)]}function Cs(t){return t===Y}function Ss(t){return cs(t)&&Ti(t)==Lt}function Es(t){return cs(t)&&mc.call(t)==Ut}function Is(t){if(!t)return[];if($a(t))return ks(t)?W(t):Vr(t);if(Ec&&t[Ec])return B(t[Ec]());var e=Ti(t),n=e==zt?L:e==Rt?P:uu;return n(t)}function Os(t){if(!t)return 0===t?t:0;if(t=js(t),t===gt||t===-gt){var e=t<0?-1:1;return e*vt}var n=t%1;return t===t?n?t-n:t:0}function zs(t){return t?kn(Os(t),0,wt):0}function js(t){if("number"==typeof t)return t;if(xs(t))return yt;if(us(t)){var e=os(t.valueOf)?t.valueOf():t;t=us(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(he,"");var n=be.test(t);return n||xe.test(t)?In(t.slice(2),n?2:8):we.test(t)?yt:+t}function Ts(t){return Xr(t,Ks(t))}function Ns(t){return kn(Os(t),-mt,mt)}function Fs(t){return null==t?"":Sr(t)}function Rs(t,e){var n=Cn(t);return e?ln(n,e):n}function Ds(t,e){return g(t,Si(e,3),Ln,!0)}function Bs(t,e){return g(t,Si(e,3),Un,!0)}function Ls(t,e){return null==t?t:lf(t,Si(e),Ks)}function Us(t,e){return null==t?t:hf(t,Si(e),Ks)}function Ps(t,e){return t&&Ln(t,Si(e))}function Ms(t,e){return t&&Un(t,Si(e))}function Ws(t){return null==t?[]:Pn(t,Gs(t))}function Zs(t){return null==t?[]:Pn(t,Ks(t))}function qs(t,e,n){var r=null==t?Y:Mn(t,e);return r===Y?n:r}function Ys(t,e){return null!=t&&Fi(t,e,qn)}function Hs(t,e){return null!=t&&Fi(t,e,Yn)}function Gs(t){var e=Hi(t);if(!e&&!$a(t))return tr(t);var n=Li(t),r=!!n,i=n||[],o=i.length;for(var a in t)!qn(t,a)||r&&("length"==a||Mi(a,o))||e&&"constructor"==a||i.push(a);return i}function Ks(t){for(var e=-1,n=Hi(t),r=er(t),i=r.length,o=Li(t),a=!!o,s=o||[],u=s.length;++e<i;){var c=r[e];a&&("length"==c||Mi(c,u))||"constructor"==c&&(n||!pc.call(t,c))||s.push(c)}return s}function $s(t,e){var n={};return e=Si(e,3),Ln(t,function(t,r,i){n[e(t,r,i)]=t}),n}function Vs(t,e){var n={};return e=Si(e,3),Ln(t,function(t,r,i){n[r]=e(t,r,i)}),n}function Xs(t,e){return e=Si(e),lr(t,function(t,n){return!e(t,n)})}function Js(t,e){return null==t?{}:lr(t,Si(e))}function Qs(t,e,n){e=Zi(e,t)?[e]:Dr(e);var r=-1,i=e.length;for(i||(t=Y,i=1);++r<i;){var o=null==t?Y:t[Qi(e[r])];o===Y&&(r=i,o=n),t=os(o)?o.call(t):o}return t}function tu(t,e,n){return null==t?t:yr(t,e,n)}function eu(t,e,n,r){return r="function"==typeof r?r:Y,null==t?t:yr(t,e,n,r)}function nu(t){return C(t,Gs(t))}function ru(t){return C(t,Ks(t))}function iu(t,e,n){var r=el(t)||As(t);if(e=Si(e,4),null==n)if(r||us(t)){var i=t.constructor;n=r?el(t)?new i:[]:os(i)?Cn(zi(t)):{}}else n={};return(r?o:Ln)(t,function(t,r,i){return e(n,t,r,i)}),n}function ou(t,e){return null==t||Ir(t,e)}function au(t,e,n){return null==t?t:Or(t,e,Rr(n))}function su(t,e,n,r){return r="function"==typeof r?r:Y,null==t?t:Or(t,e,Rr(n),r)}function uu(t){return t?E(t,Gs(t)):[]}function cu(t){return null==t?[]:E(t,Ks(t))}function fu(t,e,n){return n===Y&&(n=e,e=Y),n!==Y&&(n=js(n),n=n===n?n:0),e!==Y&&(e=js(e),e=e===e?e:0),kn(js(t),e,n)}function lu(t,e,n){return e=js(e)||0,n===Y?(n=e,e=0):n=js(n)||0,t=js(t),Hn(t,e,n)}function hu(t,e,n){if(n&&"boolean"!=typeof n&&Wi(t,e,n)&&(e=n=Y),n===Y&&("boolean"==typeof e?(n=e,e=Y):"boolean"==typeof t&&(n=t,t=Y)),t===Y&&e===Y?(t=0,e=1):(t=js(t)||0,e===Y?(e=t,t=0):e=js(e)||0),t>e){var r=t;t=e,e=r}if(n||t%1||e%1){var i=Mc();return Uc(t+i*(e-t+En("1e-"+((i+"").length-1))),e)}return gr(t,e)}function du(t){return Sl(Fs(t).toLowerCase())}function pu(t){return t=Fs(t),t&&t.replace(Ce,T).replace(dn,"")}function _u(t,e,n){t=Fs(t),e=Sr(e);var r=t.length;return n=n===Y?r:kn(Os(n),0,r),n-=e.length,n>=0&&t.indexOf(e,n)==n}function gu(t){return t=Fs(t),t&&re.test(t)?t.replace(ee,N):t}function mu(t){return t=Fs(t),t&&le.test(t)?t.replace(fe,"\\$&"):t}function vu(t,e,n){t=Fs(t),e=Os(e);var r=e?M(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return di(Nc(i),n)+t+di(Tc(i),n)}function yu(t,e,n){t=Fs(t),e=Os(e);var r=e?M(t):0;return e&&r<e?t+di(e-r,n):t}function wu(t,e,n){t=Fs(t),e=Os(e);var r=e?M(t):0;return e&&r<e?di(e-r,n)+t:t}function bu(t,e,n){return n||null==e?e=0:e&&(e=+e),t=Fs(t).replace(he,""),Pc(t,e||(ye.test(t)?16:10))}function ku(t,e,n){return e=(n?Wi(t,e,n):e===Y)?1:Os(e),vr(Fs(t),e)}function xu(){var t=arguments,e=Fs(t[0]);return t.length<3?e:Wc.call(e,t[1],t[2])}function Au(t,e,n){return n&&"number"!=typeof n&&Wi(t,e,n)&&(e=n=Y),(n=n===Y?wt:n>>>0)?(t=Fs(t),t&&("string"==typeof e||null!=e&&!ys(e))&&(e=Sr(e),""==e&&gn.test(t))?Br(W(t),0,n):qc.call(t,e,n)):[]}function Cu(t,e,n){return t=Fs(t),n=kn(Os(n),0,t.length),t.lastIndexOf(Sr(e),n)==n}function Su(t,e,n){var r=Ie.templateSettings;n&&Wi(t,e,n)&&(e=Y),t=Fs(t),e=sl({},e,r,sn);var i,o,a=sl({},e.imports,r.imports,sn),s=Gs(a),u=E(a,s),c=0,f=e.interpolate||Se,l="__p += '",h=uc((e.escape||Se).source+"|"+f.source+"|"+(f===ae?me:Se).source+"|"+(e.evaluate||Se).source+"|$","g"),d="//# sourceURL="+("sourceURL"in e?e.sourceURL:"lodash.templateSources["+ ++yn+"]")+"\n";t.replace(h,function(e,n,r,a,s,u){return r||(r=a),l+=t.slice(c,u).replace(Ee,F),n&&(i=!0,l+="' +\n__e("+n+") +\n'"),s&&(o=!0,l+="';\n"+s+";\n__p += '"),r&&(l+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),c=u+e.length,e}),l+="';\n";var p=e.variable;p||(l="with (obj) {\n"+l+"\n}\n"),l=(o?l.replace(Xt,""):l).replace(Jt,"$1").replace(Qt,"$1;"),l="function("+(p||"obj")+") {\n"+(p?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(o?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+l+"return __p\n}";var _=El(function(){return Function(s,d+"return "+l).apply(Y,u)});if(_.source=l,rs(_))throw _;return _}function Eu(t){return Fs(t).toLowerCase()}function Iu(t){return Fs(t).toUpperCase()}function Ou(t,e,n){if(t=Fs(t),t&&(n||e===Y))return t.replace(he,"");if(!t||!(e=Sr(e)))return t;var r=W(t),i=W(e),o=I(r,i),a=O(r,i)+1;return Br(r,o,a).join("")}function zu(t,e,n){if(t=Fs(t),t&&(n||e===Y))return t.replace(pe,"");if(!t||!(e=Sr(e)))return t;var r=W(t),i=O(r,W(e))+1;return Br(r,0,i).join("")}function ju(t,e,n){if(t=Fs(t),t&&(n||e===Y))return t.replace(de,"");if(!t||!(e=Sr(e)))return t;var r=W(t),i=I(r,W(e));return Br(r,i).join("")}function Tu(t,e){var n=ct,r=ft;if(us(e)){var i="separator"in e?e.separator:i;n="length"in e?Os(e.length):n,r="omission"in e?Sr(e.omission):r}t=Fs(t);var o=t.length;if(gn.test(t)){var a=W(t);o=a.length}if(n>=o)return t;var s=n-M(r);if(s<1)return r;var u=a?Br(a,0,s).join(""):t.slice(0,s);if(i===Y)return u+r;if(a&&(s+=u.length-s),ys(i)){if(t.slice(s).search(i)){var c,f=u;for(i.global||(i=uc(i.source,Fs(ve.exec(i))+"g")),i.lastIndex=0;c=i.exec(f);)var l=c.index;u=u.slice(0,l===Y?s:l)}}else if(t.indexOf(Sr(i),s)!=s){var h=u.lastIndexOf(i);h>-1&&(u=u.slice(0,h))}return u+r}function Nu(t){return t=Fs(t),t&&ne.test(t)?t.replace(te,Z):t}function Fu(t,e,n){return t=Fs(t),e=n?Y:e,e===Y&&(e=mn.test(t)?_n:_e),t.match(e)||[]}function Ru(t){var e=t?t.length:0,r=Si();return t=e?l(t,function(t){if("function"!=typeof t[1])throw new cc(K);return[r(t[0]),t[1]]}):[],Da(function(r){for(var i=-1;++i<e;){var o=t[i];if(n(o[0],this,r))return n(o[1],this,r)}})}function Du(t){return An(xn(t,!0))}function Bu(t){return function(){return t}}function Lu(t){return t}function Uu(t){return Qn("function"==typeof t?t:xn(t,!0))}function Pu(t){return ir(xn(t,!0))}function Mu(t,e){return or(t,xn(e,!0))}function Wu(t,e,n){var r=Gs(e),i=Pn(e,r);null!=n||us(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=Pn(e,Gs(e)));var a=!(us(n)&&"chain"in n&&!n.chain),s=os(t);return o(i,function(n){var r=e[n];t[n]=r,s&&(t.prototype[n]=function(){var e=this.__chain__;if(a||e){var n=t(this.__wrapped__),i=n.__actions__=Vr(this.__actions__);return i.push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,h([this.value()],arguments))})}),t}function Zu(){return Dn._===this&&(Dn._=vc),this}function qu(){}function Yu(t){return t=Os(t),Da(function(e){return ur(e,t)})}function Hu(t){return Zi(t)?hr(Qi(t)):dr(t)}function Gu(t){return function(e){return null==t?Y:Mn(t,e)}}function Ku(t,e){if(t=Os(t),t<1||t>mt)return[];var n=wt,r=Uc(t,wt);e=Si(e),t-=wt;for(var i=A(r,e);++n<t;)e(n);return i}function $u(t){return el(t)?l(t,Qi):xs(t)?[t]:Vr(yf(t))}function Vu(t){var e=++_c;return Fs(t)+e}function Xu(t){return t&&t.length?Tn(t,Lu,Zn):Y}function Ju(t,e){return t&&t.length?Tn(t,Si(e),Zn):Y}function Qu(t){return w(t,Lu)}function tc(t,e){return w(t,Si(e))}function ec(t){return t&&t.length?Tn(t,Lu,nr):Y}function nc(t,e){return t&&t.length?Tn(t,Si(e),nr):Y}function rc(t){return t&&t.length?x(t,Lu):0}function ic(t,e){return t&&t.length?x(t,Si(e)):0}z=z?Bn.defaults({},z,Bn.pick(Dn,vn)):Dn;var oc=z.Date,ac=z.Error,sc=z.Math,uc=z.RegExp,cc=z.TypeError,fc=z.Array.prototype,lc=z.Object.prototype,hc=z.String.prototype,dc=z.Function.prototype.toString,pc=lc.hasOwnProperty,_c=0,gc=dc.call(Object),mc=lc.toString,vc=Dn._,yc=uc("^"+dc.call(pc).replace(fe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),wc=jn?z.Buffer:Y,bc=z.Reflect,kc=z.Symbol,xc=z.Uint8Array,Ac=z.clearTimeout,Cc=bc?bc.enumerate:Y,Sc=Object.getOwnPropertySymbols,Ec="symbol"==typeof(Ec=kc&&kc.iterator)?Ec:Y,Ic=Object.create,Oc=lc.propertyIsEnumerable,zc=z.setTimeout,jc=fc.splice,Tc=sc.ceil,Nc=sc.floor,Fc=Object.getPrototypeOf,Rc=z.isFinite,Dc=fc.join,Bc=Object.keys,Lc=sc.max,Uc=sc.min,Pc=z.parseInt,Mc=sc.random,Wc=hc.replace,Zc=fc.reverse,qc=hc.split,Yc=Ii(z,"DataView"),Hc=Ii(z,"Map"),Gc=Ii(z,"Promise"),Kc=Ii(z,"Set"),$c=Ii(z,"WeakMap"),Vc=Ii(Object,"create"),Xc=$c&&new $c,Jc=!Oc.call({valueOf:1},"valueOf"),Qc={},tf=to(Yc),ef=to(Hc),nf=to(Gc),rf=to(Kc),of=to($c),af=kc?kc.prototype:Y,sf=af?af.valueOf:Y,uf=af?af.toString:Y;Ie.templateSettings={escape:ie,evaluate:oe,interpolate:ae,variable:"",imports:{_:Ie}},Ie.prototype=Oe.prototype,Ie.prototype.constructor=Ie,ze.prototype=Cn(Oe.prototype),ze.prototype.constructor=ze,je.prototype=Cn(Oe.prototype),je.prototype.constructor=je,Re.prototype=Vc?Vc(null):lc,Pe.prototype.clear=Me,Pe.prototype["delete"]=We,Pe.prototype.get=Ze,Pe.prototype.has=qe,Pe.prototype.set=Ye,He.prototype.push=Ke,$e.prototype.clear=Ve,$e.prototype["delete"]=Xe,$e.prototype.get=Je,$e.prototype.has=Qe,$e.prototype.set=tn;var cf=ei(Ln),ff=ei(Un,!0),lf=ni(),hf=ni(!0);Cc&&!Oc.call({valueOf:1},"valueOf")&&(er=function(t){return B(Cc(t))});var df=Xc?function(t,e){return Xc.set(t,e),t}:Lu,pf=Kc&&1/P(new Kc([,-0]))[1]==gt?function(t){return new Kc(t)}:qu,_f=Xc?function(t){return Xc.get(t)}:qu,gf=hr("length");Sc||(ji=function(){return[]});var mf=Sc?function(t){for(var e=[];t;)h(e,ji(t)),t=zi(t);return e}:ji;(Yc&&Ti(new Yc(new ArrayBuffer(1)))!=Mt||Hc&&Ti(new Hc)!=zt||Gc&&Ti(Gc.resolve())!=Nt||Kc&&Ti(new Kc)!=Rt||$c&&Ti(new $c)!=Lt)&&(Ti=function(t){var e=mc.call(t),n=e==Tt?t.constructor:Y,r=n?to(n):Y;if(r)switch(r){case tf:return Mt;case ef:return zt;case nf:return Nt;case rf:return Rt;case of:return Lt}return e});var vf=function(){var t=0,e=0;return function(n,r){var i=qf(),o=ht-(i-e);if(e=i,o>0){if(++t>=lt)return n}else t=0;return df(n,r)}}(),yf=Na(function(t){var e=[];return Fs(t).replace(ce,function(t,n,r,i){e.push(r?i.replace(ge,"$1"):n||t)}),e}),wf=Da(function(t,e){return Va(t)?On(t,Rn(e,1,Va,!0)):[]}),bf=Da(function(t,e){var n=bo(e);return Va(n)&&(n=Y),Va(t)?On(t,Rn(e,1,Va,!0),Si(n)):[]}),kf=Da(function(t,e){var n=bo(e);return Va(n)&&(n=Y),Va(t)?On(t,Rn(e,1,Va,!0),Y,n):[]}),xf=Da(function(t){var e=l(t,Fr);return e.length&&e[0]===t[0]?Gn(e):[]}),Af=Da(function(t){var e=bo(t),n=l(t,Fr);return e===bo(n)?e=Y:n.pop(),
-n.length&&n[0]===t[0]?Gn(n,Si(e)):[]}),Cf=Da(function(t){var e=bo(t),n=l(t,Fr);return e===bo(n)?e=Y:n.pop(),n.length&&n[0]===t[0]?Gn(n,Y,e):[]}),Sf=Da(Ao),Ef=Da(function(t,e){e=Rn(e,1);var n=t?t.length:0,r=pn(t,e);return _r(t,l(e,function(t){return Mi(t,n)?+t:t}).sort(Hr)),r}),If=Da(function(t){return Er(Rn(t,1,Va,!0))}),Of=Da(function(t){var e=bo(t);return Va(e)&&(e=Y),Er(Rn(t,1,Va,!0),Si(e))}),zf=Da(function(t){var e=bo(t);return Va(e)&&(e=Y),Er(Rn(t,1,Va,!0),Y,e)}),jf=Da(function(t,e){return Va(t)?On(t,e):[]}),Tf=Da(function(t){return Tr(u(t,Va))}),Nf=Da(function(t){var e=bo(t);return Va(e)&&(e=Y),Tr(u(t,Va),Si(e))}),Ff=Da(function(t){var e=bo(t);return Va(e)&&(e=Y),Tr(u(t,Va),Y,e)}),Rf=Da(Ho),Df=Da(function(t){var e=t.length,n=e>1?t[e-1]:Y;return n="function"==typeof n?(t.pop(),n):Y,Go(t,n)}),Bf=Da(function(t){t=Rn(t,1);var e=t.length,n=e?t[0]:0,r=this.__wrapped__,i=function(e){return pn(e,t)};return!(e>1||this.__actions__.length)&&r instanceof je&&Mi(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:Jo,args:[i],thisArg:Y}),new ze(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(Y),t})):this.thru(i)}),Lf=Qr(function(t,e,n){pc.call(t,n)?++t[n]:t[n]=1}),Uf=Qr(function(t,e,n){pc.call(t,n)?t[n].push(e):t[n]=[e]}),Pf=Da(function(t,e,r){var i=-1,o="function"==typeof e,a=Zi(e),s=$a(t)?Array(t.length):[];return cf(t,function(t){var u=o?e:a&&null!=t?t[e]:Y;s[++i]=u?n(u,t,r):$n(t,e,r)}),s}),Mf=Qr(function(t,e,n){t[n]=e}),Wf=Qr(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),Zf=Da(function(t,e){if(null==t)return[];var n=e.length;return n>1&&Wi(t,e[0],e[1])?e=[]:n>2&&Wi(e[0],e[1],e[2])&&(e=[e[0]]),e=1==e.length&&el(e[0])?e[0]:Rn(e,1,Pi),cr(t,e,[])}),qf=oc.now,Yf=Da(function(t,e,n){var r=X;if(n.length){var i=U(n,Oi(Yf));r|=nt}return yi(t,r,e,n,i)}),Hf=Da(function(t,e,n){var r=X|J;if(n.length){var i=U(n,Oi(Hf));r|=nt}return yi(e,r,t,n,i)}),Gf=Da(function(t,e){return Sn(t,1,e)}),Kf=Da(function(t,e,n){return Sn(t,js(e)||0,n)});Na.Cache=Pe;var $f=Da(function(t,e){e=1==e.length&&el(e[0])?l(e[0],S(Si())):l(Rn(e,1,Pi),S(Si()));var r=e.length;return Da(function(i){for(var o=-1,a=Uc(i.length,r);++o<a;)i[o]=e[o].call(this,i[o]);return n(t,this,i)})}),Vf=Da(function(t,e){var n=U(e,Oi(Vf));return yi(t,nt,Y,e,n)}),Xf=Da(function(t,e){var n=U(e,Oi(Xf));return yi(t,rt,Y,e,n)}),Jf=Da(function(t,e){return yi(t,ot,Y,Y,Y,Rn(e,1))}),Qf=gi(Zn),tl=gi(function(t,e){return t>=e}),el=Array.isArray,nl=wc?function(t){return t instanceof wc}:Bu(!1),rl=gi(nr),il=gi(function(t,e){return t<=e}),ol=ti(function(t,e){if(Jc||Hi(e)||$a(e))return void Xr(e,Gs(e),t);for(var n in e)pc.call(e,n)&&cn(t,n,e[n])}),al=ti(function(t,e){if(Jc||Hi(e)||$a(e))return void Xr(e,Ks(e),t);for(var n in e)cn(t,n,e[n])}),sl=ti(function(t,e,n,r){Xr(e,Ks(e),t,r)}),ul=ti(function(t,e,n,r){Xr(e,Gs(e),t,r)}),cl=Da(function(t,e){return pn(t,Rn(e,1))}),fl=Da(function(t){return t.push(Y,sn),n(sl,Y,t)}),ll=Da(function(t){return t.push(Y,Vi),n(gl,Y,t)}),hl=fi(function(t,e,n){t[e]=n},Bu(Lu)),dl=fi(function(t,e,n){pc.call(t,e)?t[e].push(n):t[e]=[n]},Si),pl=Da($n),_l=ti(function(t,e,n){ar(t,e,n)}),gl=ti(function(t,e,n,r){ar(t,e,n,r)}),ml=Da(function(t,e){return null==t?{}:(e=l(Rn(e,1),Qi),fr(t,On(Ai(t),e)))}),vl=Da(function(t,e){return null==t?{}:fr(t,l(Rn(e,1),Qi))}),yl=oi(function(t,e,n){return e=e.toLowerCase(),t+(n?du(e):e)}),wl=oi(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),bl=oi(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),kl=ii("toLowerCase"),xl=oi(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}),Al=oi(function(t,e,n){return t+(n?" ":"")+Sl(e)}),Cl=oi(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),Sl=ii("toUpperCase"),El=Da(function(t,e){try{return n(t,Y,e)}catch(r){return rs(r)?r:new ac(r)}}),Il=Da(function(t,e){return o(Rn(e,1),function(e){e=Qi(e),t[e]=Yf(t[e],t)}),t}),Ol=ui(),zl=ui(!0),jl=Da(function(t,e){return function(n){return $n(n,t,e)}}),Tl=Da(function(t,e){return function(n){return $n(t,n,e)}}),Nl=hi(l),Fl=hi(s),Rl=hi(_),Dl=_i(),Bl=_i(!0),Ll=li(function(t,e){return t+e}),Ul=vi("ceil"),Pl=li(function(t,e){return t/e}),Ml=vi("floor"),Wl=li(function(t,e){return t*e}),Zl=vi("round"),ql=li(function(t,e){return t-e});return Ie.after=Sa,Ie.ary=Ea,Ie.assign=ol,Ie.assignIn=al,Ie.assignInWith=sl,Ie.assignWith=ul,Ie.at=cl,Ie.before=Ia,Ie.bind=Yf,Ie.bindAll=Il,Ie.bindKey=Hf,Ie.castArray=Ma,Ie.chain=Vo,Ie.chunk=no,Ie.compact=ro,Ie.concat=io,Ie.cond=Ru,Ie.conforms=Du,Ie.constant=Bu,Ie.countBy=Lf,Ie.create=Rs,Ie.curry=Oa,Ie.curryRight=za,Ie.debounce=ja,Ie.defaults=fl,Ie.defaultsDeep=ll,Ie.defer=Gf,Ie.delay=Kf,Ie.difference=wf,Ie.differenceBy=bf,Ie.differenceWith=kf,Ie.drop=oo,Ie.dropRight=ao,Ie.dropRightWhile=so,Ie.dropWhile=uo,Ie.fill=co,Ie.filter=sa,Ie.flatMap=fa,Ie.flatMapDeep=la,Ie.flatMapDepth=ha,Ie.flatten=ho,Ie.flattenDeep=po,Ie.flattenDepth=_o,Ie.flip=Ta,Ie.flow=Ol,Ie.flowRight=zl,Ie.fromPairs=go,Ie.functions=Ws,Ie.functionsIn=Zs,Ie.groupBy=Uf,Ie.initial=yo,Ie.intersection=xf,Ie.intersectionBy=Af,Ie.intersectionWith=Cf,Ie.invert=hl,Ie.invertBy=dl,Ie.invokeMap=Pf,Ie.iteratee=Uu,Ie.keyBy=Mf,Ie.keys=Gs,Ie.keysIn=Ks,Ie.map=ga,Ie.mapKeys=$s,Ie.mapValues=Vs,Ie.matches=Pu,Ie.matchesProperty=Mu,Ie.memoize=Na,Ie.merge=_l,Ie.mergeWith=gl,Ie.method=jl,Ie.methodOf=Tl,Ie.mixin=Wu,Ie.negate=Fa,Ie.nthArg=Yu,Ie.omit=ml,Ie.omitBy=Xs,Ie.once=Ra,Ie.orderBy=ma,Ie.over=Nl,Ie.overArgs=$f,Ie.overEvery=Fl,Ie.overSome=Rl,Ie.partial=Vf,Ie.partialRight=Xf,Ie.partition=Wf,Ie.pick=vl,Ie.pickBy=Js,Ie.property=Hu,Ie.propertyOf=Gu,Ie.pull=Sf,Ie.pullAll=Ao,Ie.pullAllBy=Co,Ie.pullAllWith=So,Ie.pullAt=Ef,Ie.range=Dl,Ie.rangeRight=Bl,Ie.rearg=Jf,Ie.reject=wa,Ie.remove=Eo,Ie.rest=Da,Ie.reverse=Io,Ie.sampleSize=ka,Ie.set=tu,Ie.setWith=eu,Ie.shuffle=xa,Ie.slice=Oo,Ie.sortBy=Zf,Ie.sortedUniq=Do,Ie.sortedUniqBy=Bo,Ie.split=Au,Ie.spread=Ba,Ie.tail=Lo,Ie.take=Uo,Ie.takeRight=Po,Ie.takeRightWhile=Mo,Ie.takeWhile=Wo,Ie.tap=Xo,Ie.throttle=La,Ie.thru=Jo,Ie.toArray=Is,Ie.toPairs=nu,Ie.toPairsIn=ru,Ie.toPath=$u,Ie.toPlainObject=Ts,Ie.transform=iu,Ie.unary=Ua,Ie.union=If,Ie.unionBy=Of,Ie.unionWith=zf,Ie.uniq=Zo,Ie.uniqBy=qo,Ie.uniqWith=Yo,Ie.unset=ou,Ie.unzip=Ho,Ie.unzipWith=Go,Ie.update=au,Ie.updateWith=su,Ie.values=uu,Ie.valuesIn=cu,Ie.without=jf,Ie.words=Fu,Ie.wrap=Pa,Ie.xor=Tf,Ie.xorBy=Nf,Ie.xorWith=Ff,Ie.zip=Rf,Ie.zipObject=Ko,Ie.zipObjectDeep=$o,Ie.zipWith=Df,Ie.entries=nu,Ie.entriesIn=ru,Ie.extend=al,Ie.extendWith=sl,Wu(Ie,Ie),Ie.add=Ll,Ie.attempt=El,Ie.camelCase=yl,Ie.capitalize=du,Ie.ceil=Ul,Ie.clamp=fu,Ie.clone=Wa,Ie.cloneDeep=qa,Ie.cloneDeepWith=Ya,Ie.cloneWith=Za,Ie.deburr=pu,Ie.divide=Pl,Ie.endsWith=_u,Ie.eq=Ha,Ie.escape=gu,Ie.escapeRegExp=mu,Ie.every=aa,Ie.find=ua,Ie.findIndex=fo,Ie.findKey=Ds,Ie.findLast=ca,Ie.findLastIndex=lo,Ie.findLastKey=Bs,Ie.floor=Ml,Ie.forEach=da,Ie.forEachRight=pa,Ie.forIn=Ls,Ie.forInRight=Us,Ie.forOwn=Ps,Ie.forOwnRight=Ms,Ie.get=qs,Ie.gt=Qf,Ie.gte=tl,Ie.has=Ys,Ie.hasIn=Hs,Ie.head=mo,Ie.identity=Lu,Ie.includes=_a,Ie.indexOf=vo,Ie.inRange=lu,Ie.invoke=pl,Ie.isArguments=Ga,Ie.isArray=el,Ie.isArrayBuffer=Ka,Ie.isArrayLike=$a,Ie.isArrayLikeObject=Va,Ie.isBoolean=Xa,Ie.isBuffer=nl,Ie.isDate=Ja,Ie.isElement=Qa,Ie.isEmpty=ts,Ie.isEqual=es,Ie.isEqualWith=ns,Ie.isError=rs,Ie.isFinite=is,Ie.isFunction=os,Ie.isInteger=as,Ie.isLength=ss,Ie.isMap=fs,Ie.isMatch=ls,Ie.isMatchWith=hs,Ie.isNaN=ds,Ie.isNative=ps,Ie.isNil=gs,Ie.isNull=_s,Ie.isNumber=ms,Ie.isObject=us,Ie.isObjectLike=cs,Ie.isPlainObject=vs,Ie.isRegExp=ys,Ie.isSafeInteger=ws,Ie.isSet=bs,Ie.isString=ks,Ie.isSymbol=xs,Ie.isTypedArray=As,Ie.isUndefined=Cs,Ie.isWeakMap=Ss,Ie.isWeakSet=Es,Ie.join=wo,Ie.kebabCase=wl,Ie.last=bo,Ie.lastIndexOf=ko,Ie.lowerCase=bl,Ie.lowerFirst=kl,Ie.lt=rl,Ie.lte=il,Ie.max=Xu,Ie.maxBy=Ju,Ie.mean=Qu,Ie.meanBy=tc,Ie.min=ec,Ie.minBy=nc,Ie.multiply=Wl,Ie.nth=xo,Ie.noConflict=Zu,Ie.noop=qu,Ie.now=qf,Ie.pad=vu,Ie.padEnd=yu,Ie.padStart=wu,Ie.parseInt=bu,Ie.random=hu,Ie.reduce=va,Ie.reduceRight=ya,Ie.repeat=ku,Ie.replace=xu,Ie.result=Qs,Ie.round=Zl,Ie.runInContext=q,Ie.sample=ba,Ie.size=Aa,Ie.snakeCase=xl,Ie.some=Ca,Ie.sortedIndex=zo,Ie.sortedIndexBy=jo,Ie.sortedIndexOf=To,Ie.sortedLastIndex=No,Ie.sortedLastIndexBy=Fo,Ie.sortedLastIndexOf=Ro,Ie.startCase=Al,Ie.startsWith=Cu,Ie.subtract=ql,Ie.sum=rc,Ie.sumBy=ic,Ie.template=Su,Ie.times=Ku,Ie.toInteger=Os,Ie.toLength=zs,Ie.toLower=Eu,Ie.toNumber=js,Ie.toSafeInteger=Ns,Ie.toString=Fs,Ie.toUpper=Iu,Ie.trim=Ou,Ie.trimEnd=zu,Ie.trimStart=ju,Ie.truncate=Tu,Ie.unescape=Nu,Ie.uniqueId=Vu,Ie.upperCase=Cl,Ie.upperFirst=Sl,Ie.each=da,Ie.eachRight=pa,Ie.first=mo,Wu(Ie,function(){var t={};return Ln(Ie,function(e,n){pc.call(Ie.prototype,n)||(t[n]=e)}),t}(),{chain:!1}),Ie.VERSION=H,o(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){Ie[t].placeholder=Ie}),o(["drop","take"],function(t,e){je.prototype[t]=function(n){var r=this.__filtered__;if(r&&!e)return new je(this);n=n===Y?1:Lc(Os(n),0);var i=this.clone();return r?i.__takeCount__=Uc(n,i.__takeCount__):i.__views__.push({size:Uc(n,wt),type:t+(i.__dir__<0?"Right":"")}),i},je.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),o(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==dt||n==_t;je.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:Si(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),o(["head","last"],function(t,e){var n="take"+(e?"Right":"");je.prototype[t]=function(){return this[n](1).value()[0]}}),o(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");je.prototype[t]=function(){return this.__filtered__?new je(this):this[n](1)}}),je.prototype.compact=function(){return this.filter(Lu)},je.prototype.find=function(t){return this.filter(t).head()},je.prototype.findLast=function(t){return this.reverse().find(t)},je.prototype.invokeMap=Da(function(t,e){return"function"==typeof t?new je(this):this.map(function(n){return $n(n,t,e)})}),je.prototype.reject=function(t){return t=Si(t,3),this.filter(function(e){return!t(e)})},je.prototype.slice=function(t,e){t=Os(t);var n=this;return n.__filtered__&&(t>0||e<0)?new je(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==Y&&(e=Os(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},je.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},je.prototype.toArray=function(){return this.take(wt)},Ln(je.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),i=Ie[r?"take"+("last"==e?"Right":""):e],o=r||/^find/.test(e);i&&(Ie.prototype[e]=function(){var e=this.__wrapped__,a=r?[1]:arguments,s=e instanceof je,u=a[0],c=s||el(e),f=function(t){var e=i.apply(Ie,h([t],a));return r&&l?e[0]:e};c&&n&&"function"==typeof u&&1!=u.length&&(s=c=!1);var l=this.__chain__,d=!!this.__actions__.length,p=o&&!l,_=s&&!d;if(!o&&c){e=_?e:new je(this);var g=t.apply(e,a);return g.__actions__.push({func:Jo,args:[f],thisArg:Y}),new ze(g,l)}return p&&_?t.apply(this,a):(g=this.thru(f),p?r?g.value()[0]:g.value():g)})}),o(["pop","push","shift","sort","splice","unshift"],function(t){var e=fc[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);Ie.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(el(i)?i:[],t)}return this[n](function(n){return e.apply(el(n)?n:[],t)})}}),Ln(je.prototype,function(t,e){var n=Ie[e];if(n){var r=n.name+"",i=Qc[r]||(Qc[r]=[]);i.push({name:e,func:n})}}),Qc[ci(Y,J).name]=[{name:"wrapper",func:Y}],je.prototype.clone=Te,je.prototype.reverse=Ne,je.prototype.value=Fe,Ie.prototype.at=Bf,Ie.prototype.chain=Qo,Ie.prototype.commit=ta,Ie.prototype.next=ea,Ie.prototype.plant=ra,Ie.prototype.reverse=ia,Ie.prototype.toJSON=Ie.prototype.valueOf=Ie.prototype.value=oa,Ec&&(Ie.prototype[Ec]=na),Ie}var Y,H="4.11.2",G=200,K="Expected a function",$="__lodash_hash_undefined__",V="__lodash_placeholder__",X=1,J=2,Q=4,tt=8,et=16,nt=32,rt=64,it=128,ot=256,at=512,st=1,ut=2,ct=30,ft="...",lt=150,ht=16,dt=1,pt=2,_t=3,gt=1/0,mt=9007199254740991,vt=1.7976931348623157e308,yt=NaN,wt=4294967295,bt=wt-1,kt=wt>>>1,xt="[object Arguments]",At="[object Array]",Ct="[object Boolean]",St="[object Date]",Et="[object Error]",It="[object Function]",Ot="[object GeneratorFunction]",zt="[object Map]",jt="[object Number]",Tt="[object Object]",Nt="[object Promise]",Ft="[object RegExp]",Rt="[object Set]",Dt="[object String]",Bt="[object Symbol]",Lt="[object WeakMap]",Ut="[object WeakSet]",Pt="[object ArrayBuffer]",Mt="[object DataView]",Wt="[object Float32Array]",Zt="[object Float64Array]",qt="[object Int8Array]",Yt="[object Int16Array]",Ht="[object Int32Array]",Gt="[object Uint8Array]",Kt="[object Uint8ClampedArray]",$t="[object Uint16Array]",Vt="[object Uint32Array]",Xt=/\b__p \+= '';/g,Jt=/\b(__p \+=) '' \+/g,Qt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,te=/&(?:amp|lt|gt|quot|#39|#96);/g,ee=/[&<>"'`]/g,ne=RegExp(te.source),re=RegExp(ee.source),ie=/<%-([\s\S]+?)%>/g,oe=/<%([\s\S]+?)%>/g,ae=/<%=([\s\S]+?)%>/g,se=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ue=/^\w*$/,ce=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g,fe=/[\\^$.*+?()[\]{}|]/g,le=RegExp(fe.source),he=/^\s+|\s+$/g,de=/^\s+/,pe=/\s+$/,_e=/[a-zA-Z0-9]+/g,ge=/\\(\\)?/g,me=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ve=/\w*$/,ye=/^0x/i,we=/^[-+]0x[0-9a-f]+$/i,be=/^0b[01]+$/i,ke=/^\[object .+?Constructor\]$/,xe=/^0o[0-7]+$/i,Ae=/^(?:0|[1-9]\d*)$/,Ce=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Se=/($^)/,Ee=/['\n\r\u2028\u2029\\]/g,Ie="\\ud800-\\udfff",Oe="\\u0300-\\u036f\\ufe20-\\ufe23",ze="\\u20d0-\\u20f0",je="\\u2700-\\u27bf",Te="a-z\\xdf-\\xf6\\xf8-\\xff",Ne="\\xac\\xb1\\xd7\\xf7",Fe="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Re="\\u2000-\\u206f",De=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Be="A-Z\\xc0-\\xd6\\xd8-\\xde",Le="\\ufe0e\\ufe0f",Ue=Ne+Fe+Re+De,Pe="['’]",Me="["+Ie+"]",We="["+Ue+"]",Ze="["+Oe+ze+"]",qe="\\d+",Ye="["+je+"]",He="["+Te+"]",Ge="[^"+Ie+Ue+qe+je+Te+Be+"]",Ke="\\ud83c[\\udffb-\\udfff]",$e="(?:"+Ze+"|"+Ke+")",Ve="[^"+Ie+"]",Xe="(?:\\ud83c[\\udde6-\\uddff]){2}",Je="[\\ud800-\\udbff][\\udc00-\\udfff]",Qe="["+Be+"]",tn="\\u200d",en="(?:"+He+"|"+Ge+")",nn="(?:"+Qe+"|"+Ge+")",rn="(?:"+Pe+"(?:d|ll|m|re|s|t|ve))?",on="(?:"+Pe+"(?:D|LL|M|RE|S|T|VE))?",an=$e+"?",sn="["+Le+"]?",un="(?:"+tn+"(?:"+[Ve,Xe,Je].join("|")+")"+sn+an+")*",cn=sn+an+un,fn="(?:"+[Ye,Xe,Je].join("|")+")"+cn,ln="(?:"+[Ve+Ze+"?",Ze,Xe,Je,Me].join("|")+")",hn=RegExp(Pe,"g"),dn=RegExp(Ze,"g"),pn=RegExp(Ke+"(?="+Ke+")|"+ln+cn,"g"),_n=RegExp([Qe+"?"+He+"+"+rn+"(?="+[We,Qe,"$"].join("|")+")",nn+"+"+on+"(?="+[We,Qe+en,"$"].join("|")+")",Qe+"?"+en+"+"+rn,Qe+"+"+on,qe,fn].join("|"),"g"),gn=RegExp("["+tn+Ie+Oe+ze+Le+"]"),mn=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,vn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","Reflect","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],yn=-1,wn={};wn[Wt]=wn[Zt]=wn[qt]=wn[Yt]=wn[Ht]=wn[Gt]=wn[Kt]=wn[$t]=wn[Vt]=!0,wn[xt]=wn[At]=wn[Pt]=wn[Ct]=wn[Mt]=wn[St]=wn[Et]=wn[It]=wn[zt]=wn[jt]=wn[Tt]=wn[Ft]=wn[Rt]=wn[Dt]=wn[Lt]=!1;var bn={};bn[xt]=bn[At]=bn[Pt]=bn[Mt]=bn[Ct]=bn[St]=bn[Wt]=bn[Zt]=bn[qt]=bn[Yt]=bn[Ht]=bn[zt]=bn[jt]=bn[Tt]=bn[Ft]=bn[Rt]=bn[Dt]=bn[Bt]=bn[Gt]=bn[Kt]=bn[$t]=bn[Vt]=!0,bn[Et]=bn[It]=bn[Lt]=!1;var kn={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},xn={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},An={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},Cn={"function":!0,object:!0},Sn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},En=parseFloat,In=parseInt,On=Cn[typeof exports]&&exports&&!exports.nodeType?exports:Y,zn=Cn[typeof module]&&module&&!module.nodeType?module:Y,jn=zn&&zn.exports===On?On:Y,Tn=z(On&&zn&&"object"==typeof global&&global),Nn=z(Cn[typeof self]&&self),Fn=z(Cn[typeof window]&&window),Rn=z(Cn[typeof this]&&this),Dn=Tn||Fn!==(Rn&&Rn.window)&&Fn||Nn||Rn||Function("return this")(),Bn=q();(Fn||Nn||{})._=Bn,"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return Bn}):On&&zn?(jn&&((zn.exports=Bn)._=Bn),On._=Bn):Dn._=Bn}.call(this),function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.graphlib=t()}}(function(){return function t(e,n,r){function i(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(o)return o(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[a]={exports:{}};e[a][0].call(f.exports,function(t){var n=e[a][1][t];return i(n?n:t)},f,f.exports,t,e,n,r)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a<r.length;a++)i(r[a]);return i}({1:[function(t,e,n){var r=t("./lib");e.exports={Graph:r.Graph,json:t("./lib/json"),alg:t("./lib/alg"),version:r.version}},{"./lib":17,"./lib/alg":8,"./lib/json":18}],2:[function(t,e,n){function r(t){function e(o){i.has(r,o)||(r[o]=!0,n.push(o),i.each(t.successors(o),e),i.each(t.predecessors(o),e))}var n,r={},o=[];return i.each(t.nodes(),function(t){n=[],e(t),n.length&&o.push(n)}),o}var i=t("../lodash");e.exports=r},{"../lodash":19}],3:[function(t,e,n){function r(t,e,n){o.isArray(e)||(e=[e]);var r=(t.isDirected()?t.successors:t.neighbors).bind(t),a=[],s={};return o.each(e,function(e){if(!t.hasNode(e))throw new Error("Graph does not have node: "+e);i(t,e,"post"===n,s,r,a)}),a}function i(t,e,n,r,a,s){o.has(r,e)||(r[e]=!0,n||s.push(e),o.each(a(e),function(e){i(t,e,n,r,a,s)}),n&&s.push(e))}var o=t("../lodash");e.exports=r},{"../lodash":19}],4:[function(t,e,n){function r(t,e,n){return o.transform(t.nodes(),function(r,o){r[o]=i(t,o,e,n)},{})}var i=t("./dijkstra"),o=t("../lodash");e.exports=r},{"../lodash":19,"./dijkstra":5}],5:[function(t,e,n){function r(t,e,n,r){return i(t,String(e),n||s,r||function(e){return t.outEdges(e)})}function i(t,e,n,r){var i,o,s={},u=new a,c=function(t){var e=t.v!==i?t.v:t.w,r=s[e],a=n(t),c=o.distance+a;if(a<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+t+" Weight: "+a);c<r.distance&&(r.distance=c,r.predecessor=i,u.decrease(e,c))};for(t.nodes().forEach(function(t){var n=t===e?0:Number.POSITIVE_INFINITY;s[t]={distance:n},u.add(t,n)});u.size()>0&&(i=u.removeMin(),o=s[i],o.distance!==Number.POSITIVE_INFINITY);)r(i).forEach(c);return s}var o=t("../lodash"),a=t("../data/priority-queue");e.exports=r;var s=o.constant(1)},{"../data/priority-queue":15,"../lodash":19}],6:[function(t,e,n){function r(t){return i.filter(o(t),function(e){return e.length>1||1===e.length&&t.hasEdge(e[0],e[0])})}var i=t("../lodash"),o=t("./tarjan");e.exports=r},{"../lodash":19,"./tarjan":13}],7:[function(t,e,n){function r(t,e,n){return i(t,e||a,n||function(e){return t.outEdges(e)})}function i(t,e,n){var r={},i=t.nodes();return i.forEach(function(t){r[t]={},r[t][t]={distance:0},i.forEach(function(e){t!==e&&(r[t][e]={distance:Number.POSITIVE_INFINITY})}),n(t).forEach(function(n){var i=n.v===t?n.w:n.v,o=e(n);r[t][i]={distance:o,predecessor:t}})}),i.forEach(function(t){var e=r[t];i.forEach(function(n){var o=r[n];i.forEach(function(n){var r=o[t],i=e[n],a=o[n],s=r.distance+i.distance;s<a.distance&&(a.distance=s,a.predecessor=i.predecessor)})})}),r}var o=t("../lodash");e.exports=r;var a=o.constant(1)},{"../lodash":19}],8:[function(t,e,n){e.exports={components:t("./components"),dijkstra:t("./dijkstra"),dijkstraAll:t("./dijkstra-all"),findCycles:t("./find-cycles"),floydWarshall:t("./floyd-warshall"),isAcyclic:t("./is-acyclic"),postorder:t("./postorder"),preorder:t("./preorder"),prim:t("./prim"),tarjan:t("./tarjan"),topsort:t("./topsort")}},{"./components":2,"./dijkstra":5,"./dijkstra-all":4,"./find-cycles":6,"./floyd-warshall":7,"./is-acyclic":9,"./postorder":10,"./preorder":11,"./prim":12,"./tarjan":13,"./topsort":14}],9:[function(t,e,n){function r(t){try{i(t)}catch(e){if(e instanceof i.CycleException)return!1;throw e}return!0}var i=t("./topsort");e.exports=r},{"./topsort":14}],10:[function(t,e,n){function r(t,e){return i(t,e,"post")}var i=t("./dfs");e.exports=r},{"./dfs":3}],11:[function(t,e,n){function r(t,e){return i(t,e,"pre")}var i=t("./dfs");e.exports=r},{"./dfs":3}],12:[function(t,e,n){function r(t,e){function n(t){var n=t.v===r?t.w:t.v,i=c.priority(n);if(void 0!==i){var o=e(t);o<i&&(u[n]=r,c.decrease(n,o))}}var r,s=new o,u={},c=new a;if(0===t.nodeCount())return s;i.each(t.nodes(),function(t){c.add(t,Number.POSITIVE_INFINITY),s.setNode(t)}),c.decrease(t.nodes()[0],0);for(var f=!1;c.size()>0;){if(r=c.removeMin(),i.has(u,r))s.setEdge(r,u[r]);else{if(f)throw new Error("Input graph is not connected: "+t);f=!0}t.nodeEdges(r).forEach(n)}return s}var i=t("../lodash"),o=t("../graph"),a=t("../data/priority-queue");e.exports=r},{"../data/priority-queue":15,"../graph":16,"../lodash":19}],13:[function(t,e,n){function r(t){function e(s){var u=o[s]={onStack:!0,lowlink:n,index:n++};if(r.push(s),t.successors(s).forEach(function(t){i.has(o,t)?o[t].onStack&&(u.lowlink=Math.min(u.lowlink,o[t].index)):(e(t),u.lowlink=Math.min(u.lowlink,o[t].lowlink))}),u.lowlink===u.index){var c,f=[];do c=r.pop(),o[c].onStack=!1,f.push(c);while(s!==c);a.push(f)}}var n=0,r=[],o={},a=[];return t.nodes().forEach(function(t){i.has(o,t)||e(t)}),a}var i=t("../lodash");e.exports=r},{"../lodash":19}],14:[function(t,e,n){function r(t){function e(s){if(o.has(r,s))throw new i;o.has(n,s)||(r[s]=!0,n[s]=!0,o.each(t.predecessors(s),e),delete r[s],a.push(s))}var n={},r={},a=[];if(o.each(t.sinks(),e),o.size(n)!==t.nodeCount())throw new i;return a}function i(){}var o=t("../lodash");e.exports=r,r.CycleException=i},{"../lodash":19}],15:[function(t,e,n){function r(){this._arr=[],this._keyIndices={}}var i=t("../lodash");e.exports=r,r.prototype.size=function(){return this._arr.length},r.prototype.keys=function(){return this._arr.map(function(t){return t.key})},r.prototype.has=function(t){return i.has(this._keyIndices,t)},r.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},r.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},r.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!i.has(n,t)){var r=this._arr,o=r.length;return n[t]=o,r.push({key:t,priority:e}),this._decrease(o),!0}return!1},r.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},r.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},r.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n<e.length&&(i=e[n].priority<e[i].priority?n:i,r<e.length&&(i=e[r].priority<e[i].priority?r:i),i!==t&&(this._swap(t,i),this._heapify(i)))},r.prototype._decrease=function(t){for(var e,n=this._arr,r=n[t].priority;0!==t&&(e=t>>1,!(n[e].priority<r));)this._swap(t,e),t=e},r.prototype._swap=function(t,e){var n=this._arr,r=this._keyIndices,i=n[t],o=n[e];n[t]=o,n[e]=i,r[o.key]=t,r[i.key]=e}},{"../lodash":19}],16:[function(t,e,n){"use strict";function r(t){this._isDirected=!c.has(t,"directed")||t.directed,this._isMultigraph=!!c.has(t,"multigraph")&&t.multigraph,this._isCompound=!!c.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=c.constant(void 0),this._defaultEdgeLabelFn=c.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[l]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function i(t,e){t[e]?t[e]++:t[e]=1}function o(t,e){--t[e]||delete t[e]}function a(t,e,n,r){var i=""+e,o=""+n;if(!t&&i>o){var a=i;i=o,o=a}return i+h+o+h+(c.isUndefined(r)?f:r)}function s(t,e,n,r){var i=""+e,o=""+n;if(!t&&i>o){var a=i;i=o,o=a}var s={v:i,w:o};return r&&(s.name=r),s}function u(t,e){return a(t,e.v,e.w,e.name)}var c=t("./lodash");e.exports=r;var f="\0",l="\0",h="";r.prototype._nodeCount=0,r.prototype._edgeCount=0,r.prototype.isDirected=function(){return this._isDirected},r.prototype.isMultigraph=function(){return this._isMultigraph},r.prototype.isCompound=function(){return this._isCompound},r.prototype.setGraph=function(t){return this._label=t,this},r.prototype.graph=function(){return this._label},r.prototype.setDefaultNodeLabel=function(t){return c.isFunction(t)||(t=c.constant(t)),this._defaultNodeLabelFn=t,this},r.prototype.nodeCount=function(){return this._nodeCount},r.prototype.nodes=function(){return c.keys(this._nodes)},r.prototype.sources=function(){return c.filter(this.nodes(),c.bind(function(t){return c.isEmpty(this._in[t])},this))},r.prototype.sinks=function(){return c.filter(this.nodes(),c.bind(function(t){return c.isEmpty(this._out[t])},this))},r.prototype.setNodes=function(t,e){var n=arguments;return c.each(t,c.bind(function(t){n.length>1?this.setNode(t,e):this.setNode(t)},this)),this},r.prototype.setNode=function(t,e){return c.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=l,this._children[t]={},this._children[l][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},r.prototype.node=function(t){return this._nodes[t]},r.prototype.hasNode=function(t){return c.has(this._nodes,t)},r.prototype.removeNode=function(t){var e=this;if(c.has(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],c.each(this.children(t),c.bind(function(t){this.setParent(t)},this)),delete this._children[t]),c.each(c.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],c.each(c.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},r.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(c.isUndefined(e))e=l;else{e+="";for(var n=e;!c.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},r.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},r.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if(e!==l)return e}},r.prototype.children=function(t){if(c.isUndefined(t)&&(t=l),this._isCompound){var e=this._children[t];if(e)return c.keys(e)}else{if(t===l)return this.nodes();if(this.hasNode(t))return[]}},r.prototype.predecessors=function(t){var e=this._preds[t];if(e)return c.keys(e)},r.prototype.successors=function(t){var e=this._sucs[t];if(e)return c.keys(e)},r.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return c.union(e,this.successors(t))},r.prototype.filterNodes=function(t){function e(t){var o=r.parent(t);return void 0===o||n.hasNode(o)?(i[t]=o,o):o in i?i[o]:e(o)}var n=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});n.setGraph(this.graph()),c.each(this._nodes,c.bind(function(e,r){t(r)&&n.setNode(r,e)},this)),c.each(this._edgeObjs,c.bind(function(t){n.hasNode(t.v)&&n.hasNode(t.w)&&n.setEdge(t,this.edge(t))},this));var r=this,i={};return this._isCompound&&c.each(n.nodes(),function(t){n.setParent(t,e(t))}),n},r.prototype.setDefaultEdgeLabel=function(t){return c.isFunction(t)||(t=c.constant(t)),this._defaultEdgeLabelFn=t,this},r.prototype.edgeCount=function(){return this._edgeCount},r.prototype.edges=function(){return c.values(this._edgeObjs)},r.prototype.setPath=function(t,e){var n=this,r=arguments;return c.reduce(t,function(t,i){return r.length>1?n.setEdge(t,i,e):n.setEdge(t,i),i}),this},r.prototype.setEdge=function(){var t,e,n,r,o=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(t=u.v,e=u.w,n=u.name,2===arguments.length&&(r=arguments[1],o=!0)):(t=u,e=arguments[1],n=arguments[3],arguments.length>2&&(r=arguments[2],o=!0)),t=""+t,e=""+e,c.isUndefined(n)||(n=""+n);var f=a(this._isDirected,t,e,n);if(c.has(this._edgeLabels,f))return o&&(this._edgeLabels[f]=r),this;if(!c.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[f]=o?r:this._defaultEdgeLabelFn(t,e,n);var l=s(this._isDirected,t,e,n);return t=l.v,e=l.w,Object.freeze(l),this._edgeObjs[f]=l,i(this._preds[e],t),i(this._sucs[t],e),this._in[e][f]=l,this._out[t][f]=l,this._edgeCount++,this},r.prototype.edge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):a(this._isDirected,t,e,n);return this._edgeLabels[r]},r.prototype.hasEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):a(this._isDirected,t,e,n);return c.has(this._edgeLabels,r)},r.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):a(this._isDirected,t,e,n),i=this._edgeObjs[r];return i&&(t=i.v,e=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],o(this._preds[e],t),o(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},r.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var r=c.values(n);return e?c.filter(r,function(t){return t.v===e}):r}},r.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var r=c.values(n);return e?c.filter(r,function(t){return t.w===e}):r}},r.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},{"./lodash":19}],17:[function(t,e,n){e.exports={Graph:t("./graph"),version:t("./version")}},{"./graph":16,"./version":20}],18:[function(t,e,n){function r(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:i(t),edges:o(t)};return s.isUndefined(t.graph())||(e.value=s.clone(t.graph())),e}function i(t){return s.map(t.nodes(),function(e){var n=t.node(e),r=t.parent(e),i={v:e};return s.isUndefined(n)||(i.value=n),s.isUndefined(r)||(i.parent=r),i})}function o(t){return s.map(t.edges(),function(e){var n=t.edge(e),r={v:e.v,w:e.w};return s.isUndefined(e.name)||(r.name=e.name),s.isUndefined(n)||(r.value=n),r})}function a(t){var e=new u(t.options).setGraph(t.value);return s.each(t.nodes,function(t){e.setNode(t.v,t.value),t.parent&&e.setParent(t.v,t.parent)}),s.each(t.edges,function(t){e.setEdge({v:t.v,w:t.w,name:t.name},t.value)}),e}var s=t("./lodash"),u=t("./graph");e.exports={write:r,read:a}},{"./graph":16,"./lodash":19}],19:[function(t,e,n){var r;if("function"==typeof t)try{r=t("lodash")}catch(i){}r||(r=window._),e.exports=r},{lodash:void 0}],20:[function(t,e,n){e.exports="2.1.1"},{}]},{},[1])(1)});
\ No newline at end of file
diff --git a/xos/core/xoslib/static/vendor/xosUITutorialVendor.js b/xos/core/xoslib/static/vendor/xosUITutorialVendor.js
deleted file mode 100644
index ff17c68..0000000
--- a/xos/core/xoslib/static/vendor/xosUITutorialVendor.js
+++ /dev/null
@@ -1,24 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * Licensed 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.
- */
-
-
-!function(t,e){"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){function n(t){var e="length"in t&&t.length,n=Q.type(t);return"function"!==n&&!Q.isWindow(t)&&(!(1!==t.nodeType||!e)||("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t))}function r(t,e,n){if(Q.isFunction(e))return Q.grep(t,function(t,r){return!!e.call(t,r,t)!==n});if(e.nodeType)return Q.grep(t,function(t){return t===e!==n});if("string"==typeof e){if(at.test(e))return Q.filter(e,t,n);e=Q.filter(e,t)}return Q.grep(t,function(t){return U.call(e,t)>=0!==n})}function i(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}function o(t){var e=dt[t]={};return Q.each(t.match(ht)||[],function(t,n){e[n]=!0}),e}function u(){G.removeEventListener("DOMContentLoaded",u,!1),t.removeEventListener("load",u,!1),Q.ready()}function a(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=Q.expando+a.uid++}function c(t,e,n){var r;if(void 0===n&&1===t.nodeType)if(r="data-"+e.replace(xt,"-$1").toLowerCase(),n=t.getAttribute(r),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:bt.test(n)?Q.parseJSON(n):n)}catch(i){}yt.set(t,e,n)}else n=void 0;return n}function s(){return!0}function l(){return!1}function f(){try{return G.activeElement}catch(t){}}function p(t,e){return Q.nodeName(t,"table")&&Q.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function h(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function d(t){var e=Ht.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function g(t,e){for(var n=0,r=t.length;n<r;n++)mt.set(t[n],"globalEval",!e||mt.get(e[n],"globalEval"))}function v(t,e){var n,r,i,o,u,a,c,s;if(1===e.nodeType){if(mt.hasData(t)&&(o=mt.access(t),u=mt.set(e,o),s=o.events)){delete u.handle,u.events={};for(i in s)for(n=0,r=s[i].length;n<r;n++)Q.event.add(e,i,s[i][n])}yt.hasData(t)&&(a=yt.access(t),c=Q.extend({},a),yt.set(e,c))}}function m(t,e){var n=t.getElementsByTagName?t.getElementsByTagName(e||"*"):t.querySelectorAll?t.querySelectorAll(e||"*"):[];return void 0===e||e&&Q.nodeName(t,e)?Q.merge([t],n):n}function y(t,e){var n=e.nodeName.toLowerCase();"input"===n&&kt.test(t.type)?e.checked=t.checked:"input"!==n&&"textarea"!==n||(e.defaultValue=t.defaultValue)}function b(e,n){var r,i=Q(n.createElement(e)).appendTo(n.body),o=t.getDefaultComputedStyle&&(r=t.getDefaultComputedStyle(i[0]))?r.display:Q.css(i[0],"display");return i.detach(),o}function x(t){var e=G,n=Ft[t];return n||(n=b(t,e),"none"!==n&&n||(Wt=(Wt||Q("<iframe frameborder='0' width='0' height='0'/>")).appendTo(e.documentElement),e=Wt[0].contentDocument,e.write(),e.close(),n=b(t,e),Wt.detach()),Ft[t]=n),n}function _(t,e,n){var r,i,o,u,a=t.style;return n=n||Bt(t),n&&(u=n.getPropertyValue(e)||n[e]),n&&(""!==u||Q.contains(t.ownerDocument,t)||(u=Q.style(t,e)),$t.test(u)&&Mt.test(e)&&(r=a.width,i=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=u,u=n.width,a.width=r,a.minWidth=i,a.maxWidth=o)),void 0!==u?u+"":u}function w(t,e){return{get:function(){return t()?void delete this.get:(this.get=e).apply(this,arguments)}}}function C(t,e){if(e in t)return e;for(var n=e[0].toUpperCase()+e.slice(1),r=e,i=Vt.length;i--;)if(e=Vt[i]+n,e in t)return e;return r}function k(t,e,n){var r=Jt.exec(e);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):e}function T(t,e,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===e?1:0,u=0;o<4;o+=2)"margin"===n&&(u+=Q.css(t,n+wt[o],!0,i)),r?("content"===n&&(u-=Q.css(t,"padding"+wt[o],!0,i)),"margin"!==n&&(u-=Q.css(t,"border"+wt[o]+"Width",!0,i))):(u+=Q.css(t,"padding"+wt[o],!0,i),"padding"!==n&&(u+=Q.css(t,"border"+wt[o]+"Width",!0,i)));return u}function j(t,e,n){var r=!0,i="width"===e?t.offsetWidth:t.offsetHeight,o=Bt(t),u="border-box"===Q.css(t,"boxSizing",!1,o);if(i<=0||null==i){if(i=_(t,e,o),(i<0||null==i)&&(i=t.style[e]),$t.test(i))return i;r=u&&(Y.boxSizingReliable()||i===t.style[e]),i=parseFloat(i)||0}return i+T(t,e,n||(u?"border":"content"),r,o)+"px"}function A(t,e){for(var n,r,i,o=[],u=0,a=t.length;u<a;u++)r=t[u],r.style&&(o[u]=mt.get(r,"olddisplay"),n=r.style.display,e?(o[u]||"none"!==n||(r.style.display=""),""===r.style.display&&Ct(r)&&(o[u]=mt.access(r,"olddisplay",x(r.nodeName)))):(i=Ct(r),"none"===n&&i||mt.set(r,"olddisplay",i?n:Q.css(r,"display"))));for(u=0;u<a;u++)r=t[u],r.style&&(e&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=e?o[u]||"":"none"));return t}function E(t,e,n,r,i){return new E.prototype.init(t,e,n,r,i)}function S(){return setTimeout(function(){Yt=void 0}),Yt=Q.now()}function N(t,e){var n,r=0,i={height:t};for(e=e?1:0;r<4;r+=2-e)n=wt[r],i["margin"+n]=i["padding"+n]=t;return e&&(i.opacity=i.width=t),i}function D(t,e,n){for(var r,i=(ne[e]||[]).concat(ne["*"]),o=0,u=i.length;o<u;o++)if(r=i[o].call(n,e,t))return r}function O(t,e,n){var r,i,o,u,a,c,s,l,f=this,p={},h=t.style,d=t.nodeType&&Ct(t),g=mt.get(t,"fxshow");n.queue||(a=Q._queueHooks(t,"fx"),null==a.unqueued&&(a.unqueued=0,c=a.empty.fire,a.empty.fire=function(){a.unqueued||c()}),a.unqueued++,f.always(function(){f.always(function(){a.unqueued--,Q.queue(t,"fx").length||a.empty.fire()})})),1===t.nodeType&&("height"in e||"width"in e)&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],s=Q.css(t,"display"),l="none"===s?mt.get(t,"olddisplay")||x(t.nodeName):s,"inline"===l&&"none"===Q.css(t,"float")&&(h.display="inline-block")),n.overflow&&(h.overflow="hidden",f.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]}));for(r in e)if(i=e[r],Zt.exec(i)){if(delete e[r],o=o||"toggle"===i,i===(d?"hide":"show")){if("show"!==i||!g||void 0===g[r])continue;d=!0}p[r]=g&&g[r]||Q.style(t,r)}else s=void 0;if(Q.isEmptyObject(p))"inline"===("none"===s?x(t.nodeName):s)&&(h.display=s);else{g?"hidden"in g&&(d=g.hidden):g=mt.access(t,"fxshow",{}),o&&(g.hidden=!d),d?Q(t).show():f.done(function(){Q(t).hide()}),f.done(function(){var e;mt.remove(t,"fxshow");for(e in p)Q.style(t,e,p[e])});for(r in p)u=D(d?g[r]:0,r,f),r in g||(g[r]=u.start,d&&(u.end=u.start,u.start="width"===r||"height"===r?1:0))}}function L(t,e){var n,r,i,o,u;for(n in t)if(r=Q.camelCase(n),i=e[r],o=t[n],Q.isArray(o)&&(i=o[1],o=t[n]=o[0]),n!==r&&(t[r]=o,delete t[n]),u=Q.cssHooks[r],u&&"expand"in u){o=u.expand(o),delete t[r];for(n in o)n in t||(t[n]=o[n],e[n]=i)}else e[r]=i}function R(t,e,n){var r,i,o=0,u=ee.length,a=Q.Deferred().always(function(){delete c.elem}),c=function(){if(i)return!1;for(var e=Yt||S(),n=Math.max(0,s.startTime+s.duration-e),r=n/s.duration||0,o=1-r,u=0,c=s.tweens.length;u<c;u++)s.tweens[u].run(o);return a.notifyWith(t,[s,o,n]),o<1&&c?n:(a.resolveWith(t,[s]),!1)},s=a.promise({elem:t,props:Q.extend({},e),opts:Q.extend(!0,{specialEasing:{}},n),originalProperties:e,originalOptions:n,startTime:Yt||S(),duration:n.duration,tweens:[],createTween:function(e,n){var r=Q.Tween(t,s.opts,e,n,s.opts.specialEasing[e]||s.opts.easing);return s.tweens.push(r),r},stop:function(e){var n=0,r=e?s.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)s.tweens[n].run(1);return e?a.resolveWith(t,[s,e]):a.rejectWith(t,[s,e]),this}}),l=s.props;for(L(l,s.opts.specialEasing);o<u;o++)if(r=ee[o].call(s,t,l,s.opts))return r;return Q.map(l,D,s),Q.isFunction(s.opts.start)&&s.opts.start.call(t,s),Q.fx.timer(Q.extend(c,{elem:t,anim:s,queue:s.opts.queue})),s.progress(s.opts.progress).done(s.opts.done,s.opts.complete).fail(s.opts.fail).always(s.opts.always)}function q(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var r,i=0,o=e.toLowerCase().match(ht)||[];if(Q.isFunction(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(t[r]=t[r]||[]).unshift(n)):(t[r]=t[r]||[]).push(n)}}function H(t,e,n,r){function i(a){var c;return o[a]=!0,Q.each(t[a]||[],function(t,a){var s=a(e,n,r);return"string"!=typeof s||u||o[s]?u?!(c=s):void 0:(e.dataTypes.unshift(s),i(s),!1)}),c}var o={},u=t===be;return i(e.dataTypes[0])||!o["*"]&&i("*")}function P(t,e){var n,r,i=Q.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((i[n]?t:r||(r={}))[n]=e[n]);return r&&Q.extend(!0,t,r),t}function I(t,e,n){for(var r,i,o,u,a=t.contents,c=t.dataTypes;"*"===c[0];)c.shift(),void 0===r&&(r=t.mimeType||e.getResponseHeader("Content-Type"));if(r)for(i in a)if(a[i]&&a[i].test(r)){c.unshift(i);break}if(c[0]in n)o=c[0];else{for(i in n){if(!c[0]||t.converters[i+" "+c[0]]){o=i;break}u||(u=i)}o=o||u}if(o)return o!==c[0]&&c.unshift(o),n[o]}function W(t,e,n,r){var i,o,u,a,c,s={},l=t.dataTypes.slice();if(l[1])for(u in t.converters)s[u.toLowerCase()]=t.converters[u];for(o=l.shift();o;)if(t.responseFields[o]&&(n[t.responseFields[o]]=e),!c&&r&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),c=o,o=l.shift())if("*"===o)o=c;else if("*"!==c&&c!==o){if(u=s[c+" "+o]||s["* "+o],!u)for(i in s)if(a=i.split(" "),a[1]===o&&(u=s[c+" "+a[0]]||s["* "+a[0]])){u===!0?u=s[i]:s[i]!==!0&&(o=a[0],l.unshift(a[1]));break}if(u!==!0)if(u&&t["throws"])e=u(e);else try{e=u(e)}catch(f){return{state:"parsererror",error:u?f:"No conversion from "+c+" to "+o}}}return{state:"success",data:e}}function F(t,e,n,r){var i;if(Q.isArray(e))Q.each(e,function(e,i){n||ke.test(t)?r(t,i):F(t+"["+("object"==typeof i?e:"")+"]",i,n,r)});else if(n||"object"!==Q.type(e))r(t,e);else for(i in e)F(t+"["+i+"]",e[i],n,r)}function M(t){return Q.isWindow(t)?t:9===t.nodeType&&t.defaultView}var $=[],B=$.slice,z=$.concat,J=$.push,U=$.indexOf,K={},X=K.toString,V=K.hasOwnProperty,Y={},G=t.document,Z="2.1.4",Q=function(t,e){return new Q.fn.init(t,e)},tt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,et=/^-ms-/,nt=/-([\da-z])/gi,rt=function(t,e){return e.toUpperCase()};Q.fn=Q.prototype={jquery:Z,constructor:Q,selector:"",length:0,toArray:function(){return B.call(this)},get:function(t){return null!=t?t<0?this[t+this.length]:this[t]:B.call(this)},pushStack:function(t){var e=Q.merge(this.constructor(),t);return e.prevObject=this,e.context=this.context,e},each:function(t,e){return Q.each(this,t,e)},map:function(t){return this.pushStack(Q.map(this,function(e,n){return t.call(e,n,e)}))},slice:function(){return this.pushStack(B.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n<e?[this[n]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:J,sort:$.sort,splice:$.splice},Q.extend=Q.fn.extend=function(){var t,e,n,r,i,o,u=arguments[0]||{},a=1,c=arguments.length,s=!1;for("boolean"==typeof u&&(s=u,u=arguments[a]||{},a++),"object"==typeof u||Q.isFunction(u)||(u={}),a===c&&(u=this,a--);a<c;a++)if(null!=(t=arguments[a]))for(e in t)n=u[e],r=t[e],u!==r&&(s&&r&&(Q.isPlainObject(r)||(i=Q.isArray(r)))?(i?(i=!1,o=n&&Q.isArray(n)?n:[]):o=n&&Q.isPlainObject(n)?n:{},u[e]=Q.extend(s,o,r)):void 0!==r&&(u[e]=r));return u},Q.extend({expando:"jQuery"+(Z+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isFunction:function(t){return"function"===Q.type(t)},isArray:Array.isArray,isWindow:function(t){return null!=t&&t===t.window},isNumeric:function(t){return!Q.isArray(t)&&t-parseFloat(t)+1>=0},isPlainObject:function(t){return"object"===Q.type(t)&&!t.nodeType&&!Q.isWindow(t)&&!(t.constructor&&!V.call(t.constructor.prototype,"isPrototypeOf"))},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},type:function(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?K[X.call(t)]||"object":typeof t},globalEval:function(t){var e,n=eval;t=Q.trim(t),t&&(1===t.indexOf("use strict")?(e=G.createElement("script"),e.text=t,G.head.appendChild(e).parentNode.removeChild(e)):n(t))},camelCase:function(t){return t.replace(et,"ms-").replace(nt,rt)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e,r){var i,o=0,u=t.length,a=n(t);if(r){if(a)for(;o<u&&(i=e.apply(t[o],r),i!==!1);o++);else for(o in t)if(i=e.apply(t[o],r),i===!1)break}else if(a)for(;o<u&&(i=e.call(t[o],o,t[o]),i!==!1);o++);else for(o in t)if(i=e.call(t[o],o,t[o]),i===!1)break;return t},trim:function(t){return null==t?"":(t+"").replace(tt,"")},makeArray:function(t,e){var r=e||[];return null!=t&&(n(Object(t))?Q.merge(r,"string"==typeof t?[t]:t):J.call(r,t)),r},inArray:function(t,e,n){return null==e?-1:U.call(e,t,n)},merge:function(t,e){for(var n=+e.length,r=0,i=t.length;r<n;r++)t[i++]=e[r];return t.length=i,t},grep:function(t,e,n){for(var r,i=[],o=0,u=t.length,a=!n;o<u;o++)r=!e(t[o],o),r!==a&&i.push(t[o]);return i},map:function(t,e,r){var i,o=0,u=t.length,a=n(t),c=[];if(a)for(;o<u;o++)i=e(t[o],o,r),null!=i&&c.push(i);else for(o in t)i=e(t[o],o,r),null!=i&&c.push(i);return z.apply([],c)},guid:1,proxy:function(t,e){var n,r,i;if("string"==typeof e&&(n=t[e],e=t,t=n),Q.isFunction(t))return r=B.call(arguments,2),i=function(){return t.apply(e||this,r.concat(B.call(arguments)))},i.guid=t.guid=t.guid||Q.guid++,i},now:Date.now,support:Y}),Q.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(t,e){K["[object "+e+"]"]=e.toLowerCase()});var it=function(t){function e(t,e,n,r){var i,o,u,a,c,s,f,h,d,g;if((e?e.ownerDocument||e:F)!==O&&D(e),e=e||O,n=n||[],a=e.nodeType,"string"!=typeof t||!t||1!==a&&9!==a&&11!==a)return n;if(!r&&R){if(11!==a&&(i=yt.exec(t)))if(u=i[1]){if(9===a){if(o=e.getElementById(u),!o||!o.parentNode)return n;if(o.id===u)return n.push(o),n}else if(e.ownerDocument&&(o=e.ownerDocument.getElementById(u))&&I(e,o)&&o.id===u)return n.push(o),n}else{if(i[2])return Z.apply(n,e.getElementsByTagName(t)),n;if((u=i[3])&&_.getElementsByClassName)return Z.apply(n,e.getElementsByClassName(u)),n}if(_.qsa&&(!q||!q.test(t))){if(h=f=W,d=e,g=1!==a&&t,1===a&&"object"!==e.nodeName.toLowerCase()){for(s=T(t),(f=e.getAttribute("id"))?h=f.replace(xt,"\\$&"):e.setAttribute("id",h),h="[id='"+h+"'] ",c=s.length;c--;)s[c]=h+p(s[c]);d=bt.test(t)&&l(e.parentNode)||e,g=s.join(",")}if(g)try{return Z.apply(n,d.querySelectorAll(g)),n}catch(v){}finally{f||e.removeAttribute("id")}}}return A(t.replace(ct,"$1"),e,n,r)}function n(){function t(n,r){return e.push(n+" ")>w.cacheLength&&delete t[e.shift()],t[n+" "]=r}var e=[];return t}function r(t){return t[W]=!0,t}function i(t){var e=O.createElement("div");try{return!!t(e)}catch(n){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function o(t,e){for(var n=t.split("|"),r=t.length;r--;)w.attrHandle[n[r]]=e}function u(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||K)-(~t.sourceIndex||K);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function a(t){return function(e){var n=e.nodeName.toLowerCase();return"input"===n&&e.type===t}}function c(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function s(t){return r(function(e){return e=+e,r(function(n,r){for(var i,o=t([],n.length,e),u=o.length;u--;)n[i=o[u]]&&(n[i]=!(r[i]=n[i]))})})}function l(t){return t&&"undefined"!=typeof t.getElementsByTagName&&t}function f(){}function p(t){for(var e=0,n=t.length,r="";e<n;e++)r+=t[e].value;return r}function h(t,e,n){var r=e.dir,i=n&&"parentNode"===r,o=$++;return e.first?function(e,n,o){for(;e=e[r];)if(1===e.nodeType||i)return t(e,n,o)}:function(e,n,u){var a,c,s=[M,o];if(u){for(;e=e[r];)if((1===e.nodeType||i)&&t(e,n,u))return!0}else for(;e=e[r];)if(1===e.nodeType||i){if(c=e[W]||(e[W]={}),(a=c[r])&&a[0]===M&&a[1]===o)return s[2]=a[2];if(c[r]=s,s[2]=t(e,n,u))return!0}}}function d(t){return t.length>1?function(e,n,r){for(var i=t.length;i--;)if(!t[i](e,n,r))return!1;return!0}:t[0]}function g(t,n,r){for(var i=0,o=n.length;i<o;i++)e(t,n[i],r);return r}function v(t,e,n,r,i){for(var o,u=[],a=0,c=t.length,s=null!=e;a<c;a++)(o=t[a])&&(n&&!n(o,r,i)||(u.push(o),s&&e.push(a)));return u}function m(t,e,n,i,o,u){return i&&!i[W]&&(i=m(i)),o&&!o[W]&&(o=m(o,u)),r(function(r,u,a,c){var s,l,f,p=[],h=[],d=u.length,m=r||g(e||"*",a.nodeType?[a]:a,[]),y=!t||!r&&e?m:v(m,p,t,a,c),b=n?o||(r?t:d||i)?[]:u:y;if(n&&n(y,b,a,c),i)for(s=v(b,h),i(s,[],a,c),l=s.length;l--;)(f=s[l])&&(b[h[l]]=!(y[h[l]]=f));if(r){if(o||t){if(o){for(s=[],l=b.length;l--;)(f=b[l])&&s.push(y[l]=f);o(null,b=[],s,c)}for(l=b.length;l--;)(f=b[l])&&(s=o?tt(r,f):p[l])>-1&&(r[s]=!(u[s]=f))}}else b=v(b===u?b.splice(d,b.length):b),o?o(null,u,b,c):Z.apply(u,b)})}function y(t){for(var e,n,r,i=t.length,o=w.relative[t[0].type],u=o||w.relative[" "],a=o?1:0,c=h(function(t){return t===e},u,!0),s=h(function(t){return tt(e,t)>-1},u,!0),l=[function(t,n,r){var i=!o&&(r||n!==E)||((e=n).nodeType?c(t,n,r):s(t,n,r));return e=null,i}];a<i;a++)if(n=w.relative[t[a].type])l=[h(d(l),n)];else{if(n=w.filter[t[a].type].apply(null,t[a].matches),n[W]){for(r=++a;r<i&&!w.relative[t[r].type];r++);return m(a>1&&d(l),a>1&&p(t.slice(0,a-1).concat({value:" "===t[a-2].type?"*":""})).replace(ct,"$1"),n,a<r&&y(t.slice(a,r)),r<i&&y(t=t.slice(r)),r<i&&p(t))}l.push(n)}return d(l)}function b(t,n){var i=n.length>0,o=t.length>0,u=function(r,u,a,c,s){var l,f,p,h=0,d="0",g=r&&[],m=[],y=E,b=r||o&&w.find.TAG("*",s),x=M+=null==y?1:Math.random()||.1,_=b.length;for(s&&(E=u!==O&&u);d!==_&&null!=(l=b[d]);d++){if(o&&l){for(f=0;p=t[f++];)if(p(l,u,a)){c.push(l);break}s&&(M=x)}i&&((l=!p&&l)&&h--,r&&g.push(l))}if(h+=d,i&&d!==h){for(f=0;p=n[f++];)p(g,m,u,a);if(r){if(h>0)for(;d--;)g[d]||m[d]||(m[d]=Y.call(c));m=v(m)}Z.apply(c,m),s&&!r&&m.length>0&&h+n.length>1&&e.uniqueSort(c)}return s&&(M=x,E=y),g};return i?r(u):u}var x,_,w,C,k,T,j,A,E,S,N,D,O,L,R,q,H,P,I,W="sizzle"+1*new Date,F=t.document,M=0,$=0,B=n(),z=n(),J=n(),U=function(t,e){return t===e&&(N=!0),0},K=1<<31,X={}.hasOwnProperty,V=[],Y=V.pop,G=V.push,Z=V.push,Q=V.slice,tt=function(t,e){for(var n=0,r=t.length;n<r;n++)if(t[n]===e)return n;return-1},et="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",nt="[\\x20\\t\\r\\n\\f]",rt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",it=rt.replace("w","w#"),ot="\\["+nt+"*("+rt+")(?:"+nt+"*([*^$|!~]?=)"+nt+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+it+"))|)"+nt+"*\\]",ut=":("+rt+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ot+")*)|.*)\\)|)",at=new RegExp(nt+"+","g"),ct=new RegExp("^"+nt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+nt+"+$","g"),st=new RegExp("^"+nt+"*,"+nt+"*"),lt=new RegExp("^"+nt+"*([>+~]|"+nt+")"+nt+"*"),ft=new RegExp("="+nt+"*([^\\]'\"]*?)"+nt+"*\\]","g"),pt=new RegExp(ut),ht=new RegExp("^"+it+"$"),dt={ID:new RegExp("^#("+rt+")"),CLASS:new RegExp("^\\.("+rt+")"),TAG:new RegExp("^("+rt.replace("w","w*")+")"),ATTR:new RegExp("^"+ot),PSEUDO:new RegExp("^"+ut),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+nt+"*(even|odd|(([+-]|)(\\d*)n|)"+nt+"*(?:([+-]|)"+nt+"*(\\d+)|))"+nt+"*\\)|)","i"),bool:new RegExp("^(?:"+et+")$","i"),needsContext:new RegExp("^"+nt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+nt+"*((?:-\\d)?\\d*)"+nt+"*\\)|)(?=[^-]|$)","i")},gt=/^(?:input|select|textarea|button)$/i,vt=/^h\d$/i,mt=/^[^{]+\{\s*\[native \w/,yt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,bt=/[+~]/,xt=/'|\\/g,_t=new RegExp("\\\\([\\da-f]{1,6}"+nt+"?|("+nt+")|.)","ig"),wt=function(t,e,n){var r="0x"+e-65536;return r!==r||n?e:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},Ct=function(){D()};try{Z.apply(V=Q.call(F.childNodes),F.childNodes),V[F.childNodes.length].nodeType}catch(kt){Z={apply:V.length?function(t,e){G.apply(t,Q.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}_=e.support={},k=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},D=e.setDocument=function(t){var e,n,r=t?t.ownerDocument||t:F;return r!==O&&9===r.nodeType&&r.documentElement?(O=r,L=r.documentElement,n=r.defaultView,n&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",Ct,!1):n.attachEvent&&n.attachEvent("onunload",Ct)),R=!k(r),_.attributes=i(function(t){return t.className="i",!t.getAttribute("className")}),_.getElementsByTagName=i(function(t){return t.appendChild(r.createComment("")),!t.getElementsByTagName("*").length}),_.getElementsByClassName=mt.test(r.getElementsByClassName),_.getById=i(function(t){return L.appendChild(t).id=W,!r.getElementsByName||!r.getElementsByName(W).length}),_.getById?(w.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&R){var n=e.getElementById(t);return n&&n.parentNode?[n]:[]}},w.filter.ID=function(t){var e=t.replace(_t,wt);return function(t){return t.getAttribute("id")===e}}):(delete w.find.ID,w.filter.ID=function(t){var e=t.replace(_t,wt);return function(t){var n="undefined"!=typeof t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}}),w.find.TAG=_.getElementsByTagName?function(t,e){return"undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t):_.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],i=0,o=e.getElementsByTagName(t);if("*"===t){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},w.find.CLASS=_.getElementsByClassName&&function(t,e){if(R)return e.getElementsByClassName(t)},H=[],q=[],(_.qsa=mt.test(r.querySelectorAll))&&(i(function(t){L.appendChild(t).innerHTML="<a id='"+W+"'></a><select id='"+W+"-\f]' msallowcapture=''><option selected=''></option></select>",t.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+nt+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||q.push("\\["+nt+"*(?:value|"+et+")"),t.querySelectorAll("[id~="+W+"-]").length||q.push("~="),t.querySelectorAll(":checked").length||q.push(":checked"),t.querySelectorAll("a#"+W+"+*").length||q.push(".#.+[+~]")}),i(function(t){var e=r.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&q.push("name"+nt+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),q.push(",.*:")})),(_.matchesSelector=mt.test(P=L.matches||L.webkitMatchesSelector||L.mozMatchesSelector||L.oMatchesSelector||L.msMatchesSelector))&&i(function(t){_.disconnectedMatch=P.call(t,"div"),P.call(t,"[s!='']:x"),H.push("!=",ut)}),q=q.length&&new RegExp(q.join("|")),H=H.length&&new RegExp(H.join("|")),e=mt.test(L.compareDocumentPosition),I=e||mt.test(L.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},U=e?function(t,e){if(t===e)return N=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n?n:(n=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&n||!_.sortDetached&&e.compareDocumentPosition(t)===n?t===r||t.ownerDocument===F&&I(F,t)?-1:e===r||e.ownerDocument===F&&I(F,e)?1:S?tt(S,t)-tt(S,e):0:4&n?-1:1)}:function(t,e){if(t===e)return N=!0,0;var n,i=0,o=t.parentNode,a=e.parentNode,c=[t],s=[e];if(!o||!a)return t===r?-1:e===r?1:o?-1:a?1:S?tt(S,t)-tt(S,e):0;if(o===a)return u(t,e);for(n=t;n=n.parentNode;)c.unshift(n);for(n=e;n=n.parentNode;)s.unshift(n);for(;c[i]===s[i];)i++;return i?u(c[i],s[i]):c[i]===F?-1:s[i]===F?1:0},r):O},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==O&&D(t),n=n.replace(ft,"='$1']"),_.matchesSelector&&R&&(!H||!H.test(n))&&(!q||!q.test(n)))try{var r=P.call(t,n);if(r||_.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(i){}return e(n,O,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==O&&D(t),I(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==O&&D(t);var n=w.attrHandle[e.toLowerCase()],r=n&&X.call(w.attrHandle,e.toLowerCase())?n(t,e,!R):void 0;return void 0!==r?r:_.attributes||!R?t.getAttribute(e):(r=t.getAttributeNode(e))&&r.specified?r.value:null},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,n=[],r=0,i=0;if(N=!_.detectDuplicates,S=!_.sortStable&&t.slice(0),t.sort(U),N){for(;e=t[i++];)e===t[i]&&(r=n.push(i));for(;r--;)t.splice(n[r],1)}return S=null,t},C=e.getText=function(t){var e,n="",r=0,i=t.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=C(t)}else if(3===i||4===i)return t.nodeValue}else for(;e=t[r++];)n+=C(e);return n},w=e.selectors={cacheLength:50,createPseudo:r,match:dt,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(_t,wt),t[3]=(t[3]||t[4]||t[5]||"").replace(_t,wt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return dt.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&pt.test(n)&&(e=T(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(_t,wt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=B[t+" "];return e||(e=new RegExp("(^|"+nt+")"+t+"("+nt+"|$)"))&&B(t,function(t){return e.test("string"==typeof t.className&&t.className||"undefined"!=typeof t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(i){var o=e.attr(i,t);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(at," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(t,e,n,r,i){var o="nth"!==t.slice(0,3),u="last"!==t.slice(-4),a="of-type"===e;return 1===r&&0===i?function(t){return!!t.parentNode}:function(e,n,c){var s,l,f,p,h,d,g=o!==u?"nextSibling":"previousSibling",v=e.parentNode,m=a&&e.nodeName.toLowerCase(),y=!c&&!a;if(v){if(o){for(;g;){for(f=e;f=f[g];)if(a?f.nodeName.toLowerCase()===m:1===f.nodeType)return!1;d=g="only"===t&&!d&&"nextSibling"}return!0}if(d=[u?v.firstChild:v.lastChild],u&&y){for(l=v[W]||(v[W]={}),s=l[t]||[],h=s[0]===M&&s[1],p=s[0]===M&&s[2],f=h&&v.childNodes[h];f=++h&&f&&f[g]||(p=h=0)||d.pop();)if(1===f.nodeType&&++p&&f===e){l[t]=[M,h,p];break}}else if(y&&(s=(e[W]||(e[W]={}))[t])&&s[0]===M)p=s[1];else for(;(f=++h&&f&&f[g]||(p=h=0)||d.pop())&&((a?f.nodeName.toLowerCase()!==m:1!==f.nodeType)||!++p||(y&&((f[W]||(f[W]={}))[t]=[M,p]),f!==e)););return p-=i,p===r||p%r===0&&p/r>=0}}},PSEUDO:function(t,n){var i,o=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return o[W]?o(n):o.length>1?(i=[t,t,"",n],w.setFilters.hasOwnProperty(t.toLowerCase())?r(function(t,e){for(var r,i=o(t,n),u=i.length;u--;)r=tt(t,i[u]),t[r]=!(e[r]=i[u])}):function(t){return o(t,0,i)}):o}},pseudos:{not:r(function(t){var e=[],n=[],i=j(t.replace(ct,"$1"));return i[W]?r(function(t,e,n,r){for(var o,u=i(t,null,r,[]),a=t.length;a--;)(o=u[a])&&(t[a]=!(e[a]=o))}):function(t,r,o){return e[0]=t,i(e,null,o,n),e[0]=null,!n.pop()}}),has:r(function(t){return function(n){return e(t,n).length>0}}),contains:r(function(t){return t=t.replace(_t,wt),function(e){return(e.textContent||e.innerText||C(e)).indexOf(t)>-1}}),lang:r(function(t){return ht.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(_t,wt).toLowerCase(),function(e){var n;do if(n=R?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===L},focus:function(t){return t===O.activeElement&&(!O.hasFocus||O.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!w.pseudos.empty(t)},header:function(t){return vt.test(t.nodeName)},input:function(t){return gt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:s(function(){return[0]}),last:s(function(t,e){return[e-1]}),eq:s(function(t,e,n){return[n<0?n+e:n]}),even:s(function(t,e){for(var n=0;n<e;n+=2)t.push(n);return t}),odd:s(function(t,e){for(var n=1;n<e;n+=2)t.push(n);return t}),lt:s(function(t,e,n){for(var r=n<0?n+e:n;--r>=0;)t.push(r);return t}),gt:s(function(t,e,n){for(var r=n<0?n+e:n;++r<e;)t.push(r);return t})}},w.pseudos.nth=w.pseudos.eq;for(x in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[x]=a(x);for(x in{submit:!0,reset:!0})w.pseudos[x]=c(x);return f.prototype=w.filters=w.pseudos,w.setFilters=new f,T=e.tokenize=function(t,n){var r,i,o,u,a,c,s,l=z[t+" "];if(l)return n?0:l.slice(0);for(a=t,c=[],s=w.preFilter;a;){r&&!(i=st.exec(a))||(i&&(a=a.slice(i[0].length)||a),c.push(o=[])),r=!1,(i=lt.exec(a))&&(r=i.shift(),o.push({value:r,type:i[0].replace(ct," ")}),a=a.slice(r.length));for(u in w.filter)!(i=dt[u].exec(a))||s[u]&&!(i=s[u](i))||(r=i.shift(),o.push({value:r,type:u,matches:i}),a=a.slice(r.length));if(!r)break}return n?a.length:a?e.error(t):z(t,c).slice(0)},j=e.compile=function(t,e){var n,r=[],i=[],o=J[t+" "];if(!o){for(e||(e=T(t)),n=e.length;n--;)o=y(e[n]),o[W]?r.push(o):i.push(o);o=J(t,b(i,r)),o.selector=t}return o},A=e.select=function(t,e,n,r){var i,o,u,a,c,s="function"==typeof t&&t,f=!r&&T(t=s.selector||t);if(n=n||[],1===f.length){if(o=f[0]=f[0].slice(0),o.length>2&&"ID"===(u=o[0]).type&&_.getById&&9===e.nodeType&&R&&w.relative[o[1].type]){if(e=(w.find.ID(u.matches[0].replace(_t,wt),e)||[])[0],!e)return n;s&&(e=e.parentNode),t=t.slice(o.shift().value.length)}for(i=dt.needsContext.test(t)?0:o.length;i--&&(u=o[i],!w.relative[a=u.type]);)if((c=w.find[a])&&(r=c(u.matches[0].replace(_t,wt),bt.test(o[0].type)&&l(e.parentNode)||e))){if(o.splice(i,1),t=r.length&&p(o),!t)return Z.apply(n,r),n;break}}return(s||j(t,f))(r,e,!R,n,bt.test(t)&&l(e.parentNode)||e),n},_.sortStable=W.split("").sort(U).join("")===W,_.detectDuplicates=!!N,D(),_.sortDetached=i(function(t){return 1&t.compareDocumentPosition(O.createElement("div"))}),i(function(t){return t.innerHTML="<a href='#'></a>","#"===t.firstChild.getAttribute("href")})||o("type|href|height|width",function(t,e,n){if(!n)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),_.attributes&&i(function(t){return t.innerHTML="<input/>",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||o("value",function(t,e,n){if(!n&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),i(function(t){return null==t.getAttribute("disabled")})||o(et,function(t,e,n){var r;if(!n)return t[e]===!0?e.toLowerCase():(r=t.getAttributeNode(e))&&r.specified?r.value:null}),e}(t);Q.find=it,Q.expr=it.selectors,Q.expr[":"]=Q.expr.pseudos,Q.unique=it.uniqueSort,Q.text=it.getText,Q.isXMLDoc=it.isXML,Q.contains=it.contains;var ot=Q.expr.match.needsContext,ut=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,at=/^.[^:#\[\.,]*$/;Q.filter=function(t,e,n){var r=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===r.nodeType?Q.find.matchesSelector(r,t)?[r]:[]:Q.find.matches(t,Q.grep(e,function(t){return 1===t.nodeType}))},Q.fn.extend({find:function(t){var e,n=this.length,r=[],i=this;if("string"!=typeof t)return this.pushStack(Q(t).filter(function(){
-for(e=0;e<n;e++)if(Q.contains(i[e],this))return!0}));for(e=0;e<n;e++)Q.find(t,i[e],r);return r=this.pushStack(n>1?Q.unique(r):r),r.selector=this.selector?this.selector+" "+t:t,r},filter:function(t){return this.pushStack(r(this,t||[],!1))},not:function(t){return this.pushStack(r(this,t||[],!0))},is:function(t){return!!r(this,"string"==typeof t&&ot.test(t)?Q(t):t||[],!1).length}});var ct,st=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,lt=Q.fn.init=function(t,e){var n,r;if(!t)return this;if("string"==typeof t){if(n="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:st.exec(t),!n||!n[1]&&e)return!e||e.jquery?(e||ct).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof Q?e[0]:e,Q.merge(this,Q.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:G,!0)),ut.test(n[1])&&Q.isPlainObject(e))for(n in e)Q.isFunction(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}return r=G.getElementById(n[2]),r&&r.parentNode&&(this.length=1,this[0]=r),this.context=G,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):Q.isFunction(t)?"undefined"!=typeof ct.ready?ct.ready(t):t(Q):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),Q.makeArray(t,this))};lt.prototype=Q.fn,ct=Q(G);var ft=/^(?:parents|prev(?:Until|All))/,pt={children:!0,contents:!0,next:!0,prev:!0};Q.extend({dir:function(t,e,n){for(var r=[],i=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(i&&Q(t).is(n))break;r.push(t)}return r},sibling:function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n}}),Q.fn.extend({has:function(t){var e=Q(t,this),n=e.length;return this.filter(function(){for(var t=0;t<n;t++)if(Q.contains(this,e[t]))return!0})},closest:function(t,e){for(var n,r=0,i=this.length,o=[],u=ot.test(t)||"string"!=typeof t?Q(t,e||this.context):0;r<i;r++)for(n=this[r];n&&n!==e;n=n.parentNode)if(n.nodeType<11&&(u?u.index(n)>-1:1===n.nodeType&&Q.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?Q.unique(o):o)},index:function(t){return t?"string"==typeof t?U.call(Q(t),this[0]):U.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(Q.unique(Q.merge(this.get(),Q(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),Q.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return Q.dir(t,"parentNode")},parentsUntil:function(t,e,n){return Q.dir(t,"parentNode",n)},next:function(t){return i(t,"nextSibling")},prev:function(t){return i(t,"previousSibling")},nextAll:function(t){return Q.dir(t,"nextSibling")},prevAll:function(t){return Q.dir(t,"previousSibling")},nextUntil:function(t,e,n){return Q.dir(t,"nextSibling",n)},prevUntil:function(t,e,n){return Q.dir(t,"previousSibling",n)},siblings:function(t){return Q.sibling((t.parentNode||{}).firstChild,t)},children:function(t){return Q.sibling(t.firstChild)},contents:function(t){return t.contentDocument||Q.merge([],t.childNodes)}},function(t,e){Q.fn[t]=function(n,r){var i=Q.map(this,e,n);return"Until"!==t.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=Q.filter(r,i)),this.length>1&&(pt[t]||Q.unique(i),ft.test(t)&&i.reverse()),this.pushStack(i)}});var ht=/\S+/g,dt={};Q.Callbacks=function(t){t="string"==typeof t?dt[t]||o(t):Q.extend({},t);var e,n,r,i,u,a,c=[],s=!t.once&&[],l=function(o){for(e=t.memory&&o,n=!0,a=i||0,i=0,u=c.length,r=!0;c&&a<u;a++)if(c[a].apply(o[0],o[1])===!1&&t.stopOnFalse){e=!1;break}r=!1,c&&(s?s.length&&l(s.shift()):e?c=[]:f.disable())},f={add:function(){if(c){var n=c.length;!function o(e){Q.each(e,function(e,n){var r=Q.type(n);"function"===r?t.unique&&f.has(n)||c.push(n):n&&n.length&&"string"!==r&&o(n)})}(arguments),r?u=c.length:e&&(i=n,l(e))}return this},remove:function(){return c&&Q.each(arguments,function(t,e){for(var n;(n=Q.inArray(e,c,n))>-1;)c.splice(n,1),r&&(n<=u&&u--,n<=a&&a--)}),this},has:function(t){return t?Q.inArray(t,c)>-1:!(!c||!c.length)},empty:function(){return c=[],u=0,this},disable:function(){return c=s=e=void 0,this},disabled:function(){return!c},lock:function(){return s=void 0,e||f.disable(),this},locked:function(){return!s},fireWith:function(t,e){return!c||n&&!s||(e=e||[],e=[t,e.slice?e.slice():e],r?s.push(e):l(e)),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!n}};return f},Q.extend({Deferred:function(t){var e=[["resolve","done",Q.Callbacks("once memory"),"resolved"],["reject","fail",Q.Callbacks("once memory"),"rejected"],["notify","progress",Q.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var t=arguments;return Q.Deferred(function(n){Q.each(e,function(e,o){var u=Q.isFunction(t[e])&&t[e];i[o[1]](function(){var t=u&&u.apply(this,arguments);t&&Q.isFunction(t.promise)?t.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[o[0]+"With"](this===r?n.promise():this,u?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?Q.extend(t,r):r}},i={};return r.pipe=r.then,Q.each(e,function(t,o){var u=o[2],a=o[3];r[o[1]]=u.add,a&&u.add(function(){n=a},e[1^t][2].disable,e[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=u.fireWith}),r.promise(i),t&&t.call(i,i),i},when:function(t){var e,n,r,i=0,o=B.call(arguments),u=o.length,a=1!==u||t&&Q.isFunction(t.promise)?u:0,c=1===a?t:Q.Deferred(),s=function(t,n,r){return function(i){n[t]=this,r[t]=arguments.length>1?B.call(arguments):i,r===e?c.notifyWith(n,r):--a||c.resolveWith(n,r)}};if(u>1)for(e=new Array(u),n=new Array(u),r=new Array(u);i<u;i++)o[i]&&Q.isFunction(o[i].promise)?o[i].promise().done(s(i,r,o)).fail(c.reject).progress(s(i,n,e)):--a;return a||c.resolveWith(r,o),c.promise()}});var gt;Q.fn.ready=function(t){return Q.ready.promise().done(t),this},Q.extend({isReady:!1,readyWait:1,holdReady:function(t){t?Q.readyWait++:Q.ready(!0)},ready:function(t){(t===!0?--Q.readyWait:Q.isReady)||(Q.isReady=!0,t!==!0&&--Q.readyWait>0||(gt.resolveWith(G,[Q]),Q.fn.triggerHandler&&(Q(G).triggerHandler("ready"),Q(G).off("ready"))))}}),Q.ready.promise=function(e){return gt||(gt=Q.Deferred(),"complete"===G.readyState?setTimeout(Q.ready):(G.addEventListener("DOMContentLoaded",u,!1),t.addEventListener("load",u,!1))),gt.promise(e)},Q.ready.promise();var vt=Q.access=function(t,e,n,r,i,o,u){var a=0,c=t.length,s=null==n;if("object"===Q.type(n)){i=!0;for(a in n)Q.access(t,e,a,n[a],!0,o,u)}else if(void 0!==r&&(i=!0,Q.isFunction(r)||(u=!0),s&&(u?(e.call(t,r),e=null):(s=e,e=function(t,e,n){return s.call(Q(t),n)})),e))for(;a<c;a++)e(t[a],n,u?r:r.call(t[a],a,e(t[a],n)));return i?t:s?e.call(t):c?e(t[0],n):o};Q.acceptData=function(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType},a.uid=1,a.accepts=Q.acceptData,a.prototype={key:function(t){if(!a.accepts(t))return 0;var e={},n=t[this.expando];if(!n){n=a.uid++;try{e[this.expando]={value:n},Object.defineProperties(t,e)}catch(r){e[this.expando]=n,Q.extend(t,e)}}return this.cache[n]||(this.cache[n]={}),n},set:function(t,e,n){var r,i=this.key(t),o=this.cache[i];if("string"==typeof e)o[e]=n;else if(Q.isEmptyObject(o))Q.extend(this.cache[i],e);else for(r in e)o[r]=e[r];return o},get:function(t,e){var n=this.cache[this.key(t)];return void 0===e?n:n[e]},access:function(t,e,n){var r;return void 0===e||e&&"string"==typeof e&&void 0===n?(r=this.get(t,e),void 0!==r?r:this.get(t,Q.camelCase(e))):(this.set(t,e,n),void 0!==n?n:e)},remove:function(t,e){var n,r,i,o=this.key(t),u=this.cache[o];if(void 0===e)this.cache[o]={};else{Q.isArray(e)?r=e.concat(e.map(Q.camelCase)):(i=Q.camelCase(e),e in u?r=[e,i]:(r=i,r=r in u?[r]:r.match(ht)||[])),n=r.length;for(;n--;)delete u[r[n]]}},hasData:function(t){return!Q.isEmptyObject(this.cache[t[this.expando]]||{})},discard:function(t){t[this.expando]&&delete this.cache[t[this.expando]]}};var mt=new a,yt=new a,bt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,xt=/([A-Z])/g;Q.extend({hasData:function(t){return yt.hasData(t)||mt.hasData(t)},data:function(t,e,n){return yt.access(t,e,n)},removeData:function(t,e){yt.remove(t,e)},_data:function(t,e,n){return mt.access(t,e,n)},_removeData:function(t,e){mt.remove(t,e)}}),Q.fn.extend({data:function(t,e){var n,r,i,o=this[0],u=o&&o.attributes;if(void 0===t){if(this.length&&(i=yt.get(o),1===o.nodeType&&!mt.get(o,"hasDataAttrs"))){for(n=u.length;n--;)u[n]&&(r=u[n].name,0===r.indexOf("data-")&&(r=Q.camelCase(r.slice(5)),c(o,r,i[r])));mt.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof t?this.each(function(){yt.set(this,t)}):vt(this,function(e){var n,r=Q.camelCase(t);if(o&&void 0===e){if(n=yt.get(o,t),void 0!==n)return n;if(n=yt.get(o,r),void 0!==n)return n;if(n=c(o,r,void 0),void 0!==n)return n}else this.each(function(){var n=yt.get(this,r);yt.set(this,r,e),t.indexOf("-")!==-1&&void 0!==n&&yt.set(this,t,e)})},null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each(function(){yt.remove(this,t)})}}),Q.extend({queue:function(t,e,n){var r;if(t)return e=(e||"fx")+"queue",r=mt.get(t,e),n&&(!r||Q.isArray(n)?r=mt.access(t,e,Q.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||"fx";var n=Q.queue(t,e),r=n.length,i=n.shift(),o=Q._queueHooks(t,e),u=function(){Q.dequeue(t,e)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===e&&n.unshift("inprogress"),delete o.stop,i.call(t,u,o)),!r&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return mt.get(t,n)||mt.access(t,n,{empty:Q.Callbacks("once memory").add(function(){mt.remove(t,[e+"queue",n])})})}}),Q.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length<n?Q.queue(this[0],t):void 0===e?this:this.each(function(){var n=Q.queue(this,t,e);Q._queueHooks(this,t),"fx"===t&&"inprogress"!==n[0]&&Q.dequeue(this,t)})},dequeue:function(t){return this.each(function(){Q.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||"fx",[])},promise:function(t,e){var n,r=1,i=Q.Deferred(),o=this,u=this.length,a=function(){--r||i.resolveWith(o,[o])};for("string"!=typeof t&&(e=t,t=void 0),t=t||"fx";u--;)n=mt.get(o[u],t+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(e)}});var _t=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,wt=["Top","Right","Bottom","Left"],Ct=function(t,e){return t=e||t,"none"===Q.css(t,"display")||!Q.contains(t.ownerDocument,t)},kt=/^(?:checkbox|radio)$/i;!function(){var t=G.createDocumentFragment(),e=t.appendChild(G.createElement("div")),n=G.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),e.appendChild(n),Y.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",Y.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var Tt="undefined";Y.focusinBubbles="onfocusin"in t;var jt=/^key/,At=/^(?:mouse|pointer|contextmenu)|click/,Et=/^(?:focusinfocus|focusoutblur)$/,St=/^([^.]*)(?:\.(.+)|)$/;Q.event={global:{},add:function(t,e,n,r,i){var o,u,a,c,s,l,f,p,h,d,g,v=mt.get(t);if(v)for(n.handler&&(o=n,n=o.handler,i=o.selector),n.guid||(n.guid=Q.guid++),(c=v.events)||(c=v.events={}),(u=v.handle)||(u=v.handle=function(e){return typeof Q!==Tt&&Q.event.triggered!==e.type?Q.event.dispatch.apply(t,arguments):void 0}),e=(e||"").match(ht)||[""],s=e.length;s--;)a=St.exec(e[s])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h&&(f=Q.event.special[h]||{},h=(i?f.delegateType:f.bindType)||h,f=Q.event.special[h]||{},l=Q.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&Q.expr.match.needsContext.test(i),namespace:d.join(".")},o),(p=c[h])||(p=c[h]=[],p.delegateCount=0,f.setup&&f.setup.call(t,r,d,u)!==!1||t.addEventListener&&t.addEventListener(h,u,!1)),f.add&&(f.add.call(t,l),l.handler.guid||(l.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,l):p.push(l),Q.event.global[h]=!0)},remove:function(t,e,n,r,i){var o,u,a,c,s,l,f,p,h,d,g,v=mt.hasData(t)&&mt.get(t);if(v&&(c=v.events)){for(e=(e||"").match(ht)||[""],s=e.length;s--;)if(a=St.exec(e[s])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){for(f=Q.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=c[h]||[],a=a[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=p.length;o--;)l=p[o],!i&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(o,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(t,l));u&&!p.length&&(f.teardown&&f.teardown.call(t,d,v.handle)!==!1||Q.removeEvent(t,h,v.handle),delete c[h])}else for(h in c)Q.event.remove(t,h+e[s],n,r,!0);Q.isEmptyObject(c)&&(delete v.handle,mt.remove(t,"events"))}},trigger:function(e,n,r,i){var o,u,a,c,s,l,f,p=[r||G],h=V.call(e,"type")?e.type:e,d=V.call(e,"namespace")?e.namespace.split("."):[];if(u=a=r=r||G,3!==r.nodeType&&8!==r.nodeType&&!Et.test(h+Q.event.triggered)&&(h.indexOf(".")>=0&&(d=h.split("."),h=d.shift(),d.sort()),s=h.indexOf(":")<0&&"on"+h,e=e[Q.expando]?e:new Q.Event(h,"object"==typeof e&&e),e.isTrigger=i?2:3,e.namespace=d.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=r),n=null==n?[e]:Q.makeArray(n,[e]),f=Q.event.special[h]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!Q.isWindow(r)){for(c=f.delegateType||h,Et.test(c+h)||(u=u.parentNode);u;u=u.parentNode)p.push(u),a=u;a===(r.ownerDocument||G)&&p.push(a.defaultView||a.parentWindow||t)}for(o=0;(u=p[o++])&&!e.isPropagationStopped();)e.type=o>1?c:f.bindType||h,l=(mt.get(u,"events")||{})[e.type]&&mt.get(u,"handle"),l&&l.apply(u,n),l=s&&u[s],l&&l.apply&&Q.acceptData(u)&&(e.result=l.apply(u,n),e.result===!1&&e.preventDefault());return e.type=h,i||e.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!Q.acceptData(r)||s&&Q.isFunction(r[h])&&!Q.isWindow(r)&&(a=r[s],a&&(r[s]=null),Q.event.triggered=h,r[h](),Q.event.triggered=void 0,a&&(r[s]=a)),e.result}},dispatch:function(t){t=Q.event.fix(t);var e,n,r,i,o,u=[],a=B.call(arguments),c=(mt.get(this,"events")||{})[t.type]||[],s=Q.event.special[t.type]||{};if(a[0]=t,t.delegateTarget=this,!s.preDispatch||s.preDispatch.call(this,t)!==!1){for(u=Q.event.handlers.call(this,t,c),e=0;(i=u[e++])&&!t.isPropagationStopped();)for(t.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!t.isImmediatePropagationStopped();)t.namespace_re&&!t.namespace_re.test(o.namespace)||(t.handleObj=o,t.data=o.data,r=((Q.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),void 0!==r&&(t.result=r)===!1&&(t.preventDefault(),t.stopPropagation()));return s.postDispatch&&s.postDispatch.call(this,t),t.result}},handlers:function(t,e){var n,r,i,o,u=[],a=e.delegateCount,c=t.target;if(a&&c.nodeType&&(!t.button||"click"!==t.type))for(;c!==this;c=c.parentNode||this)if(c.disabled!==!0||"click"!==t.type){for(r=[],n=0;n<a;n++)o=e[n],i=o.selector+" ",void 0===r[i]&&(r[i]=o.needsContext?Q(i,this).index(c)>=0:Q.find(i,this,null,[c]).length),r[i]&&r.push(o);r.length&&u.push({elem:c,handlers:r})}return a<e.length&&u.push({elem:this,handlers:e.slice(a)}),u},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(t,e){return null==t.which&&(t.which=null!=e.charCode?e.charCode:e.keyCode),t}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(t,e){var n,r,i,o=e.button;return null==t.pageX&&null!=e.clientX&&(n=t.target.ownerDocument||G,r=n.documentElement,i=n.body,t.pageX=e.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),t.pageY=e.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),t.which||void 0===o||(t.which=1&o?1:2&o?3:4&o?2:0),t}},fix:function(t){if(t[Q.expando])return t;var e,n,r,i=t.type,o=t,u=this.fixHooks[i];for(u||(this.fixHooks[i]=u=At.test(i)?this.mouseHooks:jt.test(i)?this.keyHooks:{}),r=u.props?this.props.concat(u.props):this.props,t=new Q.Event(o),e=r.length;e--;)n=r[e],t[n]=o[n];return t.target||(t.target=G),3===t.target.nodeType&&(t.target=t.target.parentNode),u.filter?u.filter(t,o):t},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==f()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===f()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&Q.nodeName(this,"input"))return this.click(),!1},_default:function(t){return Q.nodeName(t.target,"a")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}},simulate:function(t,e,n,r){var i=Q.extend(new Q.Event,n,{type:t,isSimulated:!0,originalEvent:{}});r?Q.event.trigger(i,null,e):Q.event.dispatch.call(e,i),i.isDefaultPrevented()&&n.preventDefault()}},Q.removeEvent=function(t,e,n){t.removeEventListener&&t.removeEventListener(e,n,!1)},Q.Event=function(t,e){return this instanceof Q.Event?(t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&t.returnValue===!1?s:l):this.type=t,e&&Q.extend(this,e),this.timeStamp=t&&t.timeStamp||Q.now(),void(this[Q.expando]=!0)):new Q.Event(t,e)},Q.Event.prototype={isDefaultPrevented:l,isPropagationStopped:l,isImmediatePropagationStopped:l,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=s,t&&t.preventDefault&&t.preventDefault()},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=s,t&&t.stopPropagation&&t.stopPropagation()},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=s,t&&t.stopImmediatePropagation&&t.stopImmediatePropagation(),this.stopPropagation()}},Q.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(t,e){Q.event.special[t]={delegateType:e,bindType:e,handle:function(t){var n,r=this,i=t.relatedTarget,o=t.handleObj;return i&&(i===r||Q.contains(r,i))||(t.type=o.origType,n=o.handler.apply(this,arguments),t.type=e),n}}}),Y.focusinBubbles||Q.each({focus:"focusin",blur:"focusout"},function(t,e){var n=function(t){Q.event.simulate(e,t.target,Q.event.fix(t),!0)};Q.event.special[e]={setup:function(){var r=this.ownerDocument||this,i=mt.access(r,e);i||r.addEventListener(t,n,!0),mt.access(r,e,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=mt.access(r,e)-1;i?mt.access(r,e,i):(r.removeEventListener(t,n,!0),mt.remove(r,e))}}}),Q.fn.extend({on:function(t,e,n,r,i){var o,u;if("object"==typeof t){"string"!=typeof e&&(n=n||e,e=void 0);for(u in t)this.on(u,e,n,t[u],i);return this}if(null==n&&null==r?(r=e,n=e=void 0):null==r&&("string"==typeof e?(r=n,n=void 0):(r=n,n=e,e=void 0)),r===!1)r=l;else if(!r)return this;return 1===i&&(o=r,r=function(t){return Q().off(t),o.apply(this,arguments)},r.guid=o.guid||(o.guid=Q.guid++)),this.each(function(){Q.event.add(this,t,r,n,e)})},one:function(t,e,n,r){return this.on(t,e,n,r,1)},off:function(t,e,n){var r,i;if(t&&t.preventDefault&&t.handleObj)return r=t.handleObj,Q(t.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof t){for(i in t)this.off(i,e,t[i]);return this}return e!==!1&&"function"!=typeof e||(n=e,e=void 0),n===!1&&(n=l),this.each(function(){Q.event.remove(this,t,n,e)})},trigger:function(t,e){return this.each(function(){Q.event.trigger(t,e,this)})},triggerHandler:function(t,e){var n=this[0];if(n)return Q.event.trigger(t,e,n,!0)}});var Nt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Dt=/<([\w:]+)/,Ot=/<|&#?\w+;/,Lt=/<(?:script|style|link)/i,Rt=/checked\s*(?:[^=]|=\s*.checked.)/i,qt=/^$|\/(?:java|ecma)script/i,Ht=/^true\/(.*)/,Pt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,It={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};It.optgroup=It.option,It.tbody=It.tfoot=It.colgroup=It.caption=It.thead,It.th=It.td,Q.extend({clone:function(t,e,n){var r,i,o,u,a=t.cloneNode(!0),c=Q.contains(t.ownerDocument,t);if(!(Y.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||Q.isXMLDoc(t)))for(u=m(a),o=m(t),r=0,i=o.length;r<i;r++)y(o[r],u[r]);if(e)if(n)for(o=o||m(t),u=u||m(a),r=0,i=o.length;r<i;r++)v(o[r],u[r]);else v(t,a);return u=m(a,"script"),u.length>0&&g(u,!c&&m(t,"script")),a},buildFragment:function(t,e,n,r){for(var i,o,u,a,c,s,l=e.createDocumentFragment(),f=[],p=0,h=t.length;p<h;p++)if(i=t[p],i||0===i)if("object"===Q.type(i))Q.merge(f,i.nodeType?[i]:i);else if(Ot.test(i)){for(o=o||l.appendChild(e.createElement("div")),u=(Dt.exec(i)||["",""])[1].toLowerCase(),a=It[u]||It._default,o.innerHTML=a[1]+i.replace(Nt,"<$1></$2>")+a[2],s=a[0];s--;)o=o.lastChild;Q.merge(f,o.childNodes),o=l.firstChild,o.textContent=""}else f.push(e.createTextNode(i));for(l.textContent="",p=0;i=f[p++];)if((!r||Q.inArray(i,r)===-1)&&(c=Q.contains(i.ownerDocument,i),o=m(l.appendChild(i),"script"),c&&g(o),n))for(s=0;i=o[s++];)qt.test(i.type||"")&&n.push(i);return l},cleanData:function(t){for(var e,n,r,i,o=Q.event.special,u=0;void 0!==(n=t[u]);u++){if(Q.acceptData(n)&&(i=n[mt.expando],i&&(e=mt.cache[i]))){if(e.events)for(r in e.events)o[r]?Q.event.remove(n,r):Q.removeEvent(n,r,e.handle);mt.cache[i]&&delete mt.cache[i]}delete yt.cache[n[yt.expando]]}}}),Q.fn.extend({text:function(t){return vt(this,function(t){return void 0===t?Q.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=p(this,t);e.appendChild(t)}})},prepend:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=p(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var n,r=t?Q.filter(t,this):this,i=0;null!=(n=r[i]);i++)e||1!==n.nodeType||Q.cleanData(m(n)),n.parentNode&&(e&&Q.contains(n.ownerDocument,n)&&g(m(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(Q.cleanData(m(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return Q.clone(this,t,e)})},html:function(t){return vt(this,function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!Lt.test(t)&&!It[(Dt.exec(t)||["",""])[1].toLowerCase()]){t=t.replace(Nt,"<$1></$2>");try{for(;n<r;n++)e=this[n]||{},1===e.nodeType&&(Q.cleanData(m(e,!1)),e.innerHTML=t);e=0}catch(i){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=arguments[0];return this.domManip(arguments,function(e){t=this.parentNode,Q.cleanData(m(this)),t&&t.replaceChild(e,this)}),t&&(t.length||t.nodeType)?this:this.remove()},detach:function(t){return this.remove(t,!0)},domManip:function(t,e){t=z.apply([],t);var n,r,i,o,u,a,c=0,s=this.length,l=this,f=s-1,p=t[0],g=Q.isFunction(p);if(g||s>1&&"string"==typeof p&&!Y.checkClone&&Rt.test(p))return this.each(function(n){var r=l.eq(n);g&&(t[0]=p.call(this,n,r.html())),r.domManip(t,e)});if(s&&(n=Q.buildFragment(t,this[0].ownerDocument,!1,this),r=n.firstChild,1===n.childNodes.length&&(n=r),r)){for(i=Q.map(m(n,"script"),h),o=i.length;c<s;c++)u=n,c!==f&&(u=Q.clone(u,!0,!0),o&&Q.merge(i,m(u,"script"))),e.call(this[c],u,c);if(o)for(a=i[i.length-1].ownerDocument,Q.map(i,d),c=0;c<o;c++)u=i[c],qt.test(u.type||"")&&!mt.access(u,"globalEval")&&Q.contains(a,u)&&(u.src?Q._evalUrl&&Q._evalUrl(u.src):Q.globalEval(u.textContent.replace(Pt,"")))}return this}}),Q.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){Q.fn[t]=function(t){for(var n,r=[],i=Q(t),o=i.length-1,u=0;u<=o;u++)n=u===o?this:this.clone(!0),Q(i[u])[e](n),J.apply(r,n.get());return this.pushStack(r)}});var Wt,Ft={},Mt=/^margin/,$t=new RegExp("^("+_t+")(?!px)[a-z%]+$","i"),Bt=function(e){return e.ownerDocument.defaultView.opener?e.ownerDocument.defaultView.getComputedStyle(e,null):t.getComputedStyle(e,null)};!function(){function e(){u.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",u.innerHTML="",i.appendChild(o);var e=t.getComputedStyle(u,null);n="1%"!==e.top,r="4px"===e.width,i.removeChild(o)}var n,r,i=G.documentElement,o=G.createElement("div"),u=G.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",Y.clearCloneStyle="content-box"===u.style.backgroundClip,o.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",o.appendChild(u),t.getComputedStyle&&Q.extend(Y,{pixelPosition:function(){return e(),n},boxSizingReliable:function(){return null==r&&e(),r},reliableMarginRight:function(){var e,n=u.appendChild(G.createElement("div"));return n.style.cssText=u.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",n.style.marginRight=n.style.width="0",u.style.width="1px",i.appendChild(o),e=!parseFloat(t.getComputedStyle(n,null).marginRight),i.removeChild(o),u.removeChild(n),e}}))}(),Q.swap=function(t,e,n,r){var i,o,u={};for(o in e)u[o]=t.style[o],t.style[o]=e[o];i=n.apply(t,r||[]);for(o in e)t.style[o]=u[o];return i};var zt=/^(none|table(?!-c[ea]).+)/,Jt=new RegExp("^("+_t+")(.*)$","i"),Ut=new RegExp("^([+-])=("+_t+")","i"),Kt={position:"absolute",visibility:"hidden",display:"block"},Xt={letterSpacing:"0",fontWeight:"400"},Vt=["Webkit","O","Moz","ms"];Q.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=_(t,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(t,e,n,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var i,o,u,a=Q.camelCase(e),c=t.style;return e=Q.cssProps[a]||(Q.cssProps[a]=C(c,a)),u=Q.cssHooks[e]||Q.cssHooks[a],void 0===n?u&&"get"in u&&void 0!==(i=u.get(t,!1,r))?i:c[e]:(o=typeof n,"string"===o&&(i=Ut.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(Q.css(t,e)),o="number"),null!=n&&n===n&&("number"!==o||Q.cssNumber[a]||(n+="px"),Y.clearCloneStyle||""!==n||0!==e.indexOf("background")||(c[e]="inherit"),u&&"set"in u&&void 0===(n=u.set(t,n,r))||(c[e]=n)),void 0)}},css:function(t,e,n,r){var i,o,u,a=Q.camelCase(e);return e=Q.cssProps[a]||(Q.cssProps[a]=C(t.style,a)),u=Q.cssHooks[e]||Q.cssHooks[a],u&&"get"in u&&(i=u.get(t,!0,n)),void 0===i&&(i=_(t,e,r)),"normal"===i&&e in Xt&&(i=Xt[e]),""===n||n?(o=parseFloat(i),n===!0||Q.isNumeric(o)?o||0:i):i}}),Q.each(["height","width"],function(t,e){Q.cssHooks[e]={get:function(t,n,r){if(n)return zt.test(Q.css(t,"display"))&&0===t.offsetWidth?Q.swap(t,Kt,function(){return j(t,e,r)}):j(t,e,r)},set:function(t,n,r){var i=r&&Bt(t);return k(t,n,r?T(t,e,r,"border-box"===Q.css(t,"boxSizing",!1,i),i):0)}}}),Q.cssHooks.marginRight=w(Y.reliableMarginRight,function(t,e){if(e)return Q.swap(t,{display:"inline-block"},_,[t,"marginRight"])}),Q.each({margin:"",padding:"",border:"Width"},function(t,e){Q.cssHooks[t+e]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[t+wt[r]+e]=o[r]||o[r-2]||o[0];return i}},Mt.test(t)||(Q.cssHooks[t+e].set=k)}),Q.fn.extend({css:function(t,e){return vt(this,function(t,e,n){var r,i,o={},u=0;if(Q.isArray(e)){for(r=Bt(t),i=e.length;u<i;u++)o[e[u]]=Q.css(t,e[u],!1,r);return o}return void 0!==n?Q.style(t,e,n):Q.css(t,e)},t,e,arguments.length>1)},show:function(){return A(this,!0)},hide:function(){return A(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){Ct(this)?Q(this).show():Q(this).hide()})}}),Q.Tween=E,E.prototype={constructor:E,init:function(t,e,n,r,i,o){this.elem=t,this.prop=n,this.easing=i||"swing",this.options=e,this.start=this.now=this.cur(),this.end=r,this.unit=o||(Q.cssNumber[n]?"":"px")},cur:function(){var t=E.propHooks[this.prop];return t&&t.get?t.get(this):E.propHooks._default.get(this)},run:function(t){var e,n=E.propHooks[this.prop];return this.options.duration?this.pos=e=Q.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):E.propHooks._default.set(this),this}},E.prototype.init.prototype=E.prototype,E.propHooks={_default:{get:function(t){var e;return null==t.elem[t.prop]||t.elem.style&&null!=t.elem.style[t.prop]?(e=Q.css(t.elem,t.prop,""),e&&"auto"!==e?e:0):t.elem[t.prop]},set:function(t){Q.fx.step[t.prop]?Q.fx.step[t.prop](t):t.elem.style&&(null!=t.elem.style[Q.cssProps[t.prop]]||Q.cssHooks[t.prop])?Q.style(t.elem,t.prop,t.now+t.unit):t.elem[t.prop]=t.now}}},E.propHooks.scrollTop=E.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},Q.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2}},Q.fx=E.prototype.init,Q.fx.step={};var Yt,Gt,Zt=/^(?:toggle|show|hide)$/,Qt=new RegExp("^(?:([+-])=|)("+_t+")([a-z%]*)$","i"),te=/queueHooks$/,ee=[O],ne={"*":[function(t,e){var n=this.createTween(t,e),r=n.cur(),i=Qt.exec(e),o=i&&i[3]||(Q.cssNumber[t]?"":"px"),u=(Q.cssNumber[t]||"px"!==o&&+r)&&Qt.exec(Q.css(n.elem,t)),a=1,c=20;if(u&&u[3]!==o){o=o||u[3],i=i||[],u=+r||1;do a=a||".5",u/=a,Q.style(n.elem,t,u+o);while(a!==(a=n.cur()/r)&&1!==a&&--c)}return i&&(u=n.start=+u||+r||0,n.unit=o,n.end=i[1]?u+(i[1]+1)*i[2]:+i[2]),n}]};Q.Animation=Q.extend(R,{tweener:function(t,e){Q.isFunction(t)?(e=t,t=["*"]):t=t.split(" ");for(var n,r=0,i=t.length;r<i;r++)n=t[r],ne[n]=ne[n]||[],ne[n].unshift(e)},prefilter:function(t,e){e?ee.unshift(t):ee.push(t)}}),Q.speed=function(t,e,n){var r=t&&"object"==typeof t?Q.extend({},t):{complete:n||!n&&e||Q.isFunction(t)&&t,duration:t,easing:n&&e||e&&!Q.isFunction(e)&&e};return r.duration=Q.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in Q.fx.speeds?Q.fx.speeds[r.duration]:Q.fx.speeds._default,null!=r.queue&&r.queue!==!0||(r.queue="fx"),r.old=r.complete,r.complete=function(){Q.isFunction(r.old)&&r.old.call(this),r.queue&&Q.dequeue(this,r.queue)},r},Q.fn.extend({fadeTo:function(t,e,n,r){return this.filter(Ct).css("opacity",0).show().end().animate({opacity:e},t,n,r)},animate:function(t,e,n,r){var i=Q.isEmptyObject(t),o=Q.speed(e,n,r),u=function(){var e=R(this,Q.extend({},t),o);(i||mt.get(this,"finish"))&&e.stop(!0)};return u.finish=u,i||o.queue===!1?this.each(u):this.queue(o.queue,u)},stop:function(t,e,n){var r=function(t){var e=t.stop;delete t.stop,e(n)};return"string"!=typeof t&&(n=e,e=t,t=void 0),e&&t!==!1&&this.queue(t||"fx",[]),this.each(function(){var e=!0,i=null!=t&&t+"queueHooks",o=Q.timers,u=mt.get(this);if(i)u[i]&&u[i].stop&&r(u[i]);else for(i in u)u[i]&&u[i].stop&&te.test(i)&&r(u[i]);for(i=o.length;i--;)o[i].elem!==this||null!=t&&o[i].queue!==t||(o[i].anim.stop(n),e=!1,o.splice(i,1));!e&&n||Q.dequeue(this,t)})},finish:function(t){return t!==!1&&(t=t||"fx"),this.each(function(){var e,n=mt.get(this),r=n[t+"queue"],i=n[t+"queueHooks"],o=Q.timers,u=r?r.length:0;for(n.finish=!0,Q.queue(this,t,[]),i&&i.stop&&i.stop.call(this,!0),e=o.length;e--;)o[e].elem===this&&o[e].queue===t&&(o[e].anim.stop(!0),o.splice(e,1));
-for(e=0;e<u;e++)r[e]&&r[e].finish&&r[e].finish.call(this);delete n.finish})}}),Q.each(["toggle","show","hide"],function(t,e){var n=Q.fn[e];Q.fn[e]=function(t,r,i){return null==t||"boolean"==typeof t?n.apply(this,arguments):this.animate(N(e,!0),t,r,i)}}),Q.each({slideDown:N("show"),slideUp:N("hide"),slideToggle:N("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){Q.fn[t]=function(t,n,r){return this.animate(e,t,n,r)}}),Q.timers=[],Q.fx.tick=function(){var t,e=0,n=Q.timers;for(Yt=Q.now();e<n.length;e++)t=n[e],t()||n[e]!==t||n.splice(e--,1);n.length||Q.fx.stop(),Yt=void 0},Q.fx.timer=function(t){Q.timers.push(t),t()?Q.fx.start():Q.timers.pop()},Q.fx.interval=13,Q.fx.start=function(){Gt||(Gt=setInterval(Q.fx.tick,Q.fx.interval))},Q.fx.stop=function(){clearInterval(Gt),Gt=null},Q.fx.speeds={slow:600,fast:200,_default:400},Q.fn.delay=function(t,e){return t=Q.fx?Q.fx.speeds[t]||t:t,e=e||"fx",this.queue(e,function(e,n){var r=setTimeout(e,t);n.stop=function(){clearTimeout(r)}})},function(){var t=G.createElement("input"),e=G.createElement("select"),n=e.appendChild(G.createElement("option"));t.type="checkbox",Y.checkOn=""!==t.value,Y.optSelected=n.selected,e.disabled=!0,Y.optDisabled=!n.disabled,t=G.createElement("input"),t.value="t",t.type="radio",Y.radioValue="t"===t.value}();var re,ie,oe=Q.expr.attrHandle;Q.fn.extend({attr:function(t,e){return vt(this,Q.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){Q.removeAttr(this,t)})}}),Q.extend({attr:function(t,e,n){var r,i,o=t.nodeType;if(t&&3!==o&&8!==o&&2!==o)return typeof t.getAttribute===Tt?Q.prop(t,e,n):(1===o&&Q.isXMLDoc(t)||(e=e.toLowerCase(),r=Q.attrHooks[e]||(Q.expr.match.bool.test(e)?ie:re)),void 0===n?r&&"get"in r&&null!==(i=r.get(t,e))?i:(i=Q.find.attr(t,e),null==i?void 0:i):null!==n?r&&"set"in r&&void 0!==(i=r.set(t,n,e))?i:(t.setAttribute(e,n+""),n):void Q.removeAttr(t,e))},removeAttr:function(t,e){var n,r,i=0,o=e&&e.match(ht);if(o&&1===t.nodeType)for(;n=o[i++];)r=Q.propFix[n]||n,Q.expr.match.bool.test(n)&&(t[r]=!1),t.removeAttribute(n)},attrHooks:{type:{set:function(t,e){if(!Y.radioValue&&"radio"===e&&Q.nodeName(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}}}),ie={set:function(t,e,n){return e===!1?Q.removeAttr(t,n):t.setAttribute(n,n),n}},Q.each(Q.expr.match.bool.source.match(/\w+/g),function(t,e){var n=oe[e]||Q.find.attr;oe[e]=function(t,e,r){var i,o;return r||(o=oe[e],oe[e]=i,i=null!=n(t,e,r)?e.toLowerCase():null,oe[e]=o),i}});var ue=/^(?:input|select|textarea|button)$/i;Q.fn.extend({prop:function(t,e){return vt(this,Q.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[Q.propFix[t]||t]})}}),Q.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(t,e,n){var r,i,o,u=t.nodeType;if(t&&3!==u&&8!==u&&2!==u)return o=1!==u||!Q.isXMLDoc(t),o&&(e=Q.propFix[e]||e,i=Q.propHooks[e]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(t,n,e))?r:t[e]=n:i&&"get"in i&&null!==(r=i.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){return t.hasAttribute("tabindex")||ue.test(t.nodeName)||t.href?t.tabIndex:-1}}}}),Y.optSelected||(Q.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null}}),Q.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){Q.propFix[this.toLowerCase()]=this});var ae=/[\t\r\n\f]/g;Q.fn.extend({addClass:function(t){var e,n,r,i,o,u,a="string"==typeof t&&t,c=0,s=this.length;if(Q.isFunction(t))return this.each(function(e){Q(this).addClass(t.call(this,e,this.className))});if(a)for(e=(t||"").match(ht)||[];c<s;c++)if(n=this[c],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(ae," "):" ")){for(o=0;i=e[o++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");u=Q.trim(r),n.className!==u&&(n.className=u)}return this},removeClass:function(t){var e,n,r,i,o,u,a=0===arguments.length||"string"==typeof t&&t,c=0,s=this.length;if(Q.isFunction(t))return this.each(function(e){Q(this).removeClass(t.call(this,e,this.className))});if(a)for(e=(t||"").match(ht)||[];c<s;c++)if(n=this[c],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(ae," "):"")){for(o=0;i=e[o++];)for(;r.indexOf(" "+i+" ")>=0;)r=r.replace(" "+i+" "," ");u=t?Q.trim(r):"",n.className!==u&&(n.className=u)}return this},toggleClass:function(t,e){var n=typeof t;return"boolean"==typeof e&&"string"===n?e?this.addClass(t):this.removeClass(t):Q.isFunction(t)?this.each(function(n){Q(this).toggleClass(t.call(this,n,this.className,e),e)}):this.each(function(){if("string"===n)for(var e,r=0,i=Q(this),o=t.match(ht)||[];e=o[r++];)i.hasClass(e)?i.removeClass(e):i.addClass(e);else n!==Tt&&"boolean"!==n||(this.className&&mt.set(this,"__className__",this.className),this.className=this.className||t===!1?"":mt.get(this,"__className__")||"")})},hasClass:function(t){for(var e=" "+t+" ",n=0,r=this.length;n<r;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(ae," ").indexOf(e)>=0)return!0;return!1}});var ce=/\r/g;Q.fn.extend({val:function(t){var e,n,r,i=this[0];{if(arguments.length)return r=Q.isFunction(t),this.each(function(n){var i;1===this.nodeType&&(i=r?t.call(this,n,Q(this).val()):t,null==i?i="":"number"==typeof i?i+="":Q.isArray(i)&&(i=Q.map(i,function(t){return null==t?"":t+""})),e=Q.valHooks[this.type]||Q.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,i,"value")||(this.value=i))});if(i)return e=Q.valHooks[i.type]||Q.valHooks[i.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(n=e.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(ce,""):null==n?"":n)}}}),Q.extend({valHooks:{option:{get:function(t){var e=Q.find.attr(t,"value");return null!=e?e:Q.trim(Q.text(t))}},select:{get:function(t){for(var e,n,r=t.options,i=t.selectedIndex,o="select-one"===t.type||i<0,u=o?null:[],a=o?i+1:r.length,c=i<0?a:o?i:0;c<a;c++)if(n=r[c],(n.selected||c===i)&&(Y.optDisabled?!n.disabled:null===n.getAttribute("disabled"))&&(!n.parentNode.disabled||!Q.nodeName(n.parentNode,"optgroup"))){if(e=Q(n).val(),o)return e;u.push(e)}return u},set:function(t,e){for(var n,r,i=t.options,o=Q.makeArray(e),u=i.length;u--;)r=i[u],(r.selected=Q.inArray(r.value,o)>=0)&&(n=!0);return n||(t.selectedIndex=-1),o}}}}),Q.each(["radio","checkbox"],function(){Q.valHooks[this]={set:function(t,e){if(Q.isArray(e))return t.checked=Q.inArray(Q(t).val(),e)>=0}},Y.checkOn||(Q.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}),Q.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){Q.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),Q.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)},bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,r){return this.on(e,t,n,r)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",n)}});var se=Q.now(),le=/\?/;Q.parseJSON=function(t){return JSON.parse(t+"")},Q.parseXML=function(t){var e,n;if(!t||"string"!=typeof t)return null;try{n=new DOMParser,e=n.parseFromString(t,"text/xml")}catch(r){e=void 0}return e&&!e.getElementsByTagName("parsererror").length||Q.error("Invalid XML: "+t),e};var fe=/#.*$/,pe=/([?&])_=[^&]*/,he=/^(.*?):[ \t]*([^\r\n]*)$/gm,de=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ge=/^(?:GET|HEAD)$/,ve=/^\/\//,me=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,ye={},be={},xe="*/".concat("*"),_e=t.location.href,we=me.exec(_e.toLowerCase())||[];Q.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:_e,type:"GET",isLocal:de.test(we[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":xe,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":Q.parseJSON,"text xml":Q.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?P(P(t,Q.ajaxSettings),e):P(Q.ajaxSettings,t)},ajaxPrefilter:q(ye),ajaxTransport:q(be),ajax:function(t,e){function n(t,e,n,u){var c,l,m,y,x,w=e;2!==b&&(b=2,a&&clearTimeout(a),r=void 0,o=u||"",_.readyState=t>0?4:0,c=t>=200&&t<300||304===t,n&&(y=I(f,_,n)),y=W(f,y,_,c),c?(f.ifModified&&(x=_.getResponseHeader("Last-Modified"),x&&(Q.lastModified[i]=x),x=_.getResponseHeader("etag"),x&&(Q.etag[i]=x)),204===t||"HEAD"===f.type?w="nocontent":304===t?w="notmodified":(w=y.state,l=y.data,m=y.error,c=!m)):(m=w,!t&&w||(w="error",t<0&&(t=0))),_.status=t,_.statusText=(e||w)+"",c?d.resolveWith(p,[l,w,_]):d.rejectWith(p,[_,w,m]),_.statusCode(v),v=void 0,s&&h.trigger(c?"ajaxSuccess":"ajaxError",[_,f,c?l:m]),g.fireWith(p,[_,w]),s&&(h.trigger("ajaxComplete",[_,f]),--Q.active||Q.event.trigger("ajaxStop")))}"object"==typeof t&&(e=t,t=void 0),e=e||{};var r,i,o,u,a,c,s,l,f=Q.ajaxSetup({},e),p=f.context||f,h=f.context&&(p.nodeType||p.jquery)?Q(p):Q.event,d=Q.Deferred(),g=Q.Callbacks("once memory"),v=f.statusCode||{},m={},y={},b=0,x="canceled",_={readyState:0,getResponseHeader:function(t){var e;if(2===b){if(!u)for(u={};e=he.exec(o);)u[e[1].toLowerCase()]=e[2];e=u[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===b?o:null},setRequestHeader:function(t,e){var n=t.toLowerCase();return b||(t=y[n]=y[n]||t,m[t]=e),this},overrideMimeType:function(t){return b||(f.mimeType=t),this},statusCode:function(t){var e;if(t)if(b<2)for(e in t)v[e]=[v[e],t[e]];else _.always(t[_.status]);return this},abort:function(t){var e=t||x;return r&&r.abort(e),n(0,e),this}};if(d.promise(_).complete=g.add,_.success=_.done,_.error=_.fail,f.url=((t||f.url||_e)+"").replace(fe,"").replace(ve,we[1]+"//"),f.type=e.method||e.type||f.method||f.type,f.dataTypes=Q.trim(f.dataType||"*").toLowerCase().match(ht)||[""],null==f.crossDomain&&(c=me.exec(f.url.toLowerCase()),f.crossDomain=!(!c||c[1]===we[1]&&c[2]===we[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(we[3]||("http:"===we[1]?"80":"443")))),f.data&&f.processData&&"string"!=typeof f.data&&(f.data=Q.param(f.data,f.traditional)),H(ye,f,e,_),2===b)return _;s=Q.event&&f.global,s&&0===Q.active++&&Q.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!ge.test(f.type),i=f.url,f.hasContent||(f.data&&(i=f.url+=(le.test(i)?"&":"?")+f.data,delete f.data),f.cache===!1&&(f.url=pe.test(i)?i.replace(pe,"$1_="+se++):i+(le.test(i)?"&":"?")+"_="+se++)),f.ifModified&&(Q.lastModified[i]&&_.setRequestHeader("If-Modified-Since",Q.lastModified[i]),Q.etag[i]&&_.setRequestHeader("If-None-Match",Q.etag[i])),(f.data&&f.hasContent&&f.contentType!==!1||e.contentType)&&_.setRequestHeader("Content-Type",f.contentType),_.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+xe+"; q=0.01":""):f.accepts["*"]);for(l in f.headers)_.setRequestHeader(l,f.headers[l]);if(f.beforeSend&&(f.beforeSend.call(p,_,f)===!1||2===b))return _.abort();x="abort";for(l in{success:1,error:1,complete:1})_[l](f[l]);if(r=H(be,f,e,_)){_.readyState=1,s&&h.trigger("ajaxSend",[_,f]),f.async&&f.timeout>0&&(a=setTimeout(function(){_.abort("timeout")},f.timeout));try{b=1,r.send(m,n)}catch(w){if(!(b<2))throw w;n(-1,w)}}else n(-1,"No Transport");return _},getJSON:function(t,e,n){return Q.get(t,e,n,"json")},getScript:function(t,e){return Q.get(t,void 0,e,"script")}}),Q.each(["get","post"],function(t,e){Q[e]=function(t,n,r,i){return Q.isFunction(n)&&(i=i||r,r=n,n=void 0),Q.ajax({url:t,type:e,dataType:i,data:n,success:r})}}),Q._evalUrl=function(t){return Q.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},Q.fn.extend({wrapAll:function(t){var e;return Q.isFunction(t)?this.each(function(e){Q(this).wrapAll(t.call(this,e))}):(this[0]&&(e=Q(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this)},wrapInner:function(t){return Q.isFunction(t)?this.each(function(e){Q(this).wrapInner(t.call(this,e))}):this.each(function(){var e=Q(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=Q.isFunction(t);return this.each(function(n){Q(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(){return this.parent().each(function(){Q.nodeName(this,"body")||Q(this).replaceWith(this.childNodes)}).end()}}),Q.expr.filters.hidden=function(t){return t.offsetWidth<=0&&t.offsetHeight<=0},Q.expr.filters.visible=function(t){return!Q.expr.filters.hidden(t)};var Ce=/%20/g,ke=/\[\]$/,Te=/\r?\n/g,je=/^(?:submit|button|image|reset|file)$/i,Ae=/^(?:input|select|textarea|keygen)/i;Q.param=function(t,e){var n,r=[],i=function(t,e){e=Q.isFunction(e)?e():null==e?"":e,r[r.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=Q.ajaxSettings&&Q.ajaxSettings.traditional),Q.isArray(t)||t.jquery&&!Q.isPlainObject(t))Q.each(t,function(){i(this.name,this.value)});else for(n in t)F(n,t[n],e,i);return r.join("&").replace(Ce,"+")},Q.fn.extend({serialize:function(){return Q.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=Q.prop(this,"elements");return t?Q.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!Q(this).is(":disabled")&&Ae.test(this.nodeName)&&!je.test(t)&&(this.checked||!kt.test(t))}).map(function(t,e){var n=Q(this).val();return null==n?null:Q.isArray(n)?Q.map(n,function(t){return{name:e.name,value:t.replace(Te,"\r\n")}}):{name:e.name,value:n.replace(Te,"\r\n")}}).get()}}),Q.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(t){}};var Ee=0,Se={},Ne={0:200,1223:204},De=Q.ajaxSettings.xhr();t.attachEvent&&t.attachEvent("onunload",function(){for(var t in Se)Se[t]()}),Y.cors=!!De&&"withCredentials"in De,Y.ajax=De=!!De,Q.ajaxTransport(function(t){var e;if(Y.cors||De&&!t.crossDomain)return{send:function(n,r){var i,o=t.xhr(),u=++Ee;if(o.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(i in t.xhrFields)o[i]=t.xhrFields[i];t.mimeType&&o.overrideMimeType&&o.overrideMimeType(t.mimeType),t.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(i in n)o.setRequestHeader(i,n[i]);e=function(t){return function(){e&&(delete Se[u],e=o.onload=o.onerror=null,"abort"===t?o.abort():"error"===t?r(o.status,o.statusText):r(Ne[o.status]||o.status,o.statusText,"string"==typeof o.responseText?{text:o.responseText}:void 0,o.getAllResponseHeaders()))}},o.onload=e(),o.onerror=e("error"),e=Se[u]=e("abort");try{o.send(t.hasContent&&t.data||null)}catch(a){if(e)throw a}},abort:function(){e&&e()}}}),Q.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(t){return Q.globalEval(t),t}}}),Q.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),Q.ajaxTransport("script",function(t){if(t.crossDomain){var e,n;return{send:function(r,i){e=Q("<script>").prop({async:!0,charset:t.scriptCharset,src:t.url}).on("load error",n=function(t){e.remove(),n=null,t&&i("error"===t.type?404:200,t.type)}),G.head.appendChild(e[0])},abort:function(){n&&n()}}}});var Oe=[],Le=/(=)\?(?=&|$)|\?\?/;Q.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=Oe.pop()||Q.expando+"_"+se++;return this[t]=!0,t}}),Q.ajaxPrefilter("json jsonp",function(e,n,r){var i,o,u,a=e.jsonp!==!1&&(Le.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Le.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return i=e.jsonpCallback=Q.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Le,"$1"+i):e.jsonp!==!1&&(e.url+=(le.test(e.url)?"&":"?")+e.jsonp+"="+i),e.converters["script json"]=function(){return u||Q.error(i+" was not called"),u[0]},e.dataTypes[0]="json",o=t[i],t[i]=function(){u=arguments},r.always(function(){t[i]=o,e[i]&&(e.jsonpCallback=n.jsonpCallback,Oe.push(i)),u&&Q.isFunction(o)&&o(u[0]),u=o=void 0}),"script"}),Q.parseHTML=function(t,e,n){if(!t||"string"!=typeof t)return null;"boolean"==typeof e&&(n=e,e=!1),e=e||G;var r=ut.exec(t),i=!n&&[];return r?[e.createElement(r[1])]:(r=Q.buildFragment([t],e,i),i&&i.length&&Q(i).remove(),Q.merge([],r.childNodes))};var Re=Q.fn.load;Q.fn.load=function(t,e,n){if("string"!=typeof t&&Re)return Re.apply(this,arguments);var r,i,o,u=this,a=t.indexOf(" ");return a>=0&&(r=Q.trim(t.slice(a)),t=t.slice(0,a)),Q.isFunction(e)?(n=e,e=void 0):e&&"object"==typeof e&&(i="POST"),u.length>0&&Q.ajax({url:t,type:i,dataType:"html",data:e}).done(function(t){o=arguments,u.html(r?Q("<div>").append(Q.parseHTML(t)).find(r):t)}).complete(n&&function(t,e){u.each(n,o||[t.responseText,e,t])}),this},Q.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){Q.fn[e]=function(t){return this.on(e,t)}}),Q.expr.filters.animated=function(t){return Q.grep(Q.timers,function(e){return t===e.elem}).length};var qe=t.document.documentElement;Q.offset={setOffset:function(t,e,n){var r,i,o,u,a,c,s,l=Q.css(t,"position"),f=Q(t),p={};"static"===l&&(t.style.position="relative"),a=f.offset(),o=Q.css(t,"top"),c=Q.css(t,"left"),s=("absolute"===l||"fixed"===l)&&(o+c).indexOf("auto")>-1,s?(r=f.position(),u=r.top,i=r.left):(u=parseFloat(o)||0,i=parseFloat(c)||0),Q.isFunction(e)&&(e=e.call(t,n,a)),null!=e.top&&(p.top=e.top-a.top+u),null!=e.left&&(p.left=e.left-a.left+i),"using"in e?e.using.call(t,p):f.css(p)}},Q.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){Q.offset.setOffset(this,t,e)});var e,n,r=this[0],i={top:0,left:0},o=r&&r.ownerDocument;if(o)return e=o.documentElement,Q.contains(e,r)?(typeof r.getBoundingClientRect!==Tt&&(i=r.getBoundingClientRect()),n=M(o),{top:i.top+n.pageYOffset-e.clientTop,left:i.left+n.pageXOffset-e.clientLeft}):i},position:function(){if(this[0]){var t,e,n=this[0],r={top:0,left:0};return"fixed"===Q.css(n,"position")?e=n.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),Q.nodeName(t[0],"html")||(r=t.offset()),r.top+=Q.css(t[0],"borderTopWidth",!0),r.left+=Q.css(t[0],"borderLeftWidth",!0)),{top:e.top-r.top-Q.css(n,"marginTop",!0),left:e.left-r.left-Q.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||qe;t&&!Q.nodeName(t,"html")&&"static"===Q.css(t,"position");)t=t.offsetParent;return t||qe})}}),Q.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r="pageYOffset"===n;Q.fn[e]=function(i){return vt(this,function(e,i,o){var u=M(e);return void 0===o?u?u[n]:e[i]:void(u?u.scrollTo(r?t.pageXOffset:o,r?o:t.pageYOffset):e[i]=o)},e,i,arguments.length,null)}}),Q.each(["top","left"],function(t,e){Q.cssHooks[e]=w(Y.pixelPosition,function(t,n){if(n)return n=_(t,e),$t.test(n)?Q(t).position()[e]+"px":n})}),Q.each({Height:"height",Width:"width"},function(t,e){Q.each({padding:"inner"+t,content:e,"":"outer"+t},function(n,r){Q.fn[r]=function(r,i){var o=arguments.length&&(n||"boolean"!=typeof r),u=n||(r===!0||i===!0?"margin":"border");return vt(this,function(e,n,r){var i;return Q.isWindow(e)?e.document.documentElement["client"+t]:9===e.nodeType?(i=e.documentElement,Math.max(e.body["scroll"+t],i["scroll"+t],e.body["offset"+t],i["offset"+t],i["client"+t])):void 0===r?Q.css(e,n,u):Q.style(e,n,r,u)},e,o?r:void 0,o,null)}})}),Q.fn.size=function(){return this.length},Q.fn.andSelf=Q.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return Q});var He=t.jQuery,Pe=t.$;return Q.noConflict=function(e){return t.$===Q&&(t.$=Pe),e&&t.jQuery===Q&&(t.jQuery=He),Q},typeof e===Tt&&(t.jQuery=t.$=Q),Q}),function(){function t(t,e){return t.set(e[0],e[1]),t}function e(t,e){return t.add(e),t}function n(t,e,n){var r=n.length;switch(r){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function r(t,e,n,r){for(var i=-1,o=t.length;++i<o;){var u=t[i];e(r,u,n(u),t)}return r}function i(t,e){for(var n=-1,r=t.length,i=-1,o=e.length,u=Array(r+o);++n<r;)u[n]=t[n];for(;++i<o;)u[n++]=e[i];return u}function o(t,e){for(var n=-1,r=t.length;++n<r&&e(t[n],n,t)!==!1;);return t}function u(t,e){for(var n=t.length;n--&&e(t[n],n,t)!==!1;);return t}function a(t,e){for(var n=-1,r=t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function c(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n];e(u,n,t)&&(o[i++]=u)}return o}function s(t,e){return!!t.length&&y(t,e,0)>-1}function l(t,e,n){for(var r=-1,i=t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function f(t,e){for(var n=-1,r=t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function p(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function h(t,e,n,r){var i=-1,o=t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function d(t,e,n,r){var i=t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function g(t,e){for(var n=-1,r=t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}function v(t,e,n,r){var i;return n(t,function(t,n,o){if(e(t,n,o))return i=r?n:t,!1}),i}function m(t,e,n){for(var r=t.length,i=n?r:-1;n?i--:++i<r;)if(e(t[i],i,t))return i;return-1}function y(t,e,n){if(e!==e)return q(t,n);for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}function b(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function x(t,e){var n=t?t.length:0;return n?C(t,e)/n:bt}function _(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function w(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}function C(t,e){for(var n,r=-1,i=t.length;++r<i;){var o=e(t[r]);o!==J&&(n=n===J?o:n+o)}return n}function k(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function T(t,e){return f(e,function(e){return[e,t[e]]})}function j(t){return function(e){return t(e)}}function A(t,e){return f(e,function(e){return t[e]})}function E(t,e){for(var n=-1,r=t.length;++n<r&&y(e,t[n],0)>-1;);return n}function S(t,e){for(var n=t.length;n--&&y(e,t[n],0)>-1;);return n}function N(t){return t&&t.Object===Object?t:null}function D(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&r++;return r}function O(t){return wn[t]}function L(t){return Cn[t]}function R(t){return"\\"+jn[t]}function q(t,e,n){for(var r=t.length,i=e+(n?0:-1);n?i--:++i<r;){var o=t[i];if(o!==o)return i}return-1}function H(t){var e=!1;if(null!=t&&"function"!=typeof t.toString)try{e=!!(t+"")}catch(n){}return e}function P(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}function I(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function W(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n];u!==e&&u!==Y||(t[n]=Y,o[i++]=n)}return o}function F(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function M(t){if(!t||!vn.test(t))return t.length;for(var e=dn.lastIndex=0;dn.test(t);)e++;return e}function $(t){return t.match(dn)}function B(t){return kn[t]}function z(N){function Ee(t){if(sa(t)&&!tf(t)&&!(t instanceof De)){if(t instanceof Ne)return t;if(ds.call(t,"__wrapped__"))return eo(t)}return new Ne(t)}function Se(){}function Ne(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=J}function De(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=xt,this.__views__=[]}function Oe(){var t=new De(this.__wrapped__);return t.__actions__=Yr(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Yr(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Yr(this.__views__),t}function Le(){if(this.__filtered__){var t=new De(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function Re(){var t=this.__wrapped__.value(),e=this.__dir__,n=tf(t),r=e<0,i=n?t.length:0,o=Li(0,i,this.__views__),u=o.start,a=o.end,c=a-u,s=r?a:u-1,l=this.__iteratees__,f=l.length,p=0,h=Ws(c,this.__takeCount__);if(!n||i<K||i==c&&h==c)return Dr(t,this.__actions__);var d=[];t:for(;c--&&p<h;){s+=e;for(var g=-1,v=t[s];++g<f;){var m=l[g],y=m.iteratee,b=m.type,x=y(v);if(b==dt)v=x;else if(!x){if(b==ht)continue t;break t}}d[p++]=v}return d}function qe(){}function He(t,e){return Ie(t,e)&&delete t[e]}function Pe(t,e){if(Ys){var n=t[e];return n===V?J:n}return ds.call(t,e)?t[e]:J}function Ie(t,e){return Ys?t[e]!==J:ds.call(t,e)}function We(t,e,n){t[e]=Ys&&n===J?V:n}function Fe(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Me(){this.__data__={hash:new qe,map:Us?new Us:[],string:new qe}}function $e(t){var e=this.__data__;return zi(t)?He("string"==typeof t?e.string:e.hash,t):Us?e.map["delete"](t):en(e.map,t)}function Be(t){var e=this.__data__;return zi(t)?Pe("string"==typeof t?e.string:e.hash,t):Us?e.map.get(t):nn(e.map,t)}function ze(t){var e=this.__data__;return zi(t)?Ie("string"==typeof t?e.string:e.hash,t):Us?e.map.has(t):rn(e.map,t)}function Je(t,e){var n=this.__data__;return zi(t)?We("string"==typeof t?n.string:n.hash,t,e):Us?n.map.set(t,e):un(n.map,t,e),this}function Ue(t){var e=-1,n=t?t.length:0;for(this.__data__=new Fe;++e<n;)this.push(t[e])}function Ke(t,e){var n=t.__data__;if(zi(e)){var r=n.__data__,i="string"==typeof e?r.string:r.hash;return i[e]===V}return n.has(e)}function Xe(t){var e=this.__data__;if(zi(t)){var n=e.__data__,r="string"==typeof t?n.string:n.hash;r[t]=V}else e.set(t,V)}function Ve(t){var e=-1,n=t?t.length:0;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Ye(){this.__data__={array:[],map:null}}function Ge(t){var e=this.__data__,n=e.array;return n?en(n,t):e.map["delete"](t)}function Ze(t){var e=this.__data__,n=e.array;return n?nn(n,t):e.map.get(t)}function Qe(t){var e=this.__data__,n=e.array;return n?rn(n,t):e.map.has(t)}function tn(t,e){var n=this.__data__,r=n.array;r&&(r.length<K-1?un(r,t,e):(n.array=null,n.map=new Fe(r)));var i=n.map;return i&&i.set(t,e),this}function en(t,e){var n=on(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():Ds.call(t,n,1),!0}function nn(t,e){var n=on(t,e);return n<0?J:t[n][1]}function rn(t,e){return on(t,e)>-1}function on(t,e){for(var n=t.length;n--;)if(Uu(t[n][0],e))return n;return-1}function un(t,e,n){var r=on(t,e);r<0?t.push([e,n]):t[r][1]=n}function an(t,e,n,r){return t===J||Uu(t,fs[n])&&!ds.call(r,n)?e:t}function cn(t,e,n){(n===J||Uu(t[e],n))&&("number"!=typeof e||n!==J||e in t)||(t[e]=n)}function sn(t,e,n){var r=t[e];ds.call(t,e)&&Uu(r,n)&&(n!==J||e in t)||(t[e]=n)}function ln(t,e,n,r){return cl(t,function(t,i,o){e(r,t,n(t),o)}),r}function fn(t,e){return t&&Gr(e,Ka(e),t)}function dn(t,e){for(var n=-1,r=null==t,i=e.length,o=Array(i);++n<i;)o[n]=r?J:za(t,e[n]);return o}function wn(t,e,n){return t===t&&(n!==J&&(t=t<=n?t:n),e!==J&&(t=t>=e?t:e)),t}function Cn(t,e,n,r,i,u,a){var c;if(r&&(c=u?r(t,i,u,a):r(t)),c!==J)return c;if(!ca(t))return t;var s=tf(t);if(s){if(c=qi(t),!e)return Yr(t,c)}else{var l=Oi(t),f=l==Et||l==St;if(ef(t))return Ir(t,e);if(l==Ot||l==Ct||f&&!u){if(H(t))return u?t:{};if(c=Hi(f?{}:t),!e)return Zr(t,fn(c,t))}else{if(!_n[l])return u?t:{};c=Pi(t,l,Cn,e)}}a||(a=new Ve);var p=a.get(t);if(p)return p;if(a.set(t,c),!s)var h=n?Ci(t):Ka(t);return o(h||t,function(i,o){h&&(o=i,i=t[o]),sn(c,o,Cn(i,e,n,r,o,t,a))}),c}function kn(t){var e=Ka(t),n=e.length;return function(r){if(null==r)return!n;for(var i=n;i--;){var o=e[i],u=t[o],a=r[o];if(a===J&&!(o in Object(r))||!u(a))return!1}return!0}}function Tn(t){return ca(t)?Es(t):{}}function jn(t,e,n){if("function"!=typeof t)throw new ss(X);return Ns(function(){t.apply(J,n)},e)}function Sn(t,e,n,r){var i=-1,o=s,u=!0,a=t.length,c=[],p=e.length;if(!a)return c;n&&(e=f(e,j(n))),r?(o=l,u=!1):e.length>=K&&(o=Ke,u=!1,e=new Ue(e));t:for(;++i<a;){var h=t[i],d=n?n(h):h;if(h=r||0!==h?h:0,u&&d===d){for(var g=p;g--;)if(e[g]===d)continue t;c.push(h)}else o(e,d,r)||c.push(h)}return c}function Nn(t,e){var n=!0;return cl(t,function(t,r,i){return n=!!e(t,r,i)}),n}function On(t,e,n){for(var r=-1,i=t.length;++r<i;){var o=t[r],u=e(o);if(null!=u&&(a===J?u===u&&!Ca(u):n(u,a)))var a=u,c=o}return c}function Ln(t,e,n,r){var i=t.length;for(n=Sa(n),n<0&&(n=-n>i?0:i+n),r=r===J||r>i?i:Sa(r),r<0&&(r+=i),r=n>r?0:Na(r);n<r;)t[n++]=e;return t}function Rn(t,e){var n=[];return cl(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function qn(t,e,n,r,i){var o=-1,u=t.length;for(n||(n=Wi),i||(i=[]);++o<u;){var a=t[o];e>0&&n(a)?e>1?qn(a,e-1,n,r,i):p(i,a):r||(i[i.length]=a)}return i}function In(t,e){return t&&ll(t,e,Ka)}function Wn(t,e){return t&&fl(t,e,Ka)}function Fn(t,e){return c(e,function(e){return oa(t[e])})}function Mn(t,e){e=Bi(e,t)?[e]:Hr(e);for(var n=0,r=e.length;null!=t&&n<r;)t=t[Qi(e[n++])];return n&&n==r?t:J}function $n(t,e,n){var r=e(t);return tf(t)?r:p(r,n(t))}function Bn(t,e){return t>e}function zn(t,e){return ds.call(t,e)||"object"==typeof t&&e in t&&null===Ni(t)}function Jn(t,e){return e in Object(t)}function Un(t,e,n){return t>=Ws(e,n)&&t<Is(e,n)}function Kn(t,e,n){for(var r=n?l:s,i=t[0].length,o=t.length,u=o,a=Array(o),c=1/0,p=[];u--;){var h=t[u];u&&e&&(h=f(h,j(e))),c=Ws(h.length,c),a[u]=!n&&(e||i>=120&&h.length>=120)?new Ue(u&&h):J}h=t[0];var d=-1,g=a[0];t:for(;++d<i&&p.length<c;){var v=h[d],m=e?e(v):v;if(v=n||0!==v?v:0,!(g?Ke(g,m):r(p,m,n))){for(u=o;--u;){var y=a[u];if(!(y?Ke(y,m):r(t[u],m,n)))continue t}g&&g.push(m),p.push(v)}}return p}function Xn(t,e,n,r){return In(t,function(t,i,o){e(r,n(t),i,o)}),r}function Vn(t,e,r){Bi(e,t)||(e=Hr(e),t=Gi(t,e),e=_o(e));var i=null==t?t:t[Qi(e)];return null==i?J:n(i,t,r)}function Yn(t,e,n,r,i){return t===e||(null==t||null==e||!ca(t)&&!sa(e)?t!==t&&e!==e:Gn(t,e,Yn,n,r,i))}function Gn(t,e,n,r,i,o){var u=tf(t),a=tf(e),c=kt,s=kt;u||(c=Oi(t),c=c==Ct?Ot:c),a||(s=Oi(e),s=s==Ct?Ot:s);var l=c==Ot&&!H(t),f=s==Ot&&!H(e),p=c==s;if(p&&!l)return o||(o=new Ve),u||ka(t)?xi(t,e,n,r,i,o):_i(t,e,c,n,r,i,o);if(!(i&ct)){var h=l&&ds.call(t,"__wrapped__"),d=f&&ds.call(e,"__wrapped__");if(h||d){var g=h?t.value():t,v=d?e.value():e;return o||(o=new Ve),n(g,v,r,i,o)}}return!!p&&(o||(o=new Ve),wi(t,e,n,r,i,o))}function Zn(t,e,n,r){var i=n.length,o=i,u=!r;if(null==t)return!o;for(t=Object(t);i--;){var a=n[i];if(u&&a[2]?a[1]!==t[a[0]]:!(a[0]in t))return!1}for(;++i<o;){a=n[i];var c=a[0],s=t[c],l=a[1];if(u&&a[2]){if(s===J&&!(c in t))return!1}else{var f=new Ve;if(r)var p=r(s,l,c,t,e,f);if(!(p===J?Yn(l,s,r,at|ct,f):p))return!1}}return!0}function Qn(t){return"function"==typeof t?t:null==t?Ic:"object"==typeof t?tf(t)?or(t[0],t[1]):ir(t):Uc(t)}function tr(t){return Ps(Object(t))}function er(t){t=null==t?t:Object(t);var e=[];for(var n in t)e.push(n);return e}function nr(t,e){return t<e}function rr(t,e){var n=-1,r=Vu(t)?Array(t.length):[];return cl(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function ir(t){var e=Ai(t);return 1==e.length&&e[0][2]?Xi(e[0][0],e[0][1]):function(n){return n===t||Zn(n,t,e)}}function or(t,e){return Bi(t)&&Ki(e)?Xi(Qi(t),e):function(n){var r=za(n,t);return r===J&&r===e?Ua(n,t):Yn(e,r,J,at|ct)}}function ur(t,e,n,r,i){if(t!==e){if(!tf(e)&&!ka(e))var u=Xa(e);o(u||e,function(o,a){if(u&&(a=o,o=e[a]),ca(o))i||(i=new Ve),ar(t,e,a,n,ur,r,i);else{var c=r?r(t[a],o,a+"",t,e,i):J;c===J&&(c=o),cn(t,a,c)}})}}function ar(t,e,n,r,i,o,u){var a=t[n],c=e[n],s=u.get(c);if(s)return void cn(t,n,s);var l=o?o(a,c,n+"",t,e,u):J,f=l===J;f&&(l=c,tf(c)||ka(c)?tf(a)?l=a:Yu(a)?l=Yr(a):(f=!1,l=Cn(c,!0)):ya(c)||Ku(c)?Ku(a)?l=Oa(a):!ca(a)||r&&oa(a)?(f=!1,l=Cn(c,!0)):l=a:f=!1),u.set(c,l),f&&i(l,c,r,o,u),u["delete"](c),cn(t,n,l)}function cr(t,e){var n=t.length;if(n)return e+=e<0?n:0,Mi(e,n)?t[e]:J}function sr(t,e,n){var r=-1;e=f(e.length?e:[Ic],j(ji()));
-var i=rr(t,function(t,n,i){var o=f(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return w(i,function(t,e){return Kr(t,e,n)})}function lr(t,e){return t=Object(t),h(e,function(e,n){return n in t&&(e[n]=t[n]),e},{})}function fr(t,e){for(var n=-1,r=ki(t),i=r.length,o={};++n<i;){var u=r[n],a=t[u];e(a,u)&&(o[u]=a)}return o}function pr(t){return function(e){return null==e?J:e[t]}}function hr(t){return function(e){return Mn(e,t)}}function dr(t,e,n,r){var i=r?b:y,o=-1,u=e.length,a=t;for(n&&(a=f(t,j(n)));++o<u;)for(var c=0,s=e[o],l=n?n(s):s;(c=i(a,l,c,r))>-1;)a!==t&&Ds.call(a,c,1),Ds.call(t,c,1);return t}function gr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;if(Mi(i))Ds.call(t,i,1);else if(Bi(i,t))delete t[Qi(i)];else{var u=Hr(i),a=Gi(t,u);null!=a&&delete a[Qi(_o(u))]}}}return t}function vr(t,e){return t+Ls(Ms()*(e-t+1))}function mr(t,e,n,r){for(var i=-1,o=Is(Os((e-t)/(n||1)),0),u=Array(o);o--;)u[r?o:++i]=t,t+=n;return u}function yr(t,e){var n="";if(!t||e<1||e>mt)return n;do e%2&&(n+=t),e=Ls(e/2),e&&(t+=t);while(e);return n}function br(t,e,n,r){e=Bi(e,t)?[e]:Hr(e);for(var i=-1,o=e.length,u=o-1,a=t;null!=a&&++i<o;){var c=Qi(e[i]);if(ca(a)){var s=n;if(i!=u){var l=a[c];s=r?r(l,c,a):J,s===J&&(s=null==l?Mi(e[i+1])?[]:{}:l)}sn(a,c,s)}a=a[c]}return t}function xr(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),n=n>i?i:n,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=Array(i);++r<i;)o[r]=t[r+e];return o}function _r(t,e){var n;return cl(t,function(t,r,i){return n=e(t,r,i),!n}),!!n}function wr(t,e,n){var r=0,i=t?t.length:r;if("number"==typeof e&&e===e&&i<=wt){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!Ca(u)&&(n?u<=e:u<e)?r=o+1:i=o}return i}return Cr(t,e,Ic,n)}function Cr(t,e,n,r){e=n(e);for(var i=0,o=t?t.length:0,u=e!==e,a=null===e,c=Ca(e),s=e===J;i<o;){var l=Ls((i+o)/2),f=n(t[l]),p=f!==J,h=null===f,d=f===f,g=Ca(f);if(u)var v=r||d;else v=s?d&&(r||p):a?d&&p&&(r||!h):c?d&&p&&!h&&(r||!g):!h&&!g&&(r?f<=e:f<e);v?i=l+1:o=l}return Ws(o,_t)}function kr(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n],a=e?e(u):u;if(!n||!Uu(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function Tr(t){return"number"==typeof t?t:Ca(t)?bt:+t}function jr(t){if("string"==typeof t)return t;if(Ca(t))return al?al.call(t):"";var e=t+"";return"0"==e&&1/t==-vt?"-0":e}function Ar(t,e,n){var r=-1,i=s,o=t.length,u=!0,a=[],c=a;if(n)u=!1,i=l;else if(o>=K){var f=e?null:hl(t);if(f)return F(f);u=!1,i=Ke,c=new Ue}else c=e?[]:a;t:for(;++r<o;){var p=t[r],h=e?e(p):p;if(p=n||0!==p?p:0,u&&h===h){for(var d=c.length;d--;)if(c[d]===h)continue t;e&&c.push(h),a.push(p)}else i(c,h,n)||(c!==a&&c.push(h),a.push(p))}return a}function Er(t,e){e=Bi(e,t)?[e]:Hr(e),t=Gi(t,e);var n=Qi(_o(e));return!(null!=t&&zn(t,n))||delete t[n]}function Sr(t,e,n,r){return br(t,e,n(Mn(t,e)),r)}function Nr(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?xr(t,r?0:o,r?o+1:i):xr(t,r?o+1:0,r?i:o)}function Dr(t,e){var n=t;return n instanceof De&&(n=n.value()),h(e,function(t,e){return e.func.apply(e.thisArg,p([t],e.args))},n)}function Or(t,e,n){for(var r=-1,i=t.length;++r<i;)var o=o?p(Sn(o,t[r],e,n),Sn(t[r],o,e,n)):t[r];return o&&o.length?Ar(o,e,n):[]}function Lr(t,e,n){for(var r=-1,i=t.length,o=e.length,u={};++r<i;){var a=r<o?e[r]:J;n(u,t[r],a)}return u}function Rr(t){return Yu(t)?t:[]}function qr(t){return"function"==typeof t?t:Ic}function Hr(t){return tf(t)?t:yl(t)}function Pr(t,e,n){var r=t.length;return n=n===J?r:n,!e&&n>=r?t:xr(t,e,n)}function Ir(t,e){if(e)return t.slice();var n=new t.constructor(t.length);return t.copy(n),n}function Wr(t){var e=new t.constructor(t.byteLength);return new Cs(e).set(new Cs(t)),e}function Fr(t,e){var n=e?Wr(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Mr(e,n,r){var i=n?r(I(e),!0):I(e);return h(i,t,new e.constructor)}function $r(t){var e=new t.constructor(t.source,ye.exec(t));return e.lastIndex=t.lastIndex,e}function Br(t,n,r){var i=n?r(F(t),!0):F(t);return h(i,e,new t.constructor)}function zr(t){return ul?Object(ul.call(t)):{}}function Jr(t,e){var n=e?Wr(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ur(t,e){if(t!==e){var n=t!==J,r=null===t,i=t===t,o=Ca(t),u=e!==J,a=null===e,c=e===e,s=Ca(e);if(!a&&!s&&!o&&t>e||o&&u&&c&&!a&&!s||r&&u&&c||!n&&c||!i)return 1;if(!r&&!o&&!s&&t<e||s&&n&&i&&!r&&!o||a&&n&&i||!u&&i||!c)return-1}return 0}function Kr(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,u=i.length,a=n.length;++r<u;){var c=Ur(i[r],o[r]);if(c){if(r>=a)return c;var s=n[r];return c*("desc"==s?-1:1)}}return t.index-e.index}function Xr(t,e,n,r){for(var i=-1,o=t.length,u=n.length,a=-1,c=e.length,s=Is(o-u,0),l=Array(c+s),f=!r;++a<c;)l[a]=e[a];for(;++i<u;)(f||i<o)&&(l[n[i]]=t[i]);for(;s--;)l[a++]=t[i++];return l}function Vr(t,e,n,r){for(var i=-1,o=t.length,u=-1,a=n.length,c=-1,s=e.length,l=Is(o-a,0),f=Array(l+s),p=!r;++i<l;)f[i]=t[i];for(var h=i;++c<s;)f[h+c]=e[c];for(;++u<a;)(p||i<o)&&(f[h+n[u]]=t[i++]);return f}function Yr(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}function Gr(t,e,n,r){n||(n={});for(var i=-1,o=e.length;++i<o;){var u=e[i],a=r?r(n[u],t[u],u,n,t):t[u];sn(n,u,a)}return n}function Zr(t,e){return Gr(t,Di(t),e)}function Qr(t,e){return function(n,i){var o=tf(n)?r:ln,u=e?e():{};return o(n,t,ji(i),u)}}function ti(t){return Hu(function(e,n){var r=-1,i=n.length,o=i>1?n[i-1]:J,u=i>2?n[2]:J;for(o="function"==typeof o?(i--,o):J,u&&$i(n[0],n[1],u)&&(o=i<3?J:o,i=1),e=Object(e);++r<i;){var a=n[r];a&&t(e,a,r,o)}return e})}function ei(t,e){return function(n,r){if(null==n)return n;if(!Vu(n))return t(n,r);for(var i=n.length,o=e?i:-1,u=Object(n);(e?o--:++o<i)&&r(u[o],o,u)!==!1;);return n}}function ni(t){return function(e,n,r){for(var i=-1,o=Object(e),u=r(e),a=u.length;a--;){var c=u[t?a:++i];if(n(o[c],c,o)===!1)break}return e}}function ri(t,e,n){function r(){var e=this&&this!==Hn&&this instanceof r?o:t;return e.apply(i?n:this,arguments)}var i=e&G,o=ui(t);return r}function ii(t){return function(e){e=Ra(e);var n=vn.test(e)?$(e):J,r=n?n[0]:e.charAt(0),i=n?Pr(n,1).join(""):e.slice(1);return r[t]()+i}}function oi(t){return function(e){return h(Rc(dc(e).replace(pn,"")),t,"")}}function ui(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Tn(t.prototype),r=t.apply(n,e);return ca(r)?r:n}}function ai(t,e,r){function i(){for(var u=arguments.length,a=Array(u),c=u,s=Si(i);c--;)a[c]=arguments[c];var l=u<3&&a[0]!==s&&a[u-1]!==s?[]:W(a,s);if(u-=l.length,u<r)return mi(t,e,si,i.placeholder,J,a,l,J,J,r-u);var f=this&&this!==Hn&&this instanceof i?o:t;return n(f,this,a)}var o=ui(t);return i}function ci(t){return Hu(function(e){e=qn(e,1);var n=e.length,r=n,i=Ne.prototype.thru;for(t&&e.reverse();r--;){var o=e[r];if("function"!=typeof o)throw new ss(X);if(i&&!u&&"wrapper"==Ti(o))var u=new Ne([],(!0))}for(r=u?r:n;++r<n;){o=e[r];var a=Ti(o),c="wrapper"==a?dl(o):J;u=c&&Ji(c[0])&&c[1]==(it|tt|nt|ot)&&!c[4].length&&1==c[9]?u[Ti(c[0])].apply(u,c[3]):1==o.length&&Ji(o)?u[a]():u.thru(o)}return function(){var t=arguments,r=t[0];if(u&&1==t.length&&tf(r)&&r.length>=K)return u.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function si(t,e,n,r,i,o,u,a,c,s){function l(){for(var m=arguments.length,y=m,b=Array(m);y--;)b[y]=arguments[y];if(d)var x=Si(l),_=D(b,x);if(r&&(b=Xr(b,r,i,d)),o&&(b=Vr(b,o,u,d)),m-=_,d&&m<s){var w=W(b,x);return mi(t,e,si,l.placeholder,n,b,w,a,c,s-m)}var C=p?n:this,k=h?C[t]:t;return m=b.length,a?b=Zi(b,a):g&&m>1&&b.reverse(),f&&c<m&&(b.length=c),this&&this!==Hn&&this instanceof l&&(k=v||ui(k)),k.apply(C,b)}var f=e&it,p=e&G,h=e&Z,d=e&(tt|et),g=e&ut,v=h?J:ui(t);return l}function li(t,e){return function(n,r){return Xn(n,t,e(r),{})}}function fi(t){return function(e,n){var r;if(e===J&&n===J)return 0;if(e!==J&&(r=e),n!==J){if(r===J)return n;"string"==typeof e||"string"==typeof n?(e=jr(e),n=jr(n)):(e=Tr(e),n=Tr(n)),r=t(e,n)}return r}}function pi(t){return Hu(function(e){return e=1==e.length&&tf(e[0])?f(e[0],j(ji())):f(qn(e,1,Fi),j(ji())),Hu(function(r){var i=this;return t(e,function(t){return n(t,i,r)})})})}function hi(t,e){e=e===J?" ":jr(e);var n=e.length;if(n<2)return n?yr(e,t):e;var r=yr(e,Os(t/M(e)));return vn.test(e)?Pr($(r),0,t).join(""):r.slice(0,t)}function di(t,e,r,i){function o(){for(var e=-1,c=arguments.length,s=-1,l=i.length,f=Array(l+c),p=this&&this!==Hn&&this instanceof o?a:t;++s<l;)f[s]=i[s];for(;c--;)f[s++]=arguments[++e];return n(p,u?r:this,f)}var u=e&G,a=ui(t);return o}function gi(t){return function(e,n,r){return r&&"number"!=typeof r&&$i(e,n,r)&&(n=r=J),e=Da(e),e=e===e?e:0,n===J?(n=e,e=0):n=Da(n)||0,r=r===J?e<n?1:-1:Da(r)||0,mr(e,n,r,t)}}function vi(t){return function(e,n){return"string"==typeof e&&"string"==typeof n||(e=Da(e),n=Da(n)),t(e,n)}}function mi(t,e,n,r,i,o,u,a,c,s){var l=e&tt,f=l?u:J,p=l?J:u,h=l?o:J,d=l?J:o;e|=l?nt:rt,e&=~(l?rt:nt),e&Q||(e&=~(G|Z));var g=[t,e,i,h,f,d,p,a,c,s],v=n.apply(J,g);return Ji(t)&&ml(v,g),v.placeholder=r,v}function yi(t){var e=as[t];return function(t,n){if(t=Da(t),n=Sa(n)){var r=(Ra(t)+"e").split("e"),i=e(r[0]+"e"+(+r[1]+n));return r=(Ra(i)+"e").split("e"),+(r[0]+"e"+(+r[1]-n))}return e(t)}}function bi(t,e,n,r,i,o,u,a){var c=e&Z;if(!c&&"function"!=typeof t)throw new ss(X);var s=r?r.length:0;if(s||(e&=~(nt|rt),r=i=J),u=u===J?u:Is(Sa(u),0),a=a===J?a:Sa(a),s-=i?i.length:0,e&rt){var l=r,f=i;r=i=J}var p=c?J:dl(t),h=[t,e,n,r,i,l,f,o,u,a];if(p&&Vi(h,p),t=h[0],e=h[1],n=h[2],r=h[3],i=h[4],a=h[9]=null==h[9]?c?0:t.length:Is(h[9]-s,0),!a&&e&(tt|et)&&(e&=~(tt|et)),e&&e!=G)d=e==tt||e==et?ai(t,e,a):e!=nt&&e!=(G|nt)||i.length?si.apply(J,h):di(t,e,n,r);else var d=ri(t,e,n);var g=p?pl:ml;return g(d,h)}function xi(t,e,n,r,i,o){var u=-1,a=i&ct,c=i&at,s=t.length,l=e.length;if(s!=l&&!(a&&l>s))return!1;var f=o.get(t);if(f)return f==e;var p=!0;for(o.set(t,e);++u<s;){var h=t[u],d=e[u];if(r)var v=a?r(d,h,u,e,t,o):r(h,d,u,t,e,o);if(v!==J){if(v)continue;p=!1;break}if(c){if(!g(e,function(t){return h===t||n(h,t,r,i,o)})){p=!1;break}}else if(h!==d&&!n(h,d,r,i,o)){p=!1;break}}return o["delete"](t),p}function _i(t,e,n,r,i,o,u){switch(n){case Mt:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case Ft:return!(t.byteLength!=e.byteLength||!r(new Cs(t),new Cs(e)));case Tt:case jt:return+t==+e;case At:return t.name==e.name&&t.message==e.message;case Dt:return t!=+t?e!=+e:t==+e;case Rt:case Ht:return t==e+"";case Nt:var a=I;case qt:var c=o&ct;if(a||(a=F),t.size!=e.size&&!c)return!1;var s=u.get(t);return s?s==e:(o|=at,u.set(t,e),xi(a(t),a(e),r,i,o,u));case Pt:if(ul)return ul.call(t)==ul.call(e)}return!1}function wi(t,e,n,r,i,o){var u=i&ct,a=Ka(t),c=a.length,s=Ka(e),l=s.length;if(c!=l&&!u)return!1;for(var f=c;f--;){var p=a[f];if(!(u?p in e:zn(e,p)))return!1}var h=o.get(t);if(h)return h==e;var d=!0;o.set(t,e);for(var g=u;++f<c;){p=a[f];var v=t[p],m=e[p];if(r)var y=u?r(m,v,p,e,t,o):r(v,m,p,t,e,o);if(!(y===J?v===m||n(v,m,r,i,o):y)){d=!1;break}g||(g="constructor"==p)}if(d&&!g){var b=t.constructor,x=e.constructor;b!=x&&"constructor"in t&&"constructor"in e&&!("function"==typeof b&&b instanceof b&&"function"==typeof x&&x instanceof x)&&(d=!1)}return o["delete"](t),d}function Ci(t){return $n(t,Ka,Di)}function ki(t){return $n(t,Xa,vl)}function Ti(t){for(var e=t.name+"",n=Qs[e],r=ds.call(Qs,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function ji(){var t=Ee.iteratee||Wc;return t=t===Wc?Qn:t,arguments.length?t(arguments[0],arguments[1]):t}function Ai(t){for(var e=nc(t),n=e.length;n--;)e[n][2]=Ki(e[n][1]);return e}function Ei(t,e){var n=t[e];return da(n)?n:J}function Si(t){var e=ds.call(Ee,"placeholder")?Ee:t;return e.placeholder}function Ni(t){return Rs(Object(t))}function Di(t){return js(Object(t))}function Oi(t){return ms.call(t)}function Li(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],u=o.size;switch(o.type){case"drop":t+=u;break;case"dropRight":e-=u;break;case"take":e=Ws(e,t+u);break;case"takeRight":t=Is(t,e-u)}}return{start:t,end:e}}function Ri(t,e,n){e=Bi(e,t)?[e]:Hr(e);for(var r,i=-1,o=e.length;++i<o;){var u=Qi(e[i]);if(!(r=null!=t&&n(t,u)))break;t=t[u]}if(r)return r;var o=t?t.length:0;return!!o&&aa(o)&&Mi(u,o)&&(tf(t)||wa(t)||Ku(t))}function qi(t){var e=t.length,n=t.constructor(e);return e&&"string"==typeof t[0]&&ds.call(t,"index")&&(n.index=t.index,n.input=t.input),n}function Hi(t){return"function"!=typeof t.constructor||Ui(t)?{}:Tn(Ni(t))}function Pi(t,e,n,r){var i=t.constructor;switch(e){case Ft:return Wr(t);case Tt:case jt:return new i((+t));case Mt:return Fr(t,r);case $t:case Bt:case zt:case Jt:case Ut:case Kt:case Xt:case Vt:case Yt:return Jr(t,r);case Nt:return Mr(t,r,n);case Dt:case Ht:return new i(t);case Rt:return $r(t);case qt:return Br(t,r,n);case Pt:return zr(t)}}function Ii(t){var e=t?t.length:J;return aa(e)&&(tf(t)||wa(t)||Ku(t))?k(e,String):null}function Wi(t){return Yu(t)&&(tf(t)||Ku(t))}function Fi(t){return tf(t)&&!(2==t.length&&!oa(t[0]))}function Mi(t,e){return e=null==e?mt:e,!!e&&("number"==typeof t||ke.test(t))&&t>-1&&t%1==0&&t<e}function $i(t,e,n){if(!ca(n))return!1;var r=typeof e;return!!("number"==r?Vu(n)&&Mi(e,n.length):"string"==r&&e in n)&&Uu(n[e],t)}function Bi(t,e){if(tf(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!Ca(t))||(ce.test(t)||!ae.test(t)||null!=e&&t in Object(e))}function zi(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}function Ji(t){var e=Ti(t),n=Ee[e];if("function"!=typeof n||!(e in De.prototype))return!1;if(t===n)return!0;var r=dl(n);return!!r&&t===r[0]}function Ui(t){var e=t&&t.constructor,n="function"==typeof e&&e.prototype||fs;return t===n}function Ki(t){return t===t&&!ca(t)}function Xi(t,e){return function(n){return null!=n&&(n[t]===e&&(e!==J||t in Object(n)))}}function Vi(t,e){var n=t[1],r=e[1],i=n|r,o=i<(G|Z|it),u=r==it&&n==tt||r==it&&n==ot&&t[7].length<=e[8]||r==(it|ot)&&e[7].length<=e[8]&&n==tt;if(!o&&!u)return t;r&G&&(t[2]=e[2],i|=n&G?0:Q);var a=e[3];if(a){var c=t[3];t[3]=c?Xr(c,a,e[4]):a,t[4]=c?W(t[3],Y):e[4]}return a=e[5],a&&(c=t[5],t[5]=c?Vr(c,a,e[6]):a,t[6]=c?W(t[5],Y):e[6]),a=e[7],a&&(t[7]=a),r&it&&(t[8]=null==t[8]?e[8]:Ws(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i,t}function Yi(t,e,n,r,i,o){return ca(t)&&ca(e)&&ur(t,e,J,Yi,o.set(e,t)),t}function Gi(t,e){return 1==e.length?t:Mn(t,xr(e,0,-1))}function Zi(t,e){for(var n=t.length,r=Ws(e.length,n),i=Yr(t);r--;){var o=e[r];t[r]=Mi(o,n)?i[o]:J}return t}function Qi(t){if("string"==typeof t||Ca(t))return t;var e=t+"";return"0"==e&&1/t==-vt?"-0":e}function to(t){if(null!=t){try{return hs.call(t)}catch(e){}try{return t+""}catch(e){}}return""}function eo(t){if(t instanceof De)return t.clone();var e=new Ne(t.__wrapped__,t.__chain__);return e.__actions__=Yr(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}function no(t,e,n){e=(n?$i(t,e,n):e===J)?1:Is(Sa(e),0);var r=t?t.length:0;if(!r||e<1)return[];for(var i=0,o=0,u=Array(Os(r/e));i<r;)u[o++]=xr(t,i,i+=e);return u}function ro(t){for(var e=-1,n=t?t.length:0,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i}function io(){var t=arguments.length,e=Mu(arguments[0]);if(t<2)return t?Yr(e):[];for(var n=Array(t-1);t--;)n[t-1]=arguments[t];return i(e,qn(n,1))}function oo(t,e,n){var r=t?t.length:0;return r?(e=n||e===J?1:Sa(e),xr(t,e<0?0:e,r)):[]}function uo(t,e,n){var r=t?t.length:0;return r?(e=n||e===J?1:Sa(e),e=r-e,xr(t,0,e<0?0:e)):[]}function ao(t,e){return t&&t.length?Nr(t,ji(e,3),!0,!0):[]}function co(t,e){return t&&t.length?Nr(t,ji(e,3),!0):[]}function so(t,e,n,r){var i=t?t.length:0;return i?(n&&"number"!=typeof n&&$i(t,e,n)&&(n=0,r=i),Ln(t,e,n,r)):[]}function lo(t,e){return t&&t.length?m(t,ji(e,3)):-1}function fo(t,e){return t&&t.length?m(t,ji(e,3),!0):-1}function po(t){var e=t?t.length:0;return e?qn(t,1):[]}function ho(t){var e=t?t.length:0;return e?qn(t,vt):[]}function go(t,e){var n=t?t.length:0;return n?(e=e===J?1:Sa(e),qn(t,e)):[]}function vo(t){for(var e=-1,n=t?t.length:0,r={};++e<n;){var i=t[e];r[i[0]]=i[1]}return r}function mo(t){return t&&t.length?t[0]:J}function yo(t,e,n){var r=t?t.length:0;return r?(n=Sa(n),n<0&&(n=Is(r+n,0)),y(t,e,n)):-1}function bo(t){return uo(t,1)}function xo(t,e){return t?Hs.call(t,e):""}function _o(t){var e=t?t.length:0;return e?t[e-1]:J}function wo(t,e,n){var r=t?t.length:0;if(!r)return-1;var i=r;if(n!==J&&(i=Sa(n),i=(i<0?Is(r+i,0):Ws(i,r-1))+1),e!==e)return q(t,i,!0);for(;i--;)if(t[i]===e)return i;return-1}function Co(t,e){return t&&t.length?cr(t,Sa(e)):J}function ko(t,e){return t&&t.length&&e&&e.length?dr(t,e):t}function To(t,e,n){return t&&t.length&&e&&e.length?dr(t,e,ji(n)):t}function jo(t,e,n){return t&&t.length&&e&&e.length?dr(t,e,J,n):t}function Ao(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=ji(e,3);++r<o;){var u=t[r];e(u,r,t)&&(n.push(u),i.push(r))}return gr(t,i),n}function Eo(t){return t?Bs.call(t):t}function So(t,e,n){var r=t?t.length:0;return r?(n&&"number"!=typeof n&&$i(t,e,n)?(e=0,n=r):(e=null==e?0:Sa(e),n=n===J?r:Sa(n)),xr(t,e,n)):[]}function No(t,e){return wr(t,e)}function Do(t,e,n){return Cr(t,e,ji(n))}function Oo(t,e){var n=t?t.length:0;if(n){var r=wr(t,e);if(r<n&&Uu(t[r],e))return r}return-1}function Lo(t,e){return wr(t,e,!0)}function Ro(t,e,n){return Cr(t,e,ji(n),!0)}function qo(t,e){var n=t?t.length:0;if(n){var r=wr(t,e,!0)-1;if(Uu(t[r],e))return r}return-1}function Ho(t){return t&&t.length?kr(t):[]}function Po(t,e){return t&&t.length?kr(t,ji(e)):[]}function Io(t){return oo(t,1)}function Wo(t,e,n){return t&&t.length?(e=n||e===J?1:Sa(e),xr(t,0,e<0?0:e)):[]}function Fo(t,e,n){var r=t?t.length:0;return r?(e=n||e===J?1:Sa(e),e=r-e,xr(t,e<0?0:e,r)):[]}function Mo(t,e){return t&&t.length?Nr(t,ji(e,3),!1,!0):[]}function $o(t,e){return t&&t.length?Nr(t,ji(e,3)):[]}function Bo(t){return t&&t.length?Ar(t):[]}function zo(t,e){return t&&t.length?Ar(t,ji(e)):[]}function Jo(t,e){return t&&t.length?Ar(t,J,e):[]}function Uo(t){if(!t||!t.length)return[];var e=0;return t=c(t,function(t){if(Yu(t))return e=Is(t.length,e),!0}),k(e,function(e){return f(t,pr(e))})}function Ko(t,e){if(!t||!t.length)return[];var r=Uo(t);return null==e?r:f(r,function(t){return n(e,J,t)})}function Xo(t,e){return Lr(t||[],e||[],sn)}function Vo(t,e){return Lr(t||[],e||[],br)}function Yo(t){var e=Ee(t);return e.__chain__=!0,e}function Go(t,e){return e(t),t}function Zo(t,e){return e(t)}function Qo(){return Yo(this)}function tu(){return new Ne(this.value(),this.__chain__)}function eu(){this.__values__===J&&(this.__values__=Ea(this.value()));var t=this.__index__>=this.__values__.length,e=t?J:this.__values__[this.__index__++];return{done:t,value:e}}function nu(){return this}function ru(t){for(var e,n=this;n instanceof Se;){var r=eo(n);r.__index__=0,r.__values__=J,e?i.__wrapped__=r:e=r;var i=r;n=n.__wrapped__}return i.__wrapped__=t,e}function iu(){var t=this.__wrapped__;if(t instanceof De){var e=t;return this.__actions__.length&&(e=new De(this)),e=e.reverse(),e.__actions__.push({func:Zo,args:[Eo],thisArg:J}),new Ne(e,this.__chain__)}return this.thru(Eo)}function ou(){return Dr(this.__wrapped__,this.__actions__)}function uu(t,e,n){var r=tf(t)?a:Nn;return n&&$i(t,e,n)&&(e=J),r(t,ji(e,3))}function au(t,e){var n=tf(t)?c:Rn;return n(t,ji(e,3))}function cu(t,e){if(e=ji(e,3),tf(t)){var n=m(t,e);return n>-1?t[n]:J}return v(t,e,cl)}function su(t,e){if(e=ji(e,3),tf(t)){var n=m(t,e,!0);return n>-1?t[n]:J}return v(t,e,sl)}function lu(t,e){return qn(vu(t,e),1)}function fu(t,e){return qn(vu(t,e),vt)}function pu(t,e,n){return n=n===J?1:Sa(n),qn(vu(t,e),n)}function hu(t,e){return"function"==typeof e&&tf(t)?o(t,e):cl(t,ji(e))}function du(t,e){return"function"==typeof e&&tf(t)?u(t,e):sl(t,ji(e))}function gu(t,e,n,r){t=Vu(t)?t:cc(t),n=n&&!r?Sa(n):0;var i=t.length;return n<0&&(n=Is(i+n,0)),wa(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&y(t,e,n)>-1}function vu(t,e){var n=tf(t)?f:rr;return n(t,ji(e,3))}function mu(t,e,n,r){return null==t?[]:(tf(e)||(e=null==e?[]:[e]),n=r?J:n,tf(n)||(n=null==n?[]:[n]),sr(t,e,n))}function yu(t,e,n){var r=tf(t)?h:_,i=arguments.length<3;return r(t,ji(e,4),n,i,cl)}function bu(t,e,n){var r=tf(t)?d:_,i=arguments.length<3;return r(t,ji(e,4),n,i,sl)}function xu(t,e){var n=tf(t)?c:Rn;return e=ji(e,3),n(t,function(t,n,r){return!e(t,n,r)})}function _u(t){var e=Vu(t)?t:cc(t),n=e.length;return n>0?e[vr(0,n-1)]:J}function wu(t,e,n){var r=-1,i=Ea(t),o=i.length,u=o-1;for(e=(n?$i(t,e,n):e===J)?1:wn(Sa(e),0,o);++r<e;){var a=vr(r,u),c=i[a];i[a]=i[r],i[r]=c}return i.length=e,i}function Cu(t){return wu(t,xt)}function ku(t){if(null==t)return 0;if(Vu(t)){var e=t.length;return e&&wa(t)?M(t):e}if(sa(t)){var n=Oi(t);if(n==Nt||n==qt)return t.size}return Ka(t).length}function Tu(t,e,n){var r=tf(t)?g:_r;return n&&$i(t,e,n)&&(e=J),r(t,ji(e,3))}function ju(t,e){if("function"!=typeof e)throw new ss(X);return t=Sa(t),function(){if(--t<1)return e.apply(this,arguments)}}function Au(t,e,n){return e=n?J:e,e=t&&null==e?t.length:e,bi(t,it,J,J,J,J,e)}function Eu(t,e){var n;if("function"!=typeof e)throw new ss(X);return t=Sa(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=J),n}}function Su(t,e,n){e=n?J:e;var r=bi(t,tt,J,J,J,J,J,e);return r.placeholder=Su.placeholder,r}function Nu(t,e,n){e=n?J:e;var r=bi(t,et,J,J,J,J,J,e);return r.placeholder=Nu.placeholder,r}function Du(t,e,n){function r(e){var n=p,r=h;return p=h=J,y=e,g=t.apply(r,n)}function i(t){return y=t,v=Ns(a,e),b?r(t):g}function o(t){var n=t-m,r=t-y,i=e-n;return x?Ws(i,d-r):i}function u(t){var n=t-m,r=t-y;return!m||n>=e||n<0||x&&r>=d}function a(){var t=Bl();return u(t)?c(t):void(v=Ns(a,o(t)))}function c(t){return ks(v),v=J,_&&p?r(t):(p=h=J,g)}function s(){v!==J&&ks(v),m=y=0,p=h=v=J}function l(){return v===J?g:c(Bl())}function f(){var t=Bl(),n=u(t);if(p=arguments,h=this,m=t,n){if(v===J)return i(m);if(x)return ks(v),v=Ns(a,e),r(m)}return v===J&&(v=Ns(a,e)),g}var p,h,d,g,v,m=0,y=0,b=!1,x=!1,_=!0;if("function"!=typeof t)throw new ss(X);return e=Da(e)||0,ca(n)&&(b=!!n.leading,x="maxWait"in n,d=x?Is(Da(n.maxWait)||0,e):d,_="trailing"in n?!!n.trailing:_),f.cancel=s,f.flush=l,f}function Ou(t){return bi(t,ut)}function Lu(t,e){if("function"!=typeof t||e&&"function"!=typeof e)throw new ss(X);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return n.cache=o.set(i,u),u};return n.cache=new(Lu.Cache||Fe),n}function Ru(t){if("function"!=typeof t)throw new ss(X);return function(){return!t.apply(this,arguments)}}function qu(t){return Eu(2,t)}function Hu(t,e){if("function"!=typeof t)throw new ss(X);return e=Is(e===J?t.length-1:Sa(e),0),function(){for(var r=arguments,i=-1,o=Is(r.length-e,0),u=Array(o);++i<o;)u[i]=r[e+i];switch(e){case 0:return t.call(this,u);case 1:return t.call(this,r[0],u);case 2:return t.call(this,r[0],r[1],u)}var a=Array(e+1);for(i=-1;++i<e;)a[i]=r[i];return a[e]=u,n(t,this,a)}}function Pu(t,e){if("function"!=typeof t)throw new ss(X);return e=e===J?0:Is(Sa(e),0),Hu(function(r){var i=r[e],o=Pr(r,0,e);return i&&p(o,i),n(t,this,o)})}function Iu(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new ss(X);return ca(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),Du(t,e,{leading:r,maxWait:e,trailing:i})}function Wu(t){return Au(t,1)}function Fu(t,e){return e=null==e?Ic:e,Vl(e,t)}function Mu(){if(!arguments.length)return[];var t=arguments[0];return tf(t)?t:[t]}function $u(t){return Cn(t,!1,!0)}function Bu(t,e){return Cn(t,!1,!0,e)}function zu(t){return Cn(t,!0,!0)}function Ju(t,e){return Cn(t,!0,!0,e)}function Uu(t,e){return t===e||t!==t&&e!==e}function Ku(t){return Yu(t)&&ds.call(t,"callee")&&(!Ss.call(t,"callee")||ms.call(t)==Ct)}function Xu(t){return sa(t)&&ms.call(t)==Ft}function Vu(t){return null!=t&&aa(gl(t))&&!oa(t)}function Yu(t){return sa(t)&&Vu(t)}function Gu(t){return t===!0||t===!1||sa(t)&&ms.call(t)==Tt}function Zu(t){return sa(t)&&ms.call(t)==jt}function Qu(t){return!!t&&1===t.nodeType&&sa(t)&&!ya(t)}function ta(t){if(Vu(t)&&(tf(t)||wa(t)||oa(t.splice)||Ku(t)||ef(t)))return!t.length;if(sa(t)){var e=Oi(t);if(e==Nt||e==qt)return!t.size}for(var n in t)if(ds.call(t,n))return!1;return!(Zs&&Ka(t).length)}function ea(t,e){return Yn(t,e)}function na(t,e,n){n="function"==typeof n?n:J;var r=n?n(t,e):J;return r===J?Yn(t,e,n):!!r}function ra(t){return!!sa(t)&&(ms.call(t)==At||"string"==typeof t.message&&"string"==typeof t.name)}function ia(t){return"number"==typeof t&&qs(t)}function oa(t){var e=ca(t)?ms.call(t):"";return e==Et||e==St}function ua(t){return"number"==typeof t&&t==Sa(t)}function aa(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=mt}function ca(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function sa(t){return!!t&&"object"==typeof t}function la(t){return sa(t)&&Oi(t)==Nt}function fa(t,e){return t===e||Zn(t,e,Ai(e))}function pa(t,e,n){return n="function"==typeof n?n:J,Zn(t,e,Ai(e),n)}function ha(t){return ma(t)&&t!=+t}function da(t){if(!ca(t))return!1;var e=oa(t)||H(t)?bs:we;return e.test(to(t))}function ga(t){return null===t}function va(t){return null==t}function ma(t){return"number"==typeof t||sa(t)&&ms.call(t)==Dt}function ya(t){if(!sa(t)||ms.call(t)!=Ot||H(t))return!1;var e=Ni(t);if(null===e)return!0;var n=ds.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&hs.call(n)==vs}function ba(t){return ca(t)&&ms.call(t)==Rt}function xa(t){return ua(t)&&t>=-mt&&t<=mt}function _a(t){return sa(t)&&Oi(t)==qt}function wa(t){return"string"==typeof t||!tf(t)&&sa(t)&&ms.call(t)==Ht}function Ca(t){return"symbol"==typeof t||sa(t)&&ms.call(t)==Pt}function ka(t){return sa(t)&&aa(t.length)&&!!xn[ms.call(t)]}function Ta(t){return t===J}function ja(t){return sa(t)&&Oi(t)==It}function Aa(t){return sa(t)&&ms.call(t)==Wt}function Ea(t){if(!t)return[];if(Vu(t))return wa(t)?$(t):Yr(t);if(As&&t[As])return P(t[As]());var e=Oi(t),n=e==Nt?I:e==qt?F:cc;return n(t)}function Sa(t){if(!t)return 0===t?t:0;if(t=Da(t),t===vt||t===-vt){var e=t<0?-1:1;return e*yt}var n=t%1;return t===t?n?t-n:t:0}function Na(t){return t?wn(Sa(t),0,xt):0}function Da(t){if("number"==typeof t)return t;if(Ca(t))return bt;if(ca(t)){var e=oa(t.valueOf)?t.valueOf():t;t=ca(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(pe,"");var n=_e.test(t);return n||Ce.test(t)?En(t.slice(2),n?2:8):xe.test(t)?bt:+t}function Oa(t){return Gr(t,Xa(t))}function La(t){return wn(Sa(t),-mt,mt)}function Ra(t){return null==t?"":jr(t)}function qa(t,e){var n=Tn(t);return e?fn(n,e):n}function Ha(t,e){return v(t,ji(e,3),In,!0)}function Pa(t,e){return v(t,ji(e,3),Wn,!0)}function Ia(t,e){return null==t?t:ll(t,ji(e),Xa)}function Wa(t,e){return null==t?t:fl(t,ji(e),Xa)}function Fa(t,e){return t&&In(t,ji(e))}function Ma(t,e){return t&&Wn(t,ji(e))}function $a(t){return null==t?[]:Fn(t,Ka(t))}function Ba(t){return null==t?[]:Fn(t,Xa(t))}function za(t,e,n){var r=null==t?J:Mn(t,e);return r===J?n:r}function Ja(t,e){return null!=t&&Ri(t,e,zn)}function Ua(t,e){return null!=t&&Ri(t,e,Jn)}function Ka(t){var e=Ui(t);if(!e&&!Vu(t))return tr(t);var n=Ii(t),r=!!n,i=n||[],o=i.length;for(var u in t)!zn(t,u)||r&&("length"==u||Mi(u,o))||e&&"constructor"==u||i.push(u);return i}function Xa(t){for(var e=-1,n=Ui(t),r=er(t),i=r.length,o=Ii(t),u=!!o,a=o||[],c=a.length;++e<i;){var s=r[e];u&&("length"==s||Mi(s,c))||"constructor"==s&&(n||!ds.call(t,s))||a.push(s)}return a}function Va(t,e){var n={};return e=ji(e,3),In(t,function(t,r,i){n[e(t,r,i)]=t}),n}function Ya(t,e){var n={};return e=ji(e,3),In(t,function(t,r,i){n[r]=e(t,r,i)}),n}function Ga(t,e){return e=ji(e),fr(t,function(t,n){return!e(t,n)})}function Za(t,e){return null==t?{}:fr(t,ji(e))}function Qa(t,e,n){e=Bi(e,t)?[e]:Hr(e);var r=-1,i=e.length;for(i||(t=J,i=1);++r<i;){var o=null==t?J:t[Qi(e[r])];o===J&&(r=i,o=n),t=oa(o)?o.call(t):o}return t}function tc(t,e,n){return null==t?t:br(t,e,n)}function ec(t,e,n,r){return r="function"==typeof r?r:J,null==t?t:br(t,e,n,r)}function nc(t){return T(t,Ka(t))}function rc(t){return T(t,Xa(t))}function ic(t,e,n){var r=tf(t)||ka(t);if(e=ji(e,4),null==n)if(r||ca(t)){var i=t.constructor;n=r?tf(t)?new i:[]:oa(i)?Tn(Ni(t)):{}}else n={};return(r?o:In)(t,function(t,r,i){return e(n,t,r,i)}),n}function oc(t,e){return null==t||Er(t,e)}function uc(t,e,n){return null==t?t:Sr(t,e,qr(n))}function ac(t,e,n,r){return r="function"==typeof r?r:J,null==t?t:Sr(t,e,qr(n),r)}function cc(t){return t?A(t,Ka(t)):[]}function sc(t){return null==t?[]:A(t,Xa(t))}function lc(t,e,n){return n===J&&(n=e,e=J),n!==J&&(n=Da(n),n=n===n?n:0),e!==J&&(e=Da(e),e=e===e?e:0),wn(Da(t),e,n)}function fc(t,e,n){return e=Da(e)||0,n===J?(n=e,e=0):n=Da(n)||0,t=Da(t),Un(t,e,n)}function pc(t,e,n){if(n&&"boolean"!=typeof n&&$i(t,e,n)&&(e=n=J),n===J&&("boolean"==typeof e?(n=e,e=J):"boolean"==typeof t&&(n=t,t=J)),t===J&&e===J?(t=0,e=1):(t=Da(t)||0,e===J?(e=t,t=0):e=Da(e)||0),t>e){var r=t;t=e,e=r}if(n||t%1||e%1){var i=Ms();return Ws(t+i*(e-t+An("1e-"+((i+"").length-1))),e)}return vr(t,e)}function hc(t){return jf(Ra(t).toLowerCase())}function dc(t){return t=Ra(t),t&&t.replace(Te,O).replace(hn,"")}function gc(t,e,n){t=Ra(t),e=jr(e);var r=t.length;return n=n===J?r:wn(Sa(n),0,r),n-=e.length,n>=0&&t.indexOf(e,n)==n}function vc(t){return t=Ra(t),t&&re.test(t)?t.replace(ee,L):t}function mc(t){return t=Ra(t),t&&fe.test(t)?t.replace(le,"\\$&"):t}function yc(t,e,n){t=Ra(t),e=Sa(e);var r=e?M(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return hi(Ls(i),n)+t+hi(Os(i),n)}function bc(t,e,n){t=Ra(t),e=Sa(e);var r=e?M(t):0;return e&&r<e?t+hi(e-r,n):t}function xc(t,e,n){t=Ra(t),e=Sa(e);var r=e?M(t):0;return e&&r<e?hi(e-r,n)+t:t}function _c(t,e,n){return n||null==e?e=0:e&&(e=+e),t=Ra(t).replace(pe,""),Fs(t,e||(be.test(t)?16:10))}function wc(t,e,n){return e=(n?$i(t,e,n):e===J)?1:Sa(e),yr(Ra(t),e)}function Cc(){var t=arguments,e=Ra(t[0]);return t.length<3?e:$s.call(e,t[1],t[2])}function kc(t,e,n){return n&&"number"!=typeof n&&$i(t,e,n)&&(e=n=J),(n=n===J?xt:n>>>0)?(t=Ra(t),t&&("string"==typeof e||null!=e&&!ba(e))&&(e=jr(e),""==e&&vn.test(t))?Pr($(t),0,n):zs.call(t,e,n)):[]}function Tc(t,e,n){return t=Ra(t),n=wn(Sa(n),0,t.length),t.lastIndexOf(jr(e),n)==n}function jc(t,e,n){var r=Ee.templateSettings;n&&$i(t,e,n)&&(e=J),t=Ra(t),e=af({},e,r,an);var i,o,u=af({},e.imports,r.imports,an),a=Ka(u),c=A(u,a),s=0,l=e.interpolate||je,f="__p += '",p=cs((e.escape||je).source+"|"+l.source+"|"+(l===ue?me:je).source+"|"+(e.evaluate||je).source+"|$","g"),h="//# sourceURL="+("sourceURL"in e?e.sourceURL:"lodash.templateSources["+ ++bn+"]")+"\n";t.replace(p,function(e,n,r,u,a,c){return r||(r=u),f+=t.slice(s,c).replace(Ae,R),n&&(i=!0,f+="' +\n__e("+n+") +\n'"),a&&(o=!0,f+="';\n"+a+";\n__p += '"),r&&(f+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),s=c+e.length,e}),f+="';\n";var d=e.variable;d||(f="with (obj) {\n"+f+"\n}\n"),f=(o?f.replace(Gt,""):f).replace(Zt,"$1").replace(Qt,"$1;"),f="function("+(d||"obj")+") {\n"+(d?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(o?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var g=Af(function(){return Function(a,h+"return "+f).apply(J,c)});if(g.source=f,ra(g))throw g;return g}function Ac(t){return Ra(t).toLowerCase()}function Ec(t){return Ra(t).toUpperCase()}function Sc(t,e,n){if(t=Ra(t),t&&(n||e===J))return t.replace(pe,"");if(!t||!(e=jr(e)))return t;var r=$(t),i=$(e),o=E(r,i),u=S(r,i)+1;return Pr(r,o,u).join("")}function Nc(t,e,n){if(t=Ra(t),t&&(n||e===J))return t.replace(de,"");if(!t||!(e=jr(e)))return t;var r=$(t),i=S(r,$(e))+1;return Pr(r,0,i).join("")}function Dc(t,e,n){if(t=Ra(t),t&&(n||e===J))return t.replace(he,"");if(!t||!(e=jr(e)))return t;var r=$(t),i=E(r,$(e));return Pr(r,i).join("")}function Oc(t,e){var n=st,r=lt;if(ca(e)){var i="separator"in e?e.separator:i;n="length"in e?Sa(e.length):n,r="omission"in e?jr(e.omission):r;
-}t=Ra(t);var o=t.length;if(vn.test(t)){var u=$(t);o=u.length}if(n>=o)return t;var a=n-M(r);if(a<1)return r;var c=u?Pr(u,0,a).join(""):t.slice(0,a);if(i===J)return c+r;if(u&&(a+=c.length-a),ba(i)){if(t.slice(a).search(i)){var s,l=c;for(i.global||(i=cs(i.source,Ra(ye.exec(i))+"g")),i.lastIndex=0;s=i.exec(l);)var f=s.index;c=c.slice(0,f===J?a:f)}}else if(t.indexOf(jr(i),a)!=a){var p=c.lastIndexOf(i);p>-1&&(c=c.slice(0,p))}return c+r}function Lc(t){return t=Ra(t),t&&ne.test(t)?t.replace(te,B):t}function Rc(t,e,n){return t=Ra(t),e=n?J:e,e===J&&(e=mn.test(t)?gn:ge),t.match(e)||[]}function qc(t){var e=t?t.length:0,r=ji();return t=e?f(t,function(t){if("function"!=typeof t[1])throw new ss(X);return[r(t[0]),t[1]]}):[],Hu(function(r){for(var i=-1;++i<e;){var o=t[i];if(n(o[0],this,r))return n(o[1],this,r)}})}function Hc(t){return kn(Cn(t,!0))}function Pc(t){return function(){return t}}function Ic(t){return t}function Wc(t){return Qn("function"==typeof t?t:Cn(t,!0))}function Fc(t){return ir(Cn(t,!0))}function Mc(t,e){return or(t,Cn(e,!0))}function $c(t,e,n){var r=Ka(e),i=Fn(e,r);null!=n||ca(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=Fn(e,Ka(e)));var u=!(ca(n)&&"chain"in n&&!n.chain),a=oa(t);return o(i,function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(u||e){var n=t(this.__wrapped__),i=n.__actions__=Yr(this.__actions__);return i.push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,p([this.value()],arguments))})}),t}function Bc(){return Hn._===this&&(Hn._=ys),this}function zc(){}function Jc(t){return t=Sa(t),Hu(function(e){return cr(e,t)})}function Uc(t){return Bi(t)?pr(Qi(t)):hr(t)}function Kc(t){return function(e){return null==t?J:Mn(t,e)}}function Xc(t,e){if(t=Sa(t),t<1||t>mt)return[];var n=xt,r=Ws(t,xt);e=ji(e),t-=xt;for(var i=k(r,e);++n<t;)e(n);return i}function Vc(t){return tf(t)?f(t,Qi):Ca(t)?[t]:Yr(yl(t))}function Yc(t){var e=++gs;return Ra(t)+e}function Gc(t){return t&&t.length?On(t,Ic,Bn):J}function Zc(t,e){return t&&t.length?On(t,ji(e),Bn):J}function Qc(t){return x(t,Ic)}function ts(t,e){return x(t,ji(e))}function es(t){return t&&t.length?On(t,Ic,nr):J}function ns(t,e){return t&&t.length?On(t,ji(e),nr):J}function rs(t){return t&&t.length?C(t,Ic):0}function is(t,e){return t&&t.length?C(t,ji(e)):0}N=N?Pn.defaults({},N,Pn.pick(Hn,yn)):Hn;var os=N.Date,us=N.Error,as=N.Math,cs=N.RegExp,ss=N.TypeError,ls=N.Array.prototype,fs=N.Object.prototype,ps=N.String.prototype,hs=N.Function.prototype.toString,ds=fs.hasOwnProperty,gs=0,vs=hs.call(Object),ms=fs.toString,ys=Hn._,bs=cs("^"+hs.call(ds).replace(le,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),xs=Dn?N.Buffer:J,_s=N.Reflect,ws=N.Symbol,Cs=N.Uint8Array,ks=N.clearTimeout,Ts=_s?_s.enumerate:J,js=Object.getOwnPropertySymbols,As="symbol"==typeof(As=ws&&ws.iterator)?As:J,Es=Object.create,Ss=fs.propertyIsEnumerable,Ns=N.setTimeout,Ds=ls.splice,Os=as.ceil,Ls=as.floor,Rs=Object.getPrototypeOf,qs=N.isFinite,Hs=ls.join,Ps=Object.keys,Is=as.max,Ws=as.min,Fs=N.parseInt,Ms=as.random,$s=ps.replace,Bs=ls.reverse,zs=ps.split,Js=Ei(N,"DataView"),Us=Ei(N,"Map"),Ks=Ei(N,"Promise"),Xs=Ei(N,"Set"),Vs=Ei(N,"WeakMap"),Ys=Ei(Object,"create"),Gs=Vs&&new Vs,Zs=!Ss.call({valueOf:1},"valueOf"),Qs={},tl=to(Js),el=to(Us),nl=to(Ks),rl=to(Xs),il=to(Vs),ol=ws?ws.prototype:J,ul=ol?ol.valueOf:J,al=ol?ol.toString:J;Ee.templateSettings={escape:ie,evaluate:oe,interpolate:ue,variable:"",imports:{_:Ee}},Ee.prototype=Se.prototype,Ee.prototype.constructor=Ee,Ne.prototype=Tn(Se.prototype),Ne.prototype.constructor=Ne,De.prototype=Tn(Se.prototype),De.prototype.constructor=De,qe.prototype=Ys?Ys(null):fs,Fe.prototype.clear=Me,Fe.prototype["delete"]=$e,Fe.prototype.get=Be,Fe.prototype.has=ze,Fe.prototype.set=Je,Ue.prototype.push=Xe,Ve.prototype.clear=Ye,Ve.prototype["delete"]=Ge,Ve.prototype.get=Ze,Ve.prototype.has=Qe,Ve.prototype.set=tn;var cl=ei(In),sl=ei(Wn,!0),ll=ni(),fl=ni(!0);Ts&&!Ss.call({valueOf:1},"valueOf")&&(er=function(t){return P(Ts(t))});var pl=Gs?function(t,e){return Gs.set(t,e),t}:Ic,hl=Xs&&1/F(new Xs([,-0]))[1]==vt?function(t){return new Xs(t)}:zc,dl=Gs?function(t){return Gs.get(t)}:zc,gl=pr("length");js||(Di=function(){return[]});var vl=js?function(t){for(var e=[];t;)p(e,Di(t)),t=Ni(t);return e}:Di;(Js&&Oi(new Js(new ArrayBuffer(1)))!=Mt||Us&&Oi(new Us)!=Nt||Ks&&Oi(Ks.resolve())!=Lt||Xs&&Oi(new Xs)!=qt||Vs&&Oi(new Vs)!=It)&&(Oi=function(t){var e=ms.call(t),n=e==Ot?t.constructor:J,r=n?to(n):J;if(r)switch(r){case tl:return Mt;case el:return Nt;case nl:return Lt;case rl:return qt;case il:return It}return e});var ml=function(){var t=0,e=0;return function(n,r){var i=Bl(),o=pt-(i-e);if(e=i,o>0){if(++t>=ft)return n}else t=0;return pl(n,r)}}(),yl=Lu(function(t){var e=[];return Ra(t).replace(se,function(t,n,r,i){e.push(r?i.replace(ve,"$1"):n||t)}),e}),bl=Hu(function(t,e){return Yu(t)?Sn(t,qn(e,1,Yu,!0)):[]}),xl=Hu(function(t,e){var n=_o(e);return Yu(n)&&(n=J),Yu(t)?Sn(t,qn(e,1,Yu,!0),ji(n)):[]}),_l=Hu(function(t,e){var n=_o(e);return Yu(n)&&(n=J),Yu(t)?Sn(t,qn(e,1,Yu,!0),J,n):[]}),wl=Hu(function(t){var e=f(t,Rr);return e.length&&e[0]===t[0]?Kn(e):[]}),Cl=Hu(function(t){var e=_o(t),n=f(t,Rr);return e===_o(n)?e=J:n.pop(),n.length&&n[0]===t[0]?Kn(n,ji(e)):[]}),kl=Hu(function(t){var e=_o(t),n=f(t,Rr);return e===_o(n)?e=J:n.pop(),n.length&&n[0]===t[0]?Kn(n,J,e):[]}),Tl=Hu(ko),jl=Hu(function(t,e){e=qn(e,1);var n=t?t.length:0,r=dn(t,e);return gr(t,f(e,function(t){return Mi(t,n)?+t:t}).sort(Ur)),r}),Al=Hu(function(t){return Ar(qn(t,1,Yu,!0))}),El=Hu(function(t){var e=_o(t);return Yu(e)&&(e=J),Ar(qn(t,1,Yu,!0),ji(e))}),Sl=Hu(function(t){var e=_o(t);return Yu(e)&&(e=J),Ar(qn(t,1,Yu,!0),J,e)}),Nl=Hu(function(t,e){return Yu(t)?Sn(t,e):[]}),Dl=Hu(function(t){return Or(c(t,Yu))}),Ol=Hu(function(t){var e=_o(t);return Yu(e)&&(e=J),Or(c(t,Yu),ji(e))}),Ll=Hu(function(t){var e=_o(t);return Yu(e)&&(e=J),Or(c(t,Yu),J,e)}),Rl=Hu(Uo),ql=Hu(function(t){var e=t.length,n=e>1?t[e-1]:J;return n="function"==typeof n?(t.pop(),n):J,Ko(t,n)}),Hl=Hu(function(t){t=qn(t,1);var e=t.length,n=e?t[0]:0,r=this.__wrapped__,i=function(e){return dn(e,t)};return!(e>1||this.__actions__.length)&&r instanceof De&&Mi(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:Zo,args:[i],thisArg:J}),new Ne(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(J),t})):this.thru(i)}),Pl=Qr(function(t,e,n){ds.call(t,n)?++t[n]:t[n]=1}),Il=Qr(function(t,e,n){ds.call(t,n)?t[n].push(e):t[n]=[e]}),Wl=Hu(function(t,e,r){var i=-1,o="function"==typeof e,u=Bi(e),a=Vu(t)?Array(t.length):[];return cl(t,function(t){var c=o?e:u&&null!=t?t[e]:J;a[++i]=c?n(c,t,r):Vn(t,e,r)}),a}),Fl=Qr(function(t,e,n){t[n]=e}),Ml=Qr(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),$l=Hu(function(t,e){if(null==t)return[];var n=e.length;return n>1&&$i(t,e[0],e[1])?e=[]:n>2&&$i(e[0],e[1],e[2])&&(e=[e[0]]),e=1==e.length&&tf(e[0])?e[0]:qn(e,1,Fi),sr(t,e,[])}),Bl=os.now,zl=Hu(function(t,e,n){var r=G;if(n.length){var i=W(n,Si(zl));r|=nt}return bi(t,r,e,n,i)}),Jl=Hu(function(t,e,n){var r=G|Z;if(n.length){var i=W(n,Si(Jl));r|=nt}return bi(e,r,t,n,i)}),Ul=Hu(function(t,e){return jn(t,1,e)}),Kl=Hu(function(t,e,n){return jn(t,Da(e)||0,n)});Lu.Cache=Fe;var Xl=Hu(function(t,e){e=1==e.length&&tf(e[0])?f(e[0],j(ji())):f(qn(e,1,Fi),j(ji()));var r=e.length;return Hu(function(i){for(var o=-1,u=Ws(i.length,r);++o<u;)i[o]=e[o].call(this,i[o]);return n(t,this,i)})}),Vl=Hu(function(t,e){var n=W(e,Si(Vl));return bi(t,nt,J,e,n)}),Yl=Hu(function(t,e){var n=W(e,Si(Yl));return bi(t,rt,J,e,n)}),Gl=Hu(function(t,e){return bi(t,ot,J,J,J,qn(e,1))}),Zl=vi(Bn),Ql=vi(function(t,e){return t>=e}),tf=Array.isArray,ef=xs?function(t){return t instanceof xs}:Pc(!1),nf=vi(nr),rf=vi(function(t,e){return t<=e}),of=ti(function(t,e){if(Zs||Ui(e)||Vu(e))return void Gr(e,Ka(e),t);for(var n in e)ds.call(e,n)&&sn(t,n,e[n])}),uf=ti(function(t,e){if(Zs||Ui(e)||Vu(e))return void Gr(e,Xa(e),t);for(var n in e)sn(t,n,e[n])}),af=ti(function(t,e,n,r){Gr(e,Xa(e),t,r)}),cf=ti(function(t,e,n,r){Gr(e,Ka(e),t,r)}),sf=Hu(function(t,e){return dn(t,qn(e,1))}),lf=Hu(function(t){return t.push(J,an),n(af,J,t)}),ff=Hu(function(t){return t.push(J,Yi),n(vf,J,t)}),pf=li(function(t,e,n){t[e]=n},Pc(Ic)),hf=li(function(t,e,n){ds.call(t,e)?t[e].push(n):t[e]=[n]},ji),df=Hu(Vn),gf=ti(function(t,e,n){ur(t,e,n)}),vf=ti(function(t,e,n,r){ur(t,e,n,r)}),mf=Hu(function(t,e){return null==t?{}:(e=f(qn(e,1),Qi),lr(t,Sn(ki(t),e)))}),yf=Hu(function(t,e){return null==t?{}:lr(t,f(qn(e,1),Qi))}),bf=oi(function(t,e,n){return e=e.toLowerCase(),t+(n?hc(e):e)}),xf=oi(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),_f=oi(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),wf=ii("toLowerCase"),Cf=oi(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}),kf=oi(function(t,e,n){return t+(n?" ":"")+jf(e)}),Tf=oi(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),jf=ii("toUpperCase"),Af=Hu(function(t,e){try{return n(t,J,e)}catch(r){return ra(r)?r:new us(r)}}),Ef=Hu(function(t,e){return o(qn(e,1),function(e){e=Qi(e),t[e]=zl(t[e],t)}),t}),Sf=ci(),Nf=ci(!0),Df=Hu(function(t,e){return function(n){return Vn(n,t,e)}}),Of=Hu(function(t,e){return function(n){return Vn(t,n,e)}}),Lf=pi(f),Rf=pi(a),qf=pi(g),Hf=gi(),Pf=gi(!0),If=fi(function(t,e){return t+e}),Wf=yi("ceil"),Ff=fi(function(t,e){return t/e}),Mf=yi("floor"),$f=fi(function(t,e){return t*e}),Bf=yi("round"),zf=fi(function(t,e){return t-e});return Ee.after=ju,Ee.ary=Au,Ee.assign=of,Ee.assignIn=uf,Ee.assignInWith=af,Ee.assignWith=cf,Ee.at=sf,Ee.before=Eu,Ee.bind=zl,Ee.bindAll=Ef,Ee.bindKey=Jl,Ee.castArray=Mu,Ee.chain=Yo,Ee.chunk=no,Ee.compact=ro,Ee.concat=io,Ee.cond=qc,Ee.conforms=Hc,Ee.constant=Pc,Ee.countBy=Pl,Ee.create=qa,Ee.curry=Su,Ee.curryRight=Nu,Ee.debounce=Du,Ee.defaults=lf,Ee.defaultsDeep=ff,Ee.defer=Ul,Ee.delay=Kl,Ee.difference=bl,Ee.differenceBy=xl,Ee.differenceWith=_l,Ee.drop=oo,Ee.dropRight=uo,Ee.dropRightWhile=ao,Ee.dropWhile=co,Ee.fill=so,Ee.filter=au,Ee.flatMap=lu,Ee.flatMapDeep=fu,Ee.flatMapDepth=pu,Ee.flatten=po,Ee.flattenDeep=ho,Ee.flattenDepth=go,Ee.flip=Ou,Ee.flow=Sf,Ee.flowRight=Nf,Ee.fromPairs=vo,Ee.functions=$a,Ee.functionsIn=Ba,Ee.groupBy=Il,Ee.initial=bo,Ee.intersection=wl,Ee.intersectionBy=Cl,Ee.intersectionWith=kl,Ee.invert=pf,Ee.invertBy=hf,Ee.invokeMap=Wl,Ee.iteratee=Wc,Ee.keyBy=Fl,Ee.keys=Ka,Ee.keysIn=Xa,Ee.map=vu,Ee.mapKeys=Va,Ee.mapValues=Ya,Ee.matches=Fc,Ee.matchesProperty=Mc,Ee.memoize=Lu,Ee.merge=gf,Ee.mergeWith=vf,Ee.method=Df,Ee.methodOf=Of,Ee.mixin=$c,Ee.negate=Ru,Ee.nthArg=Jc,Ee.omit=mf,Ee.omitBy=Ga,Ee.once=qu,Ee.orderBy=mu,Ee.over=Lf,Ee.overArgs=Xl,Ee.overEvery=Rf,Ee.overSome=qf,Ee.partial=Vl,Ee.partialRight=Yl,Ee.partition=Ml,Ee.pick=yf,Ee.pickBy=Za,Ee.property=Uc,Ee.propertyOf=Kc,Ee.pull=Tl,Ee.pullAll=ko,Ee.pullAllBy=To,Ee.pullAllWith=jo,Ee.pullAt=jl,Ee.range=Hf,Ee.rangeRight=Pf,Ee.rearg=Gl,Ee.reject=xu,Ee.remove=Ao,Ee.rest=Hu,Ee.reverse=Eo,Ee.sampleSize=wu,Ee.set=tc,Ee.setWith=ec,Ee.shuffle=Cu,Ee.slice=So,Ee.sortBy=$l,Ee.sortedUniq=Ho,Ee.sortedUniqBy=Po,Ee.split=kc,Ee.spread=Pu,Ee.tail=Io,Ee.take=Wo,Ee.takeRight=Fo,Ee.takeRightWhile=Mo,Ee.takeWhile=$o,Ee.tap=Go,Ee.throttle=Iu,Ee.thru=Zo,Ee.toArray=Ea,Ee.toPairs=nc,Ee.toPairsIn=rc,Ee.toPath=Vc,Ee.toPlainObject=Oa,Ee.transform=ic,Ee.unary=Wu,Ee.union=Al,Ee.unionBy=El,Ee.unionWith=Sl,Ee.uniq=Bo,Ee.uniqBy=zo,Ee.uniqWith=Jo,Ee.unset=oc,Ee.unzip=Uo,Ee.unzipWith=Ko,Ee.update=uc,Ee.updateWith=ac,Ee.values=cc,Ee.valuesIn=sc,Ee.without=Nl,Ee.words=Rc,Ee.wrap=Fu,Ee.xor=Dl,Ee.xorBy=Ol,Ee.xorWith=Ll,Ee.zip=Rl,Ee.zipObject=Xo,Ee.zipObjectDeep=Vo,Ee.zipWith=ql,Ee.entries=nc,Ee.entriesIn=rc,Ee.extend=uf,Ee.extendWith=af,$c(Ee,Ee),Ee.add=If,Ee.attempt=Af,Ee.camelCase=bf,Ee.capitalize=hc,Ee.ceil=Wf,Ee.clamp=lc,Ee.clone=$u,Ee.cloneDeep=zu,Ee.cloneDeepWith=Ju,Ee.cloneWith=Bu,Ee.deburr=dc,Ee.divide=Ff,Ee.endsWith=gc,Ee.eq=Uu,Ee.escape=vc,Ee.escapeRegExp=mc,Ee.every=uu,Ee.find=cu,Ee.findIndex=lo,Ee.findKey=Ha,Ee.findLast=su,Ee.findLastIndex=fo,Ee.findLastKey=Pa,Ee.floor=Mf,Ee.forEach=hu,Ee.forEachRight=du,Ee.forIn=Ia,Ee.forInRight=Wa,Ee.forOwn=Fa,Ee.forOwnRight=Ma,Ee.get=za,Ee.gt=Zl,Ee.gte=Ql,Ee.has=Ja,Ee.hasIn=Ua,Ee.head=mo,Ee.identity=Ic,Ee.includes=gu,Ee.indexOf=yo,Ee.inRange=fc,Ee.invoke=df,Ee.isArguments=Ku,Ee.isArray=tf,Ee.isArrayBuffer=Xu,Ee.isArrayLike=Vu,Ee.isArrayLikeObject=Yu,Ee.isBoolean=Gu,Ee.isBuffer=ef,Ee.isDate=Zu,Ee.isElement=Qu,Ee.isEmpty=ta,Ee.isEqual=ea,Ee.isEqualWith=na,Ee.isError=ra,Ee.isFinite=ia,Ee.isFunction=oa,Ee.isInteger=ua,Ee.isLength=aa,Ee.isMap=la,Ee.isMatch=fa,Ee.isMatchWith=pa,Ee.isNaN=ha,Ee.isNative=da,Ee.isNil=va,Ee.isNull=ga,Ee.isNumber=ma,Ee.isObject=ca,Ee.isObjectLike=sa,Ee.isPlainObject=ya,Ee.isRegExp=ba,Ee.isSafeInteger=xa,Ee.isSet=_a,Ee.isString=wa,Ee.isSymbol=Ca,Ee.isTypedArray=ka,Ee.isUndefined=Ta,Ee.isWeakMap=ja,Ee.isWeakSet=Aa,Ee.join=xo,Ee.kebabCase=xf,Ee.last=_o,Ee.lastIndexOf=wo,Ee.lowerCase=_f,Ee.lowerFirst=wf,Ee.lt=nf,Ee.lte=rf,Ee.max=Gc,Ee.maxBy=Zc,Ee.mean=Qc,Ee.meanBy=ts,Ee.min=es,Ee.minBy=ns,Ee.multiply=$f,Ee.nth=Co,Ee.noConflict=Bc,Ee.noop=zc,Ee.now=Bl,Ee.pad=yc,Ee.padEnd=bc,Ee.padStart=xc,Ee.parseInt=_c,Ee.random=pc,Ee.reduce=yu,Ee.reduceRight=bu,Ee.repeat=wc,Ee.replace=Cc,Ee.result=Qa,Ee.round=Bf,Ee.runInContext=z,Ee.sample=_u,Ee.size=ku,Ee.snakeCase=Cf,Ee.some=Tu,Ee.sortedIndex=No,Ee.sortedIndexBy=Do,Ee.sortedIndexOf=Oo,Ee.sortedLastIndex=Lo,Ee.sortedLastIndexBy=Ro,Ee.sortedLastIndexOf=qo,Ee.startCase=kf,Ee.startsWith=Tc,Ee.subtract=zf,Ee.sum=rs,Ee.sumBy=is,Ee.template=jc,Ee.times=Xc,Ee.toInteger=Sa,Ee.toLength=Na,Ee.toLower=Ac,Ee.toNumber=Da,Ee.toSafeInteger=La,Ee.toString=Ra,Ee.toUpper=Ec,Ee.trim=Sc,Ee.trimEnd=Nc,Ee.trimStart=Dc,Ee.truncate=Oc,Ee.unescape=Lc,Ee.uniqueId=Yc,Ee.upperCase=Tf,Ee.upperFirst=jf,Ee.each=hu,Ee.eachRight=du,Ee.first=mo,$c(Ee,function(){var t={};return In(Ee,function(e,n){ds.call(Ee.prototype,n)||(t[n]=e)}),t}(),{chain:!1}),Ee.VERSION=U,o(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){Ee[t].placeholder=Ee}),o(["drop","take"],function(t,e){De.prototype[t]=function(n){var r=this.__filtered__;if(r&&!e)return new De(this);n=n===J?1:Is(Sa(n),0);var i=this.clone();return r?i.__takeCount__=Ws(n,i.__takeCount__):i.__views__.push({size:Ws(n,xt),type:t+(i.__dir__<0?"Right":"")}),i},De.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),o(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==ht||n==gt;De.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:ji(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),o(["head","last"],function(t,e){var n="take"+(e?"Right":"");De.prototype[t]=function(){return this[n](1).value()[0]}}),o(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");De.prototype[t]=function(){return this.__filtered__?new De(this):this[n](1)}}),De.prototype.compact=function(){return this.filter(Ic)},De.prototype.find=function(t){return this.filter(t).head()},De.prototype.findLast=function(t){return this.reverse().find(t)},De.prototype.invokeMap=Hu(function(t,e){return"function"==typeof t?new De(this):this.map(function(n){return Vn(n,t,e)})}),De.prototype.reject=function(t){return t=ji(t,3),this.filter(function(e){return!t(e)})},De.prototype.slice=function(t,e){t=Sa(t);var n=this;return n.__filtered__&&(t>0||e<0)?new De(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==J&&(e=Sa(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},De.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},De.prototype.toArray=function(){return this.take(xt)},In(De.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),i=Ee[r?"take"+("last"==e?"Right":""):e],o=r||/^find/.test(e);i&&(Ee.prototype[e]=function(){var e=this.__wrapped__,u=r?[1]:arguments,a=e instanceof De,c=u[0],s=a||tf(e),l=function(t){var e=i.apply(Ee,p([t],u));return r&&f?e[0]:e};s&&n&&"function"==typeof c&&1!=c.length&&(a=s=!1);var f=this.__chain__,h=!!this.__actions__.length,d=o&&!f,g=a&&!h;if(!o&&s){e=g?e:new De(this);var v=t.apply(e,u);return v.__actions__.push({func:Zo,args:[l],thisArg:J}),new Ne(v,f)}return d&&g?t.apply(this,u):(v=this.thru(l),d?r?v.value()[0]:v.value():v)})}),o(["pop","push","shift","sort","splice","unshift"],function(t){var e=ls[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);Ee.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(tf(i)?i:[],t)}return this[n](function(n){return e.apply(tf(n)?n:[],t)})}}),In(De.prototype,function(t,e){var n=Ee[e];if(n){var r=n.name+"",i=Qs[r]||(Qs[r]=[]);i.push({name:e,func:n})}}),Qs[si(J,Z).name]=[{name:"wrapper",func:J}],De.prototype.clone=Oe,De.prototype.reverse=Le,De.prototype.value=Re,Ee.prototype.at=Hl,Ee.prototype.chain=Qo,Ee.prototype.commit=tu,Ee.prototype.next=eu,Ee.prototype.plant=ru,Ee.prototype.reverse=iu,Ee.prototype.toJSON=Ee.prototype.valueOf=Ee.prototype.value=ou,As&&(Ee.prototype[As]=nu),Ee}var J,U="4.11.2",K=200,X="Expected a function",V="__lodash_hash_undefined__",Y="__lodash_placeholder__",G=1,Z=2,Q=4,tt=8,et=16,nt=32,rt=64,it=128,ot=256,ut=512,at=1,ct=2,st=30,lt="...",ft=150,pt=16,ht=1,dt=2,gt=3,vt=1/0,mt=9007199254740991,yt=1.7976931348623157e308,bt=NaN,xt=4294967295,_t=xt-1,wt=xt>>>1,Ct="[object Arguments]",kt="[object Array]",Tt="[object Boolean]",jt="[object Date]",At="[object Error]",Et="[object Function]",St="[object GeneratorFunction]",Nt="[object Map]",Dt="[object Number]",Ot="[object Object]",Lt="[object Promise]",Rt="[object RegExp]",qt="[object Set]",Ht="[object String]",Pt="[object Symbol]",It="[object WeakMap]",Wt="[object WeakSet]",Ft="[object ArrayBuffer]",Mt="[object DataView]",$t="[object Float32Array]",Bt="[object Float64Array]",zt="[object Int8Array]",Jt="[object Int16Array]",Ut="[object Int32Array]",Kt="[object Uint8Array]",Xt="[object Uint8ClampedArray]",Vt="[object Uint16Array]",Yt="[object Uint32Array]",Gt=/\b__p \+= '';/g,Zt=/\b(__p \+=) '' \+/g,Qt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,te=/&(?:amp|lt|gt|quot|#39|#96);/g,ee=/[&<>"'`]/g,ne=RegExp(te.source),re=RegExp(ee.source),ie=/<%-([\s\S]+?)%>/g,oe=/<%([\s\S]+?)%>/g,ue=/<%=([\s\S]+?)%>/g,ae=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ce=/^\w*$/,se=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g,le=/[\\^$.*+?()[\]{}|]/g,fe=RegExp(le.source),pe=/^\s+|\s+$/g,he=/^\s+/,de=/\s+$/,ge=/[a-zA-Z0-9]+/g,ve=/\\(\\)?/g,me=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ye=/\w*$/,be=/^0x/i,xe=/^[-+]0x[0-9a-f]+$/i,_e=/^0b[01]+$/i,we=/^\[object .+?Constructor\]$/,Ce=/^0o[0-7]+$/i,ke=/^(?:0|[1-9]\d*)$/,Te=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,je=/($^)/,Ae=/['\n\r\u2028\u2029\\]/g,Ee="\\ud800-\\udfff",Se="\\u0300-\\u036f\\ufe20-\\ufe23",Ne="\\u20d0-\\u20f0",De="\\u2700-\\u27bf",Oe="a-z\\xdf-\\xf6\\xf8-\\xff",Le="\\xac\\xb1\\xd7\\xf7",Re="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",qe="\\u2000-\\u206f",He=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Pe="A-Z\\xc0-\\xd6\\xd8-\\xde",Ie="\\ufe0e\\ufe0f",We=Le+Re+qe+He,Fe="['’]",Me="["+Ee+"]",$e="["+We+"]",Be="["+Se+Ne+"]",ze="\\d+",Je="["+De+"]",Ue="["+Oe+"]",Ke="[^"+Ee+We+ze+De+Oe+Pe+"]",Xe="\\ud83c[\\udffb-\\udfff]",Ve="(?:"+Be+"|"+Xe+")",Ye="[^"+Ee+"]",Ge="(?:\\ud83c[\\udde6-\\uddff]){2}",Ze="[\\ud800-\\udbff][\\udc00-\\udfff]",Qe="["+Pe+"]",tn="\\u200d",en="(?:"+Ue+"|"+Ke+")",nn="(?:"+Qe+"|"+Ke+")",rn="(?:"+Fe+"(?:d|ll|m|re|s|t|ve))?",on="(?:"+Fe+"(?:D|LL|M|RE|S|T|VE))?",un=Ve+"?",an="["+Ie+"]?",cn="(?:"+tn+"(?:"+[Ye,Ge,Ze].join("|")+")"+an+un+")*",sn=an+un+cn,ln="(?:"+[Je,Ge,Ze].join("|")+")"+sn,fn="(?:"+[Ye+Be+"?",Be,Ge,Ze,Me].join("|")+")",pn=RegExp(Fe,"g"),hn=RegExp(Be,"g"),dn=RegExp(Xe+"(?="+Xe+")|"+fn+sn,"g"),gn=RegExp([Qe+"?"+Ue+"+"+rn+"(?="+[$e,Qe,"$"].join("|")+")",nn+"+"+on+"(?="+[$e,Qe+en,"$"].join("|")+")",Qe+"?"+en+"+"+rn,Qe+"+"+on,ze,ln].join("|"),"g"),vn=RegExp("["+tn+Ee+Se+Ne+Ie+"]"),mn=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,yn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","Reflect","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],bn=-1,xn={};xn[$t]=xn[Bt]=xn[zt]=xn[Jt]=xn[Ut]=xn[Kt]=xn[Xt]=xn[Vt]=xn[Yt]=!0,xn[Ct]=xn[kt]=xn[Ft]=xn[Tt]=xn[Mt]=xn[jt]=xn[At]=xn[Et]=xn[Nt]=xn[Dt]=xn[Ot]=xn[Rt]=xn[qt]=xn[Ht]=xn[It]=!1;var _n={};_n[Ct]=_n[kt]=_n[Ft]=_n[Mt]=_n[Tt]=_n[jt]=_n[$t]=_n[Bt]=_n[zt]=_n[Jt]=_n[Ut]=_n[Nt]=_n[Dt]=_n[Ot]=_n[Rt]=_n[qt]=_n[Ht]=_n[Pt]=_n[Kt]=_n[Xt]=_n[Vt]=_n[Yt]=!0,_n[At]=_n[Et]=_n[It]=!1;var wn={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Cn={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},kn={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},Tn={"function":!0,object:!0},jn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},An=parseFloat,En=parseInt,Sn=Tn[typeof exports]&&exports&&!exports.nodeType?exports:J,Nn=Tn[typeof module]&&module&&!module.nodeType?module:J,Dn=Nn&&Nn.exports===Sn?Sn:J,On=N(Sn&&Nn&&"object"==typeof global&&global),Ln=N(Tn[typeof self]&&self),Rn=N(Tn[typeof window]&&window),qn=N(Tn[typeof this]&&this),Hn=On||Rn!==(qn&&qn.window)&&Rn||Ln||qn||Function("return this")(),Pn=z();(Rn||Ln||{})._=Pn,"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return Pn}):Sn&&Nn?(Dn&&((Nn.exports=Pn)._=Pn),Sn._=Pn):Hn._=Pn}.call(this);var Josh=Josh||{};Josh.Version="0.2.10",function(t){Josh.Keys={Special:{Backspace:8,Tab:9,Enter:13,Pause:19,CapsLock:20,Escape:27,Space:32,PageUp:33,PageDown:34,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Insert:45,Delete:46}},Josh.ReadLine=function(e){function n(t,e,n){t.addEventListener?t.addEventListener(e,n,!1):t.attachEvent&&t.attachEvent("on"+e,n)}function r(t,e,n){t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent&&t.detachEvent("on"+e,n)}function i(t){var e=t.keyCode||t.charCode,n=String.fromCharCode(e);return{code:e,character:n,shift:t.shiftKey,control:t.controlKey,alt:t.altKey,isChar:!0}}function o(t){var e={modifier:"default",code:t.keyCode};return t.metaKey||t.altKey?e.modifier="meta":t.ctrlKey&&(e.modifier="control"),t["char"]&&(e.code=t["char"].charCodeAt(0)),e}function u(t){return vt?void gt.push(t):void a(t)}function a(t){ut.log("calling: "+t.name+", previous: "+it),pt&&"cmdKeyPress"!=t.name&&"cmdReverseSearch"!=t.name&&(pt=!1,"cmdEsc"==t.name&&(rt=null),rt&&(rt.text&&(dt=rt.cursoridx,ht=rt.text,at.applySearch()),rt=null),et&&et()),!pt&&ct.isinkill()&&"cmdKill"!=t.name.substr(0,7)&&ct.commit(),it=t.name,t()}function c(t){vt=!0,t(s)}function s(){var t=gt.shift();return t?(a(t),void s()):void(vt=!1)}function l(){}function f(){}function p(){0!=dt&&(--dt,ht=B(ht,dt,dt+1),I())}function h(){X&&c(function(t){X(bt.getLine(),function(e){e&&(ht=z(ht,dt,e),R(dt+e.length)),ot=!0,t()})})}function d(){if(ht){var t=ht;at.accept(t),ht="",dt=0,V&&c(function(e){V(t,function(t){t&&(ht=t,dt=ht.length),Y&&Y(bt.getLine()),e()})})}}function g(){R(ht.length)}function v(){R(0)}function m(){0!=dt&&R(dt-1)}function y(){dt!=ht.length&&R(dt+1)}function b(){0!=dt&&R(F())}function x(){dt!=ht.length&&R(M())}function _(){at.hasPrev()&&W(at.prev)}function w(){at.hasNext()&&W(at.next)}function C(){W(at.top)}function k(){W(at.end)}function T(){return 0==ht.length&&Z?void Z():void(dt!=ht.length&&(ht=B(ht,dt,dt+1),I()))}function j(){G&&G()}function A(){ct.append(ht.substr(dt)),ht=ht.substr(0,dt),I()}function E(){if(0!=ht.length&&dt!=ht.length){var t=M();if(t==ht.length-1)return A();ct.append(ht.substring(dt,t)),ht=B(ht,dt,t),I()}}function S(){if(0!=dt){var t=dt;dt=F(),ct.prepend(ht.substring(dt,t)),ht=B(ht,dt,t),I()}}function N(){var t=ct.yank();t&&(ht=z(ht,dt,t),R(dt+t.length))}function D(){var t=ct.lastyanklength();if(t){var e=ct.rotate();if(e){var n=dt;dt-=t,ht=B(ht,dt,n),ht=z(ht,dt,e),R(dt+e.length)}}}function O(){Q?Q():I()}function L(){pt?(rt||(rt={term:""}),P()):(pt=!0,tt&&tt(),nt&&nt({}))}function R(t){dt=t,I()}function q(t){ht=z(ht,dt,t),++dt,I()}function H(t){rt||(rt={term:""}),rt.term+=t,P()}function P(){ut.log("searchtext: "+rt.term);var t=at.search(rt.term);null!=t&&(rt=t,ut.log("match: "+t),nt&&nt(t))}function I(){Y&&Y(bt.getLine())}function W(t){at.update(ht),ht=t(),R(ht.length)}function F(){var t=dt-1;if(t<0)return 0;for(var e=!1,n=t;n>0;n--){var r=$(ht[n]);if(e&&!r)return n+1;e=r}return 0}function M(){if(0==ht.length)return 0;var t=dt+1;if(t>=ht.length)return ht.length-1;for(var e=!1,n=t;n<ht.length;n++){var r=$(ht[n]);if(e&&!r)return n;e=r}return ht.length-1}function $(t){if(void 0==t)return!1;var e=t.charCodeAt(0);return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function B(t,e,n){if(t.length<=1||t.length<=n-e)return"";if(0==e)return t.substr(n);var r=t.substr(0,e),i=t.substr(n);return r+i}function z(t,e,n){if(0==e)return n+t;if(e>=t.length)return t+n;var r=t.substr(0,e),i=t.substr(e);return r+n+i}function J(){lt.onkeydown=function(t){if(t=t||window.event,!ft||16==t.keyCode||17==t.keyCode||18==t.keyCode||91==t.keyCode)return!0;ut.log("key: "+t.keyCode);var e,n=yt["default"][t.keyCode];return!t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?!t.altKey&&!t.metaKey||t.ctrlKey||t.shiftKey||(e=yt.meta[t.keyCode],e&&(n=e)):(e=yt.control[t.keyCode],e&&(n=e)),!n||(u(n),t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0,!1)},lt.onkeypress=function(t){if(!ft)return!0;var e=i(t);return!(0==e.code||t.defaultPrevented||t.metaKey||t.altKey||t.ctrlKey)&&(u(function(){pt?H(e.character):q(e.character)}),t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0,!1)}}e=e||{};var U,K,X,V,Y,G,Z,Q,tt,et,nt,rt,it,ot,ut=e.console||(Josh.Debug&&t.console?t.console:{log:function(){}}),at=e.history||new Josh.History,ct=e.killring||new Josh.KillRing,st=!!e.element,lt=e.element||t,ft=!1,pt=!1,ht="",dt=0,gt=[],vt=!1,mt={complete:h,done:d,noop:l,history_top:C,history_end:k,history_next:w,history_previous:_,end:g,home:v,left:m,right:y,cancel:j,"delete":T,backspace:p,kill_eof:A,kill_wordback:S,kill_wordforward:E,yank:N,clear:O,search:L,wordback:b,wordforward:x,yank_rotate:D},yt={"default":{8:p,9:h,13:d,27:f,33:C,34:k,35:g,36:v,37:m,38:_,39:y,40:w,46:T,10:l,19:l,45:l},control:{65:v,66:m,67:j,68:T,69:g,70:y,80:_,78:w,75:A,89:N,76:O,82:L},meta:{8:S,66:b,68:E,70:x,89:D}},bt={isActive:function(){return ft},activate:function(){ft=!0,U&&U()},deactivate:function(){ft=!1,K&&K()},bind:function(t,e){var n=o(t),r=mt[e];r&&yt[n.modifier][n.code]},unbind:function(t){var e=o(t);delete yt[e.modifier][e.code]},attach:function(t){lt&&bt.detach(),ut.log("attaching"),ut.log(t),lt=t,st=!0,n(lt,"focus",bt.activate),n(lt,"blur",bt.deactivate),J()},detach:function(){r(lt,"focus",bt.activate),r(lt,"blur",bt.deactivate),lt=null,st=!1},onActivate:function(t){U=t},onDeactivate:function(t){K=t},onChange:function(t){Y=t},onClear:function(t){Q=t},onEnter:function(t){V=t},onCompletion:function(t){X=t},onCancel:function(t){G=t},onEOT:function(t){Z=t},onSearchStart:function(t){tt=t},onSearchEnd:function(t){et=t},onSearchChange:function(t){nt=t},getLine:function(){return{text:ht,cursor:dt}},setLine:function(t){ht=t.text,dt=t.cursor,I()}};return st?bt.attach(lt):J(),bt}}(this);var Josh=Josh||{};!function(t){Josh.History=function(e){function n(){s&&s.setItem(l,JSON.stringify(o))}function r(){return a=u,c="",o[u]}e=e||{};var i=Josh.Debug&&t.console?t.console:{log:function(){}},o=e.history||[""],u=e.cursor||0,a=u,c="",s=e.storage||t.localStorage,l=e.key||"josh.history";if(s){var f=s.getItem(l);f?(o=JSON.parse(f),a=u=o.length-1):n()}return{update:function(t){i.log("updating history to "+t),o[u]=t,n()},accept:function(t){i.log("accepting history "+t);var e=o.length-1;t&&(u==e?(i.log("we're at the end already, update last position"),o[u]=t):o[e]?(i.log("appending to end"),o.push(t)):(i.log("we're not at the end, but the end was blank, so update last position"),o[e]=t),o.push("")),a=u=o.length-1,n()},items:function(){return o.slice(0,o.length-1)},clear:function(){o=[o[o.length-1]],n()},hasNext:function(){return u<o.length-1},hasPrev:function(){return u>0},prev:function(){return--u,r()},next:function(){return++u,r()},top:function(){return u=0,r()},end:function(){return u=o.length-1,r()},search:function(t){if(!t&&!c)return null;var e=o.length;t==c&&(a--,e--),t||(t=c),c=t;for(var n=0;n<e;n++){a<0&&(a=o.length-1);var r=o[a].indexOf(t);if(r!=-1)return{text:o[a],cursoridx:r,term:t};a--}return null},applySearch:function(){return c?(i.log("setting history to position"+a+"("+u+"): "+o[a]),u=a,o[u]):null}}}}(this);var Josh=Josh||{};!function(t){Josh.KillRing=function(e){e=e||{};var n=Josh.Debug&&t.console?t.console:{log:function(){}},r=e.ring||[],i=e.cursor||0,o=!1,u=!1;0==r.length?i=-1:i>=r.length&&(i=r.length-1);var a={isinkill:function(){return o},lastyanklength:function(){return u?r[i].length:0},append:function(t){u=!1,t&&(0!=r.length&&o||r.push(""),i=r.length-1,n.log("appending: "+t),o=!0,r[i]+=t)},prepend:function(t){u=!1,t&&(0!=r.length&&o||r.push(""),i=r.length-1,n.log("prepending: "+t),o=!0,r[i]=t+r[i])},commit:function(){n.log("committing"),u=!1,o=!1},yank:function(){return a.commit(),0==r.length?null:(u=!0,r[i])},rotate:function(){return u&&0!=r.length?(--i,i<0&&(i=r.length-1),a.yank()):null},items:function(){return r.slice(0)},clear:function(){r=[],i=-1,u=!1,_uncommited=!1}};return a}}(this);var Josh=Josh||{};!function(t,e,n){e.fn.josh_caretTo=function(t){return this.queue(function(e){if(this.createTextRange){var n=this.createTextRange();n.move("character",t),n.select()}else null!==this.selectionStart&&this.setSelectionRange(t,t);e()})},e.fn.josh_caretPosition=function(){var t=this.get(0);if(t.createTextRange){var e=t.createTextRange();return e.moveStart("character",-t.value.length),e.text.length}return null!==t.selectionStart?t.selectionStart:0};var r=Josh.History(),i=new Josh.KillRing;Josh.Input=function(o){o=o||{};var u,a=o.console||(Josh.Debug&&t.console?t.console:{log:function(){}}),c="#"+o.id,s=o.blinktime||500,l=!1,f=!1,p=!1,h=o.history||r,d=o.killring||i,g={templates:{span:n.template('<span class="input"><span class="left"/><span class="cursor"/><span class="right"/></span>')},history:h,killring:d};return e(document).ready(function(){function r(t){var e=t?t.text:"";u=e,v.val(e),v.josh_caretTo(t.cursor)}function i(t){var e=t.text||"";u=e;var r=t.cursor||0,i=n.escape(e.substr(0,r)).replace(/ /g,"&nbsp;"),o=e.substr(r,1),a=n.escape(e.substr(r+1)).replace(/ /g,"&nbsp;");x.html(i),o?w.text(o).css("textDecoration","underline"):w.html("&nbsp;").css("textDecoration","underline"),_.html(a)}function o(){l&&t.setTimeout(function(){l&&(f=!f,f?w.css("textDecoration","underline"):w.css("textDecoration",""),o())},s)}var v=e(c),m=v.get(0),y=new Josh.ReadLine({history:h,killring:d,console:a});g.readline=y,y.attach(m);var b=null;if(p=v.is("input"))a.log(c+" is an input"),y.onChange(r),v.click(function(){var t=y.getLine();t.cursor=v.josh_caretPosition(),y.setLine(t)}),b=function(){setTimeout(function(){r(y.getLine())},0)};else{a.log(c+" is a non-input element"),v.html(g.templates.span()),"undefined"==typeof v.attr("tabindex")&&v.attr("tabindex",0);var x=v.find(".left"),_=v.find(".right"),w=v.find(".cursor");b=function(){o()},y.onChange(i)}y.unbind({keyCode:Josh.Keys.Special.Tab}),y.unbind({"char":"R",ctrlKey:!0}),y.onActivate(function(){l=!0,b()}),y.onDeactivate(function(){l=!1,u&&h.accept(u)})}),g}}(this,$,_);var Josh=Josh||{};!function(t,e,n){Josh.PathHandler=function(e,r){
-function i(t,e,n,r){return f.log("calling command and path completion handler w/ cmd: '"+t+"', arg: '"+e+"'"),e||(e=t),"."==e[0]||"/"==e[0]?o(t,e,n,r):h.completion(t,e,n,r)}function o(t,e,n,r){if(f.log("completing '"+e+"'"),!e)return f.log("completing on current"),u(d.current,"",r);if("/"==e[e.length-1])return f.log("completing children w/o partial"),d.getNode(e,function(t){return t?u(t,"",r):(f.log("no node for path"),r())});var i="",o=e.lastIndexOf("/"),a=e.substr(0,o+1);return i=e.substr(o+1),".."===i||"."===i?r({completion:"/",suggestions:[]}):(f.log("completing children via parent '"+a+"'  w/ partial '"+i+"'"),d.getNode(a,function(t){return t?u(t,i,function(t){return r(t&&""==t.completion&&1==t.suggestions.length?{completion:"/",suggestions:[]}:t)}):(f.log("no node for parent path"),r())}))}function u(t,e,r){d.getChildNodes(t,function(t){r(p.bestMatch(e,n.map(t,function(t){return t.name})))})}function a(t,e,n){d.getNode(e[0],function(t){return t?(d.current=t,n()):n(p.templates.not_found({cmd:"cd",path:e[0]}))})}function c(t,e,n){n(p.templates.pwd({node:d.current}))}function s(t,e,n){return f.log("ls"),e&&e[0]?d.getNode(e[0],function(t){l(t,e[0],n)}):l(d.current,d.current.path,n)}function l(t,e,n){return t?d.getChildNodes(t,function(e){f.log("finish render: "+t.name),n(p.templates.ls({nodes:e}))}):n(p.templates.not_found({cmd:"ls",path:e}))}r=r||{};var f=r.console||(Josh.Debug&&t.console?t.console:{log:function(){}}),p=e;p.templates.not_found=n.template("<div><%=cmd%>: <%=path%>: No such file or directory</div>"),p.templates.ls=n.template("<div><% _.each(nodes, function(node) { %><span><%=node.name%>&nbsp;</span><% }); %></div>"),p.templates.pwd=n.template("<div><%=node.path %>&nbsp;</div>"),p.templates.prompt=n.template("<%= node.path %> $");var h=p.getCommandHandler("_default"),d={current:null,pathCompletionHandler:o,commandAndPathCompletionHandler:i,getNode:function(t,e){e()},getChildNodes:function(t,e){e([])},getPrompt:function(){return p.templates.prompt({node:d.current})}};return p.setCommandHandler("ls",{exec:s,completion:o}),p.setCommandHandler("pwd",{exec:c,completion:o}),p.setCommandHandler("cd",{exec:a,completion:o}),p.setCommandHandler("_default",{exec:h.exec,completion:i}),p.onNewPrompt(function(t){t(d.getPrompt())}),d}}(this,$,_);var Josh=Josh||{};!function(t,e,n){Josh.Shell=function(r){function i(t){return"#"+t}function o(){return n.chain(E).keys().filter(function(t){return"_"!=t[0]}).value()}function u(){j&&t.setTimeout(function(){j&&(A=!A,A?e(i(w)+" .input .cursor").css("textDecoration","underline"):e(i(w)+" .input .cursor").css("textDecoration",""),u())},C)}function a(t){return n.filter(t.split(/\s+/),function(t){return t})}function c(t){return E[t]||E._default}function s(t,n){return t&&e(i(w)).after(t),e(i(w)+" .input .cursor").css("textDecoration",""),e(i(w)).removeAttr("id"),e(i(x)).append(D.templates.input_cmd({id:w})),g?g(function(t){return D.setPrompt(t),n()}):n()}function l(){y.log("activating shell"),h||(h=e(i(x))),d||(d=e(i(_))),0==e(i(w)).length&&h.append(D.templates.input_cmd({id:w})),D.refresh(),j=!0,u(),g&&g(function(t){D.setPrompt(t)}),f&&f()}r=r||{};var f,p,h,d,g,v,m,y=r.console||(Josh.Debug&&t.console?t.console:{log:function(){}}),b=r.prompt||"jsh$",x=r.shell_view_id||"shell-view",_=r.shell_panel_id||"shell-panel",w=r.input_id||"shell-cli",C=r.blinktime||500,k=r.history||new Josh.History,T=r.readline||new Josh.ReadLine({history:k,console:y}),j=!1,A=!1,E={clear:{exec:function(t,n,r){e(i(w)).parent().empty(),r()}},help:{exec:function(t,e,n){n(D.templates.help({commands:o()}))}},history:{exec:function(t,e,n){return"-c"==e[0]?(k.clear(),void n()):void n(D.templates.history({items:k.items()}))}},_default:{exec:function(t,e,n){n(D.templates.bad_command({cmd:t}))},completion:function(t,e,n,r){return e||(e=t),r(D.bestMatch(e,D.commands()))}}},S={text:"",cursor:0},N="",D={commands:o,templates:{history:n.template("<div><% _.each(items, function(cmd, i) { %><div><%- i %>&nbsp;<%- cmd %></div><% }); %></div>"),help:n.template("<div><div><strong>Commands:</strong></div><% _.each(commands, function(cmd) { %><div>&nbsp;<%- cmd %></div><% }); %></div>"),bad_command:n.template("<div><strong>Unrecognized command:&nbsp;</strong><%=cmd%></div>"),input_cmd:n.template('<div id="<%- id %>"><span class="prompt"></span>&nbsp;<span class="input"><span class="left"/><span class="cursor"/><span class="right"/></span></div>'),input_search:n.template('<div id="<%- id %>">(reverse-i-search)`<span class="searchterm"></span>\':&nbsp;<span class="input"><span class="left"/><span class="cursor"/><span class="right"/></span></div>'),suggest:n.template("<div><% _.each(suggestions, function(suggestion) { %><div><%- suggestion %></div><% }); %></div>")},isActive:function(){return T.isActive()},activate:function(){return 0==e(i(x)).length?void(j=!1):void T.activate()},deactivate:function(){y.log("deactivating"),j=!1,T.deactivate()},setCommandHandler:function(t,e){E[t]=e},getCommandHandler:function(t){return E[t]},setPrompt:function(t){b=t,j&&D.refresh()},onEOT:function(t){T.onEOT(t)},onCancel:function(t){T.onCancel(t)},onInitialize:function(t){v=t},onActivate:function(t){f=t},onDeactivate:function(t){p=t},onNewPrompt:function(t){g=t},render:function(){var t=S.text||"",r=S.cursor||0;N&&(r=N.cursoridx||0,t=N.text||"",e(i(w)+" .searchterm").text(N.term));var o=n.escape(t.substr(0,r)).replace(/ /g,"&nbsp;"),u=t.substr(r,1),a=n.escape(t.substr(r+1)).replace(/ /g,"&nbsp;");e(i(w)+" .prompt").html(b),e(i(w)+" .input .left").html(o),u?e(i(w)+" .input .cursor").text(u).css("textDecoration","underline"):e(i(w)+" .input .cursor").html("&nbsp;").css("textDecoration","underline"),e(i(w)+" .input .right").html(a),A=!0,D.scrollToBottom(),y.log('rendered "'+t+'" w/ cursor at '+r)},refresh:function(){e(i(w)).replaceWith(D.templates.input_cmd({id:w})),D.render(),y.log("refreshed "+w)},scrollToBottom:function(){d.animate({scrollTop:h.height()},0)},bestMatch:function(t,e){y.log("bestMatch on partial '"+t+"'");var r={completion:null,suggestions:[]};if(!e||0==e.length)return r;var i="";if(!t){if(1==e.length)return r.completion=e[0],r.suggestions=e,r;if(!n.every(e,function(t){return e[0][0]==t[0]}))return r.suggestions=e,r}for(var o=0;o<e.length;o++){var u=e[o];if(u.slice(0,t.length)==t)if(r.suggestions.push(u),i){if(u.slice(0,i.length)!=i){y.log("find common stem for '"+i+"' and '"+u+"'");for(var a=t.length;a<i.length&&a<u.length;){if(i[a]!=u[a]){i=i.substr(0,a);break}a++}}}else i=u,y.log("initial common:"+i)}return r.completion=i.substr(t.length),r}};return T.onActivate(function(){return!m&&(m=!0,v)?v(l):l()}),T.onDeactivate(function(){p&&p()}),T.onChange(function(t){S=t,D.render()}),T.onClear(function(){E.clear.exec(null,null,function(){s(null,function(){})})}),T.onSearchStart(function(){e(i(w)).replaceWith(D.templates.input_search({id:w})),y.log("started search")}),T.onSearchEnd(function(){e(i(w)).replaceWith(D.templates.input_cmd({id:w})),N=null,D.render(),y.log("ended search")}),T.onSearchChange(function(t){N=t,D.render()}),T.onEnter(function(t,e){y.log("got command: "+t);var n=a(t),r=n[0],i=n.slice(1),o=c(r);return o.exec(r,i,function(t,n){s(t,function(){e(n)})})}),T.onCompletion(function(t,e){if(!t)return e();var n=t.text.substr(0,t.cursor),r=a(n),i=r.shift()||"",o=r.pop()||"";y.log("getting completion handler for "+i);var u=c(i);return u!=E._default&&i&&i==n?(y.log("valid cmd, no args: append space"),e(" ")):u.completion?(y.log("calling completion handler for "+i),u.completion(i,o,t,function(t){return y.log("completion: "+JSON.stringify(t)),t?t.suggestions&&t.suggestions.length>1?s(D.templates.suggest({suggestions:t.suggestions}),function(){e(t.completion)}):e(t.completion):e()})):e()}),D}}(this,$,_);
\ No newline at end of file
diff --git a/xos/core/xoslib/xos_dump.sql b/xos/core/xoslib/xos_dump.sql
deleted file mode 100644
index 402afb1..0000000
--- a/xos/core/xoslib/xos_dump.sql
+++ /dev/null
@@ -1,7728 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
---
--- PostgreSQL database dump
---
-
-SET statement_timeout = 0;
-SET lock_timeout = 0;
-SET client_encoding = 'SQL_ASCII';
-SET standard_conforming_strings = on;
-SET check_function_bodies = false;
-SET client_min_messages = warning;
-
---
--- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: 
---
-
-CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
-
-
---
--- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: 
---
-
-COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
-
-
-SET search_path = public, pg_catalog;
-
-SET default_tablespace = '';
-
-SET default_with_oids = false;
-
---
--- Name: auth_group; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE auth_group (
-    id integer NOT NULL,
-    name character varying(80) NOT NULL
-);
-
-
-ALTER TABLE public.auth_group OWNER TO postgres;
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE auth_group_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.auth_group_id_seq OWNER TO postgres;
-
---
--- Name: auth_group_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE auth_group_id_seq OWNED BY auth_group.id;
-
-
---
--- Name: auth_group_permissions; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE auth_group_permissions (
-    id integer NOT NULL,
-    group_id integer NOT NULL,
-    permission_id integer NOT NULL
-);
-
-
-ALTER TABLE public.auth_group_permissions OWNER TO postgres;
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE auth_group_permissions_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.auth_group_permissions_id_seq OWNER TO postgres;
-
---
--- Name: auth_group_permissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE auth_group_permissions_id_seq OWNED BY auth_group_permissions.id;
-
-
---
--- Name: auth_permission; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE auth_permission (
-    id integer NOT NULL,
-    name character varying(50) NOT NULL,
-    content_type_id integer NOT NULL,
-    codename character varying(100) NOT NULL
-);
-
-
-ALTER TABLE public.auth_permission OWNER TO postgres;
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE auth_permission_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.auth_permission_id_seq OWNER TO postgres;
-
---
--- Name: auth_permission_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE auth_permission_id_seq OWNED BY auth_permission.id;
-
-
---
--- Name: core_account; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_account (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    site_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_account OWNER TO postgres;
-
---
--- Name: core_account_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_account_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_account_id_seq OWNER TO postgres;
-
---
--- Name: core_account_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_account_id_seq OWNED BY core_account.id;
-
-
---
--- Name: core_charge; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_charge (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    kind character varying(30) NOT NULL,
-    state character varying(30) NOT NULL,
-    date timestamp with time zone NOT NULL,
-    amount double precision NOT NULL,
-    "coreHours" double precision NOT NULL,
-    account_id integer NOT NULL,
-    invoice_id integer,
-    object_id integer NOT NULL,
-    slice_id integer
-);
-
-
-ALTER TABLE public.core_charge OWNER TO postgres;
-
---
--- Name: core_charge_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_charge_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_charge_id_seq OWNER TO postgres;
-
---
--- Name: core_charge_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_charge_id_seq OWNED BY core_charge.id;
-
-
---
--- Name: core_controller; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_controller (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(200) NOT NULL,
-    backend_type character varying(200) NOT NULL,
-    version character varying(200) NOT NULL,
-    auth_url character varying(200),
-    admin_user character varying(200),
-    admin_password character varying(200),
-    admin_tenant character varying(200),
-    domain character varying(200),
-    deployment_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_controller OWNER TO postgres;
-
---
--- Name: core_controller_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_controller_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_controller_id_seq OWNER TO postgres;
-
---
--- Name: core_controller_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_controller_id_seq OWNED BY core_controller.id;
-
-
---
--- Name: core_controllercredential; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_controllercredential (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(128) NOT NULL,
-    key_id character varying(1024) NOT NULL,
-    enc_value text NOT NULL,
-    controller_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_controllercredential OWNER TO postgres;
-
---
--- Name: core_controllercredential_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_controllercredential_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_controllercredential_id_seq OWNER TO postgres;
-
---
--- Name: core_controllercredential_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_controllercredential_id_seq OWNED BY core_controllercredential.id;
-
-
---
--- Name: core_controllerdashboardview; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_controllerdashboardview (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    enabled boolean NOT NULL,
-    url character varying(1024) NOT NULL,
-    controller_id integer NOT NULL,
-    "dashboardView_id" integer NOT NULL
-);
-
-
-ALTER TABLE public.core_controllerdashboardview OWNER TO postgres;
-
---
--- Name: core_controllerdashboardview_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_controllerdashboardview_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_controllerdashboardview_id_seq OWNER TO postgres;
-
---
--- Name: core_controllerdashboardview_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_controllerdashboardview_id_seq OWNED BY core_controllerdashboardview.id;
-
-
---
--- Name: core_controllerimages; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_controllerimages (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    glance_image_id character varying(200),
-    controller_id integer NOT NULL,
-    image_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_controllerimages OWNER TO postgres;
-
---
--- Name: core_controllerimages_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_controllerimages_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_controllerimages_id_seq OWNER TO postgres;
-
---
--- Name: core_controllerimages_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_controllerimages_id_seq OWNED BY core_controllerimages.id;
-
-
---
--- Name: core_controllernetwork; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_controllernetwork (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    net_id character varying(256),
-    router_id character varying(256),
-    subnet_id character varying(256),
-    subnet character varying(32) NOT NULL,
-    controller_id integer NOT NULL,
-    network_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_controllernetwork OWNER TO postgres;
-
---
--- Name: core_controllernetwork_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_controllernetwork_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_controllernetwork_id_seq OWNER TO postgres;
-
---
--- Name: core_controllernetwork_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_controllernetwork_id_seq OWNED BY core_controllernetwork.id;
-
-
---
--- Name: core_controllerrole; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_controllerrole (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role character varying(30) NOT NULL
-);
-
-
-ALTER TABLE public.core_controllerrole OWNER TO postgres;
-
---
--- Name: core_controllerrole_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_controllerrole_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_controllerrole_id_seq OWNER TO postgres;
-
---
--- Name: core_controllerrole_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_controllerrole_id_seq OWNED BY core_controllerrole.id;
-
-
---
--- Name: core_controllersite; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_controllersite (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    tenant_id character varying(200),
-    controller_id integer,
-    site_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_controllersite OWNER TO postgres;
-
---
--- Name: core_controllersite_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_controllersite_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_controllersite_id_seq OWNER TO postgres;
-
---
--- Name: core_controllersite_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_controllersite_id_seq OWNED BY core_controllersite.id;
-
-
---
--- Name: core_controllersiteprivilege; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_controllersiteprivilege (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role_id character varying(200),
-    controller_id integer NOT NULL,
-    site_privilege_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_controllersiteprivilege OWNER TO postgres;
-
---
--- Name: core_controllersiteprivilege_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_controllersiteprivilege_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_controllersiteprivilege_id_seq OWNER TO postgres;
-
---
--- Name: core_controllersiteprivilege_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_controllersiteprivilege_id_seq OWNED BY core_controllersiteprivilege.id;
-
-
---
--- Name: core_controllerslice; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_controllerslice (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    tenant_id character varying(200),
-    controller_id integer NOT NULL,
-    slice_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_controllerslice OWNER TO postgres;
-
---
--- Name: core_controllerslice_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_controllerslice_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_controllerslice_id_seq OWNER TO postgres;
-
---
--- Name: core_controllerslice_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_controllerslice_id_seq OWNED BY core_controllerslice.id;
-
-
---
--- Name: core_controllersliceprivilege; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_controllersliceprivilege (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role_id character varying(200),
-    controller_id integer NOT NULL,
-    slice_privilege_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_controllersliceprivilege OWNER TO postgres;
-
---
--- Name: core_controllersliceprivilege_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_controllersliceprivilege_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_controllersliceprivilege_id_seq OWNER TO postgres;
-
---
--- Name: core_controllersliceprivilege_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_controllersliceprivilege_id_seq OWNED BY core_controllersliceprivilege.id;
-
-
---
--- Name: core_controlleruser; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_controlleruser (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    kuser_id character varying(200),
-    controller_id integer NOT NULL,
-    user_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_controlleruser OWNER TO postgres;
-
---
--- Name: core_controlleruser_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_controlleruser_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_controlleruser_id_seq OWNER TO postgres;
-
---
--- Name: core_controlleruser_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_controlleruser_id_seq OWNED BY core_controlleruser.id;
-
-
---
--- Name: core_dashboardview; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_dashboardview (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(200) NOT NULL,
-    url character varying(1024) NOT NULL,
-    enabled boolean NOT NULL
-);
-
-
-ALTER TABLE public.core_dashboardview OWNER TO postgres;
-
---
--- Name: core_dashboardview_deployments; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_dashboardview_deployments (
-    id integer NOT NULL,
-    dashboardview_id integer NOT NULL,
-    deployment_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_dashboardview_deployments OWNER TO postgres;
-
---
--- Name: core_dashboardview_deployments_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_dashboardview_deployments_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_dashboardview_deployments_id_seq OWNER TO postgres;
-
---
--- Name: core_dashboardview_deployments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_dashboardview_deployments_id_seq OWNED BY core_dashboardview_deployments.id;
-
-
---
--- Name: core_dashboardview_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_dashboardview_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_dashboardview_id_seq OWNER TO postgres;
-
---
--- Name: core_dashboardview_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_dashboardview_id_seq OWNED BY core_dashboardview.id;
-
-
---
--- Name: core_deployment; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_deployment (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(200) NOT NULL,
-    "accessControl" text NOT NULL
-);
-
-
-ALTER TABLE public.core_deployment OWNER TO postgres;
-
---
--- Name: core_deployment_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_deployment_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_deployment_id_seq OWNER TO postgres;
-
---
--- Name: core_deployment_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_deployment_id_seq OWNED BY core_deployment.id;
-
-
---
--- Name: core_deploymentprivilege; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_deploymentprivilege (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    deployment_id integer NOT NULL,
-    role_id integer NOT NULL,
-    user_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_deploymentprivilege OWNER TO postgres;
-
---
--- Name: core_deploymentprivilege_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_deploymentprivilege_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_deploymentprivilege_id_seq OWNER TO postgres;
-
---
--- Name: core_deploymentprivilege_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_deploymentprivilege_id_seq OWNED BY core_deploymentprivilege.id;
-
-
---
--- Name: core_deploymentrole; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_deploymentrole (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role character varying(30) NOT NULL
-);
-
-
-ALTER TABLE public.core_deploymentrole OWNER TO postgres;
-
---
--- Name: core_deploymentrole_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_deploymentrole_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_deploymentrole_id_seq OWNER TO postgres;
-
---
--- Name: core_deploymentrole_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_deploymentrole_id_seq OWNED BY core_deploymentrole.id;
-
-
---
--- Name: core_flavor; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_flavor (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(32) NOT NULL,
-    description character varying(1024),
-    flavor character varying(32) NOT NULL,
-    "order" integer NOT NULL,
-    "default" boolean NOT NULL
-);
-
-
-ALTER TABLE public.core_flavor OWNER TO postgres;
-
---
--- Name: core_flavor_deployments; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_flavor_deployments (
-    id integer NOT NULL,
-    flavor_id integer NOT NULL,
-    deployment_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_flavor_deployments OWNER TO postgres;
-
---
--- Name: core_flavor_deployments_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_flavor_deployments_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_flavor_deployments_id_seq OWNER TO postgres;
-
---
--- Name: core_flavor_deployments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_flavor_deployments_id_seq OWNED BY core_flavor_deployments.id;
-
-
---
--- Name: core_flavor_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_flavor_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_flavor_id_seq OWNER TO postgres;
-
---
--- Name: core_flavor_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_flavor_id_seq OWNED BY core_flavor.id;
-
-
---
--- Name: core_image; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_image (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(256) NOT NULL,
-    disk_format character varying(256) NOT NULL,
-    container_format character varying(256) NOT NULL,
-    path character varying(256)
-);
-
-
-ALTER TABLE public.core_image OWNER TO postgres;
-
---
--- Name: core_image_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_image_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_image_id_seq OWNER TO postgres;
-
---
--- Name: core_image_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_image_id_seq OWNED BY core_image.id;
-
-
---
--- Name: core_imagedeployments; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_imagedeployments (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    deployment_id integer NOT NULL,
-    image_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_imagedeployments OWNER TO postgres;
-
---
--- Name: core_imagedeployments_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_imagedeployments_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_imagedeployments_id_seq OWNER TO postgres;
-
---
--- Name: core_imagedeployments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_imagedeployments_id_seq OWNED BY core_imagedeployments.id;
-
-
---
--- Name: core_instance; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_instance (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    instance_id character varying(200),
-    instance_uuid character varying(200),
-    name character varying(200) NOT NULL,
-    instance_name character varying(200),
-    ip inet,
-    "numberCores" integer NOT NULL,
-    "userData" text,
-    creator_id integer,
-    deployment_id integer NOT NULL,
-    flavor_id integer NOT NULL,
-    image_id integer NOT NULL,
-    node_id integer NOT NULL,
-    slice_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_instance OWNER TO postgres;
-
---
--- Name: core_instance_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_instance_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_instance_id_seq OWNER TO postgres;
-
---
--- Name: core_instance_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_instance_id_seq OWNED BY core_instance.id;
-
-
---
--- Name: core_invoice; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_invoice (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    date timestamp with time zone NOT NULL,
-    account_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_invoice OWNER TO postgres;
-
---
--- Name: core_invoice_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_invoice_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_invoice_id_seq OWNER TO postgres;
-
---
--- Name: core_invoice_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_invoice_id_seq OWNED BY core_invoice.id;
-
-
---
--- Name: core_network; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_network (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(32) NOT NULL,
-    subnet character varying(32) NOT NULL,
-    ports character varying(1024),
-    labels character varying(1024),
-    guaranteed_bandwidth integer NOT NULL,
-    permit_all_slices boolean NOT NULL,
-    topology_parameters text,
-    controller_url character varying(1024),
-    controller_parameters text,
-    network_id character varying(256),
-    router_id character varying(256),
-    subnet_id character varying(256),
-    autoconnect boolean NOT NULL,
-    owner_id integer NOT NULL,
-    template_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_network OWNER TO postgres;
-
---
--- Name: core_network_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_network_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_network_id_seq OWNER TO postgres;
-
---
--- Name: core_network_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_network_id_seq OWNED BY core_network.id;
-
-
---
--- Name: core_network_permitted_slices; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_network_permitted_slices (
-    id integer NOT NULL,
-    network_id integer NOT NULL,
-    slice_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_network_permitted_slices OWNER TO postgres;
-
---
--- Name: core_network_permitted_slices_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_network_permitted_slices_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_network_permitted_slices_id_seq OWNER TO postgres;
-
---
--- Name: core_network_permitted_slices_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_network_permitted_slices_id_seq OWNED BY core_network_permitted_slices.id;
-
-
---
--- Name: core_networkparameter; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_networkparameter (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    value character varying(1024) NOT NULL,
-    object_id integer NOT NULL,
-    content_type_id integer NOT NULL,
-    parameter_id integer NOT NULL,
-    CONSTRAINT core_networkparameter_object_id_check CHECK ((object_id >= 0))
-);
-
-
-ALTER TABLE public.core_networkparameter OWNER TO postgres;
-
---
--- Name: core_networkparameter_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_networkparameter_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_networkparameter_id_seq OWNER TO postgres;
-
---
--- Name: core_networkparameter_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_networkparameter_id_seq OWNED BY core_networkparameter.id;
-
-
---
--- Name: core_networkparametertype; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_networkparametertype (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(128) NOT NULL,
-    description character varying(1024) NOT NULL
-);
-
-
-ALTER TABLE public.core_networkparametertype OWNER TO postgres;
-
---
--- Name: core_networkparametertype_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_networkparametertype_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_networkparametertype_id_seq OWNER TO postgres;
-
---
--- Name: core_networkparametertype_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_networkparametertype_id_seq OWNED BY core_networkparametertype.id;
-
-
---
--- Name: core_networkslice; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_networkslice (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    network_id integer NOT NULL,
-    slice_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_networkslice OWNER TO postgres;
-
---
--- Name: core_networkslice_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_networkslice_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_networkslice_id_seq OWNER TO postgres;
-
---
--- Name: core_networkslice_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_networkslice_id_seq OWNED BY core_networkslice.id;
-
-
---
--- Name: core_networktemplate; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_networktemplate (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(32) NOT NULL,
-    description character varying(1024),
-    guaranteed_bandwidth integer NOT NULL,
-    visibility character varying(30) NOT NULL,
-    translation character varying(30) NOT NULL,
-    shared_network_name character varying(30),
-    shared_network_id character varying(256),
-    topology_kind character varying(30) NOT NULL,
-    controller_kind character varying(30)
-);
-
-
-ALTER TABLE public.core_networktemplate OWNER TO postgres;
-
---
--- Name: core_networktemplate_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_networktemplate_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_networktemplate_id_seq OWNER TO postgres;
-
---
--- Name: core_networktemplate_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_networktemplate_id_seq OWNED BY core_networktemplate.id;
-
-
---
--- Name: core_node; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_node (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(200) NOT NULL,
-    site_id integer,
-    site_deployment_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_node OWNER TO postgres;
-
---
--- Name: core_node_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_node_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_node_id_seq OWNER TO postgres;
-
---
--- Name: core_node_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_node_id_seq OWNED BY core_node.id;
-
-
---
--- Name: core_payment; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_payment (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    amount double precision NOT NULL,
-    date timestamp with time zone NOT NULL,
-    account_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_payment OWNER TO postgres;
-
---
--- Name: core_payment_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_payment_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_payment_id_seq OWNER TO postgres;
-
---
--- Name: core_payment_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_payment_id_seq OWNED BY core_payment.id;
-
-
---
--- Name: core_port; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_port (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    ip inet,
-    port_id character varying(256),
-    mac character varying(256),
-    instance_id integer,
-    network_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_port OWNER TO postgres;
-
---
--- Name: core_port_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_port_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_port_id_seq OWNER TO postgres;
-
---
--- Name: core_port_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_port_id_seq OWNED BY core_port.id;
-
-
---
--- Name: core_program; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_program (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(30) NOT NULL,
-    description text,
-    kind character varying(30) NOT NULL,
-    command character varying(30),
-    contents text,
-    output text,
-    messages text,
-    status text,
-    owner_id integer
-);
-
-
-ALTER TABLE public.core_program OWNER TO postgres;
-
---
--- Name: core_program_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_program_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_program_id_seq OWNER TO postgres;
-
---
--- Name: core_program_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_program_id_seq OWNED BY core_program.id;
-
-
---
--- Name: core_project; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_project (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(200) NOT NULL
-);
-
-
-ALTER TABLE public.core_project OWNER TO postgres;
-
---
--- Name: core_project_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_project_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_project_id_seq OWNER TO postgres;
-
---
--- Name: core_project_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_project_id_seq OWNED BY core_project.id;
-
-
---
--- Name: core_reservation; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_reservation (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    "startTime" timestamp with time zone NOT NULL,
-    duration integer NOT NULL,
-    slice_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_reservation OWNER TO postgres;
-
---
--- Name: core_reservation_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_reservation_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_reservation_id_seq OWNER TO postgres;
-
---
--- Name: core_reservation_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_reservation_id_seq OWNED BY core_reservation.id;
-
-
---
--- Name: core_reservedresource; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_reservedresource (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    quantity integer NOT NULL,
-    instance_id integer NOT NULL,
-    "reservationSet_id" integer NOT NULL,
-    resource_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_reservedresource OWNER TO postgres;
-
---
--- Name: core_reservedresource_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_reservedresource_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_reservedresource_id_seq OWNER TO postgres;
-
---
--- Name: core_reservedresource_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_reservedresource_id_seq OWNED BY core_reservedresource.id;
-
-
---
--- Name: core_role; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_role (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role_type character varying(80) NOT NULL,
-    role character varying(80),
-    description character varying(120) NOT NULL,
-    content_type_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_role OWNER TO postgres;
-
---
--- Name: core_role_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_role_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_role_id_seq OWNER TO postgres;
-
---
--- Name: core_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_role_id_seq OWNED BY core_role.id;
-
-
---
--- Name: core_router; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_router (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(32) NOT NULL,
-    owner_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_router OWNER TO postgres;
-
---
--- Name: core_router_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_router_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_router_id_seq OWNER TO postgres;
-
---
--- Name: core_router_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_router_id_seq OWNED BY core_router.id;
-
-
---
--- Name: core_router_networks; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_router_networks (
-    id integer NOT NULL,
-    router_id integer NOT NULL,
-    network_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_router_networks OWNER TO postgres;
-
---
--- Name: core_router_networks_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_router_networks_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_router_networks_id_seq OWNER TO postgres;
-
---
--- Name: core_router_networks_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_router_networks_id_seq OWNED BY core_router_networks.id;
-
-
---
--- Name: core_router_permittedNetworks; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE "core_router_permittedNetworks" (
-    id integer NOT NULL,
-    router_id integer NOT NULL,
-    network_id integer NOT NULL
-);
-
-
-ALTER TABLE public."core_router_permittedNetworks" OWNER TO postgres;
-
---
--- Name: core_router_permittedNetworks_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE "core_router_permittedNetworks_id_seq"
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public."core_router_permittedNetworks_id_seq" OWNER TO postgres;
-
---
--- Name: core_router_permittedNetworks_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE "core_router_permittedNetworks_id_seq" OWNED BY "core_router_permittedNetworks".id;
-
-
---
--- Name: core_service; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_service (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    description text,
-    enabled boolean NOT NULL,
-    kind character varying(30) NOT NULL,
-    name character varying(30) NOT NULL,
-    "versionNumber" character varying(30) NOT NULL,
-    published boolean NOT NULL,
-    view_url character varying(1024),
-    icon_url character varying(1024),
-    public_key text,
-    service_specific_id character varying(30),
-    service_specific_attribute text
-);
-
-
-ALTER TABLE public.core_service OWNER TO postgres;
-
---
--- Name: core_service_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_service_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_service_id_seq OWNER TO postgres;
-
---
--- Name: core_service_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_service_id_seq OWNED BY core_service.id;
-
-
---
--- Name: core_serviceattribute; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_serviceattribute (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(128) NOT NULL,
-    value character varying(1024) NOT NULL,
-    service_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_serviceattribute OWNER TO postgres;
-
---
--- Name: core_serviceattribute_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_serviceattribute_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_serviceattribute_id_seq OWNER TO postgres;
-
---
--- Name: core_serviceattribute_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_serviceattribute_id_seq OWNED BY core_serviceattribute.id;
-
-
---
--- Name: core_serviceclass; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_serviceclass (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(32) NOT NULL,
-    description character varying(255) NOT NULL,
-    commitment integer NOT NULL,
-    "membershipFee" integer NOT NULL,
-    "membershipFeeMonths" integer NOT NULL,
-    "upgradeRequiresApproval" boolean NOT NULL
-);
-
-
-ALTER TABLE public.core_serviceclass OWNER TO postgres;
-
---
--- Name: core_serviceclass_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_serviceclass_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_serviceclass_id_seq OWNER TO postgres;
-
---
--- Name: core_serviceclass_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_serviceclass_id_seq OWNED BY core_serviceclass.id;
-
-
---
--- Name: core_serviceclass_upgradeFrom; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE "core_serviceclass_upgradeFrom" (
-    id integer NOT NULL,
-    from_serviceclass_id integer NOT NULL,
-    to_serviceclass_id integer NOT NULL
-);
-
-
-ALTER TABLE public."core_serviceclass_upgradeFrom" OWNER TO postgres;
-
---
--- Name: core_serviceclass_upgradeFrom_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE "core_serviceclass_upgradeFrom_id_seq"
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public."core_serviceclass_upgradeFrom_id_seq" OWNER TO postgres;
-
---
--- Name: core_serviceclass_upgradeFrom_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE "core_serviceclass_upgradeFrom_id_seq" OWNED BY "core_serviceclass_upgradeFrom".id;
-
-
---
--- Name: core_serviceprivilege; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_serviceprivilege (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role_id integer NOT NULL,
-    service_id integer NOT NULL,
-    user_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_serviceprivilege OWNER TO postgres;
-
---
--- Name: core_serviceprivilege_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_serviceprivilege_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_serviceprivilege_id_seq OWNER TO postgres;
-
---
--- Name: core_serviceprivilege_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_serviceprivilege_id_seq OWNED BY core_serviceprivilege.id;
-
-
---
--- Name: core_serviceresource; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_serviceresource (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(32) NOT NULL,
-    "maxUnitsDeployment" integer NOT NULL,
-    "maxUnitsNode" integer NOT NULL,
-    "maxDuration" integer NOT NULL,
-    "bucketInRate" integer NOT NULL,
-    "bucketMaxSize" integer NOT NULL,
-    cost integer NOT NULL,
-    "calendarReservable" boolean NOT NULL,
-    "serviceClass_id" integer NOT NULL
-);
-
-
-ALTER TABLE public.core_serviceresource OWNER TO postgres;
-
---
--- Name: core_serviceresource_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_serviceresource_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_serviceresource_id_seq OWNER TO postgres;
-
---
--- Name: core_serviceresource_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_serviceresource_id_seq OWNED BY core_serviceresource.id;
-
-
---
--- Name: core_servicerole; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_servicerole (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role character varying(30) NOT NULL
-);
-
-
-ALTER TABLE public.core_servicerole OWNER TO postgres;
-
---
--- Name: core_servicerole_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_servicerole_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_servicerole_id_seq OWNER TO postgres;
-
---
--- Name: core_servicerole_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_servicerole_id_seq OWNED BY core_servicerole.id;
-
-
---
--- Name: core_site; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_site (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(200) NOT NULL,
-    site_url character varying(512),
-    enabled boolean NOT NULL,
-    hosts_nodes boolean NOT NULL,
-    hosts_users boolean NOT NULL,
-    location character varying(42) NOT NULL,
-    longitude double precision,
-    latitude double precision,
-    login_base character varying(50) NOT NULL,
-    is_public boolean NOT NULL,
-    abbreviated_name character varying(80) NOT NULL
-);
-
-
-ALTER TABLE public.core_site OWNER TO postgres;
-
---
--- Name: core_site_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_site_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_site_id_seq OWNER TO postgres;
-
---
--- Name: core_site_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_site_id_seq OWNED BY core_site.id;
-
-
---
--- Name: core_sitecredential; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_sitecredential (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(128) NOT NULL,
-    key_id character varying(1024) NOT NULL,
-    enc_value text NOT NULL,
-    site_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_sitecredential OWNER TO postgres;
-
---
--- Name: core_sitecredential_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_sitecredential_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_sitecredential_id_seq OWNER TO postgres;
-
---
--- Name: core_sitecredential_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_sitecredential_id_seq OWNED BY core_sitecredential.id;
-
-
---
--- Name: core_sitedeployment; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_sitedeployment (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    availability_zone character varying(200),
-    controller_id integer,
-    deployment_id integer NOT NULL,
-    site_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_sitedeployment OWNER TO postgres;
-
---
--- Name: core_sitedeployment_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_sitedeployment_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_sitedeployment_id_seq OWNER TO postgres;
-
---
--- Name: core_sitedeployment_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_sitedeployment_id_seq OWNED BY core_sitedeployment.id;
-
-
---
--- Name: core_siteprivilege; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_siteprivilege (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role_id integer NOT NULL,
-    site_id integer NOT NULL,
-    user_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_siteprivilege OWNER TO postgres;
-
---
--- Name: core_siteprivilege_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_siteprivilege_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_siteprivilege_id_seq OWNER TO postgres;
-
---
--- Name: core_siteprivilege_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_siteprivilege_id_seq OWNED BY core_siteprivilege.id;
-
-
---
--- Name: core_siterole; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_siterole (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role character varying(30) NOT NULL
-);
-
-
-ALTER TABLE public.core_siterole OWNER TO postgres;
-
---
--- Name: core_siterole_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_siterole_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_siterole_id_seq OWNER TO postgres;
-
---
--- Name: core_siterole_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_siterole_id_seq OWNED BY core_siterole.id;
-
-
---
--- Name: core_slice; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_slice (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(80) NOT NULL,
-    enabled boolean NOT NULL,
-    omf_friendly boolean NOT NULL,
-    description text NOT NULL,
-    slice_url character varying(512) NOT NULL,
-    max_instances integer NOT NULL,
-    network character varying(256),
-    mount_data_sets character varying(256),
-    creator_id integer,
-    default_flavor_id integer,
-    default_image_id integer,
-    service_id integer,
-    "serviceClass_id" integer,
-    site_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_slice OWNER TO postgres;
-
---
--- Name: core_slice_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_slice_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_slice_id_seq OWNER TO postgres;
-
---
--- Name: core_slice_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_slice_id_seq OWNED BY core_slice.id;
-
-
---
--- Name: core_slicecredential; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_slicecredential (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(128) NOT NULL,
-    key_id character varying(1024) NOT NULL,
-    enc_value text NOT NULL,
-    slice_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_slicecredential OWNER TO postgres;
-
---
--- Name: core_slicecredential_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_slicecredential_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_slicecredential_id_seq OWNER TO postgres;
-
---
--- Name: core_slicecredential_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_slicecredential_id_seq OWNED BY core_slicecredential.id;
-
-
---
--- Name: core_sliceprivilege; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_sliceprivilege (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role_id integer NOT NULL,
-    slice_id integer NOT NULL,
-    user_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_sliceprivilege OWNER TO postgres;
-
---
--- Name: core_sliceprivilege_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_sliceprivilege_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_sliceprivilege_id_seq OWNER TO postgres;
-
---
--- Name: core_sliceprivilege_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_sliceprivilege_id_seq OWNED BY core_sliceprivilege.id;
-
-
---
--- Name: core_slicerole; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_slicerole (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role character varying(30) NOT NULL
-);
-
-
-ALTER TABLE public.core_slicerole OWNER TO postgres;
-
---
--- Name: core_slicerole_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_slicerole_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_slicerole_id_seq OWNER TO postgres;
-
---
--- Name: core_slicerole_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_slicerole_id_seq OWNED BY core_slicerole.id;
-
-
---
--- Name: core_slicetag; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_slicetag (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(30) NOT NULL,
-    value character varying(1024) NOT NULL,
-    slice_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_slicetag OWNER TO postgres;
-
---
--- Name: core_slicetag_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_slicetag_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_slicetag_id_seq OWNER TO postgres;
-
---
--- Name: core_slicetag_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_slicetag_id_seq OWNED BY core_slicetag.id;
-
-
---
--- Name: core_tag; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_tag (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(128) NOT NULL,
-    value character varying(1024) NOT NULL,
-    object_id integer NOT NULL,
-    content_type_id integer NOT NULL,
-    service_id integer NOT NULL,
-    CONSTRAINT core_tag_object_id_check CHECK ((object_id >= 0))
-);
-
-
-ALTER TABLE public.core_tag OWNER TO postgres;
-
---
--- Name: core_tag_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_tag_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_tag_id_seq OWNER TO postgres;
-
---
--- Name: core_tag_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_tag_id_seq OWNED BY core_tag.id;
-
-
---
--- Name: core_tenant; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_tenant (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    kind character varying(30) NOT NULL,
-    service_specific_id character varying(30),
-    service_specific_attribute text,
-    connect_method character varying(30) NOT NULL,
-    provider_service_id integer NOT NULL,
-    subscriber_root_id integer,
-    subscriber_service_id integer,
-    subscriber_tenant_id integer,
-    subscriber_user_id integer
-);
-
-
-ALTER TABLE public.core_tenant OWNER TO postgres;
-
---
--- Name: core_tenant_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_tenant_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_tenant_id_seq OWNER TO postgres;
-
---
--- Name: core_tenant_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_tenant_id_seq OWNED BY core_tenant.id;
-
-
---
--- Name: core_tenantroot; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_tenantroot (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    kind character varying(30) NOT NULL,
-    name character varying(255),
-    service_specific_attribute text,
-    service_specific_id character varying(30)
-);
-
-
-ALTER TABLE public.core_tenantroot OWNER TO postgres;
-
---
--- Name: core_tenantroot_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_tenantroot_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_tenantroot_id_seq OWNER TO postgres;
-
---
--- Name: core_tenantroot_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_tenantroot_id_seq OWNED BY core_tenantroot.id;
-
-
---
--- Name: core_tenantrootprivilege; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_tenantrootprivilege (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role_id integer NOT NULL,
-    tenant_root_id integer NOT NULL,
-    user_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_tenantrootprivilege OWNER TO postgres;
-
---
--- Name: core_tenantrootprivilege_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_tenantrootprivilege_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_tenantrootprivilege_id_seq OWNER TO postgres;
-
---
--- Name: core_tenantrootprivilege_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_tenantrootprivilege_id_seq OWNED BY core_tenantrootprivilege.id;
-
-
---
--- Name: core_tenantrootrole; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_tenantrootrole (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    role character varying(30) NOT NULL
-);
-
-
-ALTER TABLE public.core_tenantrootrole OWNER TO postgres;
-
---
--- Name: core_tenantrootrole_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_tenantrootrole_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_tenantrootrole_id_seq OWNER TO postgres;
-
---
--- Name: core_tenantrootrole_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_tenantrootrole_id_seq OWNED BY core_tenantrootrole.id;
-
-
---
--- Name: core_usableobject; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_usableobject (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(1024) NOT NULL
-);
-
-
-ALTER TABLE public.core_usableobject OWNER TO postgres;
-
---
--- Name: core_usableobject_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_usableobject_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_usableobject_id_seq OWNER TO postgres;
-
---
--- Name: core_usableobject_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_usableobject_id_seq OWNED BY core_usableobject.id;
-
-
---
--- Name: core_user; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_user (
-    id integer NOT NULL,
-    password character varying(128) NOT NULL,
-    last_login timestamp with time zone NOT NULL,
-    email character varying(255) NOT NULL,
-    username character varying(255) NOT NULL,
-    firstname character varying(200) NOT NULL,
-    lastname character varying(200) NOT NULL,
-    phone character varying(100),
-    user_url character varying(200),
-    public_key text,
-    is_active boolean NOT NULL,
-    is_admin boolean NOT NULL,
-    is_staff boolean NOT NULL,
-    is_readonly boolean NOT NULL,
-    is_registering boolean NOT NULL,
-    is_appuser boolean NOT NULL,
-    login_page character varying(200),
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    timezone character varying(100) NOT NULL,
-    site_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_user OWNER TO postgres;
-
---
--- Name: core_user_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_user_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_user_id_seq OWNER TO postgres;
-
---
--- Name: core_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_user_id_seq OWNED BY core_user.id;
-
-
---
--- Name: core_usercredential; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_usercredential (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(128) NOT NULL,
-    key_id character varying(1024) NOT NULL,
-    enc_value text NOT NULL,
-    user_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_usercredential OWNER TO postgres;
-
---
--- Name: core_usercredential_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_usercredential_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_usercredential_id_seq OWNER TO postgres;
-
---
--- Name: core_usercredential_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_usercredential_id_seq OWNED BY core_usercredential.id;
-
-
---
--- Name: core_userdashboardview; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE core_userdashboardview (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    "order" integer NOT NULL,
-    "dashboardView_id" integer NOT NULL,
-    user_id integer NOT NULL
-);
-
-
-ALTER TABLE public.core_userdashboardview OWNER TO postgres;
-
---
--- Name: core_userdashboardview_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE core_userdashboardview_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.core_userdashboardview_id_seq OWNER TO postgres;
-
---
--- Name: core_userdashboardview_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE core_userdashboardview_id_seq OWNED BY core_userdashboardview.id;
-
-
---
--- Name: django_admin_log; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE django_admin_log (
-    id integer NOT NULL,
-    action_time timestamp with time zone NOT NULL,
-    object_id text,
-    object_repr character varying(200) NOT NULL,
-    action_flag smallint NOT NULL,
-    change_message text NOT NULL,
-    content_type_id integer,
-    user_id integer NOT NULL,
-    CONSTRAINT django_admin_log_action_flag_check CHECK ((action_flag >= 0))
-);
-
-
-ALTER TABLE public.django_admin_log OWNER TO postgres;
-
---
--- Name: django_admin_log_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE django_admin_log_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.django_admin_log_id_seq OWNER TO postgres;
-
---
--- Name: django_admin_log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE django_admin_log_id_seq OWNED BY django_admin_log.id;
-
-
---
--- Name: django_content_type; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE django_content_type (
-    id integer NOT NULL,
-    name character varying(100) NOT NULL,
-    app_label character varying(100) NOT NULL,
-    model character varying(100) NOT NULL
-);
-
-
-ALTER TABLE public.django_content_type OWNER TO postgres;
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE django_content_type_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.django_content_type_id_seq OWNER TO postgres;
-
---
--- Name: django_content_type_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE django_content_type_id_seq OWNED BY django_content_type.id;
-
-
---
--- Name: django_migrations; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE django_migrations (
-    id integer NOT NULL,
-    app character varying(255) NOT NULL,
-    name character varying(255) NOT NULL,
-    applied timestamp with time zone NOT NULL
-);
-
-
-ALTER TABLE public.django_migrations OWNER TO postgres;
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE django_migrations_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.django_migrations_id_seq OWNER TO postgres;
-
---
--- Name: django_migrations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE django_migrations_id_seq OWNED BY django_migrations.id;
-
-
---
--- Name: django_session; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE django_session (
-    session_key character varying(40) NOT NULL,
-    session_data text NOT NULL,
-    expire_date timestamp with time zone NOT NULL
-);
-
-
-ALTER TABLE public.django_session OWNER TO postgres;
-
---
--- Name: hpc_accessmap; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE hpc_accessmap (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(64) NOT NULL,
-    description text,
-    map character varying(100) NOT NULL,
-    "contentProvider_id" integer NOT NULL
-);
-
-
-ALTER TABLE public.hpc_accessmap OWNER TO postgres;
-
---
--- Name: hpc_accessmap_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE hpc_accessmap_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.hpc_accessmap_id_seq OWNER TO postgres;
-
---
--- Name: hpc_accessmap_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE hpc_accessmap_id_seq OWNED BY hpc_accessmap.id;
-
-
---
--- Name: hpc_cdnprefix; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE hpc_cdnprefix (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    cdn_prefix_id integer,
-    prefix character varying(200) NOT NULL,
-    description text,
-    enabled boolean NOT NULL,
-    "contentProvider_id" integer NOT NULL,
-    "defaultOriginServer_id" integer
-);
-
-
-ALTER TABLE public.hpc_cdnprefix OWNER TO postgres;
-
---
--- Name: hpc_cdnprefix_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE hpc_cdnprefix_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.hpc_cdnprefix_id_seq OWNER TO postgres;
-
---
--- Name: hpc_cdnprefix_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE hpc_cdnprefix_id_seq OWNED BY hpc_cdnprefix.id;
-
-
---
--- Name: hpc_contentprovider; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE hpc_contentprovider (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    content_provider_id integer,
-    name character varying(254) NOT NULL,
-    enabled boolean NOT NULL,
-    description text,
-    "serviceProvider_id" integer NOT NULL
-);
-
-
-ALTER TABLE public.hpc_contentprovider OWNER TO postgres;
-
---
--- Name: hpc_contentprovider_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE hpc_contentprovider_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.hpc_contentprovider_id_seq OWNER TO postgres;
-
---
--- Name: hpc_contentprovider_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE hpc_contentprovider_id_seq OWNED BY hpc_contentprovider.id;
-
-
---
--- Name: hpc_contentprovider_users; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE hpc_contentprovider_users (
-    id integer NOT NULL,
-    contentprovider_id integer NOT NULL,
-    user_id integer NOT NULL
-);
-
-
-ALTER TABLE public.hpc_contentprovider_users OWNER TO postgres;
-
---
--- Name: hpc_contentprovider_users_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE hpc_contentprovider_users_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.hpc_contentprovider_users_id_seq OWNER TO postgres;
-
---
--- Name: hpc_contentprovider_users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE hpc_contentprovider_users_id_seq OWNED BY hpc_contentprovider_users.id;
-
-
---
--- Name: hpc_hpchealthcheck; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE hpc_hpchealthcheck (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    kind character varying(30) NOT NULL,
-    resource_name character varying(1024) NOT NULL,
-    result_contains character varying(1024),
-    result_min_size integer,
-    result_max_size integer,
-    "hpcService_id" integer
-);
-
-
-ALTER TABLE public.hpc_hpchealthcheck OWNER TO postgres;
-
---
--- Name: hpc_hpchealthcheck_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE hpc_hpchealthcheck_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.hpc_hpchealthcheck_id_seq OWNER TO postgres;
-
---
--- Name: hpc_hpchealthcheck_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE hpc_hpchealthcheck_id_seq OWNED BY hpc_hpchealthcheck.id;
-
-
---
--- Name: hpc_hpcservice; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE hpc_hpcservice (
-    service_ptr_id integer NOT NULL,
-    cmi_hostname character varying(254),
-    hpc_port80 boolean NOT NULL,
-    watcher_hpc_network character varying(254),
-    watcher_dnsdemux_network character varying(254),
-    watcher_dnsredir_network character varying(254)
-);
-
-
-ALTER TABLE public.hpc_hpcservice OWNER TO postgres;
-
---
--- Name: hpc_originserver; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE hpc_originserver (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    origin_server_id integer,
-    url character varying(1024) NOT NULL,
-    authenticated boolean NOT NULL,
-    enabled boolean NOT NULL,
-    protocol character varying(12) NOT NULL,
-    redirects boolean NOT NULL,
-    description text,
-    "contentProvider_id" integer NOT NULL
-);
-
-
-ALTER TABLE public.hpc_originserver OWNER TO postgres;
-
---
--- Name: hpc_originserver_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE hpc_originserver_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.hpc_originserver_id_seq OWNER TO postgres;
-
---
--- Name: hpc_originserver_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE hpc_originserver_id_seq OWNED BY hpc_originserver.id;
-
-
---
--- Name: hpc_serviceprovider; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE hpc_serviceprovider (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    service_provider_id integer,
-    name character varying(254) NOT NULL,
-    description text,
-    enabled boolean NOT NULL,
-    "hpcService_id" integer NOT NULL
-);
-
-
-ALTER TABLE public.hpc_serviceprovider OWNER TO postgres;
-
---
--- Name: hpc_serviceprovider_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE hpc_serviceprovider_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.hpc_serviceprovider_id_seq OWNER TO postgres;
-
---
--- Name: hpc_serviceprovider_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE hpc_serviceprovider_id_seq OWNED BY hpc_serviceprovider.id;
-
-
---
--- Name: hpc_sitemap; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE hpc_sitemap (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(64) NOT NULL,
-    description text,
-    map character varying(100) NOT NULL,
-    map_id integer,
-    "cdnPrefix_id" integer,
-    "contentProvider_id" integer,
-    "hpcService_id" integer,
-    "serviceProvider_id" integer
-);
-
-
-ALTER TABLE public.hpc_sitemap OWNER TO postgres;
-
---
--- Name: hpc_sitemap_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE hpc_sitemap_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.hpc_sitemap_id_seq OWNER TO postgres;
-
---
--- Name: hpc_sitemap_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE hpc_sitemap_id_seq OWNED BY hpc_sitemap.id;
-
-
---
--- Name: requestrouter_requestrouterservice; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE requestrouter_requestrouterservice (
-    service_ptr_id integer NOT NULL,
-    "behindNat" boolean NOT NULL,
-    "defaultTTL" integer NOT NULL,
-    "defaultAction" character varying(30) NOT NULL,
-    "lastResortAction" character varying(30) NOT NULL,
-    "maxAnswers" integer NOT NULL,
-    CONSTRAINT "requestrouter_requestrouterservice_defaultTTL_check" CHECK (("defaultTTL" >= 0)),
-    CONSTRAINT "requestrouter_requestrouterservice_maxAnswers_check" CHECK (("maxAnswers" >= 0))
-);
-
-
-ALTER TABLE public.requestrouter_requestrouterservice OWNER TO postgres;
-
---
--- Name: requestrouter_servicemap; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE requestrouter_servicemap (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(50) NOT NULL,
-    prefix character varying(256) NOT NULL,
-    "siteMap" character varying(100) NOT NULL,
-    "accessMap" character varying(100) NOT NULL,
-    owner_id integer NOT NULL,
-    slice_id integer NOT NULL
-);
-
-
-ALTER TABLE public.requestrouter_servicemap OWNER TO postgres;
-
---
--- Name: requestrouter_servicemap_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE requestrouter_servicemap_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.requestrouter_servicemap_id_seq OWNER TO postgres;
-
---
--- Name: requestrouter_servicemap_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE requestrouter_servicemap_id_seq OWNED BY requestrouter_servicemap.id;
-
-
---
--- Name: syndicate_storage_slicesecret; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE syndicate_storage_slicesecret (
-    id integer NOT NULL,
-    secret text NOT NULL,
-    slice_id_id integer NOT NULL
-);
-
-
-ALTER TABLE public.syndicate_storage_slicesecret OWNER TO postgres;
-
---
--- Name: syndicate_storage_slicesecret_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE syndicate_storage_slicesecret_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.syndicate_storage_slicesecret_id_seq OWNER TO postgres;
-
---
--- Name: syndicate_storage_slicesecret_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE syndicate_storage_slicesecret_id_seq OWNED BY syndicate_storage_slicesecret.id;
-
-
---
--- Name: syndicate_storage_syndicateprincipal; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE syndicate_storage_syndicateprincipal (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    principal_id text NOT NULL,
-    public_key_pem text NOT NULL,
-    sealed_private_key text NOT NULL
-);
-
-
-ALTER TABLE public.syndicate_storage_syndicateprincipal OWNER TO postgres;
-
---
--- Name: syndicate_storage_syndicateprincipal_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE syndicate_storage_syndicateprincipal_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.syndicate_storage_syndicateprincipal_id_seq OWNER TO postgres;
-
---
--- Name: syndicate_storage_syndicateprincipal_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE syndicate_storage_syndicateprincipal_id_seq OWNED BY syndicate_storage_syndicateprincipal.id;
-
-
---
--- Name: syndicate_storage_syndicateservice; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE syndicate_storage_syndicateservice (
-    service_ptr_id integer NOT NULL
-);
-
-
-ALTER TABLE public.syndicate_storage_syndicateservice OWNER TO postgres;
-
---
--- Name: syndicate_storage_volume; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE syndicate_storage_volume (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    name character varying(64) NOT NULL,
-    description text,
-    blocksize integer NOT NULL,
-    private boolean NOT NULL,
-    archive boolean NOT NULL,
-    cap_read_data boolean NOT NULL,
-    cap_write_data boolean NOT NULL,
-    cap_host_data boolean NOT NULL,
-    owner_id_id integer NOT NULL,
-    CONSTRAINT syndicate_storage_volume_blocksize_check CHECK ((blocksize >= 0))
-);
-
-
-ALTER TABLE public.syndicate_storage_volume OWNER TO postgres;
-
---
--- Name: syndicate_storage_volume_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE syndicate_storage_volume_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.syndicate_storage_volume_id_seq OWNER TO postgres;
-
---
--- Name: syndicate_storage_volume_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE syndicate_storage_volume_id_seq OWNED BY syndicate_storage_volume.id;
-
-
---
--- Name: syndicate_storage_volumeaccessright; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE syndicate_storage_volumeaccessright (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    cap_read_data boolean NOT NULL,
-    cap_write_data boolean NOT NULL,
-    cap_host_data boolean NOT NULL,
-    owner_id_id integer NOT NULL,
-    volume_id integer NOT NULL
-);
-
-
-ALTER TABLE public.syndicate_storage_volumeaccessright OWNER TO postgres;
-
---
--- Name: syndicate_storage_volumeaccessright_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE syndicate_storage_volumeaccessright_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.syndicate_storage_volumeaccessright_id_seq OWNER TO postgres;
-
---
--- Name: syndicate_storage_volumeaccessright_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE syndicate_storage_volumeaccessright_id_seq OWNED BY syndicate_storage_volumeaccessright.id;
-
-
---
--- Name: syndicate_storage_volumeslice; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE TABLE syndicate_storage_volumeslice (
-    id integer NOT NULL,
-    created timestamp with time zone NOT NULL,
-    updated timestamp with time zone NOT NULL,
-    enacted timestamp with time zone,
-    policed timestamp with time zone,
-    backend_register character varying(140),
-    backend_status character varying(1024) NOT NULL,
-    deleted boolean NOT NULL,
-    write_protect boolean NOT NULL,
-    lazy_blocked boolean NOT NULL,
-    no_sync boolean NOT NULL,
-    cap_read_data boolean NOT NULL,
-    cap_write_data boolean NOT NULL,
-    cap_host_data boolean NOT NULL,
-    "UG_portnum" integer NOT NULL,
-    "RG_portnum" integer NOT NULL,
-    credentials_blob text,
-    slice_id_id integer NOT NULL,
-    volume_id_id integer NOT NULL,
-    CONSTRAINT "syndicate_storage_volumeslice_RG_portnum_check" CHECK (("RG_portnum" >= 0)),
-    CONSTRAINT "syndicate_storage_volumeslice_UG_portnum_check" CHECK (("UG_portnum" >= 0))
-);
-
-
-ALTER TABLE public.syndicate_storage_volumeslice OWNER TO postgres;
-
---
--- Name: syndicate_storage_volumeslice_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
---
-
-CREATE SEQUENCE syndicate_storage_volumeslice_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-
-ALTER TABLE public.syndicate_storage_volumeslice_id_seq OWNER TO postgres;
-
---
--- Name: syndicate_storage_volumeslice_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
---
-
-ALTER SEQUENCE syndicate_storage_volumeslice_id_seq OWNED BY syndicate_storage_volumeslice.id;
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY auth_group ALTER COLUMN id SET DEFAULT nextval('auth_group_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY auth_group_permissions ALTER COLUMN id SET DEFAULT nextval('auth_group_permissions_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY auth_permission ALTER COLUMN id SET DEFAULT nextval('auth_permission_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_account ALTER COLUMN id SET DEFAULT nextval('core_account_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_charge ALTER COLUMN id SET DEFAULT nextval('core_charge_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controller ALTER COLUMN id SET DEFAULT nextval('core_controller_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllercredential ALTER COLUMN id SET DEFAULT nextval('core_controllercredential_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllerdashboardview ALTER COLUMN id SET DEFAULT nextval('core_controllerdashboardview_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllerimages ALTER COLUMN id SET DEFAULT nextval('core_controllerimages_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllernetwork ALTER COLUMN id SET DEFAULT nextval('core_controllernetwork_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllerrole ALTER COLUMN id SET DEFAULT nextval('core_controllerrole_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllersite ALTER COLUMN id SET DEFAULT nextval('core_controllersite_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllersiteprivilege ALTER COLUMN id SET DEFAULT nextval('core_controllersiteprivilege_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllerslice ALTER COLUMN id SET DEFAULT nextval('core_controllerslice_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllersliceprivilege ALTER COLUMN id SET DEFAULT nextval('core_controllersliceprivilege_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controlleruser ALTER COLUMN id SET DEFAULT nextval('core_controlleruser_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_dashboardview ALTER COLUMN id SET DEFAULT nextval('core_dashboardview_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_dashboardview_deployments ALTER COLUMN id SET DEFAULT nextval('core_dashboardview_deployments_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_deployment ALTER COLUMN id SET DEFAULT nextval('core_deployment_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_deploymentprivilege ALTER COLUMN id SET DEFAULT nextval('core_deploymentprivilege_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_deploymentrole ALTER COLUMN id SET DEFAULT nextval('core_deploymentrole_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_flavor ALTER COLUMN id SET DEFAULT nextval('core_flavor_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_flavor_deployments ALTER COLUMN id SET DEFAULT nextval('core_flavor_deployments_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_image ALTER COLUMN id SET DEFAULT nextval('core_image_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_imagedeployments ALTER COLUMN id SET DEFAULT nextval('core_imagedeployments_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_instance ALTER COLUMN id SET DEFAULT nextval('core_instance_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_invoice ALTER COLUMN id SET DEFAULT nextval('core_invoice_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_network ALTER COLUMN id SET DEFAULT nextval('core_network_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_network_permitted_slices ALTER COLUMN id SET DEFAULT nextval('core_network_permitted_slices_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_networkparameter ALTER COLUMN id SET DEFAULT nextval('core_networkparameter_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_networkparametertype ALTER COLUMN id SET DEFAULT nextval('core_networkparametertype_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_networkslice ALTER COLUMN id SET DEFAULT nextval('core_networkslice_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_networktemplate ALTER COLUMN id SET DEFAULT nextval('core_networktemplate_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_node ALTER COLUMN id SET DEFAULT nextval('core_node_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_payment ALTER COLUMN id SET DEFAULT nextval('core_payment_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_port ALTER COLUMN id SET DEFAULT nextval('core_port_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_program ALTER COLUMN id SET DEFAULT nextval('core_program_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_project ALTER COLUMN id SET DEFAULT nextval('core_project_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_reservation ALTER COLUMN id SET DEFAULT nextval('core_reservation_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_reservedresource ALTER COLUMN id SET DEFAULT nextval('core_reservedresource_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_role ALTER COLUMN id SET DEFAULT nextval('core_role_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_router ALTER COLUMN id SET DEFAULT nextval('core_router_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_router_networks ALTER COLUMN id SET DEFAULT nextval('core_router_networks_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY "core_router_permittedNetworks" ALTER COLUMN id SET DEFAULT nextval('"core_router_permittedNetworks_id_seq"'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_service ALTER COLUMN id SET DEFAULT nextval('core_service_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_serviceattribute ALTER COLUMN id SET DEFAULT nextval('core_serviceattribute_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_serviceclass ALTER COLUMN id SET DEFAULT nextval('core_serviceclass_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY "core_serviceclass_upgradeFrom" ALTER COLUMN id SET DEFAULT nextval('"core_serviceclass_upgradeFrom_id_seq"'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_serviceprivilege ALTER COLUMN id SET DEFAULT nextval('core_serviceprivilege_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_serviceresource ALTER COLUMN id SET DEFAULT nextval('core_serviceresource_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_servicerole ALTER COLUMN id SET DEFAULT nextval('core_servicerole_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_site ALTER COLUMN id SET DEFAULT nextval('core_site_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_sitecredential ALTER COLUMN id SET DEFAULT nextval('core_sitecredential_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_sitedeployment ALTER COLUMN id SET DEFAULT nextval('core_sitedeployment_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_siteprivilege ALTER COLUMN id SET DEFAULT nextval('core_siteprivilege_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_siterole ALTER COLUMN id SET DEFAULT nextval('core_siterole_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slice ALTER COLUMN id SET DEFAULT nextval('core_slice_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slicecredential ALTER COLUMN id SET DEFAULT nextval('core_slicecredential_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_sliceprivilege ALTER COLUMN id SET DEFAULT nextval('core_sliceprivilege_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slicerole ALTER COLUMN id SET DEFAULT nextval('core_slicerole_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slicetag ALTER COLUMN id SET DEFAULT nextval('core_slicetag_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tag ALTER COLUMN id SET DEFAULT nextval('core_tag_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenant ALTER COLUMN id SET DEFAULT nextval('core_tenant_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenantroot ALTER COLUMN id SET DEFAULT nextval('core_tenantroot_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenantrootprivilege ALTER COLUMN id SET DEFAULT nextval('core_tenantrootprivilege_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenantrootrole ALTER COLUMN id SET DEFAULT nextval('core_tenantrootrole_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_usableobject ALTER COLUMN id SET DEFAULT nextval('core_usableobject_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_user ALTER COLUMN id SET DEFAULT nextval('core_user_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_usercredential ALTER COLUMN id SET DEFAULT nextval('core_usercredential_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_userdashboardview ALTER COLUMN id SET DEFAULT nextval('core_userdashboardview_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY django_admin_log ALTER COLUMN id SET DEFAULT nextval('django_admin_log_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY django_content_type ALTER COLUMN id SET DEFAULT nextval('django_content_type_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY django_migrations ALTER COLUMN id SET DEFAULT nextval('django_migrations_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_accessmap ALTER COLUMN id SET DEFAULT nextval('hpc_accessmap_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_cdnprefix ALTER COLUMN id SET DEFAULT nextval('hpc_cdnprefix_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_contentprovider ALTER COLUMN id SET DEFAULT nextval('hpc_contentprovider_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_contentprovider_users ALTER COLUMN id SET DEFAULT nextval('hpc_contentprovider_users_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_hpchealthcheck ALTER COLUMN id SET DEFAULT nextval('hpc_hpchealthcheck_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_originserver ALTER COLUMN id SET DEFAULT nextval('hpc_originserver_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_serviceprovider ALTER COLUMN id SET DEFAULT nextval('hpc_serviceprovider_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_sitemap ALTER COLUMN id SET DEFAULT nextval('hpc_sitemap_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY requestrouter_servicemap ALTER COLUMN id SET DEFAULT nextval('requestrouter_servicemap_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_slicesecret ALTER COLUMN id SET DEFAULT nextval('syndicate_storage_slicesecret_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_syndicateprincipal ALTER COLUMN id SET DEFAULT nextval('syndicate_storage_syndicateprincipal_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_volume ALTER COLUMN id SET DEFAULT nextval('syndicate_storage_volume_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_volumeaccessright ALTER COLUMN id SET DEFAULT nextval('syndicate_storage_volumeaccessright_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_volumeslice ALTER COLUMN id SET DEFAULT nextval('syndicate_storage_volumeslice_id_seq'::regclass);
-
-
---
--- Name: auth_group_name_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY auth_group
-    ADD CONSTRAINT auth_group_name_key UNIQUE (name);
-
-
---
--- Name: auth_group_permissions_group_id_permission_id_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY auth_group_permissions
-    ADD CONSTRAINT auth_group_permissions_group_id_permission_id_key UNIQUE (group_id, permission_id);
-
-
---
--- Name: auth_group_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY auth_group_permissions
-    ADD CONSTRAINT auth_group_permissions_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_group_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY auth_group
-    ADD CONSTRAINT auth_group_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_permission_content_type_id_codename_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY auth_permission
-    ADD CONSTRAINT auth_permission_content_type_id_codename_key UNIQUE (content_type_id, codename);
-
-
---
--- Name: auth_permission_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY auth_permission
-    ADD CONSTRAINT auth_permission_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_account_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_account
-    ADD CONSTRAINT core_account_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_charge_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_charge
-    ADD CONSTRAINT core_charge_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controller_name_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controller
-    ADD CONSTRAINT core_controller_name_key UNIQUE (name);
-
-
---
--- Name: core_controller_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controller
-    ADD CONSTRAINT core_controller_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controllercredential_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllercredential
-    ADD CONSTRAINT core_controllercredential_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controllerdashboardview_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllerdashboardview
-    ADD CONSTRAINT core_controllerdashboardview_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controllerimages_image_id_77d3516dbca0a5d3_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllerimages
-    ADD CONSTRAINT core_controllerimages_image_id_77d3516dbca0a5d3_uniq UNIQUE (image_id, controller_id);
-
-
---
--- Name: core_controllerimages_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllerimages
-    ADD CONSTRAINT core_controllerimages_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controllernetwork_network_id_30ce4dc681f2844f_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllernetwork
-    ADD CONSTRAINT core_controllernetwork_network_id_30ce4dc681f2844f_uniq UNIQUE (network_id, controller_id);
-
-
---
--- Name: core_controllernetwork_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllernetwork
-    ADD CONSTRAINT core_controllernetwork_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controllerrole_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllerrole
-    ADD CONSTRAINT core_controllerrole_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controllerrole_role_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllerrole
-    ADD CONSTRAINT core_controllerrole_role_key UNIQUE (role);
-
-
---
--- Name: core_controllersite_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllersite
-    ADD CONSTRAINT core_controllersite_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controllersite_site_id_22f56d79564bc81b_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllersite
-    ADD CONSTRAINT core_controllersite_site_id_22f56d79564bc81b_uniq UNIQUE (site_id, controller_id);
-
-
---
--- Name: core_controllersiteprivileg_controller_id_5d0f19c7a7ceb9e5_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllersiteprivilege
-    ADD CONSTRAINT core_controllersiteprivileg_controller_id_5d0f19c7a7ceb9e5_uniq UNIQUE (controller_id, site_privilege_id, role_id);
-
-
---
--- Name: core_controllersiteprivilege_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllersiteprivilege
-    ADD CONSTRAINT core_controllersiteprivilege_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controllerslice_controller_id_427703e66574ab83_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllerslice
-    ADD CONSTRAINT core_controllerslice_controller_id_427703e66574ab83_uniq UNIQUE (controller_id, slice_id);
-
-
---
--- Name: core_controllerslice_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllerslice
-    ADD CONSTRAINT core_controllerslice_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controllersliceprivile_controller_id_4e8a6f6f999d67c3_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllersliceprivilege
-    ADD CONSTRAINT core_controllersliceprivile_controller_id_4e8a6f6f999d67c3_uniq UNIQUE (controller_id, slice_privilege_id);
-
-
---
--- Name: core_controllersliceprivilege_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controllersliceprivilege
-    ADD CONSTRAINT core_controllersliceprivilege_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controlleruser_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controlleruser
-    ADD CONSTRAINT core_controlleruser_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_controlleruser_user_id_3beb039133bd099b_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_controlleruser
-    ADD CONSTRAINT core_controlleruser_user_id_3beb039133bd099b_uniq UNIQUE (user_id, controller_id);
-
-
---
--- Name: core_dashboardview_deployment_dashboardview_id_deployment_i_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_dashboardview_deployments
-    ADD CONSTRAINT core_dashboardview_deployment_dashboardview_id_deployment_i_key UNIQUE (dashboardview_id, deployment_id);
-
-
---
--- Name: core_dashboardview_deployments_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_dashboardview_deployments
-    ADD CONSTRAINT core_dashboardview_deployments_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_dashboardview_name_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_dashboardview
-    ADD CONSTRAINT core_dashboardview_name_key UNIQUE (name);
-
-
---
--- Name: core_dashboardview_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_dashboardview
-    ADD CONSTRAINT core_dashboardview_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_deployment_name_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_deployment
-    ADD CONSTRAINT core_deployment_name_key UNIQUE (name);
-
-
---
--- Name: core_deployment_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_deployment
-    ADD CONSTRAINT core_deployment_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_deploymentprivilege_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_deploymentprivilege
-    ADD CONSTRAINT core_deploymentprivilege_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_deploymentprivilege_user_id_8f49da97c7cff06_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_deploymentprivilege
-    ADD CONSTRAINT core_deploymentprivilege_user_id_8f49da97c7cff06_uniq UNIQUE (user_id, deployment_id, role_id);
-
-
---
--- Name: core_deploymentrole_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_deploymentrole
-    ADD CONSTRAINT core_deploymentrole_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_deploymentrole_role_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_deploymentrole
-    ADD CONSTRAINT core_deploymentrole_role_key UNIQUE (role);
-
-
---
--- Name: core_flavor_deployments_flavor_id_deployment_id_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_flavor_deployments
-    ADD CONSTRAINT core_flavor_deployments_flavor_id_deployment_id_key UNIQUE (flavor_id, deployment_id);
-
-
---
--- Name: core_flavor_deployments_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_flavor_deployments
-    ADD CONSTRAINT core_flavor_deployments_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_flavor_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_flavor
-    ADD CONSTRAINT core_flavor_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_image_name_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_image
-    ADD CONSTRAINT core_image_name_key UNIQUE (name);
-
-
---
--- Name: core_image_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_image
-    ADD CONSTRAINT core_image_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_imagedeployments_image_id_3bc8a23925d399ff_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_imagedeployments
-    ADD CONSTRAINT core_imagedeployments_image_id_3bc8a23925d399ff_uniq UNIQUE (image_id, deployment_id);
-
-
---
--- Name: core_imagedeployments_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_imagedeployments
-    ADD CONSTRAINT core_imagedeployments_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_instance_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_instance
-    ADD CONSTRAINT core_instance_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_invoice_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_invoice
-    ADD CONSTRAINT core_invoice_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_network_permitted_slices_network_id_slice_id_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_network_permitted_slices
-    ADD CONSTRAINT core_network_permitted_slices_network_id_slice_id_key UNIQUE (network_id, slice_id);
-
-
---
--- Name: core_network_permitted_slices_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_network_permitted_slices
-    ADD CONSTRAINT core_network_permitted_slices_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_network_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_network
-    ADD CONSTRAINT core_network_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_networkparameter_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_networkparameter
-    ADD CONSTRAINT core_networkparameter_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_networkparametertype_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_networkparametertype
-    ADD CONSTRAINT core_networkparametertype_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_networkslice_network_id_78984d02ac7c1fb3_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_networkslice
-    ADD CONSTRAINT core_networkslice_network_id_78984d02ac7c1fb3_uniq UNIQUE (network_id, slice_id);
-
-
---
--- Name: core_networkslice_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_networkslice
-    ADD CONSTRAINT core_networkslice_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_networktemplate_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_networktemplate
-    ADD CONSTRAINT core_networktemplate_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_node_name_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_node
-    ADD CONSTRAINT core_node_name_key UNIQUE (name);
-
-
---
--- Name: core_node_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_node
-    ADD CONSTRAINT core_node_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_payment_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_payment
-    ADD CONSTRAINT core_payment_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_port_network_id_693ab091ccd5a89a_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_port
-    ADD CONSTRAINT core_port_network_id_693ab091ccd5a89a_uniq UNIQUE (network_id, instance_id);
-
-
---
--- Name: core_port_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_port
-    ADD CONSTRAINT core_port_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_program_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_program
-    ADD CONSTRAINT core_program_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_project_name_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_project
-    ADD CONSTRAINT core_project_name_key UNIQUE (name);
-
-
---
--- Name: core_project_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_project
-    ADD CONSTRAINT core_project_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_reservation_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_reservation
-    ADD CONSTRAINT core_reservation_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_reservedresource_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_reservedresource
-    ADD CONSTRAINT core_reservedresource_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_role_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_role
-    ADD CONSTRAINT core_role_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_router_networks_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_router_networks
-    ADD CONSTRAINT core_router_networks_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_router_networks_router_id_network_id_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_router_networks
-    ADD CONSTRAINT core_router_networks_router_id_network_id_key UNIQUE (router_id, network_id);
-
-
---
--- Name: core_router_permittedNetworks_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY "core_router_permittedNetworks"
-    ADD CONSTRAINT "core_router_permittedNetworks_pkey" PRIMARY KEY (id);
-
-
---
--- Name: core_router_permittedNetworks_router_id_network_id_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY "core_router_permittedNetworks"
-    ADD CONSTRAINT "core_router_permittedNetworks_router_id_network_id_key" UNIQUE (router_id, network_id);
-
-
---
--- Name: core_router_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_router
-    ADD CONSTRAINT core_router_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_service_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_service
-    ADD CONSTRAINT core_service_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_serviceattribute_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_serviceattribute
-    ADD CONSTRAINT core_serviceattribute_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_serviceclass_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_serviceclass
-    ADD CONSTRAINT core_serviceclass_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_serviceclass_upgradeFrom_from_serviceclass_id_to_servi_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY "core_serviceclass_upgradeFrom"
-    ADD CONSTRAINT "core_serviceclass_upgradeFrom_from_serviceclass_id_to_servi_key" UNIQUE (from_serviceclass_id, to_serviceclass_id);
-
-
---
--- Name: core_serviceclass_upgradeFrom_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY "core_serviceclass_upgradeFrom"
-    ADD CONSTRAINT "core_serviceclass_upgradeFrom_pkey" PRIMARY KEY (id);
-
-
---
--- Name: core_serviceprivilege_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_serviceprivilege
-    ADD CONSTRAINT core_serviceprivilege_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_serviceprivilege_user_id_3e7ef04b1340e86c_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_serviceprivilege
-    ADD CONSTRAINT core_serviceprivilege_user_id_3e7ef04b1340e86c_uniq UNIQUE (user_id, service_id, role_id);
-
-
---
--- Name: core_serviceresource_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_serviceresource
-    ADD CONSTRAINT core_serviceresource_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_servicerole_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_servicerole
-    ADD CONSTRAINT core_servicerole_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_servicerole_role_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_servicerole
-    ADD CONSTRAINT core_servicerole_role_key UNIQUE (role);
-
-
---
--- Name: core_site_login_base_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_site
-    ADD CONSTRAINT core_site_login_base_key UNIQUE (login_base);
-
-
---
--- Name: core_site_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_site
-    ADD CONSTRAINT core_site_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_sitecredential_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_sitecredential
-    ADD CONSTRAINT core_sitecredential_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_sitedeployment_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_sitedeployment
-    ADD CONSTRAINT core_sitedeployment_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_sitedeployment_site_id_ed533b8a1954fbb_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_sitedeployment
-    ADD CONSTRAINT core_sitedeployment_site_id_ed533b8a1954fbb_uniq UNIQUE (site_id, deployment_id, controller_id);
-
-
---
--- Name: core_siteprivilege_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_siteprivilege
-    ADD CONSTRAINT core_siteprivilege_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_siterole_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_siterole
-    ADD CONSTRAINT core_siterole_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_siterole_role_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_siterole
-    ADD CONSTRAINT core_siterole_role_key UNIQUE (role);
-
-
---
--- Name: core_slice_name_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_slice
-    ADD CONSTRAINT core_slice_name_key UNIQUE (name);
-
-
---
--- Name: core_slice_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_slice
-    ADD CONSTRAINT core_slice_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_slicecredential_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_slicecredential
-    ADD CONSTRAINT core_slicecredential_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_sliceprivilege_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_sliceprivilege
-    ADD CONSTRAINT core_sliceprivilege_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_sliceprivilege_user_id_6bed734e37df8596_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_sliceprivilege
-    ADD CONSTRAINT core_sliceprivilege_user_id_6bed734e37df8596_uniq UNIQUE (user_id, slice_id, role_id);
-
-
---
--- Name: core_slicerole_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_slicerole
-    ADD CONSTRAINT core_slicerole_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_slicerole_role_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_slicerole
-    ADD CONSTRAINT core_slicerole_role_key UNIQUE (role);
-
-
---
--- Name: core_slicetag_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_slicetag
-    ADD CONSTRAINT core_slicetag_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_tag_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_tag
-    ADD CONSTRAINT core_tag_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_tenant_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_tenant
-    ADD CONSTRAINT core_tenant_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_tenantroot_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_tenantroot
-    ADD CONSTRAINT core_tenantroot_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_tenantrootprivilege_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_tenantrootprivilege
-    ADD CONSTRAINT core_tenantrootprivilege_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_tenantrootprivilege_user_id_2bfebdce70c89f50_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_tenantrootprivilege
-    ADD CONSTRAINT core_tenantrootprivilege_user_id_2bfebdce70c89f50_uniq UNIQUE (user_id, tenant_root_id, role_id);
-
-
---
--- Name: core_tenantrootrole_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_tenantrootrole
-    ADD CONSTRAINT core_tenantrootrole_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_tenantrootrole_role_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_tenantrootrole
-    ADD CONSTRAINT core_tenantrootrole_role_key UNIQUE (role);
-
-
---
--- Name: core_usableobject_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_usableobject
-    ADD CONSTRAINT core_usableobject_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_user_email_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_user
-    ADD CONSTRAINT core_user_email_key UNIQUE (email);
-
-
---
--- Name: core_user_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_user
-    ADD CONSTRAINT core_user_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_usercredential_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_usercredential
-    ADD CONSTRAINT core_usercredential_pkey PRIMARY KEY (id);
-
-
---
--- Name: core_userdashboardview_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY core_userdashboardview
-    ADD CONSTRAINT core_userdashboardview_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_admin_log_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY django_admin_log
-    ADD CONSTRAINT django_admin_log_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_content_type_app_label_45f3b1d93ec8c61c_uniq; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY django_content_type
-    ADD CONSTRAINT django_content_type_app_label_45f3b1d93ec8c61c_uniq UNIQUE (app_label, model);
-
-
---
--- Name: django_content_type_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY django_content_type
-    ADD CONSTRAINT django_content_type_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY django_migrations
-    ADD CONSTRAINT django_migrations_pkey PRIMARY KEY (id);
-
-
---
--- Name: django_session_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY django_session
-    ADD CONSTRAINT django_session_pkey PRIMARY KEY (session_key);
-
-
---
--- Name: hpc_accessmap_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY hpc_accessmap
-    ADD CONSTRAINT hpc_accessmap_pkey PRIMARY KEY (id);
-
-
---
--- Name: hpc_cdnprefix_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY hpc_cdnprefix
-    ADD CONSTRAINT hpc_cdnprefix_pkey PRIMARY KEY (id);
-
-
---
--- Name: hpc_contentprovider_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY hpc_contentprovider
-    ADD CONSTRAINT hpc_contentprovider_pkey PRIMARY KEY (id);
-
-
---
--- Name: hpc_contentprovider_users_contentprovider_id_user_id_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY hpc_contentprovider_users
-    ADD CONSTRAINT hpc_contentprovider_users_contentprovider_id_user_id_key UNIQUE (contentprovider_id, user_id);
-
-
---
--- Name: hpc_contentprovider_users_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY hpc_contentprovider_users
-    ADD CONSTRAINT hpc_contentprovider_users_pkey PRIMARY KEY (id);
-
-
---
--- Name: hpc_hpchealthcheck_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY hpc_hpchealthcheck
-    ADD CONSTRAINT hpc_hpchealthcheck_pkey PRIMARY KEY (id);
-
-
---
--- Name: hpc_hpcservice_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY hpc_hpcservice
-    ADD CONSTRAINT hpc_hpcservice_pkey PRIMARY KEY (service_ptr_id);
-
-
---
--- Name: hpc_originserver_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY hpc_originserver
-    ADD CONSTRAINT hpc_originserver_pkey PRIMARY KEY (id);
-
-
---
--- Name: hpc_serviceprovider_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY hpc_serviceprovider
-    ADD CONSTRAINT hpc_serviceprovider_pkey PRIMARY KEY (id);
-
-
---
--- Name: hpc_sitemap_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY hpc_sitemap
-    ADD CONSTRAINT hpc_sitemap_pkey PRIMARY KEY (id);
-
-
---
--- Name: requestrouter_requestrouterservice_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY requestrouter_requestrouterservice
-    ADD CONSTRAINT requestrouter_requestrouterservice_pkey PRIMARY KEY (service_ptr_id);
-
-
---
--- Name: requestrouter_servicemap_name_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY requestrouter_servicemap
-    ADD CONSTRAINT requestrouter_servicemap_name_key UNIQUE (name);
-
-
---
--- Name: requestrouter_servicemap_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY requestrouter_servicemap
-    ADD CONSTRAINT requestrouter_servicemap_pkey PRIMARY KEY (id);
-
-
---
--- Name: syndicate_storage_slicesecret_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY syndicate_storage_slicesecret
-    ADD CONSTRAINT syndicate_storage_slicesecret_pkey PRIMARY KEY (id);
-
-
---
--- Name: syndicate_storage_syndicateprincipal_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY syndicate_storage_syndicateprincipal
-    ADD CONSTRAINT syndicate_storage_syndicateprincipal_pkey PRIMARY KEY (id);
-
-
---
--- Name: syndicate_storage_syndicateprincipal_principal_id_key; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY syndicate_storage_syndicateprincipal
-    ADD CONSTRAINT syndicate_storage_syndicateprincipal_principal_id_key UNIQUE (principal_id);
-
-
---
--- Name: syndicate_storage_syndicateservice_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY syndicate_storage_syndicateservice
-    ADD CONSTRAINT syndicate_storage_syndicateservice_pkey PRIMARY KEY (service_ptr_id);
-
-
---
--- Name: syndicate_storage_volume_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY syndicate_storage_volume
-    ADD CONSTRAINT syndicate_storage_volume_pkey PRIMARY KEY (id);
-
-
---
--- Name: syndicate_storage_volumeaccessright_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY syndicate_storage_volumeaccessright
-    ADD CONSTRAINT syndicate_storage_volumeaccessright_pkey PRIMARY KEY (id);
-
-
---
--- Name: syndicate_storage_volumeslice_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
---
-
-ALTER TABLE ONLY syndicate_storage_volumeslice
-    ADD CONSTRAINT syndicate_storage_volumeslice_pkey PRIMARY KEY (id);
-
-
---
--- Name: auth_group_permissions_0e939a4f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX auth_group_permissions_0e939a4f ON auth_group_permissions USING btree (group_id);
-
-
---
--- Name: auth_group_permissions_8373b171; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX auth_group_permissions_8373b171 ON auth_group_permissions USING btree (permission_id);
-
-
---
--- Name: auth_permission_417f1b1c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX auth_permission_417f1b1c ON auth_permission USING btree (content_type_id);
-
-
---
--- Name: core_account_9365d6e7; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_account_9365d6e7 ON core_account USING btree (site_id);
-
-
---
--- Name: core_charge_8a089c2a; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_charge_8a089c2a ON core_charge USING btree (account_id);
-
-
---
--- Name: core_charge_af31437c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_charge_af31437c ON core_charge USING btree (object_id);
-
-
---
--- Name: core_charge_be7f3a0f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_charge_be7f3a0f ON core_charge USING btree (slice_id);
-
-
---
--- Name: core_charge_f1f5d967; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_charge_f1f5d967 ON core_charge USING btree (invoice_id);
-
-
---
--- Name: core_controller_5921cd4f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controller_5921cd4f ON core_controller USING btree (deployment_id);
-
-
---
--- Name: core_controllercredential_a31c1112; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllercredential_a31c1112 ON core_controllercredential USING btree (controller_id);
-
-
---
--- Name: core_controllercredential_b068931c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllercredential_b068931c ON core_controllercredential USING btree (name);
-
-
---
--- Name: core_controllerdashboardview_5da0369f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllerdashboardview_5da0369f ON core_controllerdashboardview USING btree ("dashboardView_id");
-
-
---
--- Name: core_controllerdashboardview_a31c1112; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllerdashboardview_a31c1112 ON core_controllerdashboardview USING btree (controller_id);
-
-
---
--- Name: core_controllerimages_a31c1112; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllerimages_a31c1112 ON core_controllerimages USING btree (controller_id);
-
-
---
--- Name: core_controllerimages_f33175e6; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllerimages_f33175e6 ON core_controllerimages USING btree (image_id);
-
-
---
--- Name: core_controllernetwork_4e19114d; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllernetwork_4e19114d ON core_controllernetwork USING btree (network_id);
-
-
---
--- Name: core_controllernetwork_a31c1112; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllernetwork_a31c1112 ON core_controllernetwork USING btree (controller_id);
-
-
---
--- Name: core_controllersite_38543614; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllersite_38543614 ON core_controllersite USING btree (tenant_id);
-
-
---
--- Name: core_controllersite_9365d6e7; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllersite_9365d6e7 ON core_controllersite USING btree (site_id);
-
-
---
--- Name: core_controllersite_a31c1112; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllersite_a31c1112 ON core_controllersite USING btree (controller_id);
-
-
---
--- Name: core_controllersiteprivilege_28116b8e; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllersiteprivilege_28116b8e ON core_controllersiteprivilege USING btree (site_privilege_id);
-
-
---
--- Name: core_controllersiteprivilege_84566833; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllersiteprivilege_84566833 ON core_controllersiteprivilege USING btree (role_id);
-
-
---
--- Name: core_controllersiteprivilege_a31c1112; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllersiteprivilege_a31c1112 ON core_controllersiteprivilege USING btree (controller_id);
-
-
---
--- Name: core_controllerslice_a31c1112; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllerslice_a31c1112 ON core_controllerslice USING btree (controller_id);
-
-
---
--- Name: core_controllerslice_be7f3a0f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllerslice_be7f3a0f ON core_controllerslice USING btree (slice_id);
-
-
---
--- Name: core_controllersliceprivilege_25740d9a; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllersliceprivilege_25740d9a ON core_controllersliceprivilege USING btree (slice_privilege_id);
-
-
---
--- Name: core_controllersliceprivilege_84566833; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllersliceprivilege_84566833 ON core_controllersliceprivilege USING btree (role_id);
-
-
---
--- Name: core_controllersliceprivilege_a31c1112; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controllersliceprivilege_a31c1112 ON core_controllersliceprivilege USING btree (controller_id);
-
-
---
--- Name: core_controlleruser_a31c1112; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controlleruser_a31c1112 ON core_controlleruser USING btree (controller_id);
-
-
---
--- Name: core_controlleruser_e8701ad4; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_controlleruser_e8701ad4 ON core_controlleruser USING btree (user_id);
-
-
---
--- Name: core_dashboardview_deployments_5921cd4f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_dashboardview_deployments_5921cd4f ON core_dashboardview_deployments USING btree (deployment_id);
-
-
---
--- Name: core_dashboardview_deployments_79bd56c8; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_dashboardview_deployments_79bd56c8 ON core_dashboardview_deployments USING btree (dashboardview_id);
-
-
---
--- Name: core_deploymentprivilege_5921cd4f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_deploymentprivilege_5921cd4f ON core_deploymentprivilege USING btree (deployment_id);
-
-
---
--- Name: core_deploymentprivilege_84566833; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_deploymentprivilege_84566833 ON core_deploymentprivilege USING btree (role_id);
-
-
---
--- Name: core_deploymentprivilege_e8701ad4; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_deploymentprivilege_e8701ad4 ON core_deploymentprivilege USING btree (user_id);
-
-
---
--- Name: core_flavor_deployments_5921cd4f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_flavor_deployments_5921cd4f ON core_flavor_deployments USING btree (deployment_id);
-
-
---
--- Name: core_flavor_deployments_dd3f198d; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_flavor_deployments_dd3f198d ON core_flavor_deployments USING btree (flavor_id);
-
-
---
--- Name: core_imagedeployments_5921cd4f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_imagedeployments_5921cd4f ON core_imagedeployments USING btree (deployment_id);
-
-
---
--- Name: core_imagedeployments_f33175e6; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_imagedeployments_f33175e6 ON core_imagedeployments USING btree (image_id);
-
-
---
--- Name: core_instance_3700153c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_instance_3700153c ON core_instance USING btree (creator_id);
-
-
---
--- Name: core_instance_5921cd4f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_instance_5921cd4f ON core_instance USING btree (deployment_id);
-
-
---
--- Name: core_instance_be7f3a0f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_instance_be7f3a0f ON core_instance USING btree (slice_id);
-
-
---
--- Name: core_instance_c693ebc8; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_instance_c693ebc8 ON core_instance USING btree (node_id);
-
-
---
--- Name: core_instance_dd3f198d; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_instance_dd3f198d ON core_instance USING btree (flavor_id);
-
-
---
--- Name: core_instance_f33175e6; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_instance_f33175e6 ON core_instance USING btree (image_id);
-
-
---
--- Name: core_invoice_8a089c2a; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_invoice_8a089c2a ON core_invoice USING btree (account_id);
-
-
---
--- Name: core_network_5e7b1936; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_network_5e7b1936 ON core_network USING btree (owner_id);
-
-
---
--- Name: core_network_74f53564; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_network_74f53564 ON core_network USING btree (template_id);
-
-
---
--- Name: core_network_permitted_slices_4e19114d; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_network_permitted_slices_4e19114d ON core_network_permitted_slices USING btree (network_id);
-
-
---
--- Name: core_network_permitted_slices_be7f3a0f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_network_permitted_slices_be7f3a0f ON core_network_permitted_slices USING btree (slice_id);
-
-
---
--- Name: core_networkparameter_417f1b1c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_networkparameter_417f1b1c ON core_networkparameter USING btree (content_type_id);
-
-
---
--- Name: core_networkparameter_80740216; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_networkparameter_80740216 ON core_networkparameter USING btree (parameter_id);
-
-
---
--- Name: core_networkparametertype_b068931c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_networkparametertype_b068931c ON core_networkparametertype USING btree (name);
-
-
---
--- Name: core_networkslice_4e19114d; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_networkslice_4e19114d ON core_networkslice USING btree (network_id);
-
-
---
--- Name: core_networkslice_be7f3a0f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_networkslice_be7f3a0f ON core_networkslice USING btree (slice_id);
-
-
---
--- Name: core_node_86aed61a; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_node_86aed61a ON core_node USING btree (site_deployment_id);
-
-
---
--- Name: core_node_9365d6e7; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_node_9365d6e7 ON core_node USING btree (site_id);
-
-
---
--- Name: core_payment_8a089c2a; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_payment_8a089c2a ON core_payment USING btree (account_id);
-
-
---
--- Name: core_port_4e19114d; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_port_4e19114d ON core_port USING btree (network_id);
-
-
---
--- Name: core_port_51afcc4f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_port_51afcc4f ON core_port USING btree (instance_id);
-
-
---
--- Name: core_program_5e7b1936; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_program_5e7b1936 ON core_program USING btree (owner_id);
-
-
---
--- Name: core_reservation_be7f3a0f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_reservation_be7f3a0f ON core_reservation USING btree (slice_id);
-
-
---
--- Name: core_reservedresource_51afcc4f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_reservedresource_51afcc4f ON core_reservedresource USING btree (instance_id);
-
-
---
--- Name: core_reservedresource_732beb09; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_reservedresource_732beb09 ON core_reservedresource USING btree ("reservationSet_id");
-
-
---
--- Name: core_reservedresource_e2f3ef5b; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_reservedresource_e2f3ef5b ON core_reservedresource USING btree (resource_id);
-
-
---
--- Name: core_role_417f1b1c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_role_417f1b1c ON core_role USING btree (content_type_id);
-
-
---
--- Name: core_router_5e7b1936; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_router_5e7b1936 ON core_router USING btree (owner_id);
-
-
---
--- Name: core_router_networks_4e19114d; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_router_networks_4e19114d ON core_router_networks USING btree (network_id);
-
-
---
--- Name: core_router_networks_52d4f3af; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_router_networks_52d4f3af ON core_router_networks USING btree (router_id);
-
-
---
--- Name: core_router_permittednetworks_4e19114d; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_router_permittednetworks_4e19114d ON "core_router_permittedNetworks" USING btree (network_id);
-
-
---
--- Name: core_router_permittednetworks_52d4f3af; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_router_permittednetworks_52d4f3af ON "core_router_permittedNetworks" USING btree (router_id);
-
-
---
--- Name: core_serviceattribute_b068931c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_serviceattribute_b068931c ON core_serviceattribute USING btree (name);
-
-
---
--- Name: core_serviceattribute_b0dc1e29; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_serviceattribute_b0dc1e29 ON core_serviceattribute USING btree (service_id);
-
-
---
--- Name: core_serviceclass_upgradefrom_a90aba97; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_serviceclass_upgradefrom_a90aba97 ON "core_serviceclass_upgradeFrom" USING btree (to_serviceclass_id);
-
-
---
--- Name: core_serviceclass_upgradefrom_e970e0f1; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_serviceclass_upgradefrom_e970e0f1 ON "core_serviceclass_upgradeFrom" USING btree (from_serviceclass_id);
-
-
---
--- Name: core_serviceprivilege_84566833; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_serviceprivilege_84566833 ON core_serviceprivilege USING btree (role_id);
-
-
---
--- Name: core_serviceprivilege_b0dc1e29; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_serviceprivilege_b0dc1e29 ON core_serviceprivilege USING btree (service_id);
-
-
---
--- Name: core_serviceprivilege_e8701ad4; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_serviceprivilege_e8701ad4 ON core_serviceprivilege USING btree (user_id);
-
-
---
--- Name: core_serviceresource_aa578034; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_serviceresource_aa578034 ON core_serviceresource USING btree ("serviceClass_id");
-
-
---
--- Name: core_sitecredential_9365d6e7; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_sitecredential_9365d6e7 ON core_sitecredential USING btree (site_id);
-
-
---
--- Name: core_sitecredential_b068931c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_sitecredential_b068931c ON core_sitecredential USING btree (name);
-
-
---
--- Name: core_sitedeployment_5921cd4f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_sitedeployment_5921cd4f ON core_sitedeployment USING btree (deployment_id);
-
-
---
--- Name: core_sitedeployment_9365d6e7; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_sitedeployment_9365d6e7 ON core_sitedeployment USING btree (site_id);
-
-
---
--- Name: core_sitedeployment_a31c1112; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_sitedeployment_a31c1112 ON core_sitedeployment USING btree (controller_id);
-
-
---
--- Name: core_siteprivilege_84566833; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_siteprivilege_84566833 ON core_siteprivilege USING btree (role_id);
-
-
---
--- Name: core_siteprivilege_9365d6e7; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_siteprivilege_9365d6e7 ON core_siteprivilege USING btree (site_id);
-
-
---
--- Name: core_siteprivilege_e8701ad4; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_siteprivilege_e8701ad4 ON core_siteprivilege USING btree (user_id);
-
-
---
--- Name: core_slice_3700153c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_slice_3700153c ON core_slice USING btree (creator_id);
-
-
---
--- Name: core_slice_531a000f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_slice_531a000f ON core_slice USING btree (default_flavor_id);
-
-
---
--- Name: core_slice_9365d6e7; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_slice_9365d6e7 ON core_slice USING btree (site_id);
-
-
---
--- Name: core_slice_a82f732f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_slice_a82f732f ON core_slice USING btree (default_image_id);
-
-
---
--- Name: core_slice_aa578034; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_slice_aa578034 ON core_slice USING btree ("serviceClass_id");
-
-
---
--- Name: core_slice_b0dc1e29; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_slice_b0dc1e29 ON core_slice USING btree (service_id);
-
-
---
--- Name: core_slicecredential_b068931c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_slicecredential_b068931c ON core_slicecredential USING btree (name);
-
-
---
--- Name: core_slicecredential_be7f3a0f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_slicecredential_be7f3a0f ON core_slicecredential USING btree (slice_id);
-
-
---
--- Name: core_sliceprivilege_84566833; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_sliceprivilege_84566833 ON core_sliceprivilege USING btree (role_id);
-
-
---
--- Name: core_sliceprivilege_be7f3a0f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_sliceprivilege_be7f3a0f ON core_sliceprivilege USING btree (slice_id);
-
-
---
--- Name: core_sliceprivilege_e8701ad4; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_sliceprivilege_e8701ad4 ON core_sliceprivilege USING btree (user_id);
-
-
---
--- Name: core_slicetag_be7f3a0f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_slicetag_be7f3a0f ON core_slicetag USING btree (slice_id);
-
-
---
--- Name: core_tag_417f1b1c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_tag_417f1b1c ON core_tag USING btree (content_type_id);
-
-
---
--- Name: core_tag_b068931c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_tag_b068931c ON core_tag USING btree (name);
-
-
---
--- Name: core_tag_b0dc1e29; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_tag_b0dc1e29 ON core_tag USING btree (service_id);
-
-
---
--- Name: core_tenant_6d0512e4; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_tenant_6d0512e4 ON core_tenant USING btree (subscriber_tenant_id);
-
-
---
--- Name: core_tenant_a5c60fe7; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_tenant_a5c60fe7 ON core_tenant USING btree (subscriber_service_id);
-
-
---
--- Name: core_tenant_d1fbfb28; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_tenant_d1fbfb28 ON core_tenant USING btree (provider_service_id);
-
-
---
--- Name: core_tenant_ec8cbfdc; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_tenant_ec8cbfdc ON core_tenant USING btree (subscriber_user_id);
-
-
---
--- Name: core_tenant_f687e49c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_tenant_f687e49c ON core_tenant USING btree (subscriber_root_id);
-
-
---
--- Name: core_tenantrootprivilege_84566833; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_tenantrootprivilege_84566833 ON core_tenantrootprivilege USING btree (role_id);
-
-
---
--- Name: core_tenantrootprivilege_ad876f96; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_tenantrootprivilege_ad876f96 ON core_tenantrootprivilege USING btree (tenant_root_id);
-
-
---
--- Name: core_tenantrootprivilege_e8701ad4; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_tenantrootprivilege_e8701ad4 ON core_tenantrootprivilege USING btree (user_id);
-
-
---
--- Name: core_user_9365d6e7; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_user_9365d6e7 ON core_user USING btree (site_id);
-
-
---
--- Name: core_usercredential_b068931c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_usercredential_b068931c ON core_usercredential USING btree (name);
-
-
---
--- Name: core_usercredential_e8701ad4; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_usercredential_e8701ad4 ON core_usercredential USING btree (user_id);
-
-
---
--- Name: core_userdashboardview_5da0369f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_userdashboardview_5da0369f ON core_userdashboardview USING btree ("dashboardView_id");
-
-
---
--- Name: core_userdashboardview_e8701ad4; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX core_userdashboardview_e8701ad4 ON core_userdashboardview USING btree (user_id);
-
-
---
--- Name: django_admin_log_417f1b1c; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX django_admin_log_417f1b1c ON django_admin_log USING btree (content_type_id);
-
-
---
--- Name: django_admin_log_e8701ad4; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX django_admin_log_e8701ad4 ON django_admin_log USING btree (user_id);
-
-
---
--- Name: django_session_de54fa62; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX django_session_de54fa62 ON django_session USING btree (expire_date);
-
-
---
--- Name: hpc_accessmap_bc4912a0; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_accessmap_bc4912a0 ON hpc_accessmap USING btree ("contentProvider_id");
-
-
---
--- Name: hpc_cdnprefix_8473b38b; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_cdnprefix_8473b38b ON hpc_cdnprefix USING btree ("defaultOriginServer_id");
-
-
---
--- Name: hpc_cdnprefix_bc4912a0; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_cdnprefix_bc4912a0 ON hpc_cdnprefix USING btree ("contentProvider_id");
-
-
---
--- Name: hpc_contentprovider_ebdbc659; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_contentprovider_ebdbc659 ON hpc_contentprovider USING btree ("serviceProvider_id");
-
-
---
--- Name: hpc_contentprovider_users_82c06917; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_contentprovider_users_82c06917 ON hpc_contentprovider_users USING btree (contentprovider_id);
-
-
---
--- Name: hpc_contentprovider_users_e8701ad4; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_contentprovider_users_e8701ad4 ON hpc_contentprovider_users USING btree (user_id);
-
-
---
--- Name: hpc_hpchealthcheck_591847bf; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_hpchealthcheck_591847bf ON hpc_hpchealthcheck USING btree ("hpcService_id");
-
-
---
--- Name: hpc_originserver_bc4912a0; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_originserver_bc4912a0 ON hpc_originserver USING btree ("contentProvider_id");
-
-
---
--- Name: hpc_serviceprovider_591847bf; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_serviceprovider_591847bf ON hpc_serviceprovider USING btree ("hpcService_id");
-
-
---
--- Name: hpc_sitemap_23b3ec8f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_sitemap_23b3ec8f ON hpc_sitemap USING btree ("cdnPrefix_id");
-
-
---
--- Name: hpc_sitemap_591847bf; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_sitemap_591847bf ON hpc_sitemap USING btree ("hpcService_id");
-
-
---
--- Name: hpc_sitemap_bc4912a0; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_sitemap_bc4912a0 ON hpc_sitemap USING btree ("contentProvider_id");
-
-
---
--- Name: hpc_sitemap_ebdbc659; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX hpc_sitemap_ebdbc659 ON hpc_sitemap USING btree ("serviceProvider_id");
-
-
---
--- Name: requestrouter_servicemap_5e7b1936; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX requestrouter_servicemap_5e7b1936 ON requestrouter_servicemap USING btree (owner_id);
-
-
---
--- Name: requestrouter_servicemap_be7f3a0f; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX requestrouter_servicemap_be7f3a0f ON requestrouter_servicemap USING btree (slice_id);
-
-
---
--- Name: syndicate_storage_slicesecret_b717f5ab; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX syndicate_storage_slicesecret_b717f5ab ON syndicate_storage_slicesecret USING btree (slice_id_id);
-
-
---
--- Name: syndicate_storage_volume_279564bf; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX syndicate_storage_volume_279564bf ON syndicate_storage_volume USING btree (owner_id_id);
-
-
---
--- Name: syndicate_storage_volumeaccessright_279564bf; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX syndicate_storage_volumeaccessright_279564bf ON syndicate_storage_volumeaccessright USING btree (owner_id_id);
-
-
---
--- Name: syndicate_storage_volumeaccessright_654102bb; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX syndicate_storage_volumeaccessright_654102bb ON syndicate_storage_volumeaccessright USING btree (volume_id);
-
-
---
--- Name: syndicate_storage_volumeslice_5b591651; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX syndicate_storage_volumeslice_5b591651 ON syndicate_storage_volumeslice USING btree (volume_id_id);
-
-
---
--- Name: syndicate_storage_volumeslice_b717f5ab; Type: INDEX; Schema: public; Owner: postgres; Tablespace: 
---
-
-CREATE INDEX syndicate_storage_volumeslice_b717f5ab ON syndicate_storage_volumeslice USING btree (slice_id_id);
-
-
---
--- Name: auth_content_type_id_508cf46651277a81_fk_django_content_type_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY auth_permission
-    ADD CONSTRAINT auth_content_type_id_508cf46651277a81_fk_django_content_type_id FOREIGN KEY (content_type_id) REFERENCES django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_group_permissio_group_id_689710a9a73b7457_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY auth_group_permissions
-    ADD CONSTRAINT auth_group_permissio_group_id_689710a9a73b7457_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES auth_group(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: auth_group_permission_id_1f49ccbbdc69d2fc_fk_auth_permission_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY auth_group_permissions
-    ADD CONSTRAINT auth_group_permission_id_1f49ccbbdc69d2fc_fk_auth_permission_id FOREIGN KEY (permission_id) REFERENCES auth_permission(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: b8a90faf34a5dd47a7f1e2f88e99f8a2; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_hpchealthcheck
-    ADD CONSTRAINT b8a90faf34a5dd47a7f1e2f88e99f8a2 FOREIGN KEY ("hpcService_id") REFERENCES hpc_hpcservice(service_ptr_id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: c_from_serviceclass_id_188a83eaefe26390_fk_core_serviceclass_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY "core_serviceclass_upgradeFrom"
-    ADD CONSTRAINT c_from_serviceclass_id_188a83eaefe26390_fk_core_serviceclass_id FOREIGN KEY (from_serviceclass_id) REFERENCES core_serviceclass(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: c_parameter_id_2c17791ba32bd8c8_fk_core_networkparametertype_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_networkparameter
-    ADD CONSTRAINT c_parameter_id_2c17791ba32bd8c8_fk_core_networkparametertype_id FOREIGN KEY (parameter_id) REFERENCES core_networkparametertype(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: c_site_deployment_id_2dc763428bdc2781_fk_core_sitedeployment_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_node
-    ADD CONSTRAINT c_site_deployment_id_2dc763428bdc2781_fk_core_sitedeployment_id FOREIGN KEY (site_deployment_id) REFERENCES core_sitedeployment(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: co_slice_privilege_id_21402f4f2399079_fk_core_sliceprivilege_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllersliceprivilege
-    ADD CONSTRAINT co_slice_privilege_id_21402f4f2399079_fk_core_sliceprivilege_id FOREIGN KEY (slice_privilege_id) REFERENCES core_sliceprivilege(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: cor_site_privilege_id_41490e8c05c2e685_fk_core_siteprivilege_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllersiteprivilege
-    ADD CONSTRAINT cor_site_privilege_id_41490e8c05c2e685_fk_core_siteprivilege_id FOREIGN KEY (site_privilege_id) REFERENCES core_siteprivilege(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: cor_to_serviceclass_id_4e2748248647c43b_fk_core_serviceclass_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY "core_serviceclass_upgradeFrom"
-    ADD CONSTRAINT cor_to_serviceclass_id_4e2748248647c43b_fk_core_serviceclass_id FOREIGN KEY (to_serviceclass_id) REFERENCES core_serviceclass(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core__reservationset_id_395058233c59a671_fk_core_reservation_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_reservedresource
-    ADD CONSTRAINT core__reservationset_id_395058233c59a671_fk_core_reservation_id FOREIGN KEY ("reservationSet_id") REFERENCES core_reservation(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core__subscriber_root_id_26f21610cb2711f9_fk_core_tenantroot_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenant
-    ADD CONSTRAINT core__subscriber_root_id_26f21610cb2711f9_fk_core_tenantroot_id FOREIGN KEY (subscriber_root_id) REFERENCES core_tenantroot(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core__subscriber_service_id_5049d522dc2feae7_fk_core_service_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenant
-    ADD CONSTRAINT core__subscriber_service_id_5049d522dc2feae7_fk_core_service_id FOREIGN KEY (subscriber_service_id) REFERENCES core_service(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_account_site_id_7d8af010f408acb2_fk_core_site_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_account
-    ADD CONSTRAINT core_account_site_id_7d8af010f408acb2_fk_core_site_id FOREIGN KEY (site_id) REFERENCES core_site(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_charge_account_id_277c66c32427fb_fk_core_account_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_charge
-    ADD CONSTRAINT core_charge_account_id_277c66c32427fb_fk_core_account_id FOREIGN KEY (account_id) REFERENCES core_account(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_charge_invoice_id_7af39adf58aad977_fk_core_invoice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_charge
-    ADD CONSTRAINT core_charge_invoice_id_7af39adf58aad977_fk_core_invoice_id FOREIGN KEY (invoice_id) REFERENCES core_invoice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_charge_object_id_349f8834f1bf5ce6_fk_core_usableobject_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_charge
-    ADD CONSTRAINT core_charge_object_id_349f8834f1bf5ce6_fk_core_usableobject_id FOREIGN KEY (object_id) REFERENCES core_usableobject(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_charge_slice_id_5f33de3b320604f2_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_charge
-    ADD CONSTRAINT core_charge_slice_id_5f33de3b320604f2_fk_core_slice_id FOREIGN KEY (slice_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_content_type_id_150a10ada282bcf9_fk_django_content_type_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_role
-    ADD CONSTRAINT core_content_type_id_150a10ada282bcf9_fk_django_content_type_id FOREIGN KEY (content_type_id) REFERENCES django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_content_type_id_3cc30601489a3056_fk_django_content_type_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_networkparameter
-    ADD CONSTRAINT core_content_type_id_3cc30601489a3056_fk_django_content_type_id FOREIGN KEY (content_type_id) REFERENCES django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_content_type_id_413c7b5400f8ad9c_fk_django_content_type_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tag
-    ADD CONSTRAINT core_content_type_id_413c7b5400f8ad9c_fk_django_content_type_id FOREIGN KEY (content_type_id) REFERENCES django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_contr_controller_id_11d29f7e2a4a5462_fk_core_controller_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllersiteprivilege
-    ADD CONSTRAINT core_contr_controller_id_11d29f7e2a4a5462_fk_core_controller_id FOREIGN KEY (controller_id) REFERENCES core_controller(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_contr_controller_id_1f82c3216437715f_fk_core_controller_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllerdashboardview
-    ADD CONSTRAINT core_contr_controller_id_1f82c3216437715f_fk_core_controller_id FOREIGN KEY (controller_id) REFERENCES core_controller(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_contr_controller_id_46178c1d21384e5e_fk_core_controller_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllersite
-    ADD CONSTRAINT core_contr_controller_id_46178c1d21384e5e_fk_core_controller_id FOREIGN KEY (controller_id) REFERENCES core_controller(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_contr_controller_id_4fb982de67c3b742_fk_core_controller_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllersliceprivilege
-    ADD CONSTRAINT core_contr_controller_id_4fb982de67c3b742_fk_core_controller_id FOREIGN KEY (controller_id) REFERENCES core_controller(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_contr_controller_id_5cd05d37bbdf1d96_fk_core_controller_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controlleruser
-    ADD CONSTRAINT core_contr_controller_id_5cd05d37bbdf1d96_fk_core_controller_id FOREIGN KEY (controller_id) REFERENCES core_controller(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_contr_controller_id_60b467e792b15198_fk_core_controller_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllernetwork
-    ADD CONSTRAINT core_contr_controller_id_60b467e792b15198_fk_core_controller_id FOREIGN KEY (controller_id) REFERENCES core_controller(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_contr_controller_id_7095bdbd27f73f56_fk_core_controller_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllerslice
-    ADD CONSTRAINT core_contr_controller_id_7095bdbd27f73f56_fk_core_controller_id FOREIGN KEY (controller_id) REFERENCES core_controller(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_contr_deployment_id_772a055c58b6e43a_fk_core_deployment_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controller
-    ADD CONSTRAINT core_contr_deployment_id_772a055c58b6e43a_fk_core_deployment_id FOREIGN KEY (deployment_id) REFERENCES core_deployment(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_contro_controller_id_5906172a2f34d3a_fk_core_controller_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllercredential
-    ADD CONSTRAINT core_contro_controller_id_5906172a2f34d3a_fk_core_controller_id FOREIGN KEY (controller_id) REFERENCES core_controller(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_contro_controller_id_6d1311b7cc69cd7_fk_core_controller_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllerimages
-    ADD CONSTRAINT core_contro_controller_id_6d1311b7cc69cd7_fk_core_controller_id FOREIGN KEY (controller_id) REFERENCES core_controller(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_controllerimage_image_id_5713221a6b077f6b_fk_core_image_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllerimages
-    ADD CONSTRAINT core_controllerimage_image_id_5713221a6b077f6b_fk_core_image_id FOREIGN KEY (image_id) REFERENCES core_image(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_controllern_network_id_3fe7748f6851d06f_fk_core_network_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllernetwork
-    ADD CONSTRAINT core_controllern_network_id_3fe7748f6851d06f_fk_core_network_id FOREIGN KEY (network_id) REFERENCES core_network(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_controllersite_site_id_4fa87f0734a60665_fk_core_site_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllersite
-    ADD CONSTRAINT core_controllersite_site_id_4fa87f0734a60665_fk_core_site_id FOREIGN KEY (site_id) REFERENCES core_site(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_controllerslice_slice_id_7005d287c601356b_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllerslice
-    ADD CONSTRAINT core_controllerslice_slice_id_7005d287c601356b_fk_core_slice_id FOREIGN KEY (slice_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_controlleruser_user_id_60dc3a7220b1005b_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controlleruser
-    ADD CONSTRAINT core_controlleruser_user_id_60dc3a7220b1005b_fk_core_user_id FOREIGN KEY (user_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_dashbo_deployment_id_8b902dfc7ab128b_fk_core_deployment_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_dashboardview_deployments
-    ADD CONSTRAINT core_dashbo_deployment_id_8b902dfc7ab128b_fk_core_deployment_id FOREIGN KEY (deployment_id) REFERENCES core_deployment(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_dashboardview_id_1241776e11825a15_fk_core_dashboardview_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_controllerdashboardview
-    ADD CONSTRAINT core_dashboardview_id_1241776e11825a15_fk_core_dashboardview_id FOREIGN KEY ("dashboardView_id") REFERENCES core_dashboardview(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_dashboardview_id_623d5d799346e0f8_fk_core_dashboardview_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_dashboardview_deployments
-    ADD CONSTRAINT core_dashboardview_id_623d5d799346e0f8_fk_core_dashboardview_id FOREIGN KEY (dashboardview_id) REFERENCES core_dashboardview(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_dashboardview_id_7d9723f531eefdde_fk_core_dashboardview_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_userdashboardview
-    ADD CONSTRAINT core_dashboardview_id_7d9723f531eefdde_fk_core_dashboardview_id FOREIGN KEY ("dashboardView_id") REFERENCES core_dashboardview(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_deplo_deployment_id_4606c90fff2e5ecf_fk_core_deployment_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_deploymentprivilege
-    ADD CONSTRAINT core_deplo_deployment_id_4606c90fff2e5ecf_fk_core_deployment_id FOREIGN KEY (deployment_id) REFERENCES core_deployment(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_deploym_role_id_221f61258b29e608_fk_core_deploymentrole_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_deploymentprivilege
-    ADD CONSTRAINT core_deploym_role_id_221f61258b29e608_fk_core_deploymentrole_id FOREIGN KEY (role_id) REFERENCES core_deploymentrole(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_deploymentprivile_user_id_2ac00d41376e2a8d_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_deploymentprivilege
-    ADD CONSTRAINT core_deploymentprivile_user_id_2ac00d41376e2a8d_fk_core_user_id FOREIGN KEY (user_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_flavo_deployment_id_33af1c761c0497e3_fk_core_deployment_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_flavor_deployments
-    ADD CONSTRAINT core_flavo_deployment_id_33af1c761c0497e3_fk_core_deployment_id FOREIGN KEY (deployment_id) REFERENCES core_deployment(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_flavor_deploy_flavor_id_3e598722be0b3446_fk_core_flavor_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_flavor_deployments
-    ADD CONSTRAINT core_flavor_deploy_flavor_id_3e598722be0b3446_fk_core_flavor_id FOREIGN KEY (flavor_id) REFERENCES core_flavor(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_image_deployment_id_31772dfdcf4b80eb_fk_core_deployment_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_imagedeployments
-    ADD CONSTRAINT core_image_deployment_id_31772dfdcf4b80eb_fk_core_deployment_id FOREIGN KEY (deployment_id) REFERENCES core_deployment(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_imagedeployment_image_id_4a6df22c06603b40_fk_core_image_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_imagedeployments
-    ADD CONSTRAINT core_imagedeployment_image_id_4a6df22c06603b40_fk_core_image_id FOREIGN KEY (image_id) REFERENCES core_image(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_insta_deployment_id_111e2cdd025ec8ef_fk_core_deployment_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_instance
-    ADD CONSTRAINT core_insta_deployment_id_111e2cdd025ec8ef_fk_core_deployment_id FOREIGN KEY (deployment_id) REFERENCES core_deployment(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_instance_creator_id_66a7e8c819d15b29_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_instance
-    ADD CONSTRAINT core_instance_creator_id_66a7e8c819d15b29_fk_core_user_id FOREIGN KEY (creator_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_instance_flavor_id_61bc3198a5673218_fk_core_flavor_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_instance
-    ADD CONSTRAINT core_instance_flavor_id_61bc3198a5673218_fk_core_flavor_id FOREIGN KEY (flavor_id) REFERENCES core_flavor(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_instance_image_id_5c8c96fe9a61802c_fk_core_image_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_instance
-    ADD CONSTRAINT core_instance_image_id_5c8c96fe9a61802c_fk_core_image_id FOREIGN KEY (image_id) REFERENCES core_image(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_instance_node_id_ae899cb7a62df9a_fk_core_node_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_instance
-    ADD CONSTRAINT core_instance_node_id_ae899cb7a62df9a_fk_core_node_id FOREIGN KEY (node_id) REFERENCES core_node(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_instance_slice_id_2ddcfe06a9e4c985_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_instance
-    ADD CONSTRAINT core_instance_slice_id_2ddcfe06a9e4c985_fk_core_slice_id FOREIGN KEY (slice_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_invoice_account_id_7802a49ab0cec433_fk_core_account_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_invoice
-    ADD CONSTRAINT core_invoice_account_id_7802a49ab0cec433_fk_core_account_id FOREIGN KEY (account_id) REFERENCES core_account(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_ne_template_id_7268a8d58aa4008e_fk_core_networktemplate_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_network
-    ADD CONSTRAINT core_ne_template_id_7268a8d58aa4008e_fk_core_networktemplate_id FOREIGN KEY (template_id) REFERENCES core_networktemplate(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_network_owner_id_1b5a720eac1f1d6c_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_network
-    ADD CONSTRAINT core_network_owner_id_1b5a720eac1f1d6c_fk_core_slice_id FOREIGN KEY (owner_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_network_perm_network_id_79f8a18a0197dd1_fk_core_network_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_network_permitted_slices
-    ADD CONSTRAINT core_network_perm_network_id_79f8a18a0197dd1_fk_core_network_id FOREIGN KEY (network_id) REFERENCES core_network(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_network_permitt_slice_id_7d7e6e1a0b962f45_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_network_permitted_slices
-    ADD CONSTRAINT core_network_permitt_slice_id_7d7e6e1a0b962f45_fk_core_slice_id FOREIGN KEY (slice_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_networkslic_network_id_2823f40a154bc2e6_fk_core_network_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_networkslice
-    ADD CONSTRAINT core_networkslic_network_id_2823f40a154bc2e6_fk_core_network_id FOREIGN KEY (network_id) REFERENCES core_network(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_networkslice_slice_id_801f34a8ab285a0_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_networkslice
-    ADD CONSTRAINT core_networkslice_slice_id_801f34a8ab285a0_fk_core_slice_id FOREIGN KEY (slice_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_node_site_id_28bac05ef1a512ce_fk_core_site_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_node
-    ADD CONSTRAINT core_node_site_id_28bac05ef1a512ce_fk_core_site_id FOREIGN KEY (site_id) REFERENCES core_site(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_payment_account_id_3cc9ae7e7b925002_fk_core_account_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_payment
-    ADD CONSTRAINT core_payment_account_id_3cc9ae7e7b925002_fk_core_account_id FOREIGN KEY (account_id) REFERENCES core_account(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_port_instance_id_5bdb1ae59ca1dc73_fk_core_instance_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_port
-    ADD CONSTRAINT core_port_instance_id_5bdb1ae59ca1dc73_fk_core_instance_id FOREIGN KEY (instance_id) REFERENCES core_instance(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_port_network_id_655a9dc4ef32f845_fk_core_network_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_port
-    ADD CONSTRAINT core_port_network_id_655a9dc4ef32f845_fk_core_network_id FOREIGN KEY (network_id) REFERENCES core_network(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_program_owner_id_491cb2182952268e_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_program
-    ADD CONSTRAINT core_program_owner_id_491cb2182952268e_fk_core_user_id FOREIGN KEY (owner_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_re_resource_id_1126f44e743a899d_fk_core_serviceresource_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_reservedresource
-    ADD CONSTRAINT core_re_resource_id_1126f44e743a899d_fk_core_serviceresource_id FOREIGN KEY (resource_id) REFERENCES core_serviceresource(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_reservation_slice_id_4df07726653daed_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_reservation
-    ADD CONSTRAINT core_reservation_slice_id_4df07726653daed_fk_core_slice_id FOREIGN KEY (slice_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_reservedr_instance_id_626caea355f5195e_fk_core_instance_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_reservedresource
-    ADD CONSTRAINT core_reservedr_instance_id_626caea355f5195e_fk_core_instance_id FOREIGN KEY (instance_id) REFERENCES core_instance(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_router_netw_network_id_12bc59c5ca78fdc0_fk_core_network_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_router_networks
-    ADD CONSTRAINT core_router_netw_network_id_12bc59c5ca78fdc0_fk_core_network_id FOREIGN KEY (network_id) REFERENCES core_network(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_router_networ_router_id_3cf4f94bd7970e88_fk_core_router_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_router_networks
-    ADD CONSTRAINT core_router_networ_router_id_3cf4f94bd7970e88_fk_core_router_id FOREIGN KEY (router_id) REFERENCES core_router(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_router_owner_id_13c4ac38c56512c6_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_router
-    ADD CONSTRAINT core_router_owner_id_13c4ac38c56512c6_fk_core_slice_id FOREIGN KEY (owner_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_router_permi_network_id_8ee54284c93cd43_fk_core_network_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY "core_router_permittedNetworks"
-    ADD CONSTRAINT core_router_permi_network_id_8ee54284c93cd43_fk_core_network_id FOREIGN KEY (network_id) REFERENCES core_network(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_router_permit_router_id_3506769cdaf40bb5_fk_core_router_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY "core_router_permittedNetworks"
-    ADD CONSTRAINT core_router_permit_router_id_3506769cdaf40bb5_fk_core_router_id FOREIGN KEY (router_id) REFERENCES core_router(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_s_serviceclass_id_7fa5b55190a88c84_fk_core_serviceclass_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_serviceresource
-    ADD CONSTRAINT core_s_serviceclass_id_7fa5b55190a88c84_fk_core_serviceclass_id FOREIGN KEY ("serviceClass_id") REFERENCES core_serviceclass(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_serviceattr_service_id_5dd88bdc4a289e9e_fk_core_service_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_serviceattribute
-    ADD CONSTRAINT core_serviceattr_service_id_5dd88bdc4a289e9e_fk_core_service_id FOREIGN KEY (service_id) REFERENCES core_service(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_servicepri_role_id_2516e31051d592b9_fk_core_servicerole_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_serviceprivilege
-    ADD CONSTRAINT core_servicepri_role_id_2516e31051d592b9_fk_core_servicerole_id FOREIGN KEY (role_id) REFERENCES core_servicerole(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_servicepriv_service_id_326f2584a82884fb_fk_core_service_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_serviceprivilege
-    ADD CONSTRAINT core_servicepriv_service_id_326f2584a82884fb_fk_core_service_id FOREIGN KEY (service_id) REFERENCES core_service(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_serviceprivilege_user_id_5e78485b5063e04_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_serviceprivilege
-    ADD CONSTRAINT core_serviceprivilege_user_id_5e78485b5063e04_fk_core_user_id FOREIGN KEY (user_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_sitecredential_site_id_2ede808de256b5ca_fk_core_site_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_sitecredential
-    ADD CONSTRAINT core_sitecredential_site_id_2ede808de256b5ca_fk_core_site_id FOREIGN KEY (site_id) REFERENCES core_site(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_sited_controller_id_30291acda546cff3_fk_core_controller_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_sitedeployment
-    ADD CONSTRAINT core_sited_controller_id_30291acda546cff3_fk_core_controller_id FOREIGN KEY (controller_id) REFERENCES core_controller(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_sited_deployment_id_2073c8bc2ac33aee_fk_core_deployment_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_sitedeployment
-    ADD CONSTRAINT core_sited_deployment_id_2073c8bc2ac33aee_fk_core_deployment_id FOREIGN KEY (deployment_id) REFERENCES core_deployment(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_sitedeployment_site_id_10d760d1d81e2090_fk_core_site_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_sitedeployment
-    ADD CONSTRAINT core_sitedeployment_site_id_10d760d1d81e2090_fk_core_site_id FOREIGN KEY (site_id) REFERENCES core_site(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_siteprivilege_role_id_71e5069ae809cb06_fk_core_siterole_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_siteprivilege
-    ADD CONSTRAINT core_siteprivilege_role_id_71e5069ae809cb06_fk_core_siterole_id FOREIGN KEY (role_id) REFERENCES core_siterole(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_siteprivilege_site_id_33ec92307c1cb3bd_fk_core_site_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_siteprivilege
-    ADD CONSTRAINT core_siteprivilege_site_id_33ec92307c1cb3bd_fk_core_site_id FOREIGN KEY (site_id) REFERENCES core_site(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_siteprivilege_user_id_4a58c40e58eea8c5_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_siteprivilege
-    ADD CONSTRAINT core_siteprivilege_user_id_4a58c40e58eea8c5_fk_core_user_id FOREIGN KEY (user_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_sl_serviceclass_id_77da7f94b58488b_fk_core_serviceclass_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slice
-    ADD CONSTRAINT core_sl_serviceclass_id_77da7f94b58488b_fk_core_serviceclass_id FOREIGN KEY ("serviceClass_id") REFERENCES core_serviceclass(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_slice_creator_id_7c5fa82797e0d281_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slice
-    ADD CONSTRAINT core_slice_creator_id_7c5fa82797e0d281_fk_core_user_id FOREIGN KEY (creator_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_slice_default_flavor_id_7e9b60d7e92ce276_fk_core_flavor_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slice
-    ADD CONSTRAINT core_slice_default_flavor_id_7e9b60d7e92ce276_fk_core_flavor_id FOREIGN KEY (default_flavor_id) REFERENCES core_flavor(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_slice_default_image_id_4cc5967fffec96da_fk_core_image_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slice
-    ADD CONSTRAINT core_slice_default_image_id_4cc5967fffec96da_fk_core_image_id FOREIGN KEY (default_image_id) REFERENCES core_image(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_slice_service_id_56ec7a0b3401bf7c_fk_core_service_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slice
-    ADD CONSTRAINT core_slice_service_id_56ec7a0b3401bf7c_fk_core_service_id FOREIGN KEY (service_id) REFERENCES core_service(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_slice_site_id_13fe089488dd45_fk_core_site_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slice
-    ADD CONSTRAINT core_slice_site_id_13fe089488dd45_fk_core_site_id FOREIGN KEY (site_id) REFERENCES core_site(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_slicecredential_slice_id_1c79ffce7dd61f3c_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slicecredential
-    ADD CONSTRAINT core_slicecredential_slice_id_1c79ffce7dd61f3c_fk_core_slice_id FOREIGN KEY (slice_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_sliceprivile_role_id_1d55e0b0ac43107a_fk_core_slicerole_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_sliceprivilege
-    ADD CONSTRAINT core_sliceprivile_role_id_1d55e0b0ac43107a_fk_core_slicerole_id FOREIGN KEY (role_id) REFERENCES core_slicerole(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_sliceprivilege_slice_id_3fbaadbffeb24835_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_sliceprivilege
-    ADD CONSTRAINT core_sliceprivilege_slice_id_3fbaadbffeb24835_fk_core_slice_id FOREIGN KEY (slice_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_sliceprivilege_user_id_253eeb2ddef0e745_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_sliceprivilege
-    ADD CONSTRAINT core_sliceprivilege_user_id_253eeb2ddef0e745_fk_core_user_id FOREIGN KEY (user_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_slicetag_slice_id_75dfa2524457256_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_slicetag
-    ADD CONSTRAINT core_slicetag_slice_id_75dfa2524457256_fk_core_slice_id FOREIGN KEY (slice_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_tag_service_id_5e53fc9f784e1c0_fk_core_service_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tag
-    ADD CONSTRAINT core_tag_service_id_5e53fc9f784e1c0_fk_core_service_id FOREIGN KEY (service_id) REFERENCES core_service(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_te_provider_service_id_6f2ead723387396a_fk_core_service_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenant
-    ADD CONSTRAINT core_te_provider_service_id_6f2ead723387396a_fk_core_service_id FOREIGN KEY (provider_service_id) REFERENCES core_service(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_te_subscriber_tenant_id_5c45dc20d190aa0f_fk_core_tenant_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenant
-    ADD CONSTRAINT core_te_subscriber_tenant_id_5c45dc20d190aa0f_fk_core_tenant_id FOREIGN KEY (subscriber_tenant_id) REFERENCES core_tenant(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_tena_tenant_root_id_27d6362f903728d9_fk_core_tenantroot_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenantrootprivilege
-    ADD CONSTRAINT core_tena_tenant_root_id_27d6362f903728d9_fk_core_tenantroot_id FOREIGN KEY (tenant_root_id) REFERENCES core_tenantroot(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_tenant_subscriber_user_id_2fad15bb074ed3d6_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenant
-    ADD CONSTRAINT core_tenant_subscriber_user_id_2fad15bb074ed3d6_fk_core_user_id FOREIGN KEY (subscriber_user_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_tenantro_role_id_56bfa65de5fb299_fk_core_tenantrootrole_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenantrootprivilege
-    ADD CONSTRAINT core_tenantro_role_id_56bfa65de5fb299_fk_core_tenantrootrole_id FOREIGN KEY (role_id) REFERENCES core_tenantrootrole(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_tenantrootprivile_user_id_77f85e71ff279b56_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_tenantrootprivilege
-    ADD CONSTRAINT core_tenantrootprivile_user_id_77f85e71ff279b56_fk_core_user_id FOREIGN KEY (user_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_user_site_id_3cc7d076f7b58a7_fk_core_site_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_user
-    ADD CONSTRAINT core_user_site_id_3cc7d076f7b58a7_fk_core_site_id FOREIGN KEY (site_id) REFERENCES core_site(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_usercredential_user_id_2db1046eae94c01a_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_usercredential
-    ADD CONSTRAINT core_usercredential_user_id_2db1046eae94c01a_fk_core_user_id FOREIGN KEY (user_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: core_userdashboardview_user_id_66fac29b72c1b321_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY core_userdashboardview
-    ADD CONSTRAINT core_userdashboardview_user_id_66fac29b72c1b321_fk_core_user_id FOREIGN KEY (user_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: d9aeae61481f9ccd18f57c7b51a38461; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_sitemap
-    ADD CONSTRAINT d9aeae61481f9ccd18f57c7b51a38461 FOREIGN KEY ("hpcService_id") REFERENCES hpc_hpcservice(service_ptr_id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: defaultoriginserver_id_3cb657d79e69f1e9_fk_hpc_originserver_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_cdnprefix
-    ADD CONSTRAINT defaultoriginserver_id_3cb657d79e69f1e9_fk_hpc_originserver_id FOREIGN KEY ("defaultOriginServer_id") REFERENCES hpc_originserver(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: djan_content_type_id_697914295151027a_fk_django_content_type_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY django_admin_log
-    ADD CONSTRAINT djan_content_type_id_697914295151027a_fk_django_content_type_id FOREIGN KEY (content_type_id) REFERENCES django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: django_admin_log_user_id_52fdd58701c5f563_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY django_admin_log
-    ADD CONSTRAINT django_admin_log_user_id_52fdd58701c5f563_fk_core_user_id FOREIGN KEY (user_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: ea3ce8ae9fc3a320680647cef82b1a56; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_serviceprovider
-    ADD CONSTRAINT ea3ce8ae9fc3a320680647cef82b1a56 FOREIGN KEY ("hpcService_id") REFERENCES hpc_hpcservice(service_ptr_id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: h_contentprovider_id_1420a46480bb1aff_fk_hpc_contentprovider_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_contentprovider_users
-    ADD CONSTRAINT h_contentprovider_id_1420a46480bb1aff_fk_hpc_contentprovider_id FOREIGN KEY (contentprovider_id) REFERENCES hpc_contentprovider(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: h_contentprovider_id_2f27d5fdbb2459c8_fk_hpc_contentprovider_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_originserver
-    ADD CONSTRAINT h_contentprovider_id_2f27d5fdbb2459c8_fk_hpc_contentprovider_id FOREIGN KEY ("contentProvider_id") REFERENCES hpc_contentprovider(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: h_contentprovider_id_63639a8e6ca8e2cd_fk_hpc_contentprovider_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_cdnprefix
-    ADD CONSTRAINT h_contentprovider_id_63639a8e6ca8e2cd_fk_hpc_contentprovider_id FOREIGN KEY ("contentProvider_id") REFERENCES hpc_contentprovider(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: h_contentprovider_id_7acf72f284b3b30e_fk_hpc_contentprovider_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_accessmap
-    ADD CONSTRAINT h_contentprovider_id_7acf72f284b3b30e_fk_hpc_contentprovider_id FOREIGN KEY ("contentProvider_id") REFERENCES hpc_contentprovider(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: h_serviceprovider_id_1b9fb41a73ac1b6a_fk_hpc_serviceprovider_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_contentprovider
-    ADD CONSTRAINT h_serviceprovider_id_1b9fb41a73ac1b6a_fk_hpc_serviceprovider_id FOREIGN KEY ("serviceProvider_id") REFERENCES hpc_serviceprovider(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: h_serviceprovider_id_788bfbe86c90f205_fk_hpc_serviceprovider_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_sitemap
-    ADD CONSTRAINT h_serviceprovider_id_788bfbe86c90f205_fk_hpc_serviceprovider_id FOREIGN KEY ("serviceProvider_id") REFERENCES hpc_serviceprovider(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: hp_contentprovider_id_2a37a8e8bee9c03_fk_hpc_contentprovider_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_sitemap
-    ADD CONSTRAINT hp_contentprovider_id_2a37a8e8bee9c03_fk_hpc_contentprovider_id FOREIGN KEY ("contentProvider_id") REFERENCES hpc_contentprovider(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: hpc_contentprovider_us_user_id_480a7cd783fecf37_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_contentprovider_users
-    ADD CONSTRAINT hpc_contentprovider_us_user_id_480a7cd783fecf37_fk_core_user_id FOREIGN KEY (user_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: hpc_hpcservi_service_ptr_id_1b2f328c77b1554d_fk_core_service_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_hpcservice
-    ADD CONSTRAINT hpc_hpcservi_service_ptr_id_1b2f328c77b1554d_fk_core_service_id FOREIGN KEY (service_ptr_id) REFERENCES core_service(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: hpc_sitemap_cdnprefix_id_3c0b2f75c5a9a81e_fk_hpc_cdnprefix_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY hpc_sitemap
-    ADD CONSTRAINT hpc_sitemap_cdnprefix_id_3c0b2f75c5a9a81e_fk_hpc_cdnprefix_id FOREIGN KEY ("cdnPrefix_id") REFERENCES hpc_cdnprefix(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: requestroute_service_ptr_id_479451a78740d081_fk_core_service_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY requestrouter_requestrouterservice
-    ADD CONSTRAINT requestroute_service_ptr_id_479451a78740d081_fk_core_service_id FOREIGN KEY (service_ptr_id) REFERENCES core_service(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: requestrouter_serv_owner_id_5c71a9586041d2bc_fk_core_service_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY requestrouter_servicemap
-    ADD CONSTRAINT requestrouter_serv_owner_id_5c71a9586041d2bc_fk_core_service_id FOREIGN KEY (owner_id) REFERENCES core_service(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: requestrouter_servic_slice_id_50e57057a561f22f_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY requestrouter_servicemap
-    ADD CONSTRAINT requestrouter_servic_slice_id_50e57057a561f22f_fk_core_slice_id FOREIGN KEY (slice_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: sy_volume_id_id_7dd16c76bfd7b129_fk_syndicate_storage_volume_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_volumeslice
-    ADD CONSTRAINT sy_volume_id_id_7dd16c76bfd7b129_fk_syndicate_storage_volume_id FOREIGN KEY (volume_id_id) REFERENCES syndicate_storage_volume(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: syndi_volume_id_3718f5b02d2245ce_fk_syndicate_storage_volume_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_volumeaccessright
-    ADD CONSTRAINT syndi_volume_id_3718f5b02d2245ce_fk_syndicate_storage_volume_id FOREIGN KEY (volume_id) REFERENCES syndicate_storage_volume(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: syndicate_st_service_ptr_id_26ca3aeabed50b6d_fk_core_service_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_syndicateservice
-    ADD CONSTRAINT syndicate_st_service_ptr_id_26ca3aeabed50b6d_fk_core_service_id FOREIGN KEY (service_ptr_id) REFERENCES core_service(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: syndicate_storage__owner_id_id_3d3e3d492d6cd6b5_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_volumeaccessright
-    ADD CONSTRAINT syndicate_storage__owner_id_id_3d3e3d492d6cd6b5_fk_core_user_id FOREIGN KEY (owner_id_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: syndicate_storage__owner_id_id_7a99f36bf51f2c78_fk_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_volume
-    ADD CONSTRAINT syndicate_storage__owner_id_id_7a99f36bf51f2c78_fk_core_user_id FOREIGN KEY (owner_id_id) REFERENCES core_user(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: syndicate_storage_slice_id_id_1c80c36535559ad6_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_slicesecret
-    ADD CONSTRAINT syndicate_storage_slice_id_id_1c80c36535559ad6_fk_core_slice_id FOREIGN KEY (slice_id_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: syndicate_storage_slice_id_id_36fa39a9ae458538_fk_core_slice_id; Type: FK CONSTRAINT; Schema: public; Owner: postgres
---
-
-ALTER TABLE ONLY syndicate_storage_volumeslice
-    ADD CONSTRAINT syndicate_storage_slice_id_id_36fa39a9ae458538_fk_core_slice_id FOREIGN KEY (slice_id_id) REFERENCES core_slice(id) DEFERRABLE INITIALLY DEFERRED;
-
-
---
--- Name: public; Type: ACL; Schema: -; Owner: postgres
---
-
-REVOKE ALL ON SCHEMA public FROM PUBLIC;
-REVOKE ALL ON SCHEMA public FROM postgres;
-GRANT ALL ON SCHEMA public TO postgres;
-GRANT ALL ON SCHEMA public TO PUBLIC;
-
-
---
--- PostgreSQL database dump complete
---
-
diff --git a/xos/core/xoslib/xos_dump_mysql.sql b/xos/core/xoslib/xos_dump_mysql.sql
deleted file mode 100644
index d223da5..0000000
--- a/xos/core/xoslib/xos_dump_mysql.sql
+++ /dev/null
@@ -1,1837 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-# Converted with pg2mysql-1.9
-# Converted on Fri, 16 Oct 2015 05:12:46 -0400
-# Lightbox Technologies Inc. http://www.lightbox.ca
-
-SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
-SET time_zone="+00:00";
-
-CREATE TABLE auth_group (
-    id int(11) NOT NULL,
-    name varchar(80) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE auth_group_permissions (
-    id int(11) NOT NULL,
-    group_id int(11) NOT NULL,
-    permission_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE auth_permission (
-    id int(11) NOT NULL,
-    name varchar(50) NOT NULL,
-    content_type_id int(11) NOT NULL,
-    codename varchar(100) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_account (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    site_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_charge (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    kind varchar(30) NOT NULL,
-    state varchar(30) NOT NULL,
-    date timestamp NOT NULL,
-    amount double precision NOT NULL,
-    `coreHours` double precision NOT NULL,
-    account_id int(11) NOT NULL,
-    invoice_id int(11),
-    object_id int(11) NOT NULL,
-    slice_id int(11)
-) ENGINE=MyISAM;
-
-CREATE TABLE core_controller (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(200) NOT NULL,
-    backend_type varchar(200) NOT NULL,
-    version varchar(200) NOT NULL,
-    auth_url varchar(200),
-    admin_user varchar(200),
-    admin_password varchar(200),
-    admin_tenant varchar(200),
-    domain varchar(200),
-    deployment_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_controllercredential (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(128) NOT NULL,
-    key_id text NOT NULL,
-    enc_value text NOT NULL,
-    controller_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_controllerdashboardview (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    enabled bool NOT NULL,
-    url text NOT NULL,
-    controller_id int(11) NOT NULL,
-    `dashboardView_id` int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_controllerimages (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    glance_image_id varchar(200),
-    controller_id int(11) NOT NULL,
-    image_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_controllernetwork (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    net_id text,
-    router_id text,
-    subnet_id text,
-    subnet varchar(32) NOT NULL,
-    controller_id int(11) NOT NULL,
-    network_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_controllerrole (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role varchar(30) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_controllersite (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    tenant_id varchar(200),
-    controller_id int(11),
-    site_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_controllersiteprivilege (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role_id varchar(200),
-    controller_id int(11) NOT NULL,
-    site_privilege_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_controllerslice (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    tenant_id varchar(200),
-    controller_id int(11) NOT NULL,
-    slice_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_controllersliceprivilege (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role_id varchar(200),
-    controller_id int(11) NOT NULL,
-    slice_privilege_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_controlleruser (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    kuser_id varchar(200),
-    controller_id int(11) NOT NULL,
-    user_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_dashboardview (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(200) NOT NULL,
-    url text NOT NULL,
-    enabled bool NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_dashboardview_deployments (
-    id int(11) NOT NULL,
-    dashboardview_id int(11) NOT NULL,
-    deployment_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_deployment (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(200) NOT NULL,
-    `accessControl` text NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_deploymentprivilege (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    deployment_id int(11) NOT NULL,
-    role_id int(11) NOT NULL,
-    user_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_deploymentrole (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role varchar(30) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_flavor (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(32) NOT NULL,
-    description text,
-    flavor varchar(32) NOT NULL,
-    `order` int(11) NOT NULL,
-    `default` bool NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_flavor_deployments (
-    id int(11) NOT NULL,
-    flavor_id int(11) NOT NULL,
-    deployment_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_image (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name text NOT NULL,
-    disk_format text NOT NULL,
-    container_format text NOT NULL,
-    path text
-) ENGINE=MyISAM;
-
-CREATE TABLE core_imagedeployments (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    deployment_id int(11) NOT NULL,
-    image_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_instance (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    instance_id varchar(200),
-    instance_uuid varchar(200),
-    name varchar(200) NOT NULL,
-    instance_name varchar(200),
-    ip varchar(43),
-    numberCores int(11) NOT NULL,
-    userData text,
-    creator_id int(11),
-    deployment_id int(11) NOT NULL,
-    flavor_id int(11) NOT NULL,
-    image_id int(11) NOT NULL,
-    node_id int(11) NOT NULL,
-    slice_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_invoice (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    date timestamp NOT NULL,
-    account_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_network (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(32) NOT NULL,
-    subnet varchar(32) NOT NULL,
-    ports text,
-    labels text,
-    guaranteed_bandwidth int(11) NOT NULL,
-    permit_all_slices bool NOT NULL,
-    topology_parameters text,
-    controller_url text,
-    controller_parameters text,
-    network_id text,
-    router_id text,
-    subnet_id text,
-    autoconnect bool NOT NULL,
-    owner_id int(11) NOT NULL,
-    template_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_network_permitted_slices (
-    id int(11) NOT NULL,
-    network_id int(11) NOT NULL,
-    slice_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_networkparameter (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    value text NOT NULL,
-    object_id int(11) NOT NULL,
-    content_type_id int(11) NOT NULL,
-    parameter_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_networkparametertype (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(128) NOT NULL,
-    description text NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_networkslice (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    network_id int(11) NOT NULL,
-    slice_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_networktemplate (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(32) NOT NULL,
-    description text,
-    guaranteed_bandwidth int(11) NOT NULL,
-    visibility varchar(30) NOT NULL,
-    translation varchar(30) NOT NULL,
-    shared_network_name varchar(30),
-    shared_network_id text,
-    topology_kind varchar(30) NOT NULL,
-    controller_kind varchar(30)
-) ENGINE=MyISAM;
-
-CREATE TABLE core_node (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(200) NOT NULL,
-    site_id int(11),
-    site_deployment_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_payment (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    amount double precision NOT NULL,
-    date timestamp NOT NULL,
-    account_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_port (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    ip varchar(43),
-    port_id text,
-    mac text,
-    instance_id int(11),
-    network_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_program (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(30) NOT NULL,
-    description text,
-    kind varchar(30) NOT NULL,
-    command varchar(30),
-    contents text,
-    output text,
-    messages text,
-    `status` text,
-    owner_id int(11)
-) ENGINE=MyISAM;
-
-CREATE TABLE core_project (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(200) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_reservation (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    `startTime` timestamp NOT NULL,
-    duration int(11) NOT NULL,
-    slice_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_reservedresource (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    quantity int(11) NOT NULL,
-    instance_id int(11) NOT NULL,
-    `reservationSet_id` int(11) NOT NULL,
-    resource_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_role (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role_type varchar(80) NOT NULL,
-    role varchar(80),
-    description varchar(120) NOT NULL,
-    content_type_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_router (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(32) NOT NULL,
-    owner_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_router_networks (
-    id int(11) NOT NULL,
-    router_id int(11) NOT NULL,
-    network_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE `core_router_permittedNetworks` (
-    id int(11) NOT NULL,
-    router_id int(11) NOT NULL,
-    network_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_service (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    description text,
-    enabled bool NOT NULL,
-    kind varchar(30) NOT NULL,
-    name varchar(30) NOT NULL,
-    `versionNumber` varchar(30) NOT NULL,
-    published bool NOT NULL,
-    view_url text,
-    icon_url text,
-    public_key text,
-    service_specific_id varchar(30),
-    service_specific_attribute text
-) ENGINE=MyISAM;
-
-CREATE TABLE core_serviceattribute (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(128) NOT NULL,
-    value text NOT NULL,
-    service_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_serviceclass (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(32) NOT NULL,
-    description varchar(255) NOT NULL,
-    commitment int(11) NOT NULL,
-    `membershipFee` int(11) NOT NULL,
-    `membershipFeeMonths` int(11) NOT NULL,
-    `upgradeRequiresApproval` bool NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE `core_serviceclass_upgradeFrom` (
-    id int(11) NOT NULL,
-    from_serviceclass_id int(11) NOT NULL,
-    to_serviceclass_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_serviceprivilege (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role_id int(11) NOT NULL,
-    service_id int(11) NOT NULL,
-    user_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_serviceresource (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(32) NOT NULL,
-    `maxUnitsDeployment` int(11) NOT NULL,
-    `maxUnitsNode` int(11) NOT NULL,
-    `maxDuration` int(11) NOT NULL,
-    `bucketInRate` int(11) NOT NULL,
-    `bucketMaxSize` int(11) NOT NULL,
-    cost int(11) NOT NULL,
-    `calendarReservable` bool NOT NULL,
-    `serviceClass_id` int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_servicerole (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role varchar(30) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_site (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(200) NOT NULL,
-    site_url text,
-    enabled bool NOT NULL,
-    hosts_nodes bool NOT NULL,
-    hosts_users bool NOT NULL,
-    location varchar(42) NOT NULL,
-    longitude double precision,
-    latitude double precision,
-    login_base varchar(50) NOT NULL,
-    is_public bool NOT NULL,
-    abbreviated_name varchar(80) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_sitecredential (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(128) NOT NULL,
-    key_id text NOT NULL,
-    enc_value text NOT NULL,
-    site_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_sitedeployment (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    availability_zone varchar(200),
-    controller_id int(11),
-    deployment_id int(11) NOT NULL,
-    site_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_siteprivilege (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role_id int(11) NOT NULL,
-    site_id int(11) NOT NULL,
-    user_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_siterole (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role varchar(30) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_slice (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(80) NOT NULL,
-    enabled bool NOT NULL,
-    omf_friendly bool NOT NULL,
-    description text NOT NULL,
-    slice_url text NOT NULL,
-    max_instances int(11) NOT NULL,
-    network text,
-    mount_data_sets text,
-    creator_id int(11),
-    default_flavor_id int(11),
-    default_image_id int(11),
-    service_id int(11),
-    `serviceClass_id` int(11),
-    site_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_slicecredential (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(128) NOT NULL,
-    key_id text NOT NULL,
-    enc_value text NOT NULL,
-    slice_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_sliceprivilege (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role_id int(11) NOT NULL,
-    slice_id int(11) NOT NULL,
-    user_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_slicerole (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role varchar(30) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_slicetag (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(30) NOT NULL,
-    value text NOT NULL,
-    slice_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_tag (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(128) NOT NULL,
-    value text NOT NULL,
-    object_id int(11) NOT NULL,
-    content_type_id int(11) NOT NULL,
-    service_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_tenant (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    kind varchar(30) NOT NULL,
-    service_specific_id varchar(30),
-    service_specific_attribute text,
-    connect_method varchar(30) NOT NULL,
-    provider_service_id int(11) NOT NULL,
-    subscriber_root_id int(11),
-    subscriber_service_id int(11),
-    subscriber_tenant_id int(11),
-    subscriber_user_id int(11)
-) ENGINE=MyISAM;
-
-CREATE TABLE core_tenantroot (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    kind varchar(30) NOT NULL,
-    name varchar(255),
-    service_specific_attribute text,
-    service_specific_id varchar(30)
-) ENGINE=MyISAM;
-
-CREATE TABLE core_tenantrootprivilege (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role_id int(11) NOT NULL,
-    tenant_root_id int(11) NOT NULL,
-    user_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_tenantrootrole (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    role varchar(30) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_usableobject (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name text NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_user (
-    id int(11) NOT NULL,
-    password varchar(128) NOT NULL,
-    last_login timestamp NOT NULL,
-    email varchar(255) NOT NULL,
-    username varchar(255) NOT NULL,
-    firstname varchar(200) NOT NULL,
-    lastname varchar(200) NOT NULL,
-    phone varchar(100),
-    user_url varchar(200),
-    public_key text,
-    is_active bool NOT NULL,
-    is_admin bool NOT NULL,
-    is_staff bool NOT NULL,
-    is_readonly bool NOT NULL,
-    is_registering bool NOT NULL,
-    is_appuser bool NOT NULL,
-    login_page varchar(200),
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    timezone varchar(100) NOT NULL,
-    site_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_usercredential (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(128) NOT NULL,
-    key_id text NOT NULL,
-    enc_value text NOT NULL,
-    user_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE core_userdashboardview (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    `order` int(11) NOT NULL,
-    `dashboardView_id` int(11) NOT NULL,
-    user_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE django_admin_log (
-    id int(11) NOT NULL,
-    action_time timestamp NOT NULL,
-    object_id text,
-    object_repr varchar(200) NOT NULL,
-    action_flag smallint NOT NULL,
-    change_message text NOT NULL,
-    content_type_id int(11),
-    user_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE django_content_type (
-    id int(11) NOT NULL,
-    name varchar(100) NOT NULL,
-    app_label varchar(100) NOT NULL,
-    model varchar(100) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE django_migrations (
-    id int(11) NOT NULL,
-    app varchar(255) NOT NULL,
-    name varchar(255) NOT NULL,
-    applied timestamp NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE django_session (
-    session_key varchar(40) NOT NULL,
-    session_data text NOT NULL,
-    expire_date timestamp NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE hpc_accessmap (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(64) NOT NULL,
-    description text,
-    map varchar(100) NOT NULL,
-    `contentProvider_id` int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE hpc_cdnprefix (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    cdn_prefix_id int(11),
-    prefix varchar(200) NOT NULL,
-    description text,
-    enabled bool NOT NULL,
-    `contentProvider_id` int(11) NOT NULL,
-    `defaultOriginServer_id` int(11)
-) ENGINE=MyISAM;
-
-CREATE TABLE hpc_contentprovider (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    content_provider_id int(11),
-    name varchar(254) NOT NULL,
-    enabled bool NOT NULL,
-    description text,
-    `serviceProvider_id` int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE hpc_contentprovider_users (
-    id int(11) NOT NULL,
-    contentprovider_id int(11) NOT NULL,
-    user_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE hpc_hpchealthcheck (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    kind varchar(30) NOT NULL,
-    resource_name text NOT NULL,
-    result_contains text,
-    result_min_size int(11),
-    result_max_size int(11),
-    `hpcService_id` int(11)
-) ENGINE=MyISAM;
-
-CREATE TABLE hpc_hpcservice (
-    service_ptr_id int(11) NOT NULL,
-    cmi_hostname varchar(254),
-    hpc_port80 bool NOT NULL,
-    watcher_hpc_network varchar(254),
-    watcher_dnsdemux_network varchar(254),
-    watcher_dnsredir_network varchar(254)
-) ENGINE=MyISAM;
-
-CREATE TABLE hpc_originserver (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    origin_server_id int(11),
-    url text NOT NULL,
-    authenticated bool NOT NULL,
-    enabled bool NOT NULL,
-    protocol varchar(12) NOT NULL,
-    redirects bool NOT NULL,
-    description text,
-    `contentProvider_id` int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE hpc_serviceprovider (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    service_provider_id int(11),
-    name varchar(254) NOT NULL,
-    description text,
-    enabled bool NOT NULL,
-    `hpcService_id` int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE hpc_sitemap (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(64) NOT NULL,
-    description text,
-    map varchar(100) NOT NULL,
-    map_id int(11),
-    `cdnPrefix_id` int(11),
-    `contentProvider_id` int(11),
-    `hpcService_id` int(11),
-    `serviceProvider_id` int(11)
-) ENGINE=MyISAM;
-
-CREATE TABLE requestrouter_requestrouterservice (
-    service_ptr_id int(11) NOT NULL,
-    `behindNat` bool NOT NULL,
-    `defaultTTL` int(11) NOT NULL,
-    `defaultAction` varchar(30) NOT NULL,
-    `lastResortAction` varchar(30) NOT NULL,
-    `maxAnswers` int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE requestrouter_servicemap (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(50) NOT NULL,
-    prefix text NOT NULL,
-    `siteMap` varchar(100) NOT NULL,
-    `accessMap` varchar(100) NOT NULL,
-    owner_id int(11) NOT NULL,
-    slice_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE syndicate_storage_slicesecret (
-    id int(11) NOT NULL,
-    secret text NOT NULL,
-    slice_id_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE syndicate_storage_syndicateprincipal (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    principal_id text NOT NULL,
-    public_key_pem text NOT NULL,
-    sealed_private_key text NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE syndicate_storage_syndicateservice (
-    service_ptr_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE syndicate_storage_volume (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    name varchar(64) NOT NULL,
-    description text,
-    blocksize int(11) NOT NULL,
-    private bool NOT NULL,
-    archive bool NOT NULL,
-    cap_read_data bool NOT NULL,
-    cap_write_data bool NOT NULL,
-    cap_host_data bool NOT NULL,
-    owner_id_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE syndicate_storage_volumeaccessright (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    cap_read_data bool NOT NULL,
-    cap_write_data bool NOT NULL,
-    cap_host_data bool NOT NULL,
-    owner_id_id int(11) NOT NULL,
-    volume_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-CREATE TABLE syndicate_storage_volumeslice (
-    id int(11) NOT NULL,
-    created timestamp NOT NULL,
-    updated timestamp NOT NULL,
-    enacted timestamp,
-    policed timestamp,
-    backend_register varchar(140),
-    backend_status text NOT NULL,
-    deleted bool NOT NULL,
-    write_protect bool NOT NULL,
-    lazy_blocked bool NOT NULL,
-    no_sync bool NOT NULL,
-    cap_read_data bool NOT NULL,
-    cap_write_data bool NOT NULL,
-    cap_host_data bool NOT NULL,
-    `UG_portnum` int(11) NOT NULL,
-    `RG_portnum` int(11) NOT NULL,
-    credentials_blob text,
-    slice_id_id int(11) NOT NULL,
-    volume_id_id int(11) NOT NULL
-) ENGINE=MyISAM;
-
-ALTER TABLE auth_group_permissions
-    ADD CONSTRAINT auth_group_permissions_pkey PRIMARY KEY (id);
-ALTER TABLE auth_group
-    ADD CONSTRAINT auth_group_pkey PRIMARY KEY (id);
-ALTER TABLE auth_permission
-    ADD CONSTRAINT auth_permission_pkey PRIMARY KEY (id);
-ALTER TABLE core_account
-    ADD CONSTRAINT core_account_pkey PRIMARY KEY (id);
-ALTER TABLE core_charge
-    ADD CONSTRAINT core_charge_pkey PRIMARY KEY (id);
-ALTER TABLE core_controller
-    ADD CONSTRAINT core_controller_pkey PRIMARY KEY (id);
-ALTER TABLE core_controllercredential
-    ADD CONSTRAINT core_controllercredential_pkey PRIMARY KEY (id);
-ALTER TABLE core_controllerdashboardview
-    ADD CONSTRAINT core_controllerdashboardview_pkey PRIMARY KEY (id);
-ALTER TABLE core_controllerimages
-    ADD CONSTRAINT core_controllerimages_pkey PRIMARY KEY (id);
-ALTER TABLE core_controllernetwork
-    ADD CONSTRAINT core_controllernetwork_pkey PRIMARY KEY (id);
-ALTER TABLE core_controllerrole
-    ADD CONSTRAINT core_controllerrole_pkey PRIMARY KEY (id);
-ALTER TABLE core_controllersite
-    ADD CONSTRAINT core_controllersite_pkey PRIMARY KEY (id);
-ALTER TABLE core_controllersiteprivilege
-    ADD CONSTRAINT core_controllersiteprivilege_pkey PRIMARY KEY (id);
-ALTER TABLE core_controllerslice
-    ADD CONSTRAINT core_controllerslice_pkey PRIMARY KEY (id);
-ALTER TABLE core_controllersliceprivilege
-    ADD CONSTRAINT core_controllersliceprivilege_pkey PRIMARY KEY (id);
-ALTER TABLE core_controlleruser
-    ADD CONSTRAINT core_controlleruser_pkey PRIMARY KEY (id);
-ALTER TABLE core_dashboardview_deployments
-    ADD CONSTRAINT core_dashboardview_deployments_pkey PRIMARY KEY (id);
-ALTER TABLE core_dashboardview
-    ADD CONSTRAINT core_dashboardview_pkey PRIMARY KEY (id);
-ALTER TABLE core_deployment
-    ADD CONSTRAINT core_deployment_pkey PRIMARY KEY (id);
-ALTER TABLE core_deploymentprivilege
-    ADD CONSTRAINT core_deploymentprivilege_pkey PRIMARY KEY (id);
-ALTER TABLE core_deploymentrole
-    ADD CONSTRAINT core_deploymentrole_pkey PRIMARY KEY (id);
-ALTER TABLE core_flavor_deployments
-    ADD CONSTRAINT core_flavor_deployments_pkey PRIMARY KEY (id);
-ALTER TABLE core_flavor
-    ADD CONSTRAINT core_flavor_pkey PRIMARY KEY (id);
-ALTER TABLE core_image
-    ADD CONSTRAINT core_image_pkey PRIMARY KEY (id);
-ALTER TABLE core_imagedeployments
-    ADD CONSTRAINT core_imagedeployments_pkey PRIMARY KEY (id);
-ALTER TABLE core_instance
-    ADD CONSTRAINT core_instance_pkey PRIMARY KEY (id);
-ALTER TABLE core_invoice
-    ADD CONSTRAINT core_invoice_pkey PRIMARY KEY (id);
-ALTER TABLE core_network_permitted_slices
-    ADD CONSTRAINT core_network_permitted_slices_pkey PRIMARY KEY (id);
-ALTER TABLE core_network
-    ADD CONSTRAINT core_network_pkey PRIMARY KEY (id);
-ALTER TABLE core_networkparameter
-    ADD CONSTRAINT core_networkparameter_pkey PRIMARY KEY (id);
-ALTER TABLE core_networkparametertype
-    ADD CONSTRAINT core_networkparametertype_pkey PRIMARY KEY (id);
-ALTER TABLE core_networkslice
-    ADD CONSTRAINT core_networkslice_pkey PRIMARY KEY (id);
-ALTER TABLE core_networktemplate
-    ADD CONSTRAINT core_networktemplate_pkey PRIMARY KEY (id);
-ALTER TABLE core_node
-    ADD CONSTRAINT core_node_pkey PRIMARY KEY (id);
-ALTER TABLE core_payment
-    ADD CONSTRAINT core_payment_pkey PRIMARY KEY (id);
-ALTER TABLE core_port
-    ADD CONSTRAINT core_port_pkey PRIMARY KEY (id);
-ALTER TABLE core_program
-    ADD CONSTRAINT core_program_pkey PRIMARY KEY (id);
-ALTER TABLE core_project
-    ADD CONSTRAINT core_project_pkey PRIMARY KEY (id);
-ALTER TABLE core_reservation
-    ADD CONSTRAINT core_reservation_pkey PRIMARY KEY (id);
-ALTER TABLE core_reservedresource
-    ADD CONSTRAINT core_reservedresource_pkey PRIMARY KEY (id);
-ALTER TABLE core_role
-    ADD CONSTRAINT core_role_pkey PRIMARY KEY (id);
-ALTER TABLE core_router_networks
-    ADD CONSTRAINT core_router_networks_pkey PRIMARY KEY (id);
-ALTER TABLE `core_router_permittedNetworks`
-    ADD CONSTRAINT core_router_permittedNetworks_pkey PRIMARY KEY (id);
-ALTER TABLE core_router
-    ADD CONSTRAINT core_router_pkey PRIMARY KEY (id);
-ALTER TABLE core_service
-    ADD CONSTRAINT core_service_pkey PRIMARY KEY (id);
-ALTER TABLE core_serviceattribute
-    ADD CONSTRAINT core_serviceattribute_pkey PRIMARY KEY (id);
-ALTER TABLE core_serviceclass
-    ADD CONSTRAINT core_serviceclass_pkey PRIMARY KEY (id);
-ALTER TABLE `core_serviceclass_upgradeFrom`
-    ADD CONSTRAINT core_serviceclass_upgradeFrom_pkey PRIMARY KEY (id);
-ALTER TABLE core_serviceprivilege
-    ADD CONSTRAINT core_serviceprivilege_pkey PRIMARY KEY (id);
-ALTER TABLE core_serviceresource
-    ADD CONSTRAINT core_serviceresource_pkey PRIMARY KEY (id);
-ALTER TABLE core_servicerole
-    ADD CONSTRAINT core_servicerole_pkey PRIMARY KEY (id);
-ALTER TABLE core_site
-    ADD CONSTRAINT core_site_pkey PRIMARY KEY (id);
-ALTER TABLE core_sitecredential
-    ADD CONSTRAINT core_sitecredential_pkey PRIMARY KEY (id);
-ALTER TABLE core_sitedeployment
-    ADD CONSTRAINT core_sitedeployment_pkey PRIMARY KEY (id);
-ALTER TABLE core_siteprivilege
-    ADD CONSTRAINT core_siteprivilege_pkey PRIMARY KEY (id);
-ALTER TABLE core_siterole
-    ADD CONSTRAINT core_siterole_pkey PRIMARY KEY (id);
-ALTER TABLE core_slice
-    ADD CONSTRAINT core_slice_pkey PRIMARY KEY (id);
-ALTER TABLE core_slicecredential
-    ADD CONSTRAINT core_slicecredential_pkey PRIMARY KEY (id);
-ALTER TABLE core_sliceprivilege
-    ADD CONSTRAINT core_sliceprivilege_pkey PRIMARY KEY (id);
-ALTER TABLE core_slicerole
-    ADD CONSTRAINT core_slicerole_pkey PRIMARY KEY (id);
-ALTER TABLE core_slicetag
-    ADD CONSTRAINT core_slicetag_pkey PRIMARY KEY (id);
-ALTER TABLE core_tag
-    ADD CONSTRAINT core_tag_pkey PRIMARY KEY (id);
-ALTER TABLE core_tenant
-    ADD CONSTRAINT core_tenant_pkey PRIMARY KEY (id);
-ALTER TABLE core_tenantroot
-    ADD CONSTRAINT core_tenantroot_pkey PRIMARY KEY (id);
-ALTER TABLE core_tenantrootprivilege
-    ADD CONSTRAINT core_tenantrootprivilege_pkey PRIMARY KEY (id);
-ALTER TABLE core_tenantrootrole
-    ADD CONSTRAINT core_tenantrootrole_pkey PRIMARY KEY (id);
-ALTER TABLE core_usableobject
-    ADD CONSTRAINT core_usableobject_pkey PRIMARY KEY (id);
-ALTER TABLE core_user
-    ADD CONSTRAINT core_user_pkey PRIMARY KEY (id);
-ALTER TABLE core_usercredential
-    ADD CONSTRAINT core_usercredential_pkey PRIMARY KEY (id);
-ALTER TABLE core_userdashboardview
-    ADD CONSTRAINT core_userdashboardview_pkey PRIMARY KEY (id);
-ALTER TABLE django_admin_log
-    ADD CONSTRAINT django_admin_log_pkey PRIMARY KEY (id);
-ALTER TABLE django_content_type
-    ADD CONSTRAINT django_content_type_pkey PRIMARY KEY (id);
-ALTER TABLE django_migrations
-    ADD CONSTRAINT django_migrations_pkey PRIMARY KEY (id);
-ALTER TABLE django_session
-    ADD CONSTRAINT django_session_pkey PRIMARY KEY (session_key);
-ALTER TABLE hpc_accessmap
-    ADD CONSTRAINT hpc_accessmap_pkey PRIMARY KEY (id);
-ALTER TABLE hpc_cdnprefix
-    ADD CONSTRAINT hpc_cdnprefix_pkey PRIMARY KEY (id);
-ALTER TABLE hpc_contentprovider
-    ADD CONSTRAINT hpc_contentprovider_pkey PRIMARY KEY (id);
-ALTER TABLE hpc_contentprovider_users
-    ADD CONSTRAINT hpc_contentprovider_users_pkey PRIMARY KEY (id);
-ALTER TABLE hpc_hpchealthcheck
-    ADD CONSTRAINT hpc_hpchealthcheck_pkey PRIMARY KEY (id);
-ALTER TABLE hpc_hpcservice
-    ADD CONSTRAINT hpc_hpcservice_pkey PRIMARY KEY (service_ptr_id);
-ALTER TABLE hpc_originserver
-    ADD CONSTRAINT hpc_originserver_pkey PRIMARY KEY (id);
-ALTER TABLE hpc_serviceprovider
-    ADD CONSTRAINT hpc_serviceprovider_pkey PRIMARY KEY (id);
-ALTER TABLE hpc_sitemap
-    ADD CONSTRAINT hpc_sitemap_pkey PRIMARY KEY (id);
-ALTER TABLE requestrouter_requestrouterservice
-    ADD CONSTRAINT requestrouter_requestrouterservice_pkey PRIMARY KEY (service_ptr_id);
-ALTER TABLE requestrouter_servicemap
-    ADD CONSTRAINT requestrouter_servicemap_pkey PRIMARY KEY (id);
-ALTER TABLE syndicate_storage_slicesecret
-    ADD CONSTRAINT syndicate_storage_slicesecret_pkey PRIMARY KEY (id);
-ALTER TABLE syndicate_storage_syndicateprincipal
-    ADD CONSTRAINT syndicate_storage_syndicateprincipal_pkey PRIMARY KEY (id);
-ALTER TABLE syndicate_storage_syndicateservice
-    ADD CONSTRAINT syndicate_storage_syndicateservice_pkey PRIMARY KEY (service_ptr_id);
-ALTER TABLE syndicate_storage_volume
-    ADD CONSTRAINT syndicate_storage_volume_pkey PRIMARY KEY (id);
-ALTER TABLE syndicate_storage_volumeaccessright
-    ADD CONSTRAINT syndicate_storage_volumeaccessright_pkey PRIMARY KEY (id);
-ALTER TABLE syndicate_storage_volumeslice
-    ADD CONSTRAINT syndicate_storage_volumeslice_pkey PRIMARY KEY (id);
-ALTER TABLE `auth_group_permissions` ADD INDEX ( group_id ) ;
-ALTER TABLE `auth_group_permissions` ADD INDEX ( permission_id ) ;
-ALTER TABLE `auth_permission` ADD INDEX ( content_type_id ) ;
-ALTER TABLE `core_account` ADD INDEX ( site_id ) ;
-ALTER TABLE `core_charge` ADD INDEX ( account_id ) ;
-ALTER TABLE `core_charge` ADD INDEX ( object_id ) ;
-ALTER TABLE `core_charge` ADD INDEX ( slice_id ) ;
-ALTER TABLE `core_charge` ADD INDEX ( invoice_id ) ;
-ALTER TABLE `core_controller` ADD INDEX ( deployment_id ) ;
-ALTER TABLE `core_controllercredential` ADD INDEX ( controller_id ) ;
-ALTER TABLE `core_controllercredential` ADD INDEX ( name ) ;
-ALTER TABLE `core_controllerdashboardview` ADD INDEX ( dashboardView_id ) ;
-ALTER TABLE `core_controllerdashboardview` ADD INDEX ( controller_id ) ;
-ALTER TABLE `core_controllerimages` ADD INDEX ( controller_id ) ;
-ALTER TABLE `core_controllerimages` ADD INDEX ( image_id ) ;
-ALTER TABLE `core_controllernetwork` ADD INDEX ( network_id ) ;
-ALTER TABLE `core_controllernetwork` ADD INDEX ( controller_id ) ;
-ALTER TABLE `core_controllersite` ADD INDEX ( tenant_id ) ;
-ALTER TABLE `core_controllersite` ADD INDEX ( site_id ) ;
-ALTER TABLE `core_controllersite` ADD INDEX ( controller_id ) ;
-ALTER TABLE `core_controllersiteprivilege` ADD INDEX ( site_privilege_id ) ;
-ALTER TABLE `core_controllersiteprivilege` ADD INDEX ( role_id ) ;
-ALTER TABLE `core_controllersiteprivilege` ADD INDEX ( controller_id ) ;
-ALTER TABLE `core_controllerslice` ADD INDEX ( controller_id ) ;
-ALTER TABLE `core_controllerslice` ADD INDEX ( slice_id ) ;
-ALTER TABLE `core_controllersliceprivilege` ADD INDEX ( slice_privilege_id ) ;
-ALTER TABLE `core_controllersliceprivilege` ADD INDEX ( role_id ) ;
-ALTER TABLE `core_controllersliceprivilege` ADD INDEX ( controller_id ) ;
-ALTER TABLE `core_controlleruser` ADD INDEX ( controller_id ) ;
-ALTER TABLE `core_controlleruser` ADD INDEX ( user_id ) ;
-ALTER TABLE `core_dashboardview_deployments` ADD INDEX ( deployment_id ) ;
-ALTER TABLE `core_dashboardview_deployments` ADD INDEX ( dashboardview_id ) ;
-ALTER TABLE `core_deploymentprivilege` ADD INDEX ( deployment_id ) ;
-ALTER TABLE `core_deploymentprivilege` ADD INDEX ( role_id ) ;
-ALTER TABLE `core_deploymentprivilege` ADD INDEX ( user_id ) ;
-ALTER TABLE `core_flavor_deployments` ADD INDEX ( deployment_id ) ;
-ALTER TABLE `core_flavor_deployments` ADD INDEX ( flavor_id ) ;
-ALTER TABLE `core_imagedeployments` ADD INDEX ( deployment_id ) ;
-ALTER TABLE `core_imagedeployments` ADD INDEX ( image_id ) ;
-ALTER TABLE `core_instance` ADD INDEX ( creator_id ) ;
-ALTER TABLE `core_instance` ADD INDEX ( deployment_id ) ;
-ALTER TABLE `core_instance` ADD INDEX ( slice_id ) ;
-ALTER TABLE `core_instance` ADD INDEX ( node_id ) ;
-ALTER TABLE `core_instance` ADD INDEX ( flavor_id ) ;
-ALTER TABLE `core_instance` ADD INDEX ( image_id ) ;
-ALTER TABLE `core_invoice` ADD INDEX ( account_id ) ;
-ALTER TABLE `core_network` ADD INDEX ( owner_id ) ;
-ALTER TABLE `core_network` ADD INDEX ( template_id ) ;
-ALTER TABLE `core_network_permitted_slices` ADD INDEX ( network_id ) ;
-ALTER TABLE `core_network_permitted_slices` ADD INDEX ( slice_id ) ;
-ALTER TABLE `core_networkparameter` ADD INDEX ( content_type_id ) ;
-ALTER TABLE `core_networkparameter` ADD INDEX ( parameter_id ) ;
-ALTER TABLE `core_networkparametertype` ADD INDEX ( name ) ;
-ALTER TABLE `core_networkslice` ADD INDEX ( network_id ) ;
-ALTER TABLE `core_networkslice` ADD INDEX ( slice_id ) ;
-ALTER TABLE `core_node` ADD INDEX ( site_deployment_id ) ;
-ALTER TABLE `core_node` ADD INDEX ( site_id ) ;
-ALTER TABLE `core_payment` ADD INDEX ( account_id ) ;
-ALTER TABLE `core_port` ADD INDEX ( network_id ) ;
-ALTER TABLE `core_port` ADD INDEX ( instance_id ) ;
-ALTER TABLE `core_program` ADD INDEX ( owner_id ) ;
-ALTER TABLE `core_reservation` ADD INDEX ( slice_id ) ;
-ALTER TABLE `core_reservedresource` ADD INDEX ( instance_id ) ;
-ALTER TABLE `core_reservedresource` ADD INDEX ( reservationSet_id ) ;
-ALTER TABLE `core_reservedresource` ADD INDEX ( resource_id ) ;
-ALTER TABLE `core_role` ADD INDEX ( content_type_id ) ;
-ALTER TABLE `core_router` ADD INDEX ( owner_id ) ;
-ALTER TABLE `core_router_networks` ADD INDEX ( network_id ) ;
-ALTER TABLE `core_router_networks` ADD INDEX ( router_id ) ;
-ALTER TABLE `core_router_permittedNetworks` ADD INDEX ( network_id ) ;
-ALTER TABLE `core_router_permittedNetworks` ADD INDEX ( router_id ) ;
-ALTER TABLE `core_serviceattribute` ADD INDEX ( name ) ;
-ALTER TABLE `core_serviceattribute` ADD INDEX ( service_id ) ;
-ALTER TABLE `core_serviceclass_upgradeFrom` ADD INDEX ( to_serviceclass_id ) ;
-ALTER TABLE `core_serviceclass_upgradeFrom` ADD INDEX ( from_serviceclass_id ) ;
-ALTER TABLE `core_serviceprivilege` ADD INDEX ( role_id ) ;
-ALTER TABLE `core_serviceprivilege` ADD INDEX ( service_id ) ;
-ALTER TABLE `core_serviceprivilege` ADD INDEX ( user_id ) ;
-ALTER TABLE `core_serviceresource` ADD INDEX ( serviceClass_id ) ;
-ALTER TABLE `core_sitecredential` ADD INDEX ( site_id ) ;
-ALTER TABLE `core_sitecredential` ADD INDEX ( name ) ;
-ALTER TABLE `core_sitedeployment` ADD INDEX ( deployment_id ) ;
-ALTER TABLE `core_sitedeployment` ADD INDEX ( site_id ) ;
-ALTER TABLE `core_sitedeployment` ADD INDEX ( controller_id ) ;
-ALTER TABLE `core_siteprivilege` ADD INDEX ( role_id ) ;
-ALTER TABLE `core_siteprivilege` ADD INDEX ( site_id ) ;
-ALTER TABLE `core_siteprivilege` ADD INDEX ( user_id ) ;
-ALTER TABLE `core_slice` ADD INDEX ( creator_id ) ;
-ALTER TABLE `core_slice` ADD INDEX ( default_flavor_id ) ;
-ALTER TABLE `core_slice` ADD INDEX ( site_id ) ;
-ALTER TABLE `core_slice` ADD INDEX ( default_image_id ) ;
-ALTER TABLE `core_slice` ADD INDEX ( serviceClass_id ) ;
-ALTER TABLE `core_slice` ADD INDEX ( service_id ) ;
-ALTER TABLE `core_slicecredential` ADD INDEX ( name ) ;
-ALTER TABLE `core_slicecredential` ADD INDEX ( slice_id ) ;
-ALTER TABLE `core_sliceprivilege` ADD INDEX ( role_id ) ;
-ALTER TABLE `core_sliceprivilege` ADD INDEX ( slice_id ) ;
-ALTER TABLE `core_sliceprivilege` ADD INDEX ( user_id ) ;
-ALTER TABLE `core_slicetag` ADD INDEX ( slice_id ) ;
-ALTER TABLE `core_tag` ADD INDEX ( content_type_id ) ;
-ALTER TABLE `core_tag` ADD INDEX ( name ) ;
-ALTER TABLE `core_tag` ADD INDEX ( service_id ) ;
-ALTER TABLE `core_tenant` ADD INDEX ( subscriber_tenant_id ) ;
-ALTER TABLE `core_tenant` ADD INDEX ( subscriber_service_id ) ;
-ALTER TABLE `core_tenant` ADD INDEX ( provider_service_id ) ;
-ALTER TABLE `core_tenant` ADD INDEX ( subscriber_user_id ) ;
-ALTER TABLE `core_tenant` ADD INDEX ( subscriber_root_id ) ;
-ALTER TABLE `core_tenantrootprivilege` ADD INDEX ( role_id ) ;
-ALTER TABLE `core_tenantrootprivilege` ADD INDEX ( tenant_root_id ) ;
-ALTER TABLE `core_tenantrootprivilege` ADD INDEX ( user_id ) ;
-ALTER TABLE `core_user` ADD INDEX ( site_id ) ;
-ALTER TABLE `core_usercredential` ADD INDEX ( name ) ;
-ALTER TABLE `core_usercredential` ADD INDEX ( user_id ) ;
-ALTER TABLE `core_userdashboardview` ADD INDEX ( dashboardView_id ) ;
-ALTER TABLE `core_userdashboardview` ADD INDEX ( user_id ) ;
-ALTER TABLE `django_admin_log` ADD INDEX ( content_type_id ) ;
-ALTER TABLE `django_admin_log` ADD INDEX ( user_id ) ;
-ALTER TABLE `django_session` ADD INDEX ( expire_date ) ;
-ALTER TABLE `hpc_accessmap` ADD INDEX ( contentProvider_id ) ;
-ALTER TABLE `hpc_cdnprefix` ADD INDEX ( defaultOriginServer_id ) ;
-ALTER TABLE `hpc_cdnprefix` ADD INDEX ( contentProvider_id ) ;
-ALTER TABLE `hpc_contentprovider` ADD INDEX ( serviceProvider_id ) ;
-ALTER TABLE `hpc_contentprovider_users` ADD INDEX ( contentprovider_id ) ;
-ALTER TABLE `hpc_contentprovider_users` ADD INDEX ( user_id ) ;
-ALTER TABLE `hpc_hpchealthcheck` ADD INDEX ( hpcService_id ) ;
-ALTER TABLE `hpc_originserver` ADD INDEX ( contentProvider_id ) ;
-ALTER TABLE `hpc_serviceprovider` ADD INDEX ( hpcService_id ) ;
-ALTER TABLE `hpc_sitemap` ADD INDEX ( cdnPrefix_id ) ;
-ALTER TABLE `hpc_sitemap` ADD INDEX ( hpcService_id ) ;
-ALTER TABLE `hpc_sitemap` ADD INDEX ( contentProvider_id ) ;
-ALTER TABLE `hpc_sitemap` ADD INDEX ( serviceProvider_id ) ;
-ALTER TABLE `requestrouter_servicemap` ADD INDEX ( owner_id ) ;
-ALTER TABLE `requestrouter_servicemap` ADD INDEX ( slice_id ) ;
-ALTER TABLE `syndicate_storage_slicesecret` ADD INDEX ( slice_id_id ) ;
-ALTER TABLE `syndicate_storage_volume` ADD INDEX ( owner_id_id ) ;
-ALTER TABLE `syndicate_storage_volumeaccessright` ADD INDEX ( owner_id_id ) ;
-ALTER TABLE `syndicate_storage_volumeaccessright` ADD INDEX ( volume_id ) ;
-ALTER TABLE `syndicate_storage_volumeslice` ADD INDEX ( volume_id_id ) ;
-ALTER TABLE `syndicate_storage_volumeslice` ADD INDEX ( slice_id_id ) ;
diff --git a/xos/model-deps b/xos/model-deps
index 59bbe25..d5aae04 100644
--- a/xos/model-deps
+++ b/xos/model-deps
@@ -47,10 +47,6 @@
     "UserCredential": [
         "User"
     ], 
-    "UserDashboardView": [
-        "User", 
-        "DashboardView"
-    ], 
     "Controller": [
         "Deployment"
     ], 
@@ -104,10 +100,6 @@
         "Deployment", 
         "Role"
     ], 
-    "ControllerDashboardView": [
-        "Controller", 
-        "DashboardView"
-    ], 
     "Invoice": [
         "Account"
     ], 
diff --git a/xos/templates/README.md b/xos/templates/README.md
deleted file mode 100644
index af46be9..0000000
--- a/xos/templates/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# DJANGO TEMPLATES
-
-These are the templates used by the Django Application to render the UI.
-
-More information are available in the [Django Documentation](https://docs.djangoproject.com/es/1.9/topics/templates/)
\ No newline at end of file
diff --git a/xos/templates/admin/base.html b/xos/templates/admin/base.html
deleted file mode 100644
index d92e9a1..0000000
--- a/xos/templates/admin/base.html
+++ /dev/null
@@ -1,368 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 admin_static %}{% load suit_tags core_tags %}{% load url from future %}
-<!DOCTYPE html>
-<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
-<head>
-  <meta name="viewport" content="width=device-width, initial-scale=1">
-  <title>
-      {% block title %}
-          {%if title %}
-              {{ title }} |
-          {% endif %}
-          {{XOS_BRANDING_NAME}}
-      {% endblock %}
-  </title>
-  <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% endblock %}"/>
-  <!--<link rel="stylesheet" type="text/css" href="{% static 'suit/bootstrap/dist/css/bootstrap.min.css' %}" media="all"/>-->
-  <link rel="stylesheet" type="text/css" href="{% static 'suit/css/suit.css' %}" media="all">
-  <link rel="stylesheet" type="text/css" href="{% static 'xos.css' %}" media="all">
-  <link rel="stylesheet" type="text/css" href="{% static 'xosNgLib.css' %}" media="all">
-  {% if XOS_BRANDING_CSS %}
-  <link rel="stylesheet" type="text/css" href="{% static 'cord.css' %}" media="all">
-  <link rel="stylesheet" type="text/css" href="{{ XOS_BRANDING_CSS }}">
-  {% endif %}
-  {% block extrastyle %}{% endblock %}
-  {% if LANGUAGE_BIDI %}
-  <link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}"/>
-  {% endif %}
-  <script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
-  <script src="{% static 'suit/js/jquery.min.js' %}"></script>
-  <script src="{% static 'suit/js/jquery-ui.min.js' %}"></script>
-  <link rel="stylesheet" href="{% static 'suit/css/jquery-ui.min.css' %}">
-  <script type="text/javascript" src="{% static 'log4javascript-1.4.6/log4javascript.js' %}"></script>
-  <script type="text/javascript" src="{% static 'uploadTextarea.js' %}"></script>
-
-  <!-- ngXosLib -->
-  <script src="{% static 'vendor/ngXosVendor.min.js' %}"></script>
-  <script src="{% static 'vendor/ngXosHelpers.min.js' %}"></script>
-
-  <script type="text/javascript">var Suit = { $: $.noConflict() }; if (!$) $ = Suit.$; </script>
-  {% if 'SHOW_REQUIRED_ASTERISK'|suit_conf %}
-  <style type="text/css">.required:after { content: '*'; margin: 0 0 0 5px; position: absolute; color: #ccc;}</style>
-  {% endif %}
-  {% block extrahead %}{% endblock %}
-  {% block blockbots %}
-  <meta name="robots" content="NONE,NOARCHIVE"/>
-  {% endblock %}
-  <link rel="shortcut icon" href="{{ XOS_BRANDING_FAVICON }}"></head>
-  {% load i18n %}
-<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
-  <div id="dialog-placeholder">
-    <!-- This is a placeholder for dialog boxes, like the observer calendar -->
-  </div>
-
-  <!-- Sticky footer wrap -->
-  <div id="wrap">
-
-    <!-- Container -->
-    {% block container %}
-    <!-- <div id="container"> -->
-      
-    <!-- </div> -->
-    <!-- END Header -->
-    {% if not is_popup %}
-    <div id="wrapper">
-    {% endif %}
-
-    {% if is_popup %}
-    <div id="wrapper-popup">
-    {% endif %}
-
-      <!-- Sidebar -->
-      {% if not is_popup %}
-      <div id="sidebar-wrapper">
-        <div id="navbar-collapse" class="pull-right hidden-xs">
-          <a href="" class="glyphicon glyphicon-arrow-left"></a>
-          <a href="" class="glyphicon glyphicon-arrow-right"></a>
-        </div>
-        <a href="{% url 'admin:index' %}" class="hidden-xs">
-          <img class="logo" src="{% static XOS_BRANDING_ICON %}"/>
-        </a>
-            {% comment %}
-            <!--{% include 'suit/menu.html' %}-->
-            {% endcomment %}
-        {% include 'admin/menu.html' %}
-        <button class="navbar-toggle collapsed visible-xs" type="button">
-          <i class="glyphicon glyphicon-arrow-left"></i>
-        </button>
-      </div>
-      {% endif %}
-      <!-- /#sidebar-wrapper -->
-
-      <!-- Page Content -->
-      <div id="page-content-wrapper">
-        <div class="container-fluid">
-          <div class="row">
-            <div class="col-xs-12">
-              {% block header %}
-                {% if not is_popup %}
-                  <!-- Header -->
-                  <div id="header" class="header">
-                    <button class="navbar-toggle collapsed" type="button">
-                      <span class="icon-bar"></span>
-                      <span class="icon-bar"></span>
-                      <span class="icon-bar"></span>
-                    </button>
-                    {% block logo %}
-                      <a href="{% url 'admin:index' %}" class="visible-xs">
-                        <img class="logo" src="{% static XOS_BRANDING_ICON %}"/>
-                      </a>
-                    {% endblock %}
-                    <!-- <div id="branding">
-                      {% block quick-search %}
-                        {% with 'SEARCH_URL'|suit_conf as search_url %}
-                          {% if search_url %}
-                            <form class="form-search nav-quick-search" autocomplete="off" action="{% if '/' in search_url %}{{ search_url }}{% else %}{% url search_url %}{% endif %}" method="GET"> <i class="input-icon icon-search"></i>
-                              <input type="text" name="q" class="input-medium search-query" id="quick-search">
-                              <input type="submit" class="submit" value="">
-                            </form>
-                          {% endif %}
-                        {% endwith %}
-                      {% endblock %}
-                    </div> -->
-                    {% block header_time %}
-                      <!-- <div id="branding2">
-                        <div class="header-content header-content-first">
-                          <div class="header-column icon"> <i class="icon-time"></i></div>
-                          <div class="header-column">
-                            <span class="date">{% suit_date %}</span>
-                            <br>
-                            <span class="time" id="clock">{% suit_time %}</span>
-                          </div>
-                        </div>
-                      </div> -->
-                    {% endblock %}
-
-                    {% block header_content %}
-                      <div class="header-content">
-                        <div class="header-column icon">
-                          <i class="icon-comment"></i>
-                        </div>
-                        <div class="header-column">
-                          <a href="" class="grey"> <b>2</b>
-                            new messages
-                          </a>
-                        </div>
-                      </div>
-                    {% endblock %}
-
-                    {% if user.is_active and user.is_staff %}
-                    {% notification %}
-                      <div id="user-tools">
-                        {% trans 'Welcome,' %}
-                        <a href="http://{{ request.get_host}}/admin/core/user/{{user.id}}">{{user.email}}</a>
-                        <span class="user-links">
-                          {% block userlinks %}
-                            {% url 'django-admindocs-docroot' as docsroot %}
-                            {% if docsroot %}
-                              <a href="http://guide.xosproject.org/">{% trans 'Documentation' %}</a>
-                              <span class="separator">|</span>
-                            {% endif %}
-                            <a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a>
-                            <span class="separator">|</span>
-                            <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
-                          {% endblock %}
-                        </span>
-                      </div>
-                    {% endif %}
-
-                    {% block nav-global %}
-                    {% endblock %}
-                  </div>
-                {% endif %}
-              {% endblock %}
-            </div>
-          </div>
-          <div class="row content-wrapper">
-            <div class="col-lg-12">
-              <div class="suit-columns {{ is_popup|yesno:'one-column,two-columns' }}">
-                {% block content-center %}
-                  {% if not is_popup %}
-                    {% block minidash %}
-                      <div id="openCloudTopPage">
-                        {% include "admin/newminidashboard.html" %}
-                      </div>
-                    {% endblock %} 
-
-                    {% block breadcrumbs %}
-                      <ul class="breadcrumb">
-                        <li>
-                          <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
-                          {% if title %}
-                            <span class="divider">&raquo;</span>
-                        </li>
-                        <li class="active">
-                          {{ title }}
-                          {% endif %}
-                        </li>
-                      </ul>
-                    {% endblock %}
-                  {% endif %}
-
-                  {% block messages %}
-                    {% if messages %}
-                      {% for message in messages %}
-                        <div class="alert alert-{% firstof message.tags 'info' %}">
-                          <button class="close" data-dismiss="alert">×</button>
-                          <strong>{% if message.tags %}{{ message.tags|capfirst }}{% else %}Message{% endif %}!</strong> 
-                          {{ message }}
-                        </div>
-                      {% endfor %}
-                    {% endif %}
-                  {% endblock messages %}
-
-                  <!-- Content -->
-                  <div id="content" class="{% block coltype %}colM{% endblock %} row">
-                    {% block pretitle %}
-                    {% endblock %}
-                    {% block content_title %}
-                      {% if title %}
-                        <h2 class="content-title">{{ title }}</h2>
-                      {% endif %}
-                    {% endblock %}
-                    {% block content %}
-                      {% block object-tools %}
-                      {% endblock %}
-                      {{ content }}
-                    {% endblock %}
-                    {% block sidebar_content %}
-                      {% block sidebar %}{% endblock %}
-                    {% endblock %}
-                  </div>
-                  <!-- END Content -->
-                  <span class="clearfix"></span>
-                  <!-- </div>
-                  -->
-                {% endblock %}
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-      <!-- /#page-content-wrapper -->
-    <!-- /#wrapper -->
-    {% endblock %}
-    </div>
-    {% if not is_popup %}
-      <!-- Sticky footer push -->
-      <div id="push"></div>
-    {% endif %}
-
-    {% block footer %}
-      {% if not is_popup %}
-        <div id="footer" class="footer">
-          <div class="container-fluid">
-            <div class="row">
-              <div class="tools col-xs-4">
-                {% block footer_links %}
-                  <a href="https://wiki.opencord.org/" target="_blank" class="icon">
-                    <i class="icon-question-sign"></i>
-                    Support
-                  </a>
-                  <a href="https://wiki.opencord.org/" target="_blank" class="icon">
-                    <i class="icon-bookmark"></i>
-                    Licence
-                  </a>
-                  <a href="https://wiki.opencord.org/" target="_blank" class="icon">
-                    <i class="icon-comment"></i>
-                    Report a bug
-                  </a>
-                {% endblock %}
-              </div>
-
-              <div class="branding col-xs-4">
-                {% block footer_branding %}
-                  {% with 'ADMIN_NAME'|suit_conf as admin_name %}
-                    {{XOS_BRANDING_NAME}}
-                    <!-- {{ admin_name }} -->
-                  {% endwith %}
-                {% endblock %}
-              </div>
-            </div>
-            <div class="row">
-              <div class="statusMsg col-xs-12" id="statusMsg">
-                <!-- this is a placeholder for xoslib views to display status messages -->
-              </div>
-            </div>
-          </div>
-        </div>
-      {% endif %}
-    {% endblock %}
-  </div>
-
-  <script src="{% static 'suit/bootstrap/dist/js/bootstrap.min.js' %}"></script>
-  <script src="{% static 'suit/js/suit.js' %}"></script>
-  <script type="text/javascript" src="//www.google.com/jsapi"></script>
-  {% block extrajs %}
-  {% endblock %}
-  <script src="http://d3js.org/d3.v3.js"></script>
-  <div class="modal fade hide" id="chartsModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
-    <div class="modal-dialog">
-      <div class="modal-content">
-        <!--<div class="modal-header">
-          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-          <h4 class="modal-title" id="myModalLabel">OpenCloud</h4>
-        </div>-->
-        <div class="modal-body" style="overflow-y:hidden; overflow-x:hidden;">
-          <div class="chartContainer">
-            <div class="row">
-              <div class=" padding"></div>
-            </div>
-
-            <div class="row">
-              <div class=" heading">
-                <p id="chartHeading" class="heading">OpenCloud</p>
-              </div>
-            </div>
-            <div class="row">
-              <div class="padding"></div>
-              <div class="padding"></div>
-            </div>
-            <div class="row">
-              <div id="graph" class="graph"></div>
-            </div>
-          </div>
-          <div id="graph_work" style="display:none"></div>
-        </div>
-        <!--<div class="modal-footer">
-        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
-        </div>
-        -->
-      </div>
-      <!-- /.modal-content -->
-    </div>
-    <!-- /.modal-dialog -->
-  </div>
-  <!-- /.modal -->
-
-  <!-- Menu Toggle Script -->
-  <script>
-    $(".navbar-toggle").click(function(e) {
-      e.preventDefault();
-      $("#wrapper").toggleClass("toggled");
-    });
-
-    $('#navbar-collapse').click(function(e){
-      e.preventDefault();
-      $("#wrapper").toggleClass("collapsed");
-    });
-  </script>
-</body>
-</html>
diff --git a/xos/templates/admin/base_login.html b/xos/templates/admin/base_login.html
deleted file mode 100644
index f4d60f4..0000000
--- a/xos/templates/admin/base_login.html
+++ /dev/null
@@ -1,72 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 admin_static %}
-<!DOCTYPE html>
-<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
-    <head>
-        <title>{% block title %}{% endblock %}</title>
-        <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
-        {% block extrastyle %}
-
-        {% endblock %}
-        <!--[if lte IE 7]>
-            <link rel="stylesheet" type="text/css" href="{% block stylesheet_ie %}{% static "admin/css/ie.css" %}{% endblock %}" />
-        <![endif]-->
-        {% if LANGUAGE_BIDI %}
-            <link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />
-        {% endif %}
-        <script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
-        {% block extrahead %}
-
-        {% endblock %}
-        {% block blockbots %}
-            <meta name="robots" content="NONE,NOARCHIVE" />
-        {% endblock %}
-        <link rel="shortcut icon" href="{{ XOS_BRANDING_FAVICON }}"></head>
-    </head>
-{% load i18n %}
-
-    <body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}" style="background-image: url('{{ XOS_BRANDING_BG }}') ">
-
-    <!-- Container -->
-
-        {% block messages %}
-            {% if messages %}
-            <ul class="messagelist">{% for message in messages %}
-              <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
-            {% endfor %}</ul>
-            {% endif %}
-        {% endblock messages %}
-
-
-            {% block pretitle %}{% endblock %}
-            {% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
-            {% block content %}
-            {% block object-tools %}{% endblock %}
-            {{ content }}
-            {% endblock %}
-            {% block sidebar %}{% endblock %}
-            <br class="clear" />
-
-
-        {% block footer %}<div id="footer"></div>{% endblock %}
-
-
-    </body>
-</html>
diff --git a/xos/templates/admin/base_logout.html b/xos/templates/admin/base_logout.html
deleted file mode 100644
index f53ffbc..0000000
--- a/xos/templates/admin/base_logout.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 admin_static %}
-<!DOCTYPE html>
-<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
-    <head>
-        <title>{% block title %}{% endblock %}</title>
-        <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
-        <link rel="stylesheet" type="text/css" href="{% static 'xos.css' %}" media="all">
-
-
-        {% block extrastyle %}
-
-        {% endblock %}
-        <!--[if lte IE 7]>
-            <link rel="stylesheet" type="text/css" href="{% block stylesheet_ie %}{% static "admin/css/ie.css" %}{% endblock %}" />
-        <![endif]-->
-        {% if LANGUAGE_BIDI %}
-            <link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />
-        {% endif %}
-        <script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
-        {% block extrahead %}
-
-        {% endblock %}
-        {% block blockbots %}
-            <meta name="robots" content="NONE,NOARCHIVE" />
-        {% endblock %}
-        <link rel="shortcut icon" href="{{ XOS_BRANDING_FAVICON }}"></head>
-    </head>
-{% load i18n %}
-
-    <body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}" style="background-image: url('{{ XOS_BRANDING_BG }}') ">
-
-    <!-- Container -->
-    <div class="logout">
-
-            <img class="logo" src="{% static XOS_BRANDING_ICON %}"/>
-            {% block content_title %}{% if title %}<h1 class="logouth1tag">{{ title }}</h1>{% endif %}{% endblock %}
-            {% block content %}
-            {{ content }}
-            {% endblock %}
-
-    </div>
-
-
-    </body>
-</html>
diff --git a/xos/templates/admin/base_site.html b/xos/templates/admin/base_site.html
deleted file mode 100644
index 42e5f0a..0000000
--- a/xos/templates/admin/base_site.html
+++ /dev/null
@@ -1,75 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% extends "admin/base.html" %}
-{% load admin_static %}
-
-{# Additional <head> content here, some extra meta tags or favicon #}
-{#{% block extrahead %}#}
-{#{% endblock %}#}
-
-
-{# Additional CSS includes #}
-{# {% block extrastyle %} #}
-{# {% endblock %} #}
-
-
-{# Additional JS files in footer, right before </body> #}
-{#{% block extrajs %}#}
-{#  <script type="text/javascript" src="{% static 'js/my_project.js' %}"></script>#}
-{#{% endblock %}#}
-
-
-{# Footer links (left side) #}
-{#{% block footer_links %}#}
-{#  <a href="/docs/" class="icon"><i class="icon-question-sign"></i>Documentation</a>#}
-{#{% endblock %}#}
-
-{# Additional header content like notifications or language switcher #}
-{#{% block header_content %}#}
-{#    {{ block.super }}#}
-{#    <div class="header-content">#}
-{#        <!-- First icon column -->#}
-{#        <div class="header-column icon">#}
-{#            <i class="icon-home"></i><br>#}
-{#            <i class="icon-cog"></i>#}
-{#        </div>#}
-{#        <div class="header-column" style="margin-right: 20px">#}
-{#            <a href="/" class="grey">Front-end</a><br>#}
-{#            <a href="" class="grey">One more link</a>#}
-{#        </div>#}
-{#        <!-- Second icon column -->#}
-{#        <div class="header-column icon">#}
-{#            <i class="icon-comment"></i>#}
-{#        </div>#}
-{#        <div class="header-column">#}
-{#            <a href="" class="grey">5 new messages</a>#}
-{#        </div>#}
-{#    </div>#}
-{#{% endblock %}#}
-
-{# Footer branding name (center) #}
-{% block footer_branding %}
-{{ XOS_BRANDING_NAME }}
-{% endblock %}
-
-
-{# Footer copyright (right side) #}
-{% block copyright %}
-{#  Copyright &copy; 2013 Client<br>Developed by <a href="http://yoursite.com" target="_blank">YourName</a> #}
-{% endblock %}
diff --git a/xos/templates/admin/base_site_login.html b/xos/templates/admin/base_site_login.html
deleted file mode 100644
index 08085e3..0000000
--- a/xos/templates/admin/base_site_login.html
+++ /dev/null
@@ -1,26 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% extends "admin/base_login.html" %}
-{% load i18n %}
-
-{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %}
-
-
-
-{% block nav-global %}{% endblock %}
diff --git a/xos/templates/admin/change_form_bc.html b/xos/templates/admin/change_form_bc.html
deleted file mode 100644
index 5283b1a..0000000
--- a/xos/templates/admin/change_form_bc.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% extends "admin/change_form.html" %}
-{% load i18n admin_static admin_modify suit_tags admin_urls %}
-{% load url from future %}
-
-{% if not is_popup %}
-  {% block breadcrumbs %}
-    <ul class="breadcrumb">
-      <li>
-        <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
-        <span class="divider">&raquo;</span>
-      </li>
-      <li>
-        {% if custom_app_breadcrumb_url %}
-            <a href="{{ custom_app_breadcrumb_url }}">{{ custom_app_breadcrumb_name }}</a>
-        {% else %}
-            <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{% firstof opts.app_config.verbose_name app_label|capfirst|escape %}</a>
-        {% endif %}
-        <span class="divider">&raquo;</span>
-      </li>
-      <li>
-        {% if has_change_permission %}
-          {% if custom_changelist_breadcrumb_url %}
-              <a href="{{ custom_changelist_breadcrumb_url }}">
-          {% else %}
-              <a href="{% url opts|admin_urlname:'changelist' %}">
-          {% endif %}
-            {{ opts.verbose_name_plural|capfirst }}</a>{% else %}
-          {{ opts.verbose_name_plural|capfirst }}{% endif %}
-        <span class="divider">&raquo;</span>
-      </li>
-      <li class="active">
-        {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
-      </li>
-    </ul>
-  {% endblock %}
-{% endif %}
diff --git a/xos/templates/admin/change_form_embedded.html b/xos/templates/admin/change_form_embedded.html
deleted file mode 100644
index d3526da..0000000
--- a/xos/templates/admin/change_form_embedded.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% extends "admin/change_form.html" %}
-{% load i18n admin_static admin_modify suit_tags admin_urls %}
-{% load url from future %}
-
-{% block container %}
-{% block content %}
-{{ block.super }}
-{% endblock %}
-{% endblock %}
-
-{% block footer %}
-{% endblock %}
diff --git a/xos/templates/admin/change_list.html b/xos/templates/admin/change_list.html
deleted file mode 100644
index c37387a..0000000
--- a/xos/templates/admin/change_list.html
+++ /dev/null
@@ -1,164 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% extends "admin/base_site.html" %}
-{% load i18n admin_static admin_list admin_urls suit_list suit_tags %}
-
-
-{% block extrastyle %}
-  {{ block.super }}
-  {#  <link rel="stylesheet" type="text/css" href="{% static "admin/css/changelists.css" %}" />#}
-  {% if cl.formset %}
-    {#    <link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />#}
-  {% endif %}
-  {% if cl.formset or action_form %}
-    {% url 'admin:jsi18n' as jsi18nurl %}
-    <script type="text/javascript" src="{{ jsi18nurl|default:'../../jsi18n/' }}"></script>
-  {% endif %}
-  {{ media.css }}
-  {% if not actions_on_top and not actions_on_bottom %}
-    <style>
-      {#      #changelist table thead th:first-child {width: inherit}#}
-    </style>
-  {% endif %}
-{% endblock %}
-
-{% block extrahead %}
-  {{ block.super }}
-  {{ media.js }}
-  {% if action_form %}{% if actions_on_top or actions_on_bottom %}
-    <script type="text/javascript">
-      (function ($) {
-        $(document).ready(function ($) {
-          $("tr input.action-select").actions();
-        });
-      })(django.jQuery);
-    </script>
-  {% endif %}{% endif %}
-{% endblock %}
-
-{% block bodyclass %}change-list{% endblock %}
-
-{% if not is_popup %}
-  {% block breadcrumbs %}
-    <ul class="breadcrumb">
-      <li><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
-        <span class="divider">&raquo;</span></li>
-      <li>
-        <a href="{% url 'admin:app_list' app_label=cl.opts.app_label %}">{% firstof cl.opts.app_config.verbose_name app_label|capfirst|escape %}</a>
-        <span class="divider">&raquo;</span></li>
-      <li class="active">{{ cl.opts.verbose_name_plural|capfirst }}</li>
-    </ul>
-  {% endblock %}
-{% endif %}
-
-{% block coltype %}flex{% endblock %}
-
-{% block content %}
-
-  <div id="content-main">
-
-    <div class="inner-center-column">
-      <div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
-
-        <!-- <div class="toolbar-content clearfix"> -->
-          {% block object-tools %}
-            <div class="row object-tools text-right">
-              <div class="col-xs-12">
-                {% block object-tools-items %}
-                  {% if has_add_permission %}
-                    <a href="{% url cl.opts|admin_urlname:'add' %}{% if is_popup %}?_popup=1{% endif %}" class="btn btn-success">
-                      <i class="glyphicon glyphicon-plus"></i>&nbsp;
-                      {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
-                    </a>
-                  {% endif %}
-                {% endblock %}
-              </div>
-            </div>
-          {% endblock %}
-
-          {% block search %}
-            {% search_form cl %}
-          {% endblock %}
-        <!-- </div> -->
-
-        {% block date_hierarchy %}
-          {% if cl.date_hierarchy %}
-            {% date_hierarchy cl %}
-          {% endif %}
-        {% endblock %}
-
-        {% if cl.formset.errors %}
-          <div class="alert alert-error errornote">
-            {% if cl.formset.total_error_count == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
-          </div>
-          {{ cl.formset.non_form_errors }}
-        {% endif %}
-        <div class="row">
-          <div class="col-xs-12">
-            <form id="changelist-form" action="" method="post"
-                {% if cl.formset.is_multipart %}
-                  enctype="multipart/form-data"
-                {% endif %} 
-                  class="form-inline">{% csrf_token %}
-              {% if cl.formset %}
-                <div>{{ cl.formset.management_form }}</div>
-              {% endif %}
-
-              {% block result_list %}
-                {% if cl.result_count %}
-                  {% if action_form and actions_on_top and cl.full_result_count %}
-                    {% admin_actions %}{% endif %}
-                  {% result_list_with_context cl %}
-
-                  {% if action_form and actions_on_bottom and cl.full_result_count %}
-                    {% admin_actions %}{% endif %}
-                {% else %}
-                  {% suit_bc_value 1.5 'pop' 1.6 '_popup' as POPUP_VAR %}
-                  <div class="alert alert-block alert-info">
-                    {% if cl.full_result_count %}
-                      <h4>{% trans 'Nothing found' %}!</h4>
-                      <br>
-                      <a href="?{% if cl.is_popup %}{{ POPUP_VAR }}=1{% endif %}">{% trans 'Reset search and filters' %}</a>
-                    {% else %}
-                      {% blocktrans with cl.opts.verbose_name_plural|capfirst as name_plural %}{{ name_plural }} are not created yet{% endblocktrans %}.
-                      {% if has_add_permission %}<a href="{% url cl.opts|admin_urlname:'add' %}{% if is_popup %}?{{ POPUP_VAR }}=1{% endif %}">
-                        {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}</a>{% endif %}
-                    {% endif %}
-                  </div>
-                {% endif %}
-              {% endblock %}
-
-              {% block pagination %}
-                {% if cl.result_count %}
-                  {% if action_form and actions_on_bottom and cl.full_result_count %}
-                    <div class="below-actions">
-                  {% endif %}
-                    {% pagination cl %}
-                  {% if action_form and actions_on_bottom and cl.full_result_count %}
-                    </div>
-                  {% endif %}
-                {% endif %}
-              {% endblock %}
-            </form>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-{% endblock %}
\ No newline at end of file
diff --git a/xos/templates/admin/change_list_embedded.html b/xos/templates/admin/change_list_embedded.html
deleted file mode 100644
index c80e20c..0000000
--- a/xos/templates/admin/change_list_embedded.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% extends "admin/change_list_bc.html" %}
-{% load i18n admin_static admin_modify suit_tags admin_urls %}
-{% load url from future %}
-
-{% block container %}
-{% block content %}
-{{ block.super }}
-{% endblock %}
-{% endblock %}
-
-{% block footer %}
-{% endblock %}
diff --git a/xos/templates/admin/change_list_results.html b/xos/templates/admin/change_list_results.html
deleted file mode 100644
index 19319ab..0000000
--- a/xos/templates/admin/change_list_results.html
+++ /dev/null
@@ -1,84 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 i18n admin_static suit_list %}
-{% if result_hidden_fields %}
-    <div class="hiddenfields">{# DIV for HTML validation #}
-        {% for item in result_hidden_fields %}{{ item }}{% endfor %}
-    </div>
-{% endif %}
-{% if results %}
-    <div class="results">
-        <table id="result_list" class="table table-striped table-bordered table-hover table-condensed">
-            <thead>
-            <tr>
-                {% for header in result_headers|headers_handler:cl %}
-                    <th scope="col" {{ header.class_attrib }}>
-                      <div class="row">
-                        <div class="col-xs-6">
-                          {% if header.sortable %}
-                            <a href="{{ header.url_primary }}">{{ header.text|capfirst }}</a>
-                          {% else %}
-                            <span>{{ header.text|capfirst }}</span>
-                          {% endif %}
-                        </div>
-                        <div class="col-xs-6 text-right">
-                          {% if header.sortable %}
-                              {% if header.sort_priority > 0 %}
-                                  <span class="sortoptions">
-                                      <a href="{{ header.url_toggle }}" class="toggle {% if header.ascending %}ascending{% else %}descending{% endif %}" title="{% trans "Toggle sorting" %}">
-                                        {% if header.ascending %}
-                                          <i class="glyphicon glyphicon-chevron-up"></i>
-                                        {% else %}
-                                          <i class="glyphicon glyphicon-chevron-down"></i>
-                                        {% endif %}
-                                      </a>
-                                      <a class="sortremove" href="{{ header.url_remove }}"
-                                         title="{% trans "Remove from sorting" %}">
-                                         <i class="glyphicon glyphicon-remove"></i>
-                                       </a>
-                                  </span>
-                              {% endif %}
-                              {% if num_sorted_fields > 1 and header.sort_priority %}
-                                <small>
-                                  <span class="label label-default" title="{% blocktrans with priority_number=header.sort_priority %}Sorting priority: {{ priority_number }}{% endblocktrans %}">
-                                    {{ header.sort_priority }}
-                                  </span>
-                                </small>
-                              {% endif %}
-                          {% endif %}
-                        </div>
-                      </div>
-                    </th>
-                  {% endfor %}
-            </tr>
-            </thead>
-            <tbody>
-            {% for result in results|cells_handler:cl %}
-                {% if result.form.non_field_errors %}
-                    <tr>
-                        <td colspan="{{ result|length }}">{{ result.form.non_field_errors }}</td>
-                    </tr>
-                {% endif %}
-                <tr{% result_row_attrs cl forloop.counter %}>
-                    {% for item in result %}{{ item }}{% endfor %}</tr>
-            {% endfor %}
-            </tbody>
-        </table>
-    </div>
-{% endif %}
\ No newline at end of file
diff --git a/xos/templates/admin/core/SiteDeploymentNetwork/sitedepnettabular.html b/xos/templates/admin/core/SiteDeploymentNetwork/sitedepnettabular.html
deleted file mode 100644
index d975a57..0000000
--- a/xos/templates/admin/core/SiteDeploymentNetwork/sitedepnettabular.html
+++ /dev/null
@@ -1,97 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 i18n admin_static admin_modify %}
-<div class="inline-group" id="{{ inline_admin_formset.formset.prefix }}-group">
-  <div class="tabular inline-related {% if forloop.last %}last-related{% endif %}">
-{{ inline_admin_formset.formset.management_form }}
-<fieldset class="module">
-   <h2>{{ inline_admin_formset.opts.verbose_name_plural|capfirst }}</h2>
-   {{ inline_admin_formset.formset.non_form_errors }}
-   <table>
-     <thead><tr>
-     {% for field in inline_admin_formset.fields %}
-       {% if not field.widget.is_hidden %}
-         <th{% if forloop.first %} colspan="2"{% endif %}{% if field.required %} class="required"{% endif %}>{{ field.label|capfirst }}
-         {% if field.help_text %}&nbsp;<img src="{% static "admin/img/icon-unknown.gif" %}" class="help help-tooltip" width="10" height="10" alt="({{ field.help_text|striptags }})" title="{{ field.help_text|striptags }}" />{% endif %}
-         </th>
-       {% endif %}
-     {% endfor %}
-     {% if inline_admin_formset.formset.can_delete %}<th>{% trans "Delete?" %}</th>{% endif %}
-     </tr></thead>
-
-     <tbody>
-     {% for inline_admin_form in inline_admin_formset %}
-        {% if inline_admin_form.form.non_field_errors %}
-        <tr><td colspan="{{ inline_admin_form|cell_count }}">{{ inline_admin_form.form.non_field_errors }}</td></tr>
-        {% endif %}
-        <tr class="form-row {% cycle "row1" "row2" %} {% if inline_admin_form.original or inline_admin_form.show_url %}has_original{% endif %}{% if forloop.last %} empty-form{% endif %}"
-             id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
-        <td class="original">
-          {% if inline_admin_form.original or inline_admin_form.show_url %}<p>
-          {% if inline_admin_form.original %} {{ inline_admin_form.original }}{% endif %}
-          {% if inline_admin_form.show_url %}<a href="{% url 'admin:view_on_site' inline_admin_form.original_content_type_id inline_admin_form.original.pk %}">{% trans "View on site" %}</a>{% endif %}
-            </p>{% endif %}
-          {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
-          {{ inline_admin_form.fk_field.field }}
-          {% spaceless %}
-          {% for fieldset in inline_admin_form %}
-            {% for line in fieldset %}
-              {% for field in line %}
-                {% if field.is_hidden %} {{ field.field }} {% endif %}
-              {% endfor %}
-            {% endfor %}
-          {% endfor %}
-          {% endspaceless %}
-        </td>
-        {% for fieldset in inline_admin_form %}
-          {% for line in fieldset %}
-            {% for field in line %}
-              <td{% if field.field.name %} class="field-{{ field.field.name }}"{% endif %}>
-              {% if field.is_readonly %}
-                  <p>{{ field.contents|linebreaksbr }}</p>
-              {% else %}
-                  {{ field.field.errors.as_ul }}
-                  {{ field.field }}
-              {% endif %}
-              </td>
-            {% endfor %}
-          {% endfor %}
-        {% endfor %}
-        {% if inline_admin_formset.formset.can_delete %}
-          <td class="delete">{% if inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %}</td>
-        {% endif %}
-        </tr>
-     {% endfor %}
-     </tbody>
-   </table>
-</fieldset>
-  </div>
-</div>
-
-<script type="text/javascript">
-
-(function($) {
-  $("#{{ inline_admin_formset.formset.prefix }}-group .tabular.inline-related tbody tr").tabularFormset({
-    prefix: "{{ inline_admin_formset.formset.prefix }}",
-    adminStaticPrefix: '{% static "admin/" %}',
-    addText: "{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}Add another {{ verbose_name }}{% endblocktrans %}",
-    deleteText: "{% trans 'Remove' %}"
-  });
-})(django.jQuery);
-</script>
diff --git a/xos/templates/admin/core/instance/change_form.html b/xos/templates/admin/core/instance/change_form.html
deleted file mode 100644
index f51fd17..0000000
--- a/xos/templates/admin/core/instance/change_form.html
+++ /dev/null
@@ -1,132 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% extends 'admin/change_form.html' %}
-{% block extrahead %}
-{{ block.super }} 
-<script>
-deployment_nodes = [
-{% for dn in deployment_nodes %}
-   [{{ dn.0 }}, {{ dn.1 }} , "{{ dn.2 }}"],
-{% endfor %}
-];
-
-deployment_flavors = [
-{% for dn in deployment_flavors %}
-   [{{ dn.0 }}, {{ dn.1 }} , "{{ dn.2 }}"],
-{% endfor %}
-];
-
-deployment_images = [
-{% for dn in deployment_images %}
-   [{{ dn.0 }}, {{ dn.1 }} , "{{ dn.2 }}"],
-{% endfor %}
-];
-
-site_login_bases = [
-{% for s in site_login_bases %}
-  [{{ s.0 }}, "{{ s.1 }}"],
-{% endfor %}
-];
-
-function option_html(val, text, selected) {
-    if (selected) {
-        return '<option value="' + val + '" selected>' + text + '</option>\n';
-    } else {
-        return '<option value="' + val + '">' + text + '</option>\n';
-    }
-}
-
-function update_nodes(deployment_select, flavor_select, node_select) {
-    deployment_id = $(deployment_select).val();
-    node_id = $(node_select).val();
-    flavor_name = $(flavor_select).children(":selected").text()
-    html="";
-    for (i in deployment_nodes) {
-        // this is for EC2, where the node hostnames imply the flavor.
-        dn = deployment_nodes[i];
-        if ((dn[0] == deployment_id) && (dn[2].lastIndexOf(flavor_name,0) === 0)) {
-            html = html + option_html(dn[1], dn[2], dn[1]==node_id);
-        }
-    }
-    if (!html) {
-        // now try it without the flavor hostname prefix matching
-        for (i in deployment_nodes) {
-            dn = deployment_nodes[i];
-            if (dn[0] == deployment_id) {
-                html = html + option_html(dn[1], dn[2], dn[1]==node_id);
-            }
-        }
-    }
-    html = "<option value=''>---------</option>\n" + html;
-    node_select.empty().append(html);
-}
-
-function update_flavors(deployment_select, flavor_select) {
-    deployment_id = $(deployment_select).val();
-    flavor_id = $(flavor_select).val();
-    html = "<option value=''>---------</option>\n";
-    for (i in deployment_flavors) {
-        dn = deployment_flavors[i];
-        if (dn[0] == deployment_id) {
-            html = html + option_html(dn[1], dn[2], dn[1] == flavor_id);
-        }
-    }
-    flavor_select.empty().append(html);
-}
-
-function update_images(deployment_select, image_select) {
-    deployment_id = $(deployment_select).val();
-    image_id = $(image_select).val();
-    html = "<option value=''>---------</option>\n";
-    for (i in deployment_images) {
-        dn = deployment_images[i];
-        if (dn[0] == deployment_id) {
-            html = html + option_html(dn[1], dn[2], dn[1] == image_id);
-        }
-    }
-    image_select.empty().append(html);
-}
-
-function instance_deployment_changed(any_control) {
-   /* This function handles someone changing the deployment control
-      It updates the flavors and nodes dialogs
-      accordingly.
-   */
-
-    deployment_select = $("#id_deployment");
-    node_select = $("#id_node");
-    flavor_select = $("#id_flavor");
-    image_select = $("#id_image");
-
-    update_nodes(deployment_select, flavor_select, node_select);
-    update_flavors(deployment_select, flavor_select);
-    update_images(deployment_select, image_select);
-}
-
-function instance_flavor_changed(any_control) {
-    deployment_select = $("#id_deployment");
-    node_select = $("#id_node");
-    flavor_select = $("#id_flavor");
-    update_nodes(deployment_select, flavor_select, node_select);
-}
-
-</script>
-
-{% endblock %}
-
diff --git a/xos/templates/admin/core/site/location_map.html b/xos/templates/admin/core/site/location_map.html
deleted file mode 100644
index 9abbb26..0000000
--- a/xos/templates/admin/core/site/location_map.html
+++ /dev/null
@@ -1,81 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="panel fieldset-body">
-  <div class="form-group field-longitude ">
-    <label class="control-label col-xs-12 col-sm-2">
-      <label for="id_location">Location:</label>
-    </label>
-    <div class="form-column widget-NumberInput col-xs-12 col-sm-8 col-md-6 col-lg-4">
-      <div id="map" style="height: 300px"></div>
-    </div>
-  </div>
-</div>
-
-<script>
-  function initMap(){
-    
-    // registering inputs
-    var latField = $('input#id_latitude');
-    var lngField = $('input#id_longitude');
-
-    // reading coordinates
-    var latitude = latField.val();
-    var longitude = lngField.val();
-    var siteName = $('input#id_name').val();
-
-    console.log(latitude, longitude);
-    if(latitude === '' || longitude === ''){
-      // NOTE this feature is available only over HTTPS
-      // navigator.geolocation.getCurrentPosition(function(position) {
-      //   var myLatLng = {lat: parseFloat(position.coords.latitude), lng: parseFloat(position.coords.longitude)};
-      //   createMap(myLatLng, siteName);
-      // });
-      createMap({lat: 0, lng: 0}, siteName);
-    }
-    else{
-      var myLatLng = {lat: parseFloat(latitude), lng: parseFloat(longitude)};
-      createMap(myLatLng);
-    }
-
-    function createMap(myLatLng){
-      // set the map
-      var map = new google.maps.Map(document.getElementById('map'), {
-        center: myLatLng,
-        zoom: 8
-      });
-
-      // set the marker
-      var marker = new google.maps.Marker({
-        position: myLatLng,
-        map: map,
-        title: siteName,
-        draggable: true,
-        animation: google.maps.Animation.DROP,
-      });
-
-      // listen for dragend events and update the form
-      google.maps.event.addListener(marker, 'dragend', function() {
-        latField.val(marker.getPosition().lat());
-        lngField.val(marker.getPosition().lng());
-      });
-    }
-  }
-
-</script>
-<script src="https://maps.googleapis.com/maps/api/js?callback=initMap" defer></script>
\ No newline at end of file
diff --git a/xos/templates/admin/core/slice/change_form.html b/xos/templates/admin/core/slice/change_form.html
deleted file mode 100644
index df7e9e7..0000000
--- a/xos/templates/admin/core/slice/change_form.html
+++ /dev/null
@@ -1,151 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% extends 'admin/change_form.html' %}
-{% block extrahead %}
-{{ block.super }} 
-<script>
-deployment_nodes = [
-{% for dn in deployment_nodes %}
-   [{{ dn.0 }}, {{ dn.1 }} , "{{ dn.2 }}"],
-{% endfor %}
-];
-
-deployment_flavors = [
-{% for dn in deployment_flavors %}
-   [{{ dn.0 }}, {{ dn.1 }} , "{{ dn.2 }}"],
-{% endfor %}
-];
-
-deployment_images = [
-{% for dn in deployment_images %}
-   [{{ dn.0 }}, {{ dn.1 }} , "{{ dn.2 }}"],
-{% endfor %}
-];
-
-site_login_bases = [
-{% for s in site_login_bases %}
-  [{{ s.0 }}, "{{ s.1 }}"],
-{% endfor %}
-];
-
-function option_html(val, text, selected) {
-    if (selected) {
-        return '<option value="' + val + '" selected>' + text + '</option>\n';
-    } else {
-        return '<option value="' + val + '">' + text + '</option>\n';
-    }
-}
-
-function update_nodes(deployment_select, flavor_select, node_select) {
-    deployment_id = $(deployment_select).val();
-    node_id = $(node_select).val();
-    flavor_name = $(flavor_select).children(":selected").text()
-    html="";
-    for (i in deployment_nodes) {
-        // this is for EC2, where the node hostnames imply the flavor.
-        dn = deployment_nodes[i];
-        if ((dn[0] == deployment_id) && (dn[2].lastIndexOf(flavor_name,0) === 0)) {
-            html = html + option_html(dn[1], dn[2], dn[1]==node_id);
-        }
-    }
-    if (!html) {
-        // now try it without the flavor hostname prefix matching
-        for (i in deployment_nodes) {
-            dn = deployment_nodes[i];
-            if (dn[0] == deployment_id) {
-                html = html + option_html(dn[1], dn[2], dn[1]==node_id);
-            }
-        }
-    }
-    html = "<option value=''>---------</option>\n" + html;
-    node_select.empty().append(html);
-}
-
-function update_flavors(deployment_select, flavor_select) {
-    deployment_id = $(deployment_select).val();
-    flavor_id = $(flavor_select).val();
-    html = "<option value=''>---------</option>\n";
-    for (i in deployment_flavors) {
-        dn = deployment_flavors[i];
-        if (dn[0] == deployment_id) {
-            html = html + option_html(dn[1], dn[2], dn[1] == flavor_id);
-        }
-    }
-    flavor_select.empty().append(html);
-}
-
-function update_images(deployment_select, image_select) {
-    deployment_id = $(deployment_select).val();
-    image_id = $(image_select).val();
-    html = "<option value=''>---------</option>\n";
-    for (i in deployment_images) {
-        dn = deployment_images[i];
-        if (dn[0] == deployment_id) {
-            html = html + option_html(dn[1], dn[2], dn[1] == image_id);
-        }
-    }
-    image_select.empty().append(html);
-}
-
-function instance_deployment_changed(any_control) {
-   /* This function handles someone changing the deployment control
-      in the add-instance line. It updats the flavors and nodes dialogs
-      accordingly.
-   */
-
-   /* the inscrutable jquery selector below says:
-      find the closest parent "tr" to the current element
-      then find the child with class "field-deployment"
-      then find the child with that is a select
-      then return it's id
-      then turn it into a jquery object
-    */
-    deployment_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-deployment select')[0].id);
-    node_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-node select')[0].id);
-    flavor_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-flavor select')[0].id);
-    image_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-image select')[0].id);
-    update_nodes(deployment_select, flavor_select, node_select);
-    update_flavors(deployment_select, flavor_select);
-    update_images(deployment_select, image_select);
-}
-
-function instance_flavor_changed(any_control) {
-    /* this is like instance_flavor changed, but does not update the flavors
-       control
-    */
-    deployment_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-deployment select')[0].id);
-    node_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-node select')[0].id);
-    flavor_select = $("#" + $($(any_control).closest('tr')[0]).find('.field-flavor select')[0].id);
-    update_nodes(deployment_select, flavor_select, node_select);
-}
-
-function update_slice_prefix(site_select, slice_name_id) {
-    site_id = $(site_select).val();
-    slice_prefix="";
-    for (i in site_login_bases) {
-        if (site_login_bases[i][0] == site_id) {
-            slice_prefix=site_login_bases[i][1]+"_";
-        }
-    }
-    $("#"+slice_name_id).val(slice_prefix); 
-}
-</script>
-
-{% endblock %}
-
diff --git a/xos/templates/admin/dashboard/cdn_nodes.html b/xos/templates/admin/dashboard/cdn_nodes.html
deleted file mode 100644
index b695b91..0000000
--- a/xos/templates/admin/dashboard/cdn_nodes.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="tabs-6">
-<div class="row">
-        <span><b>Content Provider:</b></span>
-        <span><select id="cdn-node-data-slicename">
-        <option value="all">all</option>
-        {% for cp in cdnContentProviders %}
-           <option value="{{ cp.account }}">{{ cp.name }}</option>
-        {% endfor %}
-        </select></span>
-</div>
-<div id="cdn-node-table"></div>
-</div>
-<script>
-
-function domain_name_sort(a,b) {
-        parts_a = a.split(".");
-        parts_b = b.split(".");
-        parts_a = parts_a.reverse();
-        parts_b = parts_b.reverse();
-        a = parts_a.join(".");
-        b = parts_b.join(".");
-	return ((a < b) ? -1 : ((a > b) ?  1 : 0));
-}
-
-jQuery.fn.dataTableExt.oSort['domain-name-asc']  = function(a,b) {
-    return domain_name_sort(a,b);
-};
-
-jQuery.fn.dataTableExt.oSort['domain-name-desc']  = function(a,b) {
-    retuirn -domain_name_sort(a,b);
-};
-
-function updateCDNNodeData(data) {
-    $('#cdn-node-table').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="dynamic_cdn_nodes"></table>' );
-    var actualEntries = [];
-
-    var rows = data.rows;
-    for (row in rows) {
-        hostname = rows[row]['hostname'];
-        bytes_sent = rows[row]['sum_bytes_sent'];
-        bytes_hit = rows[row]['sum_bytes_hit'];
-        elapsed = rows[row]['sum_elapsed'];
-        healthy = rows[row]['sum_healthy'];
-
-        if (bytes_sent > 0) {
-            hit_ratio = parseInt( bytes_hit * 100.0 / bytes_sent );
-        } else {
-            hit_ratio = 0;
-        }
-
-        Mbps = parseInt(rows[row]['sum_computed_bytes_sent_div_elapsed'] * 8.0 / 1024.0 / 1024.0);
-
-        if (healthy>0) {
-            healthyStr = "ok";
-        } else {
-            healthyStr = "bad";
-        }
-
-        actualEntries.push([hostname, healthyStr, Mbps, hit_ratio]);
-    }
-    oTable = $('#dynamic_cdn_nodes').dataTable( {
-        "bJQueryUI": true,
-        "aaData":  actualEntries,
-        "bStateSave": true,
-        "aoColumns": [
-            { "sTitle": "Hostname", sType: "domain-name" },
-            { "sTitle": "Healthy" },
-            { "sTitle": "Mbps" , sClass: "alignCenter"},
-            { "sTitle": "Hit Ratio" , sClass: "alignCenter"},
-        ],
-    } );
-}
-
-function updateCDNNodes() {
-    var contentProvider = $("#cdn-node-data-slicename").val();
-
-    var filterPart = ""
-    if ((contentProvider!="") && (contentProvider!="all")) {
-         filterPart = "&cp=" + contentProvider
-    }
-
-    var url= '/analytics/bigquery/?event=hpc_heartbeat&sum=@bytes_sent,@bytes_hit,@healthy,@elapsed&computed=@bytes_sent/@elapsed&groupBy=@hostname&cached=hpc&cachedGroupBy=@hostname' + filterPart;
-
-    $.ajax({
-    url: url,
-    dataType : 'json',
-    type : 'GET',
-    success: function(newData)
-    {
-        updateCDNNodeData(newData);
-    }
-});
-    setTimeout(updateCDNNodes, 30000);
-}
-
-google.setOnLoadCallback(function () {
-    $('#cdn-node-data-slicename').change(function()
-    {
-        updateCDNNodes();
-    });
-
-    updateCDNNodes();
-});
-
-//setTimeout(updateCDNNodes, 5000);
-</script>
diff --git a/xos/templates/admin/dashboard/cdnoperations.html b/xos/templates/admin/dashboard/cdnoperations.html
deleted file mode 100644
index 17ad1b3..0000000
--- a/xos/templates/admin/dashboard/cdnoperations.html
+++ /dev/null
@@ -1,281 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="HPCDashboard">
-    <h1>CDN Operations View</h1>
-    <span id="hpcSummary">
-        <span class="summary-attr"><b>Allocated Instances:</b> <span id="active-instances-value"> </span> </span>
-        <span class="summary-attr"><b>CDN Bandwidth:</b> <span id="overall-throughput-value"> </span>  </span>
-        <span class="summary-attr-util"><b>CDN Load:</b> <span id="cpu-utilization-value"> </span>  </span>
-    </span>
-    <div id="map-us" ></div>
-    <div style="line-height: 30%"><br></div><table border=0><tr>
-    <td>Least Loaded&nbsp;&nbsp;</td>
-    <td bgcolor="#0000FF" width=40>&nbsp;</td>
-    <td bgcolor="#00FFFF" width=40>&nbsp;</td>
-    <td bgcolor="#00FF00" width=40>&nbsp;</td>
-    <td bgcolor="#FFFF00" width=40>&nbsp;</td>
-    <td bgcolor="#FF0000" width=40>&nbsp;</td>
-    <td>&nbsp;&nbsp;Most Loaded</td>
-    </tr></table>
-    </div>
-
-    <div id="confirmNodeAdded" title="Added Node to Site"><p>Added Node to Site</p></div>
-    <div id="confirmNodeRemoved" title="Removed Node from Site"><p>Added Node to Site</p></div>
-
-<script>
-$( "#confirmNodeAdded" ).dialog({ autoOpen: false,
-                    modal: true,
-                    buttons: {
-                        Ok: function() {
-                           $( this ).dialog( "close" );
-                        }
-                    }});
-$( "#confirmNodeRemoved" ).dialog({ autoOpen: false });
-
-L.Map = L.Map.extend({
-    openPopup: function(popup) {
-        this._popup = popup;
-
-        return this.addLayer(popup).fire('popupopen', {
-            popup: this._popup
-        });
-    }
-});
-
-
-//Iterate through data and find the max/min coordinates to include all of our points to start
-var map = L.map('map-us'); //.setView([0, 0], 1);
-map.scrollWheelZoom.disable();
-
-//
-// Great tiles, but starting to occasionally see 403 errors on certain tiles causing grey out effect
-//L.tileLayer('http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png', {
-//
-// Swapping out cloudmade tiles to openstreetmap - too many grey tiles showing
-L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
-    maxZoom: 18,
-    attribution: 'Test'
-}).addTo(map);
-
-var arrayOfLatLngs = [];
-var mapData = {{ cdnData|safe }};
-log.debug( mapData );
-
-for ( var key in mapData ) {
-    arrayOfLatLngs.push([mapData[key]['lat'],mapData[key]['long']]);
-    log.debug( arrayOfLatLngs );
-
-    mapData[key]['marker'] = L.marker([mapData[key]['lat'], mapData[key]['long']], {icon: getIcon(mapData[key]['numNodes'], mapData[key]['numHPCInstances'], 0, mapData[key]['hot']) });
-    mapData[key]['marker'].addTo(map).bindPopup(setPopupVals(key, mapData[key]));
-
-}
-var bounds = new L.LatLngBounds(arrayOfLatLngs);
-map.fitBounds(bounds);
-
-var popup = L.popup();
-
-
-function setPopupVals (site, siteData) {
-    var retVal = '<span class="SiteDetail"><b>' + site + '</b></span>' +
-                   '</br><a href="' + siteData['siteUrl'] + '">' + siteData['siteUrl'] + '</a>' +
-                   '</br><b>HPC Instances: </b>' + siteData['numHPCInstances'] +
-                   '</br><b>Total Nodes: </b>' + siteData['numNodes'] +
-//                   '</br><b>Hot: </b>' + Math.round(siteData['hot']*100) +
-                   '</br><b>Measured Load: </b>' + siteData['load'] + '%' +
-                   '<span id="addInstances"></br><a href="#" id="addHPCInstance" data-site="' + site + '" data-availNodes="' + siteData['numNodes'] +'">Add HPC Instances</a> </span>' +
-                   '<span id="remInstances"><a href="#" id="remHPCInstance" data-site="' + site + '">Remove HPC Instances</a> </span>';
-
-   return retVal;
-}
-
-$('#map-us').on('click', '#remHPCInstance', function() {
-
-    $.ajax({
-        url : '/dashboardaddorreminstance/',
-        dataType : 'json',
-        data: {site: $(this).data('site'),
-               actionToDo: "rem",
-               csrfmiddlewaretoken: "{{ csrf_token }}",   // < here
-               state:"inactive" },
-        type : 'POST',
-        success:function(){
-            confirmDialog("Info","Removed an HPC Instance from Site ");
-        },
-        error:function (xhr, textStatus, thrownError){
-            errorDialog("Error", textStatus + " " + xhr.responseText);
-        }
-    });
-});
-
-$('#map-us').on('click', '#addHPCInstance', function() {
-
-    $.ajax({
-        url : '/dashboardaddorreminstance/',
-        dataType : 'json',
-        data: {site: $(this).data('site'),
-               actionToDo: "add",
-               csrfmiddlewaretoken: "{{ csrf_token }}",   // < here
-               state:"inactive" },
-        type : 'POST',
-        success: function(response)
-        {
-            confirmDialog("Info","Added an HPC Instance to Site ");
-        },
-        error:function (xhr, textStatus, thrownError){
-            errorDialog("Error", textStatus + " " + xhr.responseText);
-        }
-    });
-});
-
-function getIcon(numNodes, numHPCInstances, currentBW, hot) {
-    //var colorChoices = ["#007FFF", "#0000FF", "#7f00ff", "#FF00FF", "#FF007F", "#FF0000"];
-    var colorChoices = ["#0000FF", "#00FFFF", "#00FF00", "#FFFF00", "#FF0000"];
-
-    var ratio = hot * 100; //(numHPCInstances/numNodes) * 100;
-    var numColors = colorChoices.length;
-    var colorBands = 100/numColors;
-
-    //Algorithm for color tone should consider the number of available nodes
-    // on the site, and then how much the current dedicated nodes are impacted
-    //var iconColor = 0;
-    var iconColor = colorChoices.length-1;
-    for (colorBand = 0; colorBand < numColors; colorBand ++) {
-        if (ratio < colorBands * colorBand+1) {
-            iconColor = colorBand
-            break;
-        }
-    }
-
-    if (numHPCInstances < 1) {
-        iconColor = "#7F7F7F";
-    } else {
-        iconColor = colorChoices[iconColor];
-    }
-
-    var icon = L.MakiMarkers.icon({icon: "star-stroked", color: iconColor , size: "s"});
-    return icon;
-}
-
-function updateMaps() {
-    log.debug("Attempting to update Maps");
-    $.ajax({
-    url : '/hpcdashboard',
-    dataType : 'json',
-    type : 'GET',
-    success: function(newData)
-    {
-        log.debug("Successfully got data back...");
-        log.debug(newData);
-        log.debug("Still have old data too");
-        log.debug(mapData);
-        updateMapData(newData);
-    }
-});
-    setTimeout(updateMaps, 30000)
-
-}
-
-function updateMapData(newData) {
-    for ( site in newData ) {
-        var isNewSite = false;
-        //check to see if the site is new or not
-        if (site in mapData) {
-            log.debug("Site " + site + " already mapped");
-            //take ownership of marker
-            newData[site]['marker'] = mapData[site]['marker'];
-            delete mapData[site];
-            newData[site]['marker'].setIcon(getIcon(newData[site]['numNodes'], newData[site]['numHPCInstances'],  0, newData[site]['hot']));
-            // workaround, markers currently don't have a setPopup Content method -- so have to grab object directly
-            newData[site]['marker']._popup.setContent(setPopupVals(site, newData[site]));
-        }
-        else {
-            isNewSite = true;
-            log.debug("New Site detected: " + site);
-            newData[site]['marker'] = L.marker([newData[site]['lat'], newData[site]['long']],
-                                              {icon: getIcon(newData[site]['numNodes'], newData[site]['numHPCInstances'],  0, newData[site]['hot']) });
-            newData[site]['marker'].addTo(map).bindPopup(setPopupVals(site, newData[site])); //.openPopup();
-            log.debug("Should have added the new site");
-
-        }
-    }
-
-    // Anything still in data needs to be removed since it is no longer a valid site
-    for (remSite in mapData) {
-        log.warn("Site: " + remSite + " is no longer valid, removing from map");
-        map.removeLayer(data[remSite]['marker']);
-    }
-    mapData = newData;
-}
-
-function onMapClick(e) {
-    popup
-    .setLatLng(e.latlng)
-    .setContent("You clicked the map at " + e.latlng.toString())
-    .openOn(map);
-}
-
-setTimeout(updateMaps, 5000)
-
-// from stackexchange
-function setInnerText (elementId, text) {
-    var element;
-    if (document.getElementById) {
-        element = document.getElementById(elementId);
-    } else if (document.all) {
-        element = document.all[elementId];
-    }
-    if (element) {
-        if (typeof element.textContent != 'undefined') {
-            element.textContent = text;
-        } else if (typeof element.innerText != 'undefined') {
-            element.innerText = text;
-        } else if (typeof element.removeChild != 'undefined') {
-            while (element.hasChildNodes()) {
-                element.removeChild(element.lastChild);
-            }
-            element.appendChild(document.createTextNode(text)) ;
-        }
-    }
-}
-
-function updateLabelData(summaryData) {
-    setInnerText("active-instances-value", summaryData["total_instances"]);
-    setInnerText("overall-throughput-value", (summaryData["total_bandwidth"]*8/1024/1024/1024).toFixed(2) + " Gbps");
-    setInnerText("cpu-utilization-value", summaryData["average_cpu"] + "%");
-}
-
-function updateLabels() {
-    log.debug("Attempting to update Labels");
-    $.ajax({
-    url : '/hpcsummary',
-    dataType : 'json',
-    type : 'GET',
-    success: function(newData)
-    {
-        updateLabelData(newData);
-    }
-});
-    setTimeout(updateLabels, 30000)
-
-}
-
-setTimeout(updateLabels, 5000)
-
-
-</script>
diff --git a/xos/templates/admin/dashboard/dashboard_base.html b/xos/templates/admin/dashboard/dashboard_base.html
deleted file mode 100644
index daf93a7..0000000
--- a/xos/templates/admin/dashboard/dashboard_base.html
+++ /dev/null
@@ -1,107 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% extends "admin/base.html" %}
-{% load admin_static %}
-
-{% block extrahead %}
-<link rel="stylesheet"  href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.0/css/jquery.dataTables.css">
-<link rel="stylesheet" type="text/css" href="{% static 'suit/css/suit.css' %}" media="all">
-<link rel="stylesheet" type="text/css" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.0/css/jquery.dataTables_themeroller.css">
-<link rel="stylesheet" type="text/css" href="{% static 'xos.css' %}" media="all">
-{% if XOS_BRANDING_CSS %}
-    <link rel="stylesheet" type="text/css" href="{{ XOS_BRANDING_CSS }}">
-{% endif %}
-<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" />
-<script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"></script>
-<script src="{% static 'suit/js/jquery-ui.min.js' %}"></script>
-<link rel="stylesheet" href="{% static 'suit/css/jquery-ui.min.css' %}">
-<script src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
-<script type="text/javascript" src="{% static 'log4javascript-1.4.6/log4javascript.js' %}"></script>
-<script src="{% static 'js/Leaflet.MakiMarkers.js' %}" > </script>
-  
-<script>
-  $(function() {
-    $( "#hometabs" ).tabs({active: 0, //event: "mouseover"
-      //collapsible: true
-    });
-  });
-
-var consoleAppender = new log4javascript.BrowserConsoleAppender();
-var patternLayout = new log4javascript.PatternLayout("%d{HH:mm:ss,SSS} %l{s:l} %-5p - %m{1}%n");
-consoleAppender.setLayout(patternLayout);
-//var log  = log4javascript.getDefaultLogger();
-var log  = log4javascript.getRootLogger();
-log.addAppender(consoleAppender);
-log.setLevel(log4javascript.Level.ERROR);
-
-function confirmDialog(title,msg) {
-    var dialog = $('<div>'+msg+'</div>');
-    var def = $.Deferred();
-
-    $(dialog).dialog({
-        resizable: false,
-        title: title,
-        autoOpen: true,
-        modal: true,
-        dialogClass: "dashboard-hpc-instance",
-        buttons: {
-            'OK': function() {
-                def.resolve();
-                log.debug("Chose to add a instance");
-                $( this ).dialog( "close" );
-            },
-            'Cancel': function() {
-                def.reject();
-                $( this ).dialog( "close" );
-            }
-        },
-        close: {
-        }
-    });
-    return def.promise();
-}
-
-function errorDialog(title,msg) {
-    var dialog = $('<div>'+msg+'</div>');
-    var def = $.Deferred();
-
-    $(dialog).dialog({
-        resizable: false,
-        title: title,
-        autoOpen: true,
-        modal: true,
-        dialogClass: "dashboard-hpc-instance",
-        buttons: {
-            'OK': function() {
-                def.resolve();
-                $( this ).dialog( "close" );
-            },
-        },
-        close: {
-        }
-    });
-    return def.promise();
-}
-
-</script>
-{% endblock %}
-
-{% block content %}
-dashboard goes here
-{% endblock %}
diff --git a/xos/templates/admin/dashboard/developer.html b/xos/templates/admin/dashboard/developer.html
deleted file mode 100644
index 0319d98..0000000
--- a/xos/templates/admin/dashboard/developer.html
+++ /dev/null
@@ -1,102 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="developerview"></div>
-
-<script>
-var oTable;
-
-function updateUserSliceTable(){
-    log.debug("Should grab user slice info");
-    jQuery.ajax({
-        async:true,
-        dataType: 'json',
-        url: '/hpcdashuserslices',
-        success: function(data){
-            log.info("Got Data back for User SliceTable");
-            //parseData(data);
-            //createUserSliceTable(data);
-            setTimeout(function () { updateUserSliceTable() }, 5000);
-        },
-        error: function(data){
-            log.debug("COULDNT GET DATA BACK");
-            setTimeout(function () { updateUserSliceTable() }, 5000);
-        }
-    });
-}
-
-function createUserSliceTable(data) {
-    log.debug("Creating User Slice Table");
-
-    //Add check for #dynamicusersliceinfo_filter label-> input having focus here
-
-    $('#developerview').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="dynamicusersliceinfo"></table>' );
-    var actualEntries = [];
-    //log.debug(data['userSliceInfo']['rows'][0]['slicename']);
-
-    var rows = data['userSliceInfo']['rows'];
-    for (row in rows) {
-        log.debug(row[0]);
-        slicename = rows[row]['slicename'];
-        sliceid = rows[row]['sliceid'];
-        role = rows[row]['role'];
-        instancecount = rows[row]['instancecount'];
-        sitecount = rows[row]['sitecount'];
-        actualEntries.push(['<a href="http://{{request.get_host}}/admin/core/slice/' + sliceid + '">' + slicename + '</a>',
-                            role, instancecount, sitecount]);
-    }
-    oTable = $('#dynamicusersliceinfo').dataTable( {
-        "bJQueryUI": true,
-        "aaData":  actualEntries ,
-        "bStateSave": true,
-        "aoColumns": [
-            { "sTitle": "Slice" },
-            { "sTitle": "Privilege" , sClass: "alignCenter"},
-            { "sTitle": "Number of Instances" , sClass: "alignCenter"},
-            { "sTitle": "Number of Sites" , sClass: "alignCenter"},
-        ]
-    } );
-
-    // If the filter had focus, reapply here
-
-    setTimeout(function() {
-       jQuery.ajax({
-           url: '/hpcdashuserslices',
-           dataType: 'json',
-           success: function(data){ createUserSliceTable(data); },
-           complete: function(){ },
-       });
-    },  10000);
-}
-
-function initTable(){
-    log.debug("Initializing Table")
-    jQuery.ajax({
-        url: '/hpcdashuserslices',
-        dataType: 'json',
-        success: function(data){ createUserSliceTable(data); },
-        complete: function(){
-        }
-    });
-    updateUserSliceTable();
-}
-
-
-initTable();
-
-</script>
diff --git a/xos/templates/admin/dashboard/hpc_historical.html b/xos/templates/admin/dashboard/hpc_historical.html
deleted file mode 100644
index 3fab449..0000000
--- a/xos/templates/admin/dashboard/hpc_historical.html
+++ /dev/null
@@ -1,321 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-
-    <script type="text/javascript" src="//www.google.com/jsapi"></script>
-    <link rel="stylesheet" href="/static/hpc_historical.css">
-    <script type="text/javascript">
-		google.load('visualization', '1', {'packages' : ['controls','table','corechart','geochart']});
-    </script>
-
-    <script type="text/javascript">
-
-     var options = {
-
         width: 600,
-         height: 400,
-         showRowNumber: false,
-         pages: true,
-         numRows: 9,
-         backgroundColor: "black"
-     };
-
-     // ask django for a data source URL to use for the graphs
-
-     function updateDataSourceUrl() {
-         var sliceName = $("#historical_slicename :selected").text();
-         var queryString = "/analytics/bigquery/?timeBucket=600&maxAge=86400&sum=@bytes_sent&avg=@cpu&groupBy=Time,city,@hostname,@site&slice=" + sliceName;
-
-         $( "#control1").html("");
-         $( "#control2").html("");
-         $( "#chart-site-agg" ).html("<div class='loading'>Loading ...</div>");
-         $( "#chart-site-time" ).html("");
-         $( "#chart-geo" ).html("");
-
-         $.ajax({
-             url: queryString,
-             dataType: 'json',
-             type: 'GET',
-             success: function (newData) {
-                 sendAndDraw(newData["dataSourceUrl"])
-             }
-         });
-     }
-
-     TIME_COL = 0;
-     BANDWIDTH_COL = 2;
-     CPU_COL = 1;
-     CITY_COL = 3;
-     NODE_COL = 4;
-     SITE_COL = 5;
-
-     google.setOnLoadCallback(function () {
-         $('#historical_slicename').change(function()
-         {
-             updateDataSourceUrl();
-         });
-
-         updateDataSourceUrl();
-     });
-
-     function showSiteTimeAgg(dt) {
-         var lineChart = new google.visualization.ChartWrapper({
-             'chartType': 'LineChart',
-             'containerId': 'chart-site-time',
-             'options': {
-                 'width': 320,
-                 'height': 300,
-                 'title': 'Network-wide usage',
-                 'pages': true,
-                 'numRows': 9
-             },
-             'view': {
-                 'columns': [0, 1, 2]
-             }
-         });
-         lineChart.setDataTable(dt);
-         lineChart.draw();
-     }
-
-     function showSiteAgg(dt) {
-         var barChart = new google.visualization.ChartWrapper({
-             'chartType': 'ColumnChart',
-             'containerId': 'chart-site-agg',
-             'options': {
-                 'width': 670,
-                 'height': 300,
-                 'title': 'Site-wise usage',
-                 'pages': true,
-                 'numRows': 9
-             },
-             'view': {
-                 'columns': [1, 2, 3]
-             }
-         });
-         barChart.setDataTable(dt);
-         barChart.draw();
-         var geoChart = new google.visualization.ChartWrapper({
-             'chartType': 'GeoChart',
-             'containerId': 'chart-geo',
-             'options': {
-                 'width': 320,
-                 'height': 300,
-                 'displayMode': 'markers',
-                 'region': '021',
-                 'title': 'Usage map',
-                 colorAxis: {
-                     colors: ['green', 'purple', 'red']
-                 }
-             },
-             'view': {
-                 'columns': [0, 2, 3]
-             }
-         });
-         geoChart.setDataTable(dt);
-         geoChart.draw();
-     }
-
-     function handleResponse(response) {
-         var timeSlider = new google.visualization.ControlWrapper({
-             'controlType': 'DateRangeFilter',
-             'containerId': 'control1',
-             'options': {
-                 'filterColumnLabel': 'Time',
-                 ui: {
-                     ticks: 10,
-                     step: "minute"
-                 }
-             }
-         });
-
-         var categoryPicker = new google.visualization.ControlWrapper({
-             'controlType': 'CategoryFilter',
-             'allowMultiple': true,
-             'containerId': 'control2',
-             'options': {
-                 'filterColumnLabel': 'site',
-                 'ui': {
-                     'labelStacking': 'vertical',
-                     'allowTyping': false
-                 }
-             }
-         });
-
-         var proxy = new google.visualization.ChartWrapper({
-             'chartType': 'Table',
-             'containerId': 'chart7',
-             'options': {
-                 'width': 800,
-                 'height': 300,
-                 pageSize: 5,
-                 page: 'enable',
-                 'legend': 'none',
-                 'title': 'Nodes'
-             },
-             'view': {
-                 'columns': [0, 1, 2, 3, 4, 5]
-             }
-         });
-
-         function avg_bandwidth(arr) {
-                var ret = 0;
-                for (var i = 0; i < arr.length; i++) {
-                        ret+=arr[i]*8.0/1024.0/1024.0/1024.0;
-                }
-                if (arr.length==0) {
-                    return 0;
-                }
-                return ret/arr.length;
-         }
-
-         function sum_bytes_sent_as_bw(arr) {
-                var ret = 0;
-                for (var i = 0; i < arr.length; i++) {
-                        ret+=arr[i]*8.0/1024.0/1024.0/1024.0;
-                }
-                return ret/60.0;
-         }
-
-         function sum_bytes_sent_as_GB(arr) {
-                var ret = 0;
-                for (var i = 0; i < arr.length; i++) {
-                        ret+=arr[i]/1024.0/1024.0/1024.0;
-                }
-                return ret;
-         }
-
-         function fixDate2(unixDate) {
-             // not completely sure why we have to do this, as the data was in
-             // javascript Date() objects to start with. If we don't do it,
-             // then the horizontal axis will be blank.
-             return new Date(unixDate);
-         }
-
-         var format0dp = new google.visualization.NumberFormat({fractionDigits:0});
-         var format2dp = new google.visualization.NumberFormat({fractionDigits:2});
-
-         if (response.isError()) {
-             $( "#chart-site-agg" ).html("<div class='loading'>Error while fetching data.</div>");
-             return;
-         }
-
-         if (response.getDataTable().getNumberOfRows() == 0) {
-             $( "#chart-site-agg" ).html("<div class='loading'>No data for this slice.</div>");
-             return;
-         }
-
-         // Create a group for charts that will have a horizontal axis that is
-         // time.
-
-         google.visualization.events.addListener(proxy, 'ready', function () {
-             var dt = proxy.getDataTable();
-             var groupedData1 = google.visualization.data.group(dt, [{
-                 column: TIME_COL,
-                 type: 'datetime',
-                 modifier: fixDate2,
-             }], [{
-                 column: CPU_COL,
-                 type: 'number',
-                 label: "avg cpu",
-                 aggregation: google.visualization.data.avg
-             }, {
-                 column: BANDWIDTH_COL,
-                 type: 'number',
-                 label: "Gbps",
-                 aggregation: sum_bytes_sent_as_bw
-             }]);
-
-             format0dp.format(groupedData1,1);
-             format2dp.format(groupedData1,2);
-
-             showSiteTimeAgg(groupedData1);
-         });
-
-         // Create a group for charts that will have a horizontal axis that is
-         // city or site.
-
-         google.visualization.events.addListener(proxy, 'ready', function () {
-             var dt = proxy.getDataTable();
-             var groupedData0 = google.visualization.data.group(dt, [CITY_COL, SITE_COL], [{
-                 column: CPU_COL,
-                 type: 'number',
-                 label: 'avg cpu',
-                 aggregation: google.visualization.data.avg
-             }, {
-                 column: BANDWIDTH_COL,
-                 type: 'number',
-                 label: "GB sent",
-                 aggregation: sum_bytes_sent_as_GB
-             }]);
-
-             format0dp.format(groupedData0,2);
-             format2dp.format(groupedData0,3);
-
-             showSiteAgg(groupedData0);
-         });
-
-         data = response.getDataTable();
-         new google.visualization.Dashboard(document.getElementById('dashboard')).
-         // Establish bindings, declaring the both the slider and the category
-         // picker will drive both charts.
-         bind([categoryPicker, timeSlider], [proxy]).
-         // Draw the entire dashboard.
-         draw(data);
-
-     }
-
-     function sendAndDraw(queryString) {
-         query = new google.visualization.Query(queryString)
-         query && query.abort();
-         query.send(function (response) {
-             handleResponse(response);
-         });
-     }
-
-    </script>
-    <div id="dashboard" class="graph_container">
-                <div class="row">
-                        <span><b>Slice Name:</b></span>
-                        <span><select id="historical_slicename">
-                        {% for slice in userSliceInfo %}
-                           <option value="{{ slice.slicename }}">{{ slice.slicename }}</option>
-                        {% endfor %}
-                        </select></span>
-                </div>
-		<div class="row" dstyle="background-color:red">
-			<div class="col-md-12">
-				<div class="col-md-4" id="control2"></div>
-				<div class="col-md-4" id="control1"></div>
-				<!--<div class="col-md-4" id="control3"></div>-->
-			</div>
-		</div>
-		<div class="row" dstyle="background-color:green">
-			<div class="col-md-12">
-				<div class="col-md-fullgraph" id="chart-site-agg" dstyle="background-color:pink">
-				</div>
-			</div>
-		</div>
-		<div class="row" dstyle="background-color:blue">
-			<div class="col-md-12">
-				<div class="col-md-halfgraph" id="chart-site-time" dstyle="background-color:orange">
-				</div>
-				<div class="col-md-halfgraph" id="chart-geo" dstyle="background-color:yellow">
-				</div>
-			</div>
-		</div>
-    </div>
-	<div id="chart7" style="display:none"></div>
diff --git a/xos/templates/admin/dashboard/shell.html b/xos/templates/admin/dashboard/shell.html
deleted file mode 100644
index 4c07018..0000000
--- a/xos/templates/admin/dashboard/shell.html
+++ /dev/null
@@ -1,50 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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="terminal">
-    <p class="response">XSH - The XOS Shell</p>
-    <br />
-    <p id="terminal_help1" style="display: none;">type "help" for help</p>
-    <p id="terminal_help2" style="display: none;">type "tutorial" to start the tutorial</p>
-    <p id="terminal_wait">Please wait while we talk to the XOS server...</p>
-
-  </div>
-  <link rel="stylesheet" type="text/css" href="{% static 'shell/opencloud_shell.css' %}" media="all">
-  <script src="{% static 'shell/opencloud.js' %}"></script>
-  <script src="{% static 'shell/opencloud_shell.js' %}"></script>
-  <script src="{% static 'shell/object_id.js' %}"></script>
-  <script src="{% static 'shell/constants.js' %}"></script>
-  <script src="{% static 'shell/utils.js' %}"></script>
-  <script src="{% static 'shell/shell_utils.js' %}"></script>
-  <script src="{% static 'shell/tokens.js' %}"></script>
-
-
-    <!-- script type="text/javascript" src="js/jquery-1.3.2.min.js"></script-->
-
-    <!-- script type="text/javascript" src="js/mongo.js"></script -->
-    <!-- script type="text/javascript" src="js/object_id.js"></script -->
-    <!-- script type="text/javascript" src="js/lib/collection.js"></script -->
-
-    <!-- script type="text/javascript" src="js/constants.js"></script -->
-    <!-- script type="text/javascript" src="js/connection.js"></script -->
-
-    <!-- script type="text/javascript" src="js/utils.js"></script -->
-    <!-- script type="text/javascript" src="js/shell_utils.js"></script-->
-    <!-- script type="text/javascript" src="js/tokens.js"></script -->
-
-
diff --git a/xos/templates/admin/dashboard/slice_interactions.html b/xos/templates/admin/dashboard/slice_interactions.html
deleted file mode 100644
index a9e4db4..0000000
--- a/xos/templates/admin/dashboard/slice_interactions.html
+++ /dev/null
@@ -1,521 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
-<style>
-#slice_interaction_chart_placeholder {
-    text-align: center;
-    color:#fff;
-    position: relative;
-    height: 100%;
-    width: 100%;
-}
-.dependencyWheel {
-    font: 10px sans-serif;
-}
-form .btn-primary {
-    margin-top: 25px;
-}
-.labeltext {
-    color: #fff;
-}
-#circle circle {
-    fill: none;
-    pointer-events: all;
-}
-path.chord {
-    stroke: #000;
-    stroke-width: .10px;
-    transition: opacity 0.3s;
-}
-#circle:hover path.fade {
-    opacity: 0;
-}
-a {
-    text-decoration: none;
-    border-bottom: 1px dotted #666;
-    color: #999;
-}
-.more a {
-    color: #666;
-}
-.by a {
-    color: #fff;
-}
-a:hover {
-    color: #45b8e2;
-}
-a:not(:hover) {
-    text-decoration: none;
-}
-text {
-    fill: black;
-}
-svg {
-    font-size: 12px;
-    font-weight: bold;
-    color: #999;
-    font-family:'Arial', sans-serif;
-    min-height: 100%;
-    min-width: 100%;
-}
-button:disabled {
-    color:red;
-    background-color: lightyellow;
-}
-.sliceinteractions_column {
-  display: table-cell;

-  padding: 10px;

-}
-#interactions_function {
-  width: 125px;
-}
-
-</style>
-
-<div class="row">
-    <div class="sliceinteractions_column">
-    <select id="interactions_function">
-        <option value="networks">networks</option>
-        <option value="users">users</option>
-        <option value="owner sites">sites</option>
-        <option value="instance_sites">instance_sites</option>
-        <option value="instance_nodes">instance_nodes</option>
-    </select>
-    </div>
-    <div class="sliceinteractions_column">
-    <h3 id="sliceEngagementTitle">Slice Interactions</h3>
-    </div>
-</div>
-
-<div id="slice_interaction_chart_placeholder"></div>
-
-<script>
-
-// Chord Diagram for showing Collaboration between users found in an anchor query
-// Collaboration View
-//
-
-var width = 600,
-    height = 600,
-    outerRadius = Math.min(width, height) / 2 - 100,
-    innerRadius = outerRadius - 18;
-
-//create number formatting functions
-var formatPercent = d3.format("%");
-var numberWithCommas = d3.format("0,f");
-
-//define the default chord layout parameters
-//within a function that returns a new layout object;
-//that way, you can create multiple chord layouts
-//that are the same except for the data.
-function getDefaultLayout() {
-    return d3.layout.chord()
-    .sortSubgroups(d3.descending)
-    .sortChords(d3.ascending);
-}
-var last_layout; //store layout between updates
-var g;
-var arc;
-var path;
-
-function init_visualization() {
-    arc = d3.svg.arc()
-        .innerRadius(innerRadius)
-        .outerRadius(outerRadius);
-
-    path = d3.svg.chord()
-        .radius(innerRadius);
-
-
-    /*** Initialize the visualization ***/
-    g = d3.select("#slice_interaction_chart_placeholder").append("svg")
-            .attr("width", width)
-            .attr("height", height)
-        .append("g")
-            .attr("id", "circle")
-            .attr("transform",
-                  "translate(" + width / 2 + "," + height / 2 + ")");
-    //the entire graphic will be drawn within this <g> element,
-    //so all coordinates will be relative to the center of the circle
-
-    g.append("circle")
-        .attr("r", outerRadius);
-}
-
-$( document ).ready(function() {
-    init_visualization();
-    $('#interactions_function').change(function() {
-         updateInteractions();
-     });
-    updateInteractions();
-});
-
-function updateInteractions() {
- $( "#sliceEngagementTitle" ).html("<h3>Loading...</h3>");
- $.ajax({
-    url : "/admin/sliceinteractions/" + $("#interactions_function :selected").text() + "/",
-    dataType : 'json',
-    type : 'GET',
-    success: function(newData)
-    {
-        $( "#sliceEngagementTitle" ).html("<h3>" + newData["title"] + "</h3>");
-        updateChords(newData["groups"], newData["matrix"], newData["objectName"])
-    }
-   });
-}
-
-
-/* Create OR update a chord layout from a data matrix */
-function updateChords( users, matrix, objectName ) {
-
-    /* Compute chord layout. */
-    layout = getDefaultLayout(); //create a new layout object
-    layout.matrix(matrix);
- 
-    /* Create/update "group" elements */
-    var groupG = g.selectAll("g.group")
-        .data(layout.groups(), function (d) {
-            return d.index; 
-            //use a key function in case the 
-            //groups are sorted differently between updates
-        });
-    
-    groupG.exit()
-        .transition()
-            .duration(1500)
-            .attr("opacity", 0)
-            .remove(); //remove after transitions are complete
-
-    var newGroups = groupG.enter().append("g")
-        .attr("class", "group");
-    //the enter selection is stored in a variable so we can
-    //enter the <path>, <text>, and <title> elements as well
-
-    
-    //Create the title tooltip for the new groups
-    newGroups.append("title");
-    
-    //Update the (tooltip) title text based on the data
-    groupG.select("title")
-        .text(function(d, i) {
-            return "Slice (" + users[i].name +
-                ") "
-                ;
-        });
-
-    //create the arc paths and set the constant attributes
-    //(those based on the group index, not on the value)
-    newGroups.append("path")
-        .attr("id", function (d) {
-            return "group" + d.index;
-            //using d.index and not i to maintain consistency
-            //even if groups are sorted
-        })
-        .style("fill", function (d) {
-            return users[d.index].color;
-        });
-    
-    //update the paths to match the layout
-    groupG.select("path") 
-        .transition()
-            .duration(1500)
-            .attr("opacity", 0.5) //optional, just to observe the transition
-        .attrTween("d", arcTween( last_layout ))
-       //     .transition().duration(100).attr("opacity", 1) //reset opacity
-        ;
-    
-    //create the group labels
-    newGroups.append("svg:text")
-        .attr("xlink:href", function (d) {
-            return "#group" + d.index;
-        })
-        .attr("dy", ".35em")
-        .attr("color", "#fff")
-        .text(function (d) {
-            return users[d.index].name;
-        });
-
-    //position group labels to match layout
-    groupG.select("text")
-        .transition()
-            .duration(1500)
-            .attr("transform", function(d) {
-                d.angle = (d.startAngle + d.endAngle) / 2;
-                //store the midpoint angle in the data object
-                
-                return "rotate(" + (d.angle * 180 / Math.PI - 90) + ")" +
-                    " translate(" + (innerRadius + 26) + ")" + 
-                    (d.angle > Math.PI ? " rotate(180)" : " rotate(0)"); 
-                //include the rotate zero so that transforms can be interpolated
-            })
-            .attr("text-anchor", function (d) {
-                return d.angle > Math.PI ? "end" : "begin";
-            });
-    
-    
-    /* Create/update the chord paths */
-    var chordPaths = g.selectAll("path.chord")
-        .data(layout.chords(), chordKey );
-            //specify a key function to match chords
-            //between updates
-        
-    
-    //create the new chord paths
-    var newChords = chordPaths.enter()
-        .append("path")
-        .attr("class", "chord");
-    
-    // Add title tooltip for each new chord.
-    newChords.append("title");
-    
-    // Update all chord title texts
-    chordPaths.select("title")
-        .text(function(d) {
-            if (users[d.target.index].name !== users[d.source.index].name) {
-                return [numberWithCommas(d.source.value),
-                        " " + objectName + " in common between \n",
-                        users[d.source.index].name,
-                        " and ",
-                        users[d.target.index].name,
-                        "\n"
-                        ].join("");
-                    //joining an array of many strings is faster than
-                    //repeated calls to the '+' operator,
-                    //and makes for neater code!
-            }
-            else { //source and target are the same
-                return numberWithCommas(d.source.value)
-                    + " " + objectName + " are only in Slice ("
-                    + users[d.source.index].name + ")";
-            }
-        });
-
-    //handle exiting paths:
-    chordPaths.exit().transition()
-        .duration(1500)
-        .attr("opacity", 0)
-        .remove();
-
-    //update the path shape
-    chordPaths.transition()
-        .duration(1500)
-        //.attr("opacity", 0.5) //optional, just to observe the transition
-        .style("fill", function (d) {
-            return users[d.source.index].color;
-        })
-        .attrTween("d", chordTween(last_layout))
-        //.transition().duration(100).attr("opacity", 1) //reset opacity
-    ;
-
-    // XXX SMBAKER: The way the text was added with newGroups, it's only
-    //   computed when a node is created. This is a problem if we redraw the
-    //   graph with a different set of nodes, because the old labels will
-    //   stick. So, I added this, which *seems* to cause the labels to be
-    //   recomputed.
-    groupG.selectAll("text")
-        .text(function (d) {
-            return users[d.index].name;
-        });
-
-    //add the mouseover/fade out behaviour to the groups
-    //this is reset on every update, so it will use the latest
-    //chordPaths selection
-    groupG.on("mouseover", function(d) {
-        chordPaths.classed("fade", function (p) {
-            //returns true if *neither* the source or target of the chord
-            //matches the group that has been moused-over
-            return ((p.source.index != d.index) && (p.target.index != d.index));
-        });
-    });
-    //the "unfade" is handled with CSS :hover class on g#circle
-    //you could also do it using a mouseout event:
-    /*
-    g.on("mouseout", function() {
-        if (this == g.node() )
-            //only respond to mouseout of the entire circle
-            //not mouseout events for sub-components
-            chordPaths.classed("fade", false);
-    });
-    */
-
-    // XXX smbaker: there's a bug where if you hilight a slice of the chord
-    //   graph, and then update the data, the freshly drawn graph is missing
-    //   some of the chords. Flipping the fade bit seems to fix that.
-    chordPaths.classed("fade", true);
-    chordPaths.classed("fade", false);
-
-    last_layout = layout; //save for next update
-    
-//  }); //end of d3.json
-}
-
-function arcTween(oldLayout) {
-    //this function will be called once per update cycle
-    
-    //Create a key:value version of the old layout's groups array
-    //so we can easily find the matching group 
-    //even if the group index values don't match the array index
-    //(because of sorting)
-    var oldGroups = {};
-    if (oldLayout) {
-        oldLayout.groups().forEach( function(groupData) {
-            oldGroups[ groupData.index ] = groupData;
-        });
-    }
-    
-    return function (d, i) {
-        var tween;
-        var old = oldGroups[d.index];
-        if (old) { //there's a matching old group
-            tween = d3.interpolate(old, d);
-        }
-        else {
-            //create a zero-width arc object
-            var emptyArc = {startAngle:d.startAngle,
-                            endAngle:d.startAngle};
-            tween = d3.interpolate(emptyArc, d);
-        }
-        
-        return function (t) {
-            return arc( tween(t) );
-        };
-    };
-}
-
-function chordKey(data) {
-    return (data.source.index < data.target.index) ?
-        data.source.index  + "-" + data.target.index:
-        data.target.index  + "-" + data.source.index;
-    
-    //create a key that will represent the relationship
-    //between these two groups *regardless*
-    //of which group is called 'source' and which 'target'
-}
-function chordTween(oldLayout) {
-    //this function will be called once per update cycle
-    
-    //Create a key:value version of the old layout's chords array
-    //so we can easily find the matching chord 
-    //(which may not have a matching index)
-    
-    var oldChords = {};
-    
-    if (oldLayout) {
-        oldLayout.chords().forEach( function(chordData) {
-            oldChords[ chordKey(chordData) ] = chordData;
-        });
-    }
-    
-    return function (d, i) {
-        //this function will be called for each active chord
-        
-        var tween;
-        var old = oldChords[ chordKey(d) ];
-        if (old) {
-            //old is not undefined, i.e.
-            //there is a matching old chord value
-            
-            //check whether source and target have been switched:
-            if (d.source.index != old.source.index ){
-                //swap source and target to match the new data
-                old = {
-                    source: old.target,
-                    target: old.source
-                };
-            }
-            
-            tween = d3.interpolate(old, d);
-        }
-        else {
-            //create a zero-width chord object
-/*          XXX SMBAKER: the code commented out below was causing an error,
-                  so I replaced it with the following code from stacktrace
-            if (oldLayout) {
-                var oldGroups = oldLayout.groups().filter(function(group) {
-                        return ( (group.index == d.source.index) ||
-                                 (group.index == d.target.index) )
-                    });
-                old = {source:oldGroups[0],
-                           target:oldGroups[1] || oldGroups[0] };
-                    //the OR in target is in case source and target are equal
-                    //in the data, in which case only one group will pass the
-                    //filter function
-
-                if (d.source.index != old.source.index ){
-                    //swap source and target to match the new data
-                    old = {
-                        source: old.target,
-                        target: old.source
-                    };
-                }
-            }
-            else old = d;
-
-            var emptyChord = {
-                source: { startAngle: old.source.startAngle,
-                         endAngle: old.source.startAngle},
-                target: { startAngle: old.target.startAngle,
-                         endAngle: old.target.startAngle}
-            };
-            tween = d3.interpolate( emptyChord, d );*/
-
-            //create a zero-width chord object
-            var emptyChord = {

-                source: { startAngle: d.source.startAngle,

-                         endAngle: d.source.startAngle},

-                target: { startAngle: d.target.startAngle,

-                         endAngle: d.target.startAngle}

-            };

-            tween = d3.interpolate( emptyChord, d );
-        }
-
-        return function (t) {
-            //this function calculates the intermediary shapes
-            return path(tween(t));
-        };
-    };
-}
-
-
-/* Activate the buttons and link to data sets */
-d3.select("#ReadersButton").on("click", function () {
-    updateChords( "#readinfo" );
-    //replace this with a file url as appropriate
-    
-    //enable other buttons, disable this one
-    disableButton(this);
-});
-
-d3.select("#ContributorsButton").on("click", function() {
-    updateChords( "#contributorinfo" );
-    disableButton(this);
-});
-
-d3.select("#AllUsersButton").on("click", function() {
-    updateChords( "#allinfo" );
-    disableButton(this);
-});
-function disableButton(buttonNode) {
-    d3.selectAll("button")
-        .attr("disabled", function(d) {
-            return this === buttonNode? "true": null;
-        });
-}
-
-</script>
diff --git a/xos/templates/admin/dashboard/tenant.html b/xos/templates/admin/dashboard/tenant.html
deleted file mode 100644
index a87be93..0000000
--- a/xos/templates/admin/dashboard/tenant.html
+++ /dev/null
@@ -1,680 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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>
-<script type="text/javascript" src="http://www.google.com/jsapi"></script>
-<div id="dialog-form" title="Add/Remove Instances" style="display: none;">
-	<form>
-		<fieldset>
-			<label for="numberOfInstances">Number of Instances</label>
-			<input type="text" name="numberOfInstances" id="numOfInstances" class="text ui-widget-content ui-corner-all">
-			<div id=basic-tooltip>Please enter number of instances</div>
-		</fieldset>
-	</form>
-</div>
-<div id="adv-dialog-form" title="Add/Remove Instances" style="display: none;">
-	<form>
-		<fieldset>
-			<label for="numberOfInstances">Number of Instances</label>
-			<input type="text" name="numberOfInstances" id="advNumOfInstances" class="text ui-widget-content ui-corner-all">
-			<div id=adv-tooltip>Please enter number of instances</div>
-		</fieldset>
-	</form>
-</div>
-<div id="add-user-form" title="Add User" style="display: none;">
-        <form>
-                <fieldset>
-			<div class="create-slice-row">
-                                <label for="add-slice-user">Add User</label>
-                                <select id="add-slice-user" class="tenant-create-slice"></select>
-                        </div>
-                </fieldset>
-        </form>
-</div>
-<div id="create-slice-form" title="Create New Slice" style="display: none;">
-	<form>
-		<fieldset>
-			<div class="create-slice-row">
-				<label for="new-slice-name">Name</label>
-				<input type="text" name="new-slice-name" id="new-slice-name">
-			</div>
-			<div class="create-slice-row">
-				<label for="new-service-class">Service Class</label>
-				<select id="new-service-class" class="tenant-create-slice"></select>
-			</div>
-			<div class="create-slice-row">
-				<label for="new-image">Image</label>
-				<select id="new-image" class="tenant-create-slice"></select>
-			</div>
-			<div class="create-slice-row">
-                                <label for="new-network">Network Ports</label>
-				<input type="text" name="new-network" id="new-network">
-                        </div>
-			<div class="create-slice-row">
-				<label for="private-vol">Include Private Vol</label>
-				<input type="checkbox" name="checkbox" id="private-vol" value="value">
-			</div>
-			<div class="create-slice-row">
-                                <label for="add-user">Add User</label>
-                                <select id="add-user" class="tenant-create-slice"></select>
-                        </div>
-			<div class="create-slice-row">
-                                <label for="mount-data-sets">Data Set</label>
-                                <select id="mount-data-sets" class="tenant-create-slice"></select>
-                        </div>
-			<div class="create-slice-row">
-                                <label for="number-of-instances">Number Of Instances</label>
-                                <input type="text" name="number-of-instances" id="number-of-instances">
-                        </div>
-			<div id=tooltip>Slice Name cannot be empty</div>
-		</fieldset>
-	</form>
-</div>
-<div id="delete-slice-form" title="Delete a  Slice" style="display: none;">
-	<form>
-		<fieldset>
-			<div class="create-slice-row">
-				<label for="delete-slice">Choose a Slice</label>
-				<select id="delete-slice"></select>
-			</div>
-		</fieldset>
-	</form>
-</div>
-<script type="text/javascript">
-	google.load('visualization', '1', {
-		'packages': ['controls', 'table', 'corechart', 'geochart']
-	});
-	</script>
-	<script>
-	$(document).ready(function () {
-		function showSliceData(rows,imageData,serviceLevelData,siteRows,dataSet,value) {
-			$("#service-level-value").empty();
-			$("#slice-image-value").empty();
-			$("#tenantSiteTable").empty();
-			$('#tenantSiteTable').html('<table cellpadding="0" cellspacing="0" border="0" class="display" id="tenantSiteTableData"></table>');
-			$("#tenantSliceDropDown").val(value);
-			var siteNames = [];
-			var instanceCount;
-			for (row in rows) {
-				if (rows[row]['sliceName'] == value) {
-					sliceImageData = rows[row]['preferredImage'];
-					$("#slice-image-value").html(sliceImageData);
-					serviceLevelDataBasic = rows[row]['sliceServiceClass'];
-					$("#service-level-value").html(serviceLevelDataBasic);
-					var innerRows = rows[row]['sliceSite'];
-					for (innerRow in innerRows) {
-						instanceCount = innerRows[innerRow];
-						siteNames.push([innerRow, instanceCount]);
-					}
-				}
-			}
-			oTable = $('#tenantSiteTableData').dataTable({
-				"bJQueryUI": true,
-				"bFilter": false,
-				"bInfo": false,
-				"bLengthChange": false,
-				"aaData": siteNames,
-				"bStateSave": true,
-				"aoColumns": [{
-						"sTitle": "Site Name"
-					}, {
-						"sTitle": "Allocated",
-						sClass: "alignCenter"
-					}
-				]
-			});
-				$('#tenantSliceDropDown').on('change', function () {
-					var value = $("#tenantSliceDropDown").val();
-	//alert(value);
-					checkForBasicAdvView(value,rows,imageData,serviceLevelData,siteRows,dataSet);
-				});
-		}
-
-		function downloadSliceInfo(rows,imageData,serviceLevelData,siteRows,dataSet,value){
-			 $("#download-details").unbind().click(function(){
-                                                function download(filename, text) {
-    						var sliceDetails = document.createElement('a');
-    						sliceDetails.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
-    						sliceDetails.setAttribute('download', filename);
-    						sliceDetails.click();
-					}
-					var sliceInfo;
-					for (row in rows){
-						if(rows[row]['sliceName']==value){
-							sliceInfo = "Slice Name: "+rows[row]['sliceName']+"\nNumber of Instances: "+rows[row]['numOfInstances']+"\nService Level: "+rows[row]['sliceServiceClass']+"\nImage: "+rows[row]['preferredImage']+"\n";	
-						for (instanceNodePairs in rows[row]['instanceNodePair']){
-							sliceInfo += instanceNodePairs+"@"+rows[row]['instanceNodePair'][instanceNodePairs]+"\n";
-						}
-						}
-					}
-					download('slice.txt', sliceInfo);
-                          });
-		}
-		function editInstanceAdv() {
-			$(".edit-view").click(function () {
-				var allocatedInstances = parseInt($(this).parent().siblings(".allocated").html());
-				var td = $(this).parent().siblings(".allocated");
-				var pos = oTable.fnGetPosition(td[0]);
-				$("#numOfInstances").val("");;
-				$("#advNumOfInstances").val("");;
-				$("#adv-tooltip").css("display", "none");
-				$("#adv-dialog-form").dialog({
-					autoOpen: false,
-					height: 200,
-					width: 350,
-					modal: true,
-					dialogClass: "tenantDialog",
-					buttons: {
-						"Add": function () {
-							allocatedInstances += parseInt($("#advNumOfInstances").val());
-								$("#adv-tooltip").css("display", "block");
-								$(this).dialog("close");
-								td.html(allocatedInstances);
-						},
-						"Remove": function () {
-							allocatedInstances -= parseInt($("#advNumOfInstances").val());
-								$("#adv-tooltip").css("display", "block");
-								$(this).dialog("close");
-								td.html(allocatedInstances);
-						}
-					}
-				});
-				$("#adv-dialog-form").dialog("open");
-			});
-		}
-
-		function advShowSliceData(rows,imageData,serviceLevelData,siteRows,dataSet,value) {
-			$("#adv-service-level-value").empty();
-			$("#adv-slice-image-value").empty();
-			$("#adv-slice-data-set-value").empty();
-			$("#advTenantSliceDropDown").val(value);
-			$("<select></select>").attr('id', 'adv-service-level-dropdown').appendTo('#adv-service-level-value');
-			$("<select></select>").attr('id', 'adv-image-dropdown').appendTo('#adv-slice-image-value');
-			$("<select></select>").attr('id', 'adv-dataset-dropdown').appendTo('#adv-slice-data-set-value');
-			$('#advTenantSiteTable').html('<table cellpadding="0" cellspacing="0" border="0" class="display" id="advTenantSiteTableData"></table>');
-			var siteNames = [];
-			var instanceCount;
-			var tableData = {};
-			for (row in serviceLevelData) {
-                                $("#adv-service-level-dropdown").append("<option>" + serviceLevelData[row]['serviceClass'] + "</option>");
-                        }
-                        for (row in imageData) {
-                                $("#adv-image-dropdown").append("<option>" + imageData[row] + "</option>");
-                        }
-                        for (row in dataSet) {
-                                $("#adv-dataset-dropdown").append("<option>" + dataSet[row]['DataSet'] + "</option>");
-                        }
-
-			for (row in rows) {
-				if (rows[row]['sliceName'] == value) {
-					var innerRows = rows[row]['sliceSite'];
-					$("#adv-service-level-dropdown").val(rows[row]['sliceServiceClass']);
-					$("#adv-image-dropdown").val(rows[row]['preferredImage']);
-					$("#adv-dataset-dropdown").val(rows[row]['sliceDataSet']);
-					for (innerRow in innerRows) {
-						tableData[innerRow] = innerRows[innerRow];
-					}
-				}
-			}
-			for (row in siteRows) {
-				//var entry = siteRows[row]['siteName'];
-				var entry = siteRows[row];
-				if (!(entry in tableData)) {
-					//tableData[siteRows[row]['siteName']] = 0;
-					tableData[siteRows[row]] = 0;
-				}
-			}
-			for (row in tableData) {
-				siteNames.push([row, tableData[row], '<a href="#" class="edit-view">Edit</a>']);
-			}
-			$("#save-btn").unbind().click(function () {
-				var newTableData = {};
-				var newSite = $(".siteName");
-				var newAllocated = $(".allocated");
-				for (i = 1; i < newSite.length; i++) {
-					newTableData[$($(".siteName")[i]).text()] = parseInt($($(".allocated")[i]).text());
-				}
-				for (newRow in newTableData) {
-					if (newTableData[newRow] > tableData[newRow]) {
-						$.ajax({
-							url: '/tenantaddorreminstance/',
-							dataType: 'json',
-							data: {
-								siteName: newRow,
-								count: newTableData[newRow] - tableData[newRow],
-								slice: $("#advTenantSliceDropDown").val(),
-								image: $("#adv-image-dropdown").val(),
-								actionToDo: "add",
-								csrfmiddlewaretoken: "{{ csrf_token }}", // < here 
-								state: "inactive"
-							},
-							type: 'POST',
-							complete: function () {
-								//location.reload();
-								
-                                                        }
-						});
-					} else if (newTableData[newRow] < tableData[newRow]) {
-						$.ajax({
-							url: '/tenantaddorreminstance/',
-							dataType: 'json',
-							data: {
-								siteName: newRow,
-								count: tableData[newRow] - newTableData[newRow],
-								slice: $("#advTenantSliceDropDown").val(),
-								image: $("#adv-image-dropdown").val(),
-								actionToDo: "rem",
-								csrfmiddlewaretoken: "{{ csrf_token }}", // < here
-								state: "inactive"
-							},
-							type: 'POST',
-							complete: function () {
-								//location.reload();
-                                                        }
-						});
-					}
-				}
-				 $.ajax({
-                                                        url: '/updateslice/',
-                                                        dataType: 'json',
-                                                        data: {
-                                                                sliceName: $("#advTenantSliceDropDown").val(),
-								serviceClass: $("#adv-service-level-dropdown").val(),
-								imageName: $("#adv-image-dropdown").val(),
-								dataSet: $("#adv-dataset-dropdown").val(),
-								networkPorts:  $("#adv-network-value").val(),
-								privateVolume: $("#private-vol-checkbox").is(":checked"),
-                                                                actionToDo: "update",
-                                                                csrfmiddlewaretoken: "{{ csrf_token }}", // < here
-                                                                state: "inactive"
-                                                        },
-                                                        type: 'POST',
-                                                        success: function () {
-								$("#tabs-5").empty();
-                                                                initTenant();    //location.reload();
-                                                        },
-							  error:function (xhr, textStatus, thrownError){
-         							   errorDialog("Error:", textStatus + " " + xhr.responseText);
-        						}
-							
-                                                });
-
-			});
-			oTable = $('#advTenantSiteTableData').dataTable({
-				"bJQueryUI": true,
-				"bFilter": false,
-				"bInfo": false,
-				"bLengthChange": false,
-				"bPaginate": false,
-				"aaData": siteNames,
-				"bStateSave": true,
-				"aoColumns": [{
-					"sTitle": "Site Name",
-					sClass: "siteName"
-				}, {
-					"sTitle": "Allocated",
-					sClass: "alignCenter allocated"
-				}, {
-					"sTitle": "Edit",
-					sClass: "alignCenter"
-				}]
-			});
-			editInstanceAdv();
-				$('#advTenantSliceDropDown').on('change', function () {
-					var selectedValue = $("#advTenantSliceDropDown").val();
-					checkForBasicAdvView(selectedValue, rows,imageData,serviceLevelData,siteRows,dataSet);
-				});
-		}
-
-		function checkForBasicAdvView(value, rows,imageData,serviceLevelData,siteRows,dataSet) {
-			for (row in rows) {
-				if (rows[row]['sliceName'] == value) {
-					if (rows[row]['numOfSites'] > 1) {
-						advShowSliceData(rows,imageData,serviceLevelData,siteRows,dataSet,value);
-						downloadSliceInfo(rows,imageData,serviceLevelData,siteRows,dataSet,value);
-						$("#tenantSliceDataWrapper").css("display","none");
-						$("#advancedTenantSliceDataWrapper").css("display","block");
-						$("#advTenantSiteTable").css("display","block");
-						$("#tenantSiteTable").css("display","none");
-						$("#instance-btn").css("display","none");
-						$("#save-btn").css("display","block");
-						break;
-					} else if(rows[row]['numOfSites'] <= 1){
-						showSliceData(rows,imageData,serviceLevelData,siteRows,dataSet,value);
-						downloadSliceInfo(rows,imageData,serviceLevelData,siteRows,dataSet,value);
-						$("#tenantSliceDataWrapper").css("display","block");
-						$("#advancedTenantSliceDataWrapper").css("display","none");
-						$("#advTenantSiteTable").css("display","none");
-						$("#tenantSiteTable").css("display","block");
-						$("#instance-btn").css("display","block");
-                                                $("#save-btn").css("display","none");
-						break;
-					}break;
-				}
-			}
-		}
-
-		function UserSliceTable(rows,imageData,serviceLevelData,siteRows,dataSet,siteUsers) {
-				//Add check for #dynamicusersliceinfo_filter label-> input having focus here
-				$("<div></div>").attr('id', 'tenantSliceDataWrapper').appendTo('#tabs-5');
-				$("<div></div>").attr('id', 'advancedTenantSliceDataWrapper').appendTo('#tabs-5');
-				var sliceData = '';
-				sliceData += '<div class="tenant-row public-key-warning"><span class="summary-attr">You have not uploaded your Public Key. <a href="http://{{ request.get_host}}/admin/core/user/{{user.id}}">Click here</a> to upload it now.</span></div><div class="tenant-row"><span class="summary-attr"><b>Slice Name:</b> <span id="slice-name-value"> </span> </span><br></div><div class="tenant-row"><span class="summary-attr"><b>Service Level:</b> <span id="service-level-value"> </span>  </span><br></div><div class="tenant-row"><span class="summary-attr"><b>Image:</b> <span id="slice-image-value"> </span>  </span><br></div><div class="btn btn-high btn-info" id="advanced-tenant">Go to Advanced View</div>';
-				var advSliceData = '';
-				advSliceData += '<div class="tenant-row public-key-warning"><span class="summary-attr">You have not uploaded your Public Key. <a href="http://{{ request.get_host}}/admin/core/user/{{user.id}}">Click here</a> to upload it now.</span></div><div class="adv-tenant-row"><span class="summary-attr"><b>Slice Name:</b> <span id="adv-slice-name-value"> </span> </span><br><br></div><div class="tenant-row"><span class="summary-attr"><b>Service Level:</b> <span id="adv-service-level-value"> </span> <span class="help-inline">Changes are potentially disruptive to existing instances</span> </span><br></div><div class="tenant-row"><span class="summary-attr"><b>Image:</b> <span id="adv-slice-image-value"> </span><span class="help-inline">Changes are potentially disruptive to existing instances</span>  </span><br></div><div class="tenant-row"><span class="summary-attr"><b>Network:</b> <input type="text" name="adv-network-value" id="adv-network-value"> <span class="help-inline">List of port ranges(if any) e.g. 1021-1026,1029</span><br></div><div class="tenant-row"><span class="summary-attr"><b>Data Set:</b> <span id="adv-slice-data-set-value"> </span>  <input type="checkbox" name="checkbox" id="private-vol-checkbox" value="value"><span class="help-inline">Include Private Volume</span></span></div>';
-				$('#tenantSliceDataWrapper').append(sliceData).css("display", "none");
-				$('#advancedTenantSliceDataWrapper').append(advSliceData);
-				$("#advancedTenantSliceDataWrapper").css("display", "none");
-				$("<select></select>").attr('id', 'tenantSliceDropDown').appendTo('#slice-name-value');
-				for (row in rows) {
-					$("#tenantSliceDropDown").append("<option>" + rows[row]['sliceName'] + "</option>");
-				}
-				$("<select></select>").attr('id', 'advTenantSliceDropDown').appendTo('#adv-slice-name-value');
-					for (row in rows) {
-						$("#advTenantSliceDropDown").append("<option>" + rows[row]['sliceName'] + "</option>");
-					}
-				$("<div></div>").attr('id', 'tenantSiteTable').appendTo('#tabs-5').css("display","none");
-				$("<div></div>").attr('id', 'advTenantSiteTable').appendTo('#tabs-5').css("display", "none");
-				$('<div class="btn btn-success" id="create-slice-btn"><i class="icon-plus-sign icon-white"></i>&nbsp;Create New Slice</div>').appendTo("#tabs-5");
-				$('<div class="btn btn-success" id="delete-slice-btn"><i class="icon-plus-sign icon-white"></i>&nbsp;Delete a Slice</div>').appendTo("#tabs-5");
-				$('<div class="btn btn-success" id="add-user-btn"><i class="icon-plus-sign icon-white"></i>&nbsp;Add User</div>').appendTo("#tabs-5");
-				$('<div class="btn btn-high btn-info" id="download-details">Download Slice Details</div>').appendTo("#tabs-5");
-				$('<div class="btn btn-success" id="instance-btn"><i class="icon-plus-sign icon-white"></i>&nbsp;Add/Remove Instances</div>').appendTo("#tabs-5");
-				$('<div class="btn btn-high btn-info" id="save-btn">Save</div>').appendTo("#tabs-5").css("display", "none");
-				$("#advanced-tenant").unbind().click(function () {
-					var value = $("#tenantSliceDropDown").val();
-					advShowSliceData(rows,imageData,serviceLevelData,siteRows,dataSet,value);
-                                                $("#tenantSliceDataWrapper").css("display","none");
-                                                $("#advancedTenantSliceDataWrapper").css("display","block");
-                                                $("#advTenantSiteTable").css("display","block");
-                                                $("#tenantSiteTable").css("display","none");
-                                                $("#instance-btn").toggle();
-                                                $("#save-btn").toggle();
-
-			});
-			$("#instance-btn").click(function () {
-				$("#basic-tooltip").css("display", "none");
-				$("#dialog-form").dialog({
-					autoOpen: false,
-					height: 200,
-					width: 400,
-					modal: true,
-					dialogClass: "tenantDialog",
-					buttons: {
-						"Add": function () {
-							$.ajax({
-								url: '/tenantaddorreminstance/',
-								dataType: 'json',
-								data: {
-									count: parseInt($("#numOfInstances").val()),
-									slice: $("#tenantSliceDropDown").val(),
-									image: $("#slice-image-value").html(),
-									actionToDo: "add",
-									csrfmiddlewaretoken: "{{ csrf_token }}", // < here 
-									state: "inactive"
-								},
-								type: 'POST',
-								beforeSend: function () {
-									if (!$("#numOfInstances").val()) {
-										$("#basic-tooltip").css("display", "block");
-										return false;
-									} else {
-										return true;
-									}
-								},
-								success: function () {
-									location.reload();
-$("#dialog-form").dialog("close");
-								}
-							});
-						},
-						Remove: function () {
-							$.ajax({
-								url: '/tenantaddorreminstance/',
-								dataType: 'json',
-								data: {
-									count: parseInt($("#numOfInstances").val()),
-									slice: $("#tenantSliceDropDown").val(),
-									image: $("#slice-image-value").html(),
-									actionToDo: "rem",
-									csrfmiddlewaretoken: "{{ csrf_token }}", // < here
-									state: "inactive"
-								},
-								type: 'POST',
-								beforeSend: function () {
-									if (!$("#numOfInstances").val()) {
-										$("#basic-tooltip").css("display", "block");
-										return false;
-									} else {
-										return true;
-									}
-								},
-								success: function () {
-$("#dialog-form").dialog("close");								
-location.reload();
-
-								}
-							});
-						}
-					}
-				});
-				$("#dialog-form").dialog("open");
-			});
-			$("#add-user-btn").unbind().click(function(){
-				$("#add-slice-user").empty();
-				for (row in siteUsers) {
-                                        $("#add-slice-user").append("<option>" + siteUsers[row] + "</option>");
-                                }
-				$("#add-user-form").dialog({
-                                        autoOpen: false,
-                                        height: 200,
-                                        width: 350,
-                                        modal: true,
-                                        dialogClass: "tenantDialog",
-                                        buttons: {
-                                                "Submit": function () {
-                                                        $.ajax({
-                                                                url: '/adduser/',
-                                                                dataType: 'json',
-                                                                data: {
-                                                                        sliceName: $("#advTenantSliceDropDown").val(),
-                                                                        userEmail: $("#add-slice-user").val(),
-                                                                        csrfmiddlewaretoken: "{{ csrf_token }}", // < here
-                                                                        state: "inactive"
-                                                                },
-                                                                async: false,
-                                                                type: 'POST',
-                                                                success: function () {
-                                                                        location.reload();
-                                                                }
-
-                                                        });
-                                                },
-                                                Cancel: function () {
-                                                        $(this).dialog("close");
-                                                }
-                                        }
-                                });
-                                $("#add-user-form").dialog("open");
-							
-
-			});
-			$("#create-slice-btn").unbind().click(function () {
-				$("#new-service-class").empty();
-				$("#new-image").empty();
-				$("#add-user").empty();
-				$("#mount-data-sets").empty();
-				$("#new-network").empty();
-				for (row in serviceLevelData) {
-					$("#new-service-class").append("<option>" + serviceLevelData[row]['serviceClass'] + "</option>");
-				}
-				for (row in imageData) {
-					$("#new-image").append("<option>" + imageData[row] + "</option>");
-				}
-				for (row in dataSet) {
-                                        $("#mount-data-sets").append("<option>" + dataSet[row]['DataSet'] + "</option>");
-                                }
-				for (row in siteUsers) {
-                                        $("#add-user").append("<option>" + siteUsers[row] + "</option>");
-                                }
-				var nameOfSlice = $("#new-slice-name").val();
-				var nameOfServiceClass = $("#new-service-class").val();
-				var nameOfImage = $("#new-image").val();
-				$("#create-slice-form").dialog({
-					autoOpen: false,
-					height: 420,
-					width: 400,
-					modal: true,
-					dialogClass: "tenantDialog",
-					buttons: {
-						"Submit": function () {
-							$.ajax({
-								url: '/createnewslice/',
-								dataType: 'json',
-								data: {
-									sliceName: $("#new-slice-name").val(),
-									serviceClass: nameOfServiceClass,
-									imageName: $("#new-image").val(),
-									network: $("#new-network").val(),
-									privateVolume: $("#private-vol").is(":checked"),
-									mountDataSets: $("#mount-data-sets").val(),
-									userEmail: $("#add-user").val(),
-									actionToDo: "add",
-									csrfmiddlewaretoken: "{{ csrf_token }}", // < here 
-									state: "inactive"
-								},
-								async: false,
-								type: 'POST',
-								beforeSend: function () {
-									if (!$("#new-slice-name").val()) {
-										$("#tooltip").css("display", "block");
-										return false;
-									} else {
-										return true;
-									}
-								},
-								success: function () {
-									location.reload();
-								}
-							});
-						   $.ajax({
-                                                                url: '/tenantaddorreminstance/',
-                                                                dataType: 'json',
-                                                                data: {
-                                                                        count: parseInt($("#number-of-instances").val()),
-                                                                        slice: $("#new-slice-name").val(),
-									image: $("#new-image").val(),
-                                                                        actionToDo: "add",
-                                                                        csrfmiddlewaretoken: "{{ csrf_token }}", // < here
-                                                                        state: "inactive"
-                                                                },
-								async: false,
-                                                                type: 'POST',
-                                                                success: function () {
-                                                                        location.reload();
-                                                                }
-                                                        });
-
-						},
-						Cancel: function () {
-							$(this).dialog("close");
-						}
-					}
-				});
-				$("#create-slice-form").dialog("open");
-			});
-			$("#delete-slice-btn").unbind().click(function () {
-				$("#delete-slice").empty();
-				for (row in rows) {
-					$("#delete-slice").append("<option>" + rows[row]['sliceName'] + "</option>");
-				}
-				$("#delete-slice-form").dialog({
-					autoOpen: false,
-					height: 200,
-					width: 350,
-					modal: true,
-					dialogClass: "tenantDialog",
-					buttons: {
-						"Delete": function () {
-							$.ajax({
-								url: '/tenantdeleteslice/',
-								dataType: 'json',
-								data: {
-									sliceName: $("#delete-slice").val(),
-									csrfmiddlewaretoken: "{{ csrf_token }}", // < here 
-									state: "inactive"
-								},
-								type: 'POST',
-								success: function () {
-									location.reload();
-								},
-                                                          error:function (xhr, textStatus, thrownError){
-                                                                   errorDialog("Error:", textStatus + " " + xhr.responseText);
-                                                        }
-							});
-						},
-						Cancel: function () {
-							$(this).dialog("close");
-						}
-					}
-				});
-				$("#delete-slice-form").dialog("open");
-			});
-		}
-
-
-	function initTenant() {
-		jQuery.ajax({
-			url: '/tenantview',
-			dataType: 'json',
-			success: function (data) {
-				var rows = data['userSliceInfo']['rows'];
-				var imageData = data['image']['rows'];
-				//var networkData = data['network']['rows'];
-				var serviceLevelData = data['sliceServiceClass']['rows'];
-				//var siteRows = data['sites']['rows'];
-				var siteRows = data['availableSites']['rows'];
-				var dataSet = data['mountDataSets']['rows'];
-				var siteUsers = data['siteUsers'];
-				UserSliceTable(rows,imageData,serviceLevelData,siteRows,dataSet,siteUsers);
-				if(!(data['publicKey'])){
-					$(".public-key-warning").css("display","block");
-				}
-				var value = $("#tenantSliceDropDown").val();
-				checkForBasicAdvView(value,rows,imageData,serviceLevelData,siteRows,dataSet);
-				$("#tooltip").css("display", "none");
-				$("#basic-tooltip").css("display", "none");
-				$("#adv-tooltip").css("display", "none");
-				if(!(data['role']=="pi"||data['role']=="admin")){
-					$("#create-slice-btn").off();
-					$("#create-slice-btn").css('background','grey');
-					$("#delete-slice-btn").off();
-					$("#delete-slice-btn").css('background','grey');
-					$("#add-user-btn").off();
-                                        $("#add-user-btn").css('background','grey');
-				}
-			},
-			complete: function () {}
-		});
-	}
-		
-	initTenant();
-});
-</script>
-
-</html>
diff --git a/xos/templates/admin/delete_confirmation.html b/xos/templates/admin/delete_confirmation.html
deleted file mode 100644
index e1f8483..0000000
--- a/xos/templates/admin/delete_confirmation.html
+++ /dev/null
@@ -1,60 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-{% load admin_urls %}
-
-{% block breadcrumbs %}
-<div class="breadcrumbs">
-<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
-&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ app_label|capfirst }}</a>
-&rsaquo; <a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst|escape }}</a>
-&rsaquo; <a href="{% url opts|admin_urlname:'change' object.pk|admin_urlquote %}">{{ object|truncatewords:"18" }}</a>
-&rsaquo; {% trans 'Delete' %}
-</div>
-{% endblock %}
-
-{% block content %}
-{% if perms_lacking or protected %}
-    {% if perms_lacking %}
-        <p>{% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}</p>
-        <ul>
-        {% for obj in perms_lacking %}
-            <li>{{ obj }}</li>
-        {% endfor %}
-        </ul>
-    {% endif %}
-    {% if protected %}
-        <p>{% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would require deleting the following protected related objects:{% endblocktrans %}</p>
-        <ul>
-        {% for obj in protected %}
-            <li>{{ obj }}</li>
-        {% endfor %}
-        </ul>
-    {% endif %}
-{% else %}
-    <p>{% blocktrans with escaped_object=object %}Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}"? All related objects will be deleted{% endblocktrans %}</p>
-    <form action="" method="post">{% csrf_token %}
-    <div>
-    <input type="hidden" name="post" value="yes" />
-    <input type="submit" value="{% trans "Yes, I'm sure" %}" />
-    </div>
-    </form>
-{% endif %}
-{% endblock %}
diff --git a/xos/templates/admin/login.html b/xos/templates/admin/login.html
deleted file mode 100644
index d8a8186..0000000
--- a/xos/templates/admin/login.html
+++ /dev/null
@@ -1,197 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{% extends "admin/base_site_login.html" %}
-{% load i18n admin_static %}
-
-{% block extrastyle %}{{ block.super }}
-<link rel="stylesheet" type="text/css" href="{% static "xos.css" %}" />
-{% if XOS_BRANDING_CSS %}
-<link rel="stylesheet" type="text/css" href="{{ XOS_BRANDING_CSS }}">
-{% endif %}
-<script src="{% static 'suit/js/jquery.min.js' %}"></script>
-<script src="{% static 'suit/js/jquery-ui.min.js' %}"></script>
-{% endblock %}
-
-
-{% block bodyclass %}login{% endblock %}
-
-{% block nav-global %}{% endblock %}
-
-{% block content_title %}{% endblock %}
-
-{% block breadcrumbs %}{% endblock %}
-
-{% block content %}
-{% if form.errors and not form.non_field_errors and not form.this_is_the_login_form.errors %}
-<p class="errornote">
-    {% blocktrans count counter=form.errors.items|length %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
-</p>
-{% endif %}
-
-{% if form.non_field_errors or form.this_is_the_login_form.errors %}
-{% for error in form.non_field_errors %}
-<p class="errornote">
-    {{ error }}
-</p>
-{% endfor %}
-{% for error in form.this_is_the_login_form.errors %}
-<p class="errornote">
-    {{ error }}
-</p>
-{% endfor %}
-{% endif %}
-<div id="wrap">
-    <div id="content-main">
-        <div class="row">
-            <div class="col-xs-12">
-                <img class="logo" src="{% static XOS_BRANDING_ICON %}"/>
-                <form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
-                    <div class="row">
-                        <div class="col-xs-12">
-                            {% if not form.this_is_the_login_form.errors %}
-                            {{ form.username.errors }}
-                            {% endif %}
-                            {{ form.username }}
-                        </div>
-                    </div>
-                    <div class="row">
-                        <div class="col-xs-12">
-                            {% if not form.this_is_the_login_form.errors %}{{ form.password.errors }}{% endif %}
-                            {{ form.password }}
-                            <input type="hidden" name="this_is_the_login_form" value="1" />
-                            <input type="hidden" name="old_next" value="{{ next }}" />
-                            <input type="hidden" name="next" value="/loggedin/?orig_next={{ next }}" />
-                        </div>
-                    </div>
-                    <div class="row">
-                        <div class="col-xs-12">
-                            <input type="submit" class="btn btn-primary btn-block" value="{% trans 'SIGN IN' %}" />
-                        </div>
-                    </div>
-                    <div class="row">
-                        <div class="col-xs-12 text-right">
-                            <div id="requestAccountLink">{% trans 'Request a new Account' %}</div>
-                        </div>
-                    </div>
-                </form>
-            </div>
-        </div>
-
-
-        <div id="request-account-form" title="Request an Account">
-            <form>
-                <fieldset>
-                    <div class="request-form-row">
-                        <label for="request-first-name">First Name</label>
-                        <input type="text" name="request-first-name" id="request-first-name">
-                    </div>
-                    <div class="request-form-row">
-                        <label for="request-last-name">Last Name</label>
-                        <input type="text" name="request-last-name" id="request-last-name">
-                    </div>
-                    <div class="request-form-row">
-                        <label for="request-email">Email</label>
-                        <input type="text" name="request-email" id="request-email">
-                    </div>
-                    <div class="request-form-row">
-                        <label for="request-site-name">Site</label><br>
-                        <select id="request-site-name" name="request-site-name">
-                            <option>---------</option>
-                            {% for site in sites %}
-                            {% if site.allowNewUsers %}
-                            <option>{{ site.name }}</option>
-                            {% endif %}
-                            {% endfor %}
-                        </select>
-                    </div>
-                    <div class="submit-row">
-                        <input id ="request-signup" class="btn btn-info" value="SIGN UP">
-                    </div>
-                </fieldset>
-            </form>
-        </div>
-    </div>
-</div>
-
-
-<script type="text/javascript">
-    $(function() {
-        initRequest();
-    });
-    function initRequest(){
-        $.ajax({
-            url: '/tenantview',
-            dataType: 'json',
-            success: function (data) {
-                var sites = data['sitesToBeRequested'];
-                console.log(sites);
-                for (site in sites){
-                    $("#request-site-name").append("<option>" + site + "</option>");
-                }
-            }
-        });
-    }
-    $("#requestAccountLink").unbind().click(function(){
-        $("#request-account-form").dialog({
-            autoOpen: false,
-            modal: true,
-            dialogClass: "requestDialog",
-        });
-        $("#request-account-form").dialog("open");
-    })
-    $("#request-signup").unbind().click(function(){
-        $.ajax({
-            url: '/requestaccess/',
-            dataType: 'json',
-            data: {
-                email: $("#request-email").val(),
-                firstname: $("#request-first-name").val(),
-                lastname: $("#request-last-name").val(),
-                site: $("#request-site-name").val(),
-                csrfmiddlewaretoken: "{{ csrf_token }}", // < here
-                state: "inactive"
-            },
-            async: false,
-            type: 'POST',
-            success: function (response) {
-                if (response && response.error) {
-                    if (response.error == "already_approved") {
-                        alert("Your request has already been proccessed and approved. We are sending you another email with a new temporary password");
-                        return;
-                    } else if (response.error == "already_pending") {
-                        alert("Your request is already pending and awaiting approval");
-                        return;
-                    } else if (response.error == "is_deleted") {
-                        alert("Your user record is in a deleted state. Please contact OpenCloud support");
-                        return;
-                    }
-                }
-                $("#request-account-form").dialog("close");
-                alert("Your request has been submitted");
-            },
-            error:function (xhr, textStatus, thrownError){
-                alert("Error:", textStatus + " " + xhr.responseText);
-            }
-        });
-    })
-    document.getElementById('id_username').focus()
-</script>
-</div>
-</div>
-{% endblock %}
diff --git a/xos/templates/admin/menu.html b/xos/templates/admin/menu.html
deleted file mode 100644
index a34d3a5..0000000
--- a/xos/templates/admin/menu.html
+++ /dev/null
@@ -1,85 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 sitetree %}#}
-{% load i18n suit_menu suit_tags core_tags %}
-{% load url from future %}
-
-
-
-
-{% with menu_position='menu_position'|suit_conf %}
-
-
-
-<ul class="nav nav-suit-menu nav-pills{% if menu_position == 'vertical' %} nav-stacked {% endif %}">
-    {% block menu_home %}
-    {% url 'admin:index' as index_url %}
-    <li{% if index_url == request.path or request.path == "/" or "admin/dashboard" in request.path %} class="active"{% endif %}>
-        <a href="{{ index_url }}">
-            <i class="icon-home"></i>
-            <span>{% trans 'Home' %}</span>
-        </a>
-        {% dashboard_list %}
-    </li>
-    {% endblock %}
-
-    {% get_menu request as app_list %}
-        {% if app_list %}
-            {% for app in app_list %}
-                {% if app.separator %}
-                <li class="separator"></li>
-                {% else %}
-                <li
-                        {{ app.isActive|yesno:' class=active,' }}
-                        {% if app.url in request.path %}
-                            class="active"
-                        {% endif %}
-                        >
-                    <a href="{{ app.url }}"{{ app.blank|yesno:' target=_blank,' }}>
-                        <i class="{% firstof app.icon 'icon-chevron-right' %}"></i>
-                        <span>{% trans app.label|capfirst %}</span>
-                    </a>
-                    {% if app.models and not app.is_active %}
-                    <ul class="nav nav-pills nav-stacked">
-                        {% for model in app.models %}
-                            <li{{ model.is_active|yesno:' class=active,' }}>
-                                <a href="{{ model.url }}"{{ model.blank|yesno:' target=_blank,' }}>{{ model.label }}</a>
-                            </li>
-                        {% endfor %}
-                    </ul>
-                {% endif %}
-                </li>
-            {% endif %}
-            {% endfor %}
-        {% endif %}
-</ul>
-{% if app_list and menu_position == 'horizontal' %}
-    {% get_sub_menu app_list as active_app_nodels %}
-    <ul class="nav nav-suit-sub-menu nav-pills">
-        {% if active_app_nodels %}
-            {% for model in active_app_nodels %}
-            <li{{ model.is_active|yesno:' class=active,' }}>
-                <a href="{{ model.url }}"{{ model.blank|yesno:' target=_blank,' }}>{{ model.label }}</a>
-            </li>
-            {% endfor %}
-        {% endif %}
-    </ul>
-    {% endif %}
-{% endwith %}
-
diff --git a/xos/templates/admin/newminidashboard.html b/xos/templates/admin/newminidashboard.html
deleted file mode 100644
index 84c69e7..0000000
--- a/xos/templates/admin/newminidashboard.html
+++ /dev/null
@@ -1,84 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 admin_static %}
-
-<script>
-    admin_object_name = "{{ opts.object_name }}";
-    admin_object_id = "{{ original.id }}";
-    admin_object_controller = "princeton-beta"; // XXX fix this
-    if (admin_object_id == "") {
-        admin_object_id = undefined;
-    } else {
-        admin_object_id = parseInt(admin_object_id, 10);
-    }
-    {% if opts.object_name == "Site" %}
-        admin_controller_sites = [];
-        {% for record in original.controllersite.all %}
-            admin_controller_sites.push( {{ record.id }} );
-        {% endfor %}
-    {% endif %}
-    {% if opts.object_name == "Slice" %}
-        admin_controller_slices = [];
-        {% for record in original.controllerslice.all %}
-            admin_controller_slices.push( {{ record.id }} );
-        {% endfor %}
-    {% endif %}
-</script>
-
-{% if not DISABLE_MINIDASHBOARD %}
-
-<div id="newMiniDashboard">
-    <div class="hide" id="selectedMainNav">{{ opts.verbose_name_plural|capfirst }}</div>
-    <div class="hide" id="currentOriginalNode">{{ original|truncatewords:"18" }}</div>
-    <div class="hide" id="minidashStatus"></div>
-    <!-- <div class="miniDashPair">
-        <button type="button" name="nodeCount" id="miniDashNodeCount" class="minidashbutton">--</button>
-        <label for="nodeCount" id="miniDashNodeCountLabel">Active Nodes</label>
-    </div> -->
-    <div class="miniDashPair">
-        <button type="button" name="CPU" id="miniDashCPU" class="minidashbutton">--</button>
-        <label for="CPU" id="miniDashAvgLoadLabel">CPU</label>
-    </div>
-    <div class="miniDashPair">
-        <button type="button" name="bandwidthIn" id="miniDashBandwidthIn" class="minidashbutton">--</button>
-        <label for="bandwidthIn" id="miniDashBandwidthLabel">Bandwidth In</label>
-    </div>
-    <div class="miniDashPair">
-        <button type="button" name="bandwidthOut" id="miniDashBandwidthOut" class="minidashbutton">--</button>
-        <label for="bandwidthOut" id="miniDashBandwidthLabel">Bandwidth Out</label>
-    </div>
-    <div class="endDashPair">
-    </div>
-</div>
-
-<div id="nodeCountDialog" class="miniDashModal" > 
-<div id="nodeCountGraph" ></div>
-</div>
-
-<div id="bandwidthDialog" class="miniDashModal" > 
-<div id="bandwidthGraph" ></div>
-</div>
-
-<div id="avgLoadDialog" class="miniDashModal" > 
-<div id="avgLoadGraph" ></div>
-</div>
-
-<script src="{% static 'page_analytics.js' %}"></script>
-
-{% endif %}
diff --git a/xos/templates/admin/pagination.html b/xos/templates/admin/pagination.html
deleted file mode 100644
index 6e90155..0000000
--- a/xos/templates/admin/pagination.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 admin_list suit_list %}
-{% load i18n %}
-{% if cl.formset and cl.result_count %}
-  <input type="submit" name="_save" class="default btn btn-primary changelist-save pull-right" value="{% trans 'Save' %}"/>
-{% endif %}
-
-<div class="paginator clearfix">
-  {% if pagination_required %}
-    <div class="row">
-      <div class="col-xs-12 text-center">
-        <ul class="pagination">
-          {% for i in page_range %}
-            {% paginator_number cl i %}
-          {% endfor %}
-        </ul>
-      </div>
-    </div>
-  {% endif %}
-  <div class="pagination-info row">
-    <div class="col-xs-8">
-      {% trans 'Displaying:' %}
-      {% paginator_info cl %}
-      &nbsp; of &nbsp;
-      {{ cl.result_count }}
-        {% ifequal cl.result_count 1 %}
-          {{ cl.opts.verbose_name }}
-        {% else %}
-          {{ cl.opts.verbose_name_plural }}
-        {% endifequal %}
-      {% if show_all_url %}
-    </div>
-      <div class="col-xs-4 text-right">
-        <a href="{{ show_all_url }}" class="showall">{% trans 'Show all' %}</a>{% endif %}
-      </div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/xos/templates/admin/request_account.html b/xos/templates/admin/request_account.html
deleted file mode 100644
index 28cbf46..0000000
--- a/xos/templates/admin/request_account.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
diff --git a/xos/templates/admin/search_form.html b/xos/templates/admin/search_form.html
deleted file mode 100644
index 62d53eb..0000000
--- a/xos/templates/admin/search_form.html
+++ /dev/null
@@ -1,61 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 i18n admin_static suit_tags suit_list %}
-{% suit_conf_value 'list_filters_position' as FILTERS_POS %}
-<div id="toolbar" class="row">
-  <form id="changelist-search" action="" method="get" class="form-inline">
-    <div><!-- DIV needed for valid HTML -->
-      {% if cl.search_fields %}
-        <div class="col-sm-9">
-          <input type="text" size="30" name="{{ search_var }}" value="{{ cl.query }}" id="searchbar" class="form-control query-search {{ cl.query|yesno:' active,' }}"/>
-          <script type="text/javascript">document.getElementById("searchbar").focus();</script>
-        </div>
-      {% endif %}
-
-      {% spaceless %}
-        {% block filters %}
-          {% if cl.has_filters and FILTERS_POS == 'center' %}
-            <span class="search-filters">
-            {% for spec in cl.filter_specs %}
-              {% suit_list_filter_select cl spec %}
-            {% endfor %}
-            </span>
-          {% endif %}
-        {% endblock %}
-      {% endspaceless %}
-
-      {% if cl.search_fields or cl.has_filters and FILTERS_POS == 'center' %}
-        <div class="col-sm-3 text-right">
-          <input type="submit" value="{% trans 'Search' %}" class="btn btn-primary btn-submit btn-block"/>
-        </div>
-      {% endif %}
-      {% if show_result_count %}
-        <a href="?{% if cl.is_popup %}_popup=1{% endif %}" class="btn-reset btn btn-warning"><span class="glyphicon glyphicon-remove"></span></a>
-        <span class="result-count text-muted">{% blocktrans count counter=cl.result_count %}{{ counter }} result{% plural %}{{ counter }} results{% endblocktrans %} &nbsp;/&nbsp; {% blocktrans with full_result_count=cl.full_result_count %}{{ full_result_count }} total{% endblocktrans %}
-        </span>
-      {% endif %}
-
-{#      Not needed for horizontal filters in Django Suit, as it handles it by itself #}
-{#      {% for pair in cl.params.items %}#}
-{#        {% ifnotequal pair.0 search_var %}#}
-{#          <input type="hidden" name="{{ pair.0 }}" value="{{ pair.1 }}"/>{% endifnotequal %}#}
-{#      {% endfor %}#}
-    </div>
-  </form>
-</div>
diff --git a/xos/templates/admin/submit_line.html b/xos/templates/admin/submit_line.html
deleted file mode 100644
index abc08c4..0000000
--- a/xos/templates/admin/submit_line.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 i18n %}
-<div class="form-buttons clearfix">
-  {% if show_save %}<button type="submit" class="btn btn-success" name="_save">{% trans 'Save' %}</button>{% endif %}
-  {% if show_save_and_continue %}<button type="submit" name="_continue" class=" btn btn-high btn-info">{% trans 'Save and continue editing' %}</button>{% endif %}
-  {% if show_save_as_new %}<button type="submit" name="_saveasnew" class="btn btn-info">{% trans 'Save as new' %}</button>{%endif%}
-  {% if show_save_and_add_another %}<button type="submit" name="_addanother" class="btn btn-info">{% trans 'Save and add another' %}</button>{% endif %}
-
-  {% if show_delete_link %}
-      {% if custom_delete_url %}
-          <a href="{{ custom_delete_url }}" class="btn btn-danger">{% trans "Delete" %}</a>
-      {% else %}
-          <a href="delete/" class="btn btn-danger">{% trans "Delete" %}</a>
-      {% endif %}
-  {% endif %}
-</div>
diff --git a/xos/templates/admin/tags/dashboard_list.html b/xos/templates/admin/tags/dashboard_list.html
deleted file mode 100644
index cd0f393..0000000
--- a/xos/templates/admin/tags/dashboard_list.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-<ul class = "dashboard-list">
-    {% for dashboard in dashboards %}
-        <li
-            {% if dashboard.id == active %}
-                class="active"
-            {% endif %}
-        >
-            <a href="/admin/dashboard/{{dashboard.id}}">
-                {% if dashboard.id == active %}
-                    <img src="/static/images/{{dashboard.icon_active}}"></img>
-                {% else %}
-                    <img src="/static/images/{{dashboard.icon}}"></img>
-                {% endif %}
-                {{ dashboard.name }}
-            </a>
-        </li>
-    {% endfor %}
-</ul>
\ No newline at end of file
diff --git a/xos/templates/admin/tags/notification.html b/xos/templates/admin/tags/notification.html
deleted file mode 100644
index 992df40..0000000
--- a/xos/templates/admin/tags/notification.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-{{template | safe}}
\ No newline at end of file
diff --git a/xos/templates/admin/wholePage.html b/xos/templates/admin/wholePage.html
deleted file mode 100644
index 4ea1e38..0000000
--- a/xos/templates/admin/wholePage.html
+++ /dev/null
@@ -1,31 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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 admin_static %}
-<html>
-<head>
-<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% endblock %}"/>
-<link rel="stylesheet" type="text/css" href="{% static 'suit/bootstrap/css/bootstrap.min.css' %}" media="all"/>
-<link rel="stylesheet" type="text/css" href="{% static 'suit/css/suit.css' %}" media="all">
-<link rel="stylesheet" type="text/css" href="{% static 'xos.css' %}" media="all">
-<script src="{% static 'suit/js/jquery.min.js' %}"></script>
-<script src="{% static 'suit/js/jquery-ui.min.js' %}"></script>
-{% block extrahead %}{% endblock %}
-</head>
-<body>{% block content %}{% endblock %}</body>            
-</html>
diff --git a/xos/templates/registration/logged_out.html b/xos/templates/registration/logged_out.html
deleted file mode 100644
index f43b342..0000000
--- a/xos/templates/registration/logged_out.html
+++ /dev/null
@@ -1,41 +0,0 @@
-
-<!--
-Copyright 2017-present Open Networking Foundation
-
-Licensed 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.
--->
-
-
-
-{% extends "admin/base_logout.html" %}
-{% load i18n admin_modify admin_static%}
-
-<link rel="stylesheet" type="text/css" href="{% static 'xos.css' %}" />
-
-
-
-
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></div>{% endblock %}
-
-{% block content %}
-    <div id="content-main">
-        <div class="row">
-            <div class="col-xs-12">
-                <p class="logoutptag">{% random_str "a" %}</p>
-            </div>
-        </div>
-        <input type="submit" class="btn btn-primary btn-block" value="{% trans 'Log in again' %}" onclick="location.href = '{% url 'admin:index' %}'; "/>
-
-
-    </div>
-{% endblock %}
diff --git a/xos/tosca/custom_types/xos.m4 b/xos/tosca/custom_types/xos.m4
index 4ff6fcd..cc988fc 100644
--- a/xos/tosca/custom_types/xos.m4
+++ b/xos/tosca/custom_types/xos.m4
@@ -1307,27 +1307,6 @@
             deploymentrole:
                 type: tosca.capabilities.xos.DeploymentRole
 
-    tosca.nodes.DashboardView:
-        derived_from: tosca.nodes.Root
-        description: >
-            An XOS Dashboard View
-        capabilities:
-            dashboardview:
-                type: tosca.capabilities.xos.DashboardView
-        properties:
-            xos_base_props
-            enabled:
-                type: boolean
-                default: true
-            url:
-                type: string
-                required: false
-                description: URL to the dashboard
-            custom_icon:
-                type: boolean
-                default: false
-                description: Whether the dashboard has custom icons
-
     tosca.nodes.Tag:
         derived_from: tosca.nodes.Root
         description: >
@@ -1468,10 +1447,6 @@
         derived_from: tosca.relationships.Root
         valid_target_types: [ tosca.capabilities.xos.Tenant ]
 
-    tosca.relationships.UsesDashboard:
-        derived_from: tosca.relationships.Root
-        valid_target_types: [ tosca.capabilities.xos.DashboardView ]
-
     tosca.relationships.HasLabel:
         derived_from: tosca.relationships.Root
         valid_target_types: [ tosca.capabilities.xos.NodeLabel ]
@@ -1588,10 +1563,6 @@
         derived_from: tosca.capabilities.Root
         description: An XOS Image
 
-    tosca.capabilities.xos.DashboardView:
-        derived_from: tosca.capabilities.Root
-        description: An XOS DashboardView
-
     tosca.capabilities.xos.NetworkParameterType:
         derived_from: tosca.capabilities.Root
         description: An XOS NetworkParameterType
diff --git a/xos/tosca/custom_types/xos.yaml b/xos/tosca/custom_types/xos.yaml
index e782a74..0cd6eb8 100644
--- a/xos/tosca/custom_types/xos.yaml
+++ b/xos/tosca/custom_types/xos.yaml
@@ -19,6 +19,22 @@
 # compile this with "m4 xos.m4 > xos.yaml"
 
 # include macros
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed 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.
+
+
 # Note: Tosca derived_from isn't working the way I think it should, it's not
 #    inheriting from the parent template. Until we get that figured out, use
 #    m4 macros do our inheritance
@@ -2291,42 +2307,6 @@
             deploymentrole:
                 type: tosca.capabilities.xos.DeploymentRole
 
-    tosca.nodes.DashboardView:
-        derived_from: tosca.nodes.Root
-        description: >
-            An XOS Dashboard View
-        capabilities:
-            dashboardview:
-                type: tosca.capabilities.xos.DashboardView
-        properties:
-            no-delete:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to delete this object
-            no-create:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to create this object
-            no-update:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to update this object
-            replaces:
-                type: string
-                required: false
-                descrption: Replaces/renames this object
-            enabled:
-                type: boolean
-                default: true
-            url:
-                type: string
-                required: false
-                description: URL to the dashboard
-            custom_icon:
-                type: boolean
-                default: false
-                description: Whether the dashboard has custom icons
-
     tosca.nodes.Tag:
         derived_from: tosca.nodes.Root
         description: >
@@ -2482,10 +2462,6 @@
         derived_from: tosca.relationships.Root
         valid_target_types: [ tosca.capabilities.xos.Tenant ]
 
-    tosca.relationships.UsesDashboard:
-        derived_from: tosca.relationships.Root
-        valid_target_types: [ tosca.capabilities.xos.DashboardView ]
-
     tosca.relationships.HasLabel:
         derived_from: tosca.relationships.Root
         valid_target_types: [ tosca.capabilities.xos.NodeLabel ]
@@ -2602,10 +2578,6 @@
         derived_from: tosca.capabilities.Root
         description: An XOS Image
 
-    tosca.capabilities.xos.DashboardView:
-        derived_from: tosca.capabilities.Root
-        description: An XOS DashboardView
-
     tosca.capabilities.xos.NetworkParameterType:
         derived_from: tosca.capabilities.Root
         description: An XOS NetworkParameterType
diff --git a/xos/tosca/resources/dashboardview.py b/xos/tosca/resources/dashboardview.py
deleted file mode 100644
index 247d2dd..0000000
--- a/xos/tosca/resources/dashboardview.py
+++ /dev/null
@@ -1,60 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from xosresource import XOSResource
-from core.models import DashboardView, Site, Deployment, SiteDeployment, XOSGuiExtension
-
-class XOSDashboardView(XOSResource):
-    provides = "tosca.nodes.DashboardView"
-    xos_model = DashboardView
-    copyin_props = ["url", "enabled"]
-
-    def get_xos_args(self):
-        args = super(XOSDashboardView, self).get_xos_args()
-        if (self.get_property("custom_icon")):
-            prefix, name = self.get_property("url").split(':')
-            name = name[3:]
-            name = name[:1].lower() + name[1:]
-            args["icon"] = "%s-icon.png" % name
-            args["icon_active"] = "%s-icon-active.png" % name
-        return args
-
-    def postprocess(self, obj):
-        for deployment_name in self.get_requirements("tosca.relationships.SupportsDeployment"):
-            deployment = self.get_xos_object(Deployment, deployment_name)
-            if not deployment in obj.deployments.all():
-                print "attaching dashboardview %s to deployment %s" % (obj, deployment)
-                obj.deployments.add(deployment)
-                obj.save()
-
-    def can_delete(self, obj):
-        return super(XOSDashboardView, self).can_delete(obj)
-
-    def create(self):
-        xos_args = self.get_xos_args()
-
-        dashboard = DashboardView(**xos_args)
-        dashboard.save()
-
-        self.postprocess(dashboard)
-
-        self.info("Created DashboardView '%s'" % (str(dashboard), ))
-
-
-class XOSXOSGuiExtension(XOSResource):
-    provides = "tosca.nodes.XOSGuiExtension"
-    xos_model = XOSGuiExtension
-    copyin_props = ["name", "files"]
diff --git a/xos/tosca/resources/gui_extensions.py b/xos/tosca/resources/gui_extensions.py
new file mode 100644
index 0000000..b9e9bff
--- /dev/null
+++ b/xos/tosca/resources/gui_extensions.py
@@ -0,0 +1,24 @@
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed 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.
+
+
+from xosresource import XOSResource
+from core.models import XOSGuiExtension
+
+
+class XOSXOSGuiExtension(XOSResource):
+    provides = "tosca.nodes.XOSGuiExtension"
+    xos_model = XOSGuiExtension
+    copyin_props = ["name", "files"]
diff --git a/xos/tosca/resources/user.py b/xos/tosca/resources/user.py
index a4388ba..9700055 100644
--- a/xos/tosca/resources/user.py
+++ b/xos/tosca/resources/user.py
@@ -15,7 +15,7 @@
 
 
 from xosresource import XOSResource
-from core.models import User, Site, SiteRole, SliceRole, SlicePrivilege, SitePrivilege, DashboardView, UserDashboardView
+from core.models import User, Site, SiteRole, SliceRole, SlicePrivilege, SitePrivilege
 
 class XOSUser(XOSResource):
     provides = "tosca.nodes.User"
@@ -54,21 +54,6 @@
                         sp.save()
                         self.info("Added site privilege on %s role %s for %s" % (str(dest), str(role), str(obj)))
 
-        dashboard_order = 10
-        for reqs in self.nodetemplate.requirements:
-            for (k,v) in reqs.items():
-                if (v["relationship"] == "tosca.relationships.UsesDashboard"):
-                    dashboard_name = v["node"]
-                    dashboard = self.get_xos_object(DashboardView, name=dashboard_name)
-
-                    udvs = UserDashboardView.objects.filter(user=obj, dashboardView=dashboard)
-                    if not udvs:
-                        self.info("Adding UserDashboardView from %s to %s" % (obj, dashboard))
-
-                        udv = UserDashboardView(user=obj, dashboardView=dashboard, order=dashboard_order)
-                        dashboard_order += 10
-                        udv.save()
-
     def create(self):
         xos_args = self.get_xos_args()
 
diff --git a/xos/xos/apps.py b/xos/xos/apps.py
deleted file mode 100644
index 46e64c0..0000000
--- a/xos/xos/apps.py
+++ /dev/null
@@ -1,30 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed 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.
-
-
-from suit.apps import DjangoSuitConfig
-
-
-class MyDjangoSuitConfig(DjangoSuitConfig):
-    admin_name = 'XOS'
-    menu_position = 'vertical'
-    menu_open_first_child = False
-    menu = (
-      {'label': 'Deployments', 'icon': 'icon-deployment', 'url': '/admin/core/deployment/'},
-      {'label': 'Sites', 'icon': 'icon-site', 'url': '/admin/core/site/'},
-      {'label': 'Slices', 'icon': 'icon-slice', 'url': '/admin/core/slice/'},
-      {'label': 'Users', 'icon': 'icon-user', 'url': '/admin/core/user/'},
-      {'label': 'Services', 'icon': 'icon-cog', 'url': '/admin/core/service/'},
-    )
diff --git a/xos/xos/settings.py b/xos/xos/settings.py
index 742ceae..c7147c2 100644
--- a/xos/xos/settings.py
+++ b/xos/xos/settings.py
@@ -135,7 +135,6 @@
 )
 
 MIDDLEWARE_CLASSES = (
-    'corsheaders.middleware.CorsMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
@@ -171,21 +170,11 @@
     'django.contrib.sessions',
     # 'django.contrib.sites',
     'django.contrib.messages',
-    'django.contrib.staticfiles',
-    # Uncomment the next line to enable the admin:
-    # 'suit',
-    'xos.apps.MyDjangoSuitConfig',
-    'xos.admin_customize',
-    'django.contrib.admin',
-    # Uncomment the next line to enable admin documentation:
-    'django.contrib.admindocs',
-    'rest_framework',
     'django_extensions',
     'core',
     'services.syndicate_storage',
     # 'geoposition',
     # 'rest_framework_swagger',
-    'corsheaders'
 )
 
 # add services that were configured by xosbuilder to INSTALLED_APPS
@@ -195,11 +184,6 @@
         if line:
             INSTALLED_APPS = list(INSTALLED_APPS) + [line]
 
-if DJANGO_VERSION[1] >= 7:
-    # if django >= 1.7, then change the admin module
-    INSTALLED_APPS = list(INSTALLED_APPS)
-    INSTALLED_APPS[INSTALLED_APPS.index('django.contrib.admin')] = 'django.contrib.admin.apps.SimpleAdminConfig'
-
 # Added for django-suit form
 TEMPLATE_CONTEXT_PROCESSORS = TCP + (
     'django.core.context_processors.request',