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',
