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 c820db3..58b2ed2 100644
--- a/xos/core/models/core.xproto
+++ b/xos/core/models/core.xproto
@@ -68,7 +68,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];
      required string leaf_model_name = 33 [null = False, max_length = 1024, help_text = "The most specialized model in this chain of inheritance, often defined by a service developer"];
 }
@@ -126,15 +125,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];
@@ -245,17 +235,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 e701d20..a27c145 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
@@ -165,9 +164,7 @@
     no_policy = models.BooleanField(default=False)   # prevent model_policy run
 
     timezone = TimeZoneField()
-
-    dashboards = models.ManyToManyField(
-        'DashboardView', through='UserDashboardView', blank=True)
+    
     leaf_model_name = models.CharField( help_text = "The most specialized model in this chain of inheritance, often defined by a service developer", max_length = 1024, null = False )
 
     policy_status = models.CharField( default = "0 - Policy in process", max_length = 1024, null = True )
@@ -218,21 +215,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
@@ -352,8 +334,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__)
@@ -375,9 +355,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',
